Linux文件权限怎么理解:chmod、chown和目录执行权限
用实际运维场景解释 Linux 文件权限、目录权限、chmod、chown 和常见权限错误的排查方法。
Linux 权限是运维学习中绕不开的一关。很多新手遇到权限问题,会直接执行 chmod 777。这样虽然可能让程序暂时跑起来,但也可能把安全边界一起拆掉。
理解权限,先从三个对象和三个动作开始。
三类对象
Linux 文件权限面向三类对象:
- 所有者:文件属于哪个用户。
- 所属组:文件属于哪个用户组。
- 其他人:不属于前两类的用户。
用 ls -l 可以看到这些信息:
ls -l app.log
输出类似:
-rw-r----- 1 nginx adm 2048 Jul 1 10:00 app.log
这里 nginx 是所有者,adm 是所属组。
三种权限
常见权限有三种:
r:读权限。w:写权限。x:执行权限。
对普通文件来说,x 表示能否执行这个文件。对目录来说,x 更重要,它表示能否进入目录、访问目录下的文件路径。
这也是很多人困惑的地方:目录有读权限但没有执行权限时,可能能看到文件名,却无法进入或访问文件。
chmod 的数字怎么来的
权限数字来自相加:
- 读:4
- 写:2
- 执行:1
所以:
7 = 4 + 2 + 1,表示读写执行。6 = 4 + 2,表示读写。5 = 4 + 1,表示读和执行。
例如:
chmod 640 app.log
表示所有者可读写,所属组可读,其他人没有权限。
chown 用来改变归属
chmod 改的是权限,chown 改的是归属。
chown nginx:nginx /var/www/site
这个命令把目录所有者和所属组都改成 nginx。
生产环境里,权限问题经常不是权限位错了,而是文件归属不对。比如 Web 服务以 nginx 用户运行,但项目目录属于 root,服务就可能无法写缓存、上传文件或读取配置。
目录权限的常见坑
假设有一个文件:
/data/www/index.html
即使 index.html 本身有读权限,如果 /data 或 /data/www 缺少执行权限,用户仍然无法访问它。
排查时可以从路径逐级查看:
namei -l /data/www/index.html
这个命令会显示路径上每一级目录的权限,很适合定位“文件明明有权限但还是访问不了”的问题。
不要轻易使用 chmod 777
chmod 777 表示所有人都可以读、写、执行。它的问题不是“命令错”,而是权限过大。
更好的排查思路是:
- 确认服务用哪个用户运行。
- 确认文件属于谁。
- 确认目录路径上每一级是否有执行权限。
- 只给需要的用户或组最小权限。
例如 Web 服务只需要读取静态文件时,通常不需要写权限。
总结
Linux 权限不是孤立的数字,而是用户、组、文件、目录和进程运行身份共同决定的结果。
遇到权限问题时,不要先改 777。先看 ls -l、id、ps、namei -l,找到真正缺失的是权限位、文件归属,还是目录执行权限。
