马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
Linux 的权限体系是运维和内容管理的基础。本文从两类用户讲起,梳理权限公式、文件类型与 rwx 的三种表达、chmod 的角色写法和八进制写法、chown 与 chgrp、目录权限的特殊性、缺省权限与 umask,最后讲清粘滞位为什么能解决共享目录误删的问题。
一、Linux 的两种用户
- 超级用户 root:不受任何限制,系统里什么都能做。
- 普通用户:受权限约束。
用 whoami 可以查看当前是哪种用户。直观区分办法是看命令提示符:root 是 #,普通用户是 $。
切换用户:su
用 su 切换身份。root 切到普通用户直接 su 用户名;普通用户切到 root 则只敲 su 再输 root 密码。
提权:sudo
sudo 只对普通用户的指定命令做短暂提权。刚配好却报权限错,通常是因为当前用户不在 /etc/sudoers 里——需要管理员把该用户加进允许使用 sudo 的用户组(一般是 sudo 或 wheel)。
二、权限管理
权限的本质
权限限定的是角色,权限要求目标具备对应属性,所以可以记成一句话:权限 = 角色 + 目标权限属性。角色分三种:拥有者(User,u)、所属组(Group,g)、其他(Others,o)。拥有者是文件的所有者,所属组是所有者所在的用户组,其他是除所有者和所属组之外的一切人。
others 之所以常常不单独记录,是因为它几乎等于所有人:数量庞大、操作频繁、难以精确追踪,记录意义不大,审计重点本来就在于具体是谁、属于哪个组、执行了什么命令,而 others 的权限变动通常很少发生。
文件类型与权限值
ls -l 出来的首字符表示类型:d 是目录,- 是普通文件。后面九位每三位一组,依次对应拥有者、所属组、其他:
例如 drwxr-xr-x 2 root root 4096 Dec 1 7:53 code/ 表示:拥有者可读可写可执行,所属组可读不可写可执行,其他可读不可写可执行。
二进制与八进制
rwx 是两态的,要么有要么没有。rw-rw-r-- 对应的二进制是 110 110 100,八进制就是 664。六百六十四这个写法在 chmod 里用得最多。
修改权限:chmod
按角色改:chmod u-r 文件名 去掉拥有者读权限,chmod u+r 加回;chmod g-r 与 chmod g+r 同理针对所属组。按八进制改更直接:八进制 666 就是二进制 110 110 110,即 rw-rw-rw-,执行 chmod 666 文件名 一次搞定。
四条必须记住的规则:
- 用户只能改自己的文件权限。
- 没有权限时系统会直接拒绝访问。
- 判定权限时系统会识别用户角色,且只判定一次,顺序是拥有者、所属组、other。
- root 用户不受这些限制。
另外要区分:有可执行权限不等于文件可执行,比如文本脚本有 x 位但仍需解释器才能跑。
改归属:chown 与 chgrp
chown 改文件或目录的拥有者,chgrp 改所属组。普通用户默认不能把文件转交给别人,除非先提权——这是防止误传敏感文件的一道闸。
目录权限的特殊性
注意这里说的是普通用户,root 不受限:
- 目录没有 r,就无法查看目录里的文件列表(ls 会报错)。
- 目录没有 w,就无法在目录里新建或删除文件。
反过来想,x(可执行/进入)决定了能不能 cd 进去,三者缺一不可。
缺省权限与 umask
- 普通文件起始权限是 666,默认不带可执行。
- 目录起始权限是 777,默认带可执行。
最终权限 = 起始权限 & (~umask)。umask 的含义是:凡是在 umask 里出现的权限位,都不应该出现在最终权限里。默认权限由系统决定且无法在创建时指定,通过 umask 才能灵活控制新建文件的权限,让代码产物的权限是可预期的。
粘滞位 Sticky Bit
做个实验:在某个普通用户的目录下同时放一个普通用户文件和一个 root 文件,前者的权限相对 root 就是 other,普通用户按 rwx 就能操作它;把 root 文件的 other 位全关掉后,普通用户就完全动不了它——但仍能删除它。结论很关键:一个文件能不能被删除,跟文件本身无关,只跟它所在目录的 w 权限有关。
于是多用户共享场景就出问题了:/tmp 这类公共目录里,大家都能改,甚至能删别人的。解决武器就是粘滞位。设置了粘滞位的目录,用户只能删自己的文件,想删除或移动必须自己是文件所有者或 root,哪怕有写权限也不行。
chmod +t directory # 为目录设置粘滞位
chmod -t directory # 移除目录的粘滞位
qidao123.com企服评测-应用市场 编辑提示 |