Linux 基础 - 预设权限(umask),隐藏权限(chattr/lsattr)和特殊权限(SUID/SGID/SBIT)
预设权限
umask
umask 表示当前用户建立档案和目录时的预设权限。
| 1 | $ umask | 
umask 针对档案和目录的权限是不同的,对于新的档案,是不包括执行(x)权限的,而目录则包括所有权限,返回的数字是指应该减去的分数,进行反向计算,0022 表示,新的档案的权限为 -rwxr-xr-x。例如:
| 1 | $ mkdir test | 
umask -S 加上 -S 参数则显示正向计算的结果
| 1 | $ umask -S | 
0022 表示,
user拥有全部权限,而group和others则被减去了write权限。
| 1 | $ umask 002 # 直接通过后接数字来设置 umask 的值。 | 
在架设
SAMBA Server或FTP Server时,umask的值涉及到你的用户能否对新建的档案进行进一步操作的问题。
root 用户的 umask 是 022,一般用户则是 002,这是出于安全的考虑,关于 umask 预设设定可以参考 /etc/bashrc 这个文件,不过不建议修改该档案。
隐藏权限
chattr
修改档案或目录的隐藏属性,change attribute。
| 1 | $ chattr [+-=][ASacdistu] 档案或目录名称 | 
- +: 追加一个特殊参数
- -: 移除一个特殊参数
- =: 设置特殊参数
- A: 当设定了该参数后,当读取此档案或目录时,其- atime不会被修改
- S: 一般的档案是异步写入磁盘的,如果设置了- S参数,则对档案进行的任何修改,都会以同步方式写入磁盘
- a: 该档案只能新增资料,而不能删除也不能修改资料,只有 root 用户能设定该属性
- c: 自动压缩档案,读取时自动解压缩,存储时先压缩再存储
- d: 当 dump 程序执行的时候,被设定为- d属性的档案不参与备份。
- i: 使一个档案「无法被删除,修改,改名,设置连接」,只有 root 用户可以设置此属性。
- s: 硬删除,无法进行磁盘复原
- u: 与- s相反,如果该档案被删除,可以使用相关工具复原。
以上属性中最重要的当属 a 和 i 了。+a 常用于对某些非常重要的档案的安全控制,而 +i 则常用于日志档案。
lsattr
显示档案或目录的隐藏属性,list attributes
| 1 | $ lsattr -[adR] 档案或目录 | 
- -a: 将隐藏档案的属性也显示出来
- -d: 如果连接的是目录,仅列出目录本身的属性而非目录内的档案
- -R: 递归显示
特殊权限
SUID
Set UID 的缩写,该权限有以下限制和功能:
- SUID 仅对二进制程序有效
- 执行者对于该程序需要有 x的执行权限
- SUID 仅在执行该程序的过程中有效
- 执行者将获得该程序拥有者的权限。
例如,/etc/shadow 档案保存了所有用户的密码,该文档的权限为 --------- l root root,意即该档案仅 root 用户可以强制写入,那么一般用户在执行 passwd 命令时其实是可以修改自己的密码的,这就是 SUID 的功能,即:
- 一般用户对 /usr/bin/passwd程序具有x权限
- shadow档案拥有者是- root用户
- 一般用户执行 passwd的过程中,会「暂时」获得root的权限
- /etc/shadow就能被一般用户执行的- passwd修改。
SUID 对目录是无效的,其以
s取代「拥有者用户」一栏的x权限。
SGID
当 s 出现在群组权限的执行权限上时,则称为 SGID。SGID 有如下功能:
- SGID 对二进制程序有用
- 使用该程序的用户必须对该程序有 x权限
- 用户在执行过程中会获得该程序群组的权限
当 SGIP 作用于目录时,将:
- 用户对此目录具有 r和x的权限,该用户能够进入此目录
- 用户在此目录下的有效群组将会变成该目录的群组
 若用户在目录下有w权限,则用户新建的档案,该档案所属的群组与目录所属的群组相同。
当设置 SGID 后,将以
s取代在「群组」权限一栏的x权限。
Sticky Bit
目前只针对目录有效,其作用是,用户对某个目录具有 w 和 x 权限时,在该目录下创建档案或目录后,仅用户自己与 root 才能删除这些档案或目录。该功能让多个用户在同一目录下管理与自己相关的文件。
对目录设置 SBIT 后,将以
t取代「其他用户」权限的x权限。
设定 SUID/SGID/SBIT
之前的权限设定是只有 3 个数字,加上 SUID/SGID/SBIT 之后变成了 4 个数字,执行 chmod 4755 filename 来为该文件新增特殊权限。4755 的字符串表示为 -rwsr-xr-x。
s 与 t 都是取代 x 这个权限,但当权限为 7666 时,由于在「用户」,「群组」和「其他用户」三栏都不包含「执行(x)」权限,字符串将以大写 S 和 大写 T 来表示,以示该权限实际上无效。例如:
| 1 | $ chmod 7666 test; ls -l test | 
除了数字法赋值权限之外,还可以使用
u+s追加SUID权限、g+s追加SGID权限和o+t追加SBIT权限。
file(观察档案类型)
file 指令用于判断档案的类型,例如:
| 1 | $ file ~/.bashrc |