Linux文件权限和ACL是保障系统安全的核心机制,基础权限由user/group/others三类主体与rwx权限组成,数字表示法如755对应rwxr-xr-x;目录x权限决定能否进入,普通文件x仅表示可执行;特殊权限位setuid/setgid/sticky bit分别用于提升执行身份、继承属组和限制删除;ACL通过setfacl/getfacl实现细粒度控制,支持用户/组特定权限及默认ACL;实践需遵循最小权限原则并定期审计。

Linux文件权限和ACL(访问控制列表)是保障系统安全的核心机制。正确设置既能满足协作需求,又能防止越权访问。关键在于理解基础权限模型、合理使用chmod/chown,并在必要时用setfacl/getfacl补充细粒度控制。
掌握基础权限三元组:user/group/others + rwx
每个文件/目录有三类主体的权限:属主(user)、属组(group)、其他用户(others),每类对应读(r)、写(w)、执行(x)三种权限。数字表示法中,r=4、w=2、x=1,如755即rwxr-xr-x。
- 目录的
x权限决定能否进入(cd)或遍历其内容;缺少它,即使有r也无法ls子目录 - 普通文件的
x仅表示可执行,与是否能读写无关;脚本需同时有r和x才可运行 - 新建文件默认不继承父目录的
x权限,但目录默认继承setgid(见下文)
善用特殊权限位:setuid/setgid/sticky bit
在特定场景下,三个特殊权限位能解决典型问题:
-
setuid(u+s):仅对可执行文件有效。运行时进程以文件属主身份执行,如
/usr/bin/passwd需修改/etc/shadow - setgid(g+s):对目录启用后,新创建的文件自动继承父目录属组;对可执行文件启用后,进程以文件属组身份运行
-
sticky bit(+t):仅对目录启用(如
/tmp),确保用户只能删除自己创建的文件,即使有写权限也不能删他人文件
设置方式:chmod u+s file、chmod g+s dir、chmod +t dir;数字表示法中,分别对应高位4、2、1,如2755表示设定了setgid。
用ACL突破传统权限限制
当标准三元组无法满足需求(例如:让某非属组用户有读写权,或禁止某组成员访问),ACL提供更灵活的规则:
- 查看ACL:
getfacl filename,输出包含user:username:rwx、group:groupname:rx等条目 - 添加用户权限:
setfacl -m u:alice:rw file;添加组权限:setfacl -m g:devs:rx dir - 设置默认ACL(仅对目录):
setfacl -d -m g:devs:rx dir,此后该目录下新建文件/子目录自动继承此规则 - 移除ACL:
setfacl -x u:alice file或清空所有扩展ACL:setfacl -b file
注意:ACL生效需文件系统挂载时支持(ext4/xfs默认支持),且内核开启CONFIG_EXT4_FS_POSIX_ACL(主流发行版已启用)。
实践建议:最小权限 + 定期审计
权限设置不是一劳永逸,需结合运维习惯持续优化:
- 新建敏感目录(如
/var/www)先设属组,启用setgid,再用ACL授予协作人员权限,避免随意设777 - 禁用root直接登录后,用
sudo配合精细ACL控制管理操作,比开放宽泛权限更安全 - 定期检查异常权限:
find /path -type f -perm -4000 -o -perm -2000 -o -perm -1000找特殊权限文件;getfacl -R /path 2>/dev/null | grep -E "user:|group:"查含ACL的项
不复杂但容易忽略:权限变更后,记得测试实际访问效果,而非仅看ls -l输出——尤其涉及ACL和组成员关系时,真实行为可能受组缓存或NFS配置影响。


















