Linux 文件权限是系统安全的核心机制之一,通过控制 "谁能对文件 / 目录执行什么操作",防止未授权访问和误操作。
一、权限的基本构成
Linux 权限基于UGO 模型(User/Group/Others),即权限分别针对三类对象:
U(User):文件的所有者(创建者或被指定的用户)
G(Group):文件所属组的成员
O(Others):既不是所有者也不属于所属组的其他用户
每类对象拥有三种基本权限:
r(Read,读权限):对文件可查看内容;对目录可列出内容(
ls
)w(Write,写权限):对文件可修改内容;对目录可创建 / 删除文件(即使文件不属于自己)
x(Execute,执行权限):对文件可运行(如脚本、程序);对目录可进入(
cd
)
二、查看文件权限
使用 ls -l
命令查看文件 / 目录的权限信息,示例输出如下:
bash
ls -l /etc/passwd
# 输出:-rw-r--r-- 1 root root 2652 8月 11 10:00 /etc/passwd
输出解析(以 -rw-r--r--
为例):
第 1 位:文件类型(
-
表示普通文件,d
表示目录,l
表示软链接)第 2-4 位:所有者(U)权限
rw-
(可读、可写、不可执行)第 5-7 位:所属组(G)权限
r--
(可读、不可写、不可执行)第 8-10 位:其他用户(O)权限
r--
(可读、不可写、不可执行)
三、权限的数字表示法
为了简化操作,权限可用数字表示(每类对象的权限为三个数字的和):
r = 4
,w = 2
,x = 1
,- = 0
常见权限组合:
7
(4+2+1):rwx(可读、可写、可执行)6
(4+2):rw-(可读、可写)5
(4+1):r-x(可读、可执行)4
:r--(只读)0
:无任何权限
例如:rw-r--r--
对应数字 644
(U=6,G=4,O=4)。
四、修改文件权限(chmod 命令)
chmod
用于修改权限,支持符号模式和数字模式两种方式。
1. 符号模式(更直观,推荐新手)
格式:chmod [对象][操作][权限] 文件/目录
对象:
u
(所有者)、g
(所属组)、o
(其他用户)、a
(所有对象,默认)操作:
+
(添加权限)、-
(移除权限)、=
(设置为指定权限)权限:
r
、w
、x
示例:
bash
# 给所有者添加执行权限
chmod u+x script.sh
# 移除所属组的写权限
chmod g-w data.txt
# 给所有用户设置只读权限
chmod a=r config.ini
# 对目录及其下所有内容递归修改权限(加 -R 参数)
chmod -R u+rwx /data/project
2. 数字模式(更简洁,适合熟练用户)
格式:chmod [权限数字] 文件/目录
示例:
bash
# 设置所有者可读可写可执行,所属组可读可执行,其他用户无权限
chmod 750 app.py
# 设置所有用户只读(常用于配置文件)
chmod 644 /etc/hosts
# 目录通常需要执行权限(否则无法进入),设置为 755(常用目录权限)
chmod 755 /home/user/docs
五、修改所有者和所属组(chown/chgrp)
权限依赖于所有者和所属组,需用以下命令管理:
1. 修改所有者(chown)
格式:chown 用户名 文件/目录
bash
# 将 file.txt 的所有者改为 user1
chown user1 file.txt
# 同时修改所有者和所属组(格式:用户名:组名)
chown user1:group1 data/
2. 修改所属组(chgrp)
格式:chgrp 组名 文件/目录
bash
# 将 logs/ 目录的所属组改为 dev
chgrp dev logs/
六、特殊权限(SUID/SGID/ 粘滞位)
除基础权限外,还有三个特殊权限(用于特定场景,需谨慎使用):
1. SUID(Set User ID,4000)
作用:用户执行文件时,临时获得文件所有者的权限(仅对可执行文件有效)
典型场景:
passwd
命令(普通用户可修改自己密码,临时获得 root 权限写入/etc/shadow
)设置:
chmod u+s 文件名
或chmod 4755 文件名
安全风险:若被滥用(如
/bin/bash
设置 SUID),可能导致权限提升攻击,非必要不设置
2. SGID(Set Group ID,2000)
作用:对文件:执行时临时获得所属组权限;对目录:在目录中创建的新文件自动继承目录的所属组
设置:
chmod g+s 目录名
或chmod 2755 目录名
用途:团队共享目录(如
/var/www
,确保新文件属于团队组)
3. 粘滞位(Sticky Bit,1000)
作用:仅对目录有效,限制 "只有文件所有者或 root 可删除该目录下的文件"(防止他人删除自己的文件)
典型场景:
/tmp
目录(所有用户可写,但不能删除别人的文件)设置:
chmod o+t 目录名
或chmod 1777 目录名
七、权限设置最佳实践
最小权限原则:只给必要的权限(例如:普通文件通常设为
644
,可执行脚本设为755
,敏感文件设为600
)系统关键文件保护:
/etc/passwd
:644
(所有人可读,root 可写)/etc/shadow
:000
(仅 root 可读写)/root
目录:700
(仅 root 可访问)
目录权限注意:
若需进入目录,必须有
x
权限若需在目录中创建文件,需要
w
+x
权限共享目录建议设置 SGID(统一所属组)和粘滞位(防止误删)
定期检查异常权限:
bash
# 查找所有权限为 777 的文件(危险权限,应避免) find / -perm 777 2>/dev/null # 查找设置了 SUID 的文件(检查是否有异常) find / -perm -4000 2>/dev/null