SetUID(SUID) 文件特殊权限
目录和文件除了rwx权限,还会有s权限,例:
[root@localhost ~]# ls -l /usr/bin/passwd
-rwSr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd
原来文件中本来为x权限位,出现了S,这种权限称为SetUID,简称SUID特殊权限。SUID仅仅适用于可执行文件。其功能是,只要用户对设有SUID的文件有执行权限,那么用户执行此文件时,会以文件所有者身份执行此文件,一旦文件执行结束,身份切换也随之消失。
Linux系统中所有用户密码都记录在/etc/shadow文件中,通过ll /etc/shadow,看到该文件权限是0(--------),这表明普通用户对此文件没有任何操作权限。但是,为什么普通用户却可以passwd修改自己密码呢?
passwd命令权限,拥有SUID特殊权限,而其他人对此文件也有执行权限,言下之意,任何一个用户都可以是文件所有者,也就是以root身份执行passwd命令。
在Linux系统中,绝大多数命令的文件所有者默认都是root。
当普通用户使用passwd更改自己密码时,实际上是在以root身份执行passwd命令,root可以将密码写入/etc/shadow,所以普通用户也能做到。只不过一旦命令执行完成,普通用户所具有的root身份也会失去。
给文件加上或者取消s权限也和其他加权限一样
chmod u-s filename
chmod u+s filename
注意!在实验测试完成后,一定要把/usr/etc/bin/passwd文件的SetUID加上。
SetGID(SGID)和其类似,后面也可单独出一篇文章。
Stick BIT(SBIT)文件特殊权限
SBIT意为粘着位,防删除位。
SBIT权限仅对目录有效,目录设定了SBIT权限,用户在此目录下创建的目录或文件,就只有自己和root才有权力修改与删除。
举例:Linux系统中,存储临时文件的/tmp目录就设定有SBIT权限:
[root@localhost ~]# ll -d /tmp
drwxrwxrwt. 28 root root 4096 4月 6 19:27 /tmp
具体来看SBIT对目录的作用:
建立测试用户lamp和lamp,省略密码设置过程
[root@localhost ~]# useradd lamp
[root@localhost ~]# useradd lamp1
切换到lamp用户
[root@localhost ~]# su - lamp
切到tmp目录下,建立测试文件
[lamp@localhost ~]$ cd /tmp
[lamp@localhost tmp]$ touch testf
[lamp@localhost tmp]$ ll testf
-rw-rw-r--. 1 lamp lamp 0 4月 6 20:01 testf
切换到lamp1用户,切换到tmp目录下并尝试删除测试文件
[root@localhost ~]# su - lamp1
[lamp1@localhost ~]$ cd /tmp/
[lamp1@localhost tmp]$ rm -rf testf
rm: 无法删除"testf": 不允许的操作
可以看到,/tmp目录权限设定是777,但其具有SBIT权限,lamp用户在此目录下创建的文件testf,lamp1用户对其删除操作失败。
对目录添加SBIT权限用法与其它权限添加一样
chmod o+t filename