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 |