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