技术博客

Linux文件权限怎么理解:chmod、chown和目录执行权限

用实际运维场景解释 Linux 文件权限、目录权限、chmod、chown 和常见权限错误的排查方法。

Linux权限chmodchown运维基础

Linux 权限是运维学习中绕不开的一关。很多新手遇到权限问题,会直接执行 chmod 777。这样虽然可能让程序暂时跑起来,但也可能把安全边界一起拆掉。

理解权限,先从三个对象和三个动作开始。

三类对象

Linux 文件权限面向三类对象:

ls -l 可以看到这些信息:

ls -l app.log

输出类似:

-rw-r----- 1 nginx adm 2048 Jul  1 10:00 app.log

这里 nginx 是所有者,adm 是所属组。

三种权限

常见权限有三种:

对普通文件来说,x 表示能否执行这个文件。对目录来说,x 更重要,它表示能否进入目录、访问目录下的文件路径。

这也是很多人困惑的地方:目录有读权限但没有执行权限时,可能能看到文件名,却无法进入或访问文件。

chmod 的数字怎么来的

权限数字来自相加:

所以:

例如:

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 表示所有人都可以读、写、执行。它的问题不是“命令错”,而是权限过大。

更好的排查思路是:

  1. 确认服务用哪个用户运行。
  2. 确认文件属于谁。
  3. 确认目录路径上每一级是否有执行权限。
  4. 只给需要的用户或组最小权限。

例如 Web 服务只需要读取静态文件时,通常不需要写权限。

总结

Linux 权限不是孤立的数字,而是用户、组、文件、目录和进程运行身份共同决定的结果。

遇到权限问题时,不要先改 777。先看 ls -lidpsnamei -l,找到真正缺失的是权限位、文件归属,还是目录执行权限。