课程名称:Linux权限管理之特殊权限
章节名称:第3章 文件特殊权限
讲师名称:Tony
mask 权限,指的是用户或群组能拥有的最大 ACL 权限,也就是说,给用户或群组设定的 ACL 权限不能超过 mask 规定的权限范围,超出部分做无效处理。
举个例子,给 st 用户赋予访问 project 目录的 r-x 权限,此时并不能说明 st 用户就拥有了对该目录的读和访问权限,还需要和 mask 权限对比,r-x 确实是在 rwx 范围内,这时才能说 st 用户拥有 r-x 权限。
需要注意的是,这里将权限进行对比的过程,实则是将两权限做“按位相与”运算,最终得出的值。
大家可以这样理解 mask 权限的功能,它将用户或群组所设定的 ACL 权限限制在 mask 规定的范围内,超出部分直接失效。
文件所有者权限中的 x 权限位,却出现了 s 权限,此种权限通常称为 SetUID,简称 SUID 特殊权限。
SUID 特殊权限仅适用于可执行文件,所具有的功能是,只要用户对设有 SUID 的文件有执行权限,那么当用户执行此文件时,会以文件所有者的身份去执行此文件,一旦文件执行结束,身份的切换也随之消失。
SUID 特殊权限具有如下特点:
只有可执行文件才能设定 SetUID 权限,对目录设定 SUID,是无效的。
用户要对该文件拥有 x(执行)权限。
用户在执行该文件时,会以文件所有者的身份执行。
SetUID 权限只在文件执行过程中有效,一旦执行完毕,身份的切换也随之消失。
任何只有管理员可以执行的命令,如果被赋予了 SetUID 权限,那么后果都是灾难性的。
当 s 权限位于所属组的 x 权限位时,就被称为 SetGID,简称 SGID 特殊权限。
同 SUID 类似,对于文件来说,SGID 具有如下几个特点:
其实,SGID 和 SUID 的不同之处就在于,SUID 赋予用户的是文件所有者的权限,而 SGID 赋予用户的是文件所属组的权限,就这么简单。
再次强调,无论是 SUID,还是 SGID,它们对用户身份的转换,只有在命令执行的过程中有效,一旦命令执行完毕,身份转换也随之失效。
当一个目录被赋予 SGID 权限后,进入此目录的普通用户,其有效群组会变为该目录的所属组,会就使得用户在创建文件(或目录)时,该文件(或目录)的所属组将不再是用户的所属组,而使用的是目录的所属组。
也就是说,只有当普通用户对具有 SGID 权限的目录有 rwx 权限时,SGID 的功能才能完全发挥。比如说,如果用户对该目录仅有 rx 权限,则用户进入此目录后,虽然其有效群组变为此目录的所属组,但由于没有 x 权限,用户无法在目录中创建文件或目录,SGID 权限也就无法发挥它的作用。
Sticky BIT,简称 SBIT 特殊权限,可意为粘着位、粘滞位、防删除位等。
SBIT 权限仅对目录有效,一旦目录设定了 SBIT 权限,则用户在此目录下创建的文件或目录,就只有自己和 root 才有权利修改或删除该文件。
也就是说,当甲用户以目录所属组或其他人的身份进入 A 目录时,如果甲对该目录有 w 权限,则表示对于 A 目录中任何用户创建的文件或子目录,甲都可以进行修改甚至删除等操作。但是,如果 A 目录设定有 SBIT 权限,那就大不一样啦,甲用户只能操作自己创建的文件或目录,而无法修改甚至删除其他用户创建的文件或目录。
我们有必要知道 SUID、SGID、SBIT 分别对应的数字,如下所示:
4 --> SUID 2 --> SGID 1 --> SBIT
举个例子,如果要将一个文件权限设置为 -rwsr-xr-x,怎么办呢?此文件的普通权限为 755,另外,此文件还有 SUID 权限,因此只需在 755 的前面,加上 SUID 对应的数字 4 即可。也就是说,只需执行:
chmod 4755 文件名
除了赋予 chmod 命令 4 个数字设定特殊权限,还可以使用字母的形式。例如,可以通过 “u+s” 给文件赋予 SUID 权限;通过 “g+s” 给文件或目录赋予 SGID 权限;通过 “o+t” 给目录赋予 SBIT 权限。
管理 Linux 系统中的文件和目录,除了可以设定普通权限和特殊权限外,还可以利用文件和目录具有的一些隐藏属性。
chattr 命令,专门用来修改文件或目录的隐藏属性,只有 root 用户可以使用。该命令的基本格式为:
chattr [+-=] [属性] 文件或目录名
属性选项 | 功能 |
---|---|
i |
如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据; 如果对目录设置 i 属性,那么只能修改目录下文件中的数据,但不允许建立和删除文件; |
a |
如果对文件设置 a 属性,那么只能在文件中増加数据,但是不能删除和修改数据; 如果对目录设置 a 属性,那么只允许在目录中建立和修改文件,但是不允许删除文件; |
u | 设置此属性的文件或目录,在删除时,其内容会被保存,以保证后期能够恢复,常用来防止意外删除文件或目录。 |
s | 和 u 相反,删除文件或目录时,会被彻底删除(直接从硬盘上删除,然后用 0 填充所占用的区域),不可恢复。 |
设置有 i 属性的文件,即便是 root 用户,也无法删除和修改数据。
目录设置 i 属性,即使是 root 用户,也无法在目录内部新建或删除文件,但可以修改文件内容。
使用 chattr 命令配置文件或目录的隐藏属性后,可以使用 lsattr 命令查看。
lsattr 命令,用于显示文件或目录的隐藏属性,其基本格式如下:
lsattr [选项] 文件或目录名