Linux 的文件权限机制是其安全模型的核心,它精确控制谁可以读取、修改或执行文件和目录,从而保护系统和用户数据免受未授权访问。通过 chmod、chown 等命令,用户可以灵活地管理这些权限。
每个文件或目录都具备以下三种基本权限:
注意:对目录而言,没有
x权限就无法进入,即使有r权限也只能看到文件名(若同时无x,甚至无法获取文件属性)。
权限按用户身份分为三个层级:
权限在文件系统中以 9 个字符的形式呈现,分为三组:
rwx rwx rwx
│ │ └── Others(其他用户)
│ └────── Group(所属组)
└────────── User(所有者)ls -l最常用
$ ls -l NarX.txt
-rw-r--r-- 1 alice developers 46 Apr 14 16:37 NarX.txt字段解析:
第 1 位:- 表示普通文件,d 表示目录
第 2–10 位:rw-r--r-- → 所有者可读写,组和其他人仅可读
后续字段:链接数、所有者、所属组、大小、修改时间、文件名
stat查看详细元数据
$ stat hoops输出包含权限(以八进制和符号形式)、inode、访问 / 修改 / 变更时间等。
namei -l查看路径中每一级的权限
适用于排查“权限被拒绝”错误,检查从根目录到目标文件的完整路径权限。
chmod(change mode)用于修改文件权限,支持两种表示法:
语法:chmod [who][operator][permissions] file
who:u、g、o、a
operator:+(添加)、-(移除)、=(设为)
permissions:r、w、x
# 给所有者添加执行权限
$ chmod u+x script.sh
# 移除其他用户的写和执行权限
$ chmod o-wx data.txt
# 设置组和其他人只有读权限
$ chmod go=r file.txt
# 同时操作多类用户
$ chmod ug+rw,o-rwx report.pdf技巧:
chmod a-x file可快速移除所有人的执行权限。
将每组权限转换为数字:
r = 4
w = 2
x = 1
权限值 = 各位之和(如 rwx = 4+2+1 = 7)
三位八进制数分别对应:所有者 · 组 · 其他人
# 设置权限为:所有者(rw-)、组(r--)、其他人(r--)
$ chmod 644 config.ini
# 设置脚本:所有者(rwx)、组(rx)、其他人(rx)
$ chmod 755 deploy.sh
# 完全禁止访问(仅所有者可读写)
$ chmod 600 private.key推荐:普通文件用
644,可执行文件用755,敏感文件用600。
除了基本权限,Linux 还提供三种特殊权限位:
# 设置 setuid(如让普通用户临时获得 root 权限执行某程序)
$ chmod u+s /usr/bin/mytool
# 设置 setgid(使目录下新建文件自动归属该目录的组)
$ chmod g+s /shared/project/
# 设置 sticky bit(保护公共目录)
$ chmod +t /tmp/shared/安全提示:
setuid程序需谨慎编写,避免提权漏洞。
chown 与 chgrp权限生效的前提是正确的所有权。
# 仅更改所有者
$ chown alice file.txt
# 同时更改所有者和组
$ chown alice:developers file.txt
# 递归更改整个目录
$ chown -R alice:developers /project/chgrp)$ chgrp admins report.log为什么一个目录必须有 x 权限才能被 cd 进入?仅有 r 权限够吗?
如果你运行 chmod 777 sensitive.conf,会带来哪些安全风险?
如何设置一个目录,使得团队成员都能在其中创建文件,且新文件自动归属团队组?