Linux 权限是个老生常谈的话题,但真正搞清楚的人并不多。很多人只会 chmod 777 了事,生产环境出了安全问题才后悔。
基本权限模型
每个文件和目录都有三组权限:owner(所有者)、group(所属组)、others(其他人)。每组包含 read、write、execute 三个位。
$ ls -l /etc/passwd
-rw-r--r-- 1 root root 2847 Jan 10 08:00 /etc/passwd
第一个字段 -rw-r--r-- 就是权限位,依次是:文件类型、owner 权限、group 权限、others 权限。
chmod 数字表示法
r=4, w=2, x=1,三位相加即为该组的权限值。常见组合:
755:owner 可读写执行,group 和 others 只读执行644:owner 可读写,其他只读600:只有 owner 可读写,其他无权限
SUID / SGID / Sticky Bit
这三个特殊位经常被忽略:
SUID (4xxx):执行时以文件 owner 身份运行,/usr/bin/passwd就用了这个SGID (2xxx):执行时以文件 group 身份运行;对目录生效时,目录内新文件继承父目录的 groupSticky bit (1xxx):对目录生效,只有文件 owner 才能删除自己的文件,/tmp就是这样
ACL:更细粒度的控制
基本权限模型只有三组,有时候不够用。ACL 可以给特定用户或组单独设置权限:
# 给 deploy 用户添加读权限
$ setfacl -m u:deploy:r /var/log/app.log
# 查看 ACL
$ getfacl /var/log/app.log
← 返回