
Linux 文件权限问题之所以高频出现,常见原因并不只是命令使用不熟练,而是对访问主体、权限对象和系统判定顺序缺少完整认识。本文从权限对象、rwx 含义、目录与文件的权限差异切入,并结合 `chmod` 的数字模式与符号模式,建立 Linux 文件权限的基础判断框架。
本节概述权限对象、rwx 含义和检查顺序,并说明目录权限的差异。
Linux权限体系将权限分为三类,每类对应不同的用户:
•所有者(Owner/u):文件创建者或指定的所有者
•所属组(Group/g):文件关联的组
•其他用户(Others/o):既不是所有者也不属于所属组的用户
•所有人(All/a):上述三类用户的并集
每类用户拥有三种权限:
•读(Read/r):查看文件内容或列出目录内容
•写(Write/w):修改文件内容或在目录中创建/删除文件
•执行(Execute/x):运行程序或进入目录
# 查看文件权限的符号表示ls -la /etc/passwd# -rw-r--r-- 1 root root 3805 Apr 7 10:00 /etc/passwd•解读:
•- : 文件类型(- 普通文件,d 目录,l 符号链接,c 字符设备,b 块设备)
•rw- : 所有者权限(rw- = r=4 + w=2 + x=1 = 6)
•r-- : 所属组权限(r-- = r=4 + -=0 + -=0 = 4)
•r-- : 其他用户权限(r-- = 4)
•1 : 硬链接数
•root : 所有者
•root : 所属组
•3805 : 文件大小(字节)
•Apr 7 10:00 : 修改时间
•/etc/passwd : 文件名
权限数值对照表
| 符号 | 数值 | 二进制 | 含义 |
|---|
| r-- | 4 | 100 | 只读 |
| -w- | 2 | 010 | 只写 |
| --x | 1 | 001 | 只执行 |
| rw- | 6 | 110 | 读写 |
| -wx | 3 | 011 | 写执行 |
| r-x | 5 | 101 | 读执行 |
| rwx | 7 | 111 | 读写执行 |
| --- | 0 | 000 | 无权限 |
Linux权限检查的顺序是:所有者 -> 所属组 -> 其他用户。一旦匹配即应用对应权限,不再继续检查后续类别。
# 创建测试环境mkdir -p /tmp/test_permstouch /tmp/test_perms/file.txtchmod 640 /tmp/test_perms/file.txtls -la /tmp/test_perms/file.txt# -rw-r----- 1 root root 0 Apr 7 10:00 /tmp/test_perms/file.txt•当前用户如果是所有者,应用所有者权限(rw-)
•当前用户如果在所属组中,应用所属组权限(r--)
•都不满足则应用其他用户权限(---)
目录权限与文件权限含义不同:
# 目录权限详解# r (读):可以列出目录内容(ls)ls /tmp/test_perms# 需要x配合才能使用ls -l的详细格式# w (写):可以在目录中创建、删除、重命名文件touch /tmp/test_perms/newfile.txtrm /tmp/test_perms/file.txt# 需要x配合才能真正执行# x (执行):可以进入目录(cd),访问目录下的文件属性cd /tmp/test_perms# x是目录的基本权限,没有x则无法访问目录内容# 示例:只有r没有xchmod 644 /tmp/test_permsls /tmp/test_perms# 可以看到文件名列表ls -l /tmp/test_perms# ls: cannot access '/tmp/test_perms/file.txt': Permission denied# 只有xchmod 111 /tmp/test_permsls /tmp/test_perms# ls: cannot open directory /tmp/test_perms: Permission deniedcd /tmp/test_permspwd# 可以进入目录ls /tmp/test_perms/file.txt# 可以访问文件属性(如果知道文件名)本节整理 chmod 的数字模式、符号模式和递归设置。
数字模式是权限设置最直接的方式,每个权限位用0-7的八进制数表示。
# 基本用法chmod 755 /path/to/file # 所有者rwx(7),组rx(5),其他rx(5)chmod 644 /path/to/file # 所有者rw(6),组r(4),其他r(4)chmod 600 /path/to/file # 所有者rw(6),组无,其他无chmod 700 /path/to/file # 所有者rwx(7),组无,其他无# 特殊权限也可以用数字表示chmod 4755 /path/to/file # SUID(4) + rwx(7) + rx(5) + rx(5)chmod 2755 /path/to/file # SGID(2) + rwx(7) + rx(5) + rx(5)chmod 1755 /path/to/file # SBIT(1) + rwx(7) + rx(5) + rx(5)chmod 6755 /path/to/file # SUID(4) + SGID(2) + rwx(7) + rx(5) + rx(5)
2.2 符号模式(Symbolic Notation)
符号模式更加灵活,支持精细的权限调整。
# 基本语法:chmod [who] [+|-|=] [permissions] file# who 选项:# u - 所有者 (user/owner)# g - 所属组 (group)# o - 其他用户 (others)# a - 所有人 (all),默认# 操作符:# + - 添加权限# - - 移除权限# = - 设置权限(覆盖原有权限)# permissions 选项:# r - 读# w - 写# x - 执行# s - SUID/SGID# t - SBIT# X - 条件执行(仅对目录或已有执行权限的文件设置执行)# 示例chmod u+x script.sh # 给所有者添加执行权限chmod g-w file.txt # 从组移除写权限chmod o=r file.txt # 设置其他用户只有读权限chmod a+rw file.txt # 给所有人添加读写权限chmod u=rw,go=r file.txt # 设置所有者rw,组和其他r# X 权限的特殊用法chmod -R 755 directory/ # 所有文件都设置执行权限(包括普通文件)chmod -R u+X,go+X directory/ # 只对目录和已有执行权限的文件设置执行
# 递归设置目录权限chmod -R 755 /var/www/html# 风险:会修改所有文件的权限,包括普通文件# 更好的方式:目录和文件分开处理find /var/www/html -type d -exec chmod 755 {} \; # 目录find /var/www/html -type f -exec chmod 644 {} \; # 文件# 或者使用find + xargsfind /var/www/html -type d -print0 | xargs -0 chmod 755find /var/www/html -type f -print0 | xargs -0 chmod 644# 只设置特定条件的文件find /var/www/html -name "*.sh" -exec chmod 755 {} \; # 所有shell脚本find /var/www/html -user www-data -exec chmod 640 {} \; # 属于www-data的文件# 常用权限配置参考# 600 - 私有文件(只有所有者可读写)# 644 - 普通文件(所有者读写,其他人读)# 700 - 私有目录(只有所有者可访问)# 755 - 公共目录(所有者全部权限,其他人读和执行)# 775 - 共享目录(组内协作)# 664 - 共享文件(组内可写)# 666 - 不推荐(有安全风险)# Web服务常见配置chmod -R 755 /var/www/html # 网站文件chmod -R 644 /var/www/html/*.html # HTML文件chmod -R 644 /var/www/html/*.css # CSS文件chmod -R 644 /var/www/html/*.js # JS文件chmod 600 /var/www/html/wp-config.php # WordPress配置(包含数据库密码)# 数据库文件(MySQL)chown -R mysql:mysql /var/lib/mysqlchmod -R 700 /var/lib/mysql # 仅MySQL用户可访问至此,rwx、所有者/所属组/其他用户、目录权限差异,以及 `chmod` 的两种修改方式已经形成清晰对应。后续面对 `644`、`755`、`u+x` 等具体设置时,重点不再只是调整数值或符号,而是判断修改对象、作用层级及其控制目的。
欢迎「长按」下方图片👇,关注我们在公众号上的专业知识分享。