特殊权限 SUID、SGID、Sticky
特殊权限的出现使得 Linux 权限更加强大灵活。
▶ 了解特殊权限的之前
前提: 进程 有 属主 和 属组,文件 也有 属主 和 属组
-
任何一个可执行程序文件能不能成为启动进程这取决于发起者对程序文件是否拥有执行权限。
-
启动为进程后,其进程的属主为发起者;进程的属组为发起者所属的组。
-
进程访问文件时的权限,取决于进程的发起者。
-
进程的发起者,同文件的属主:则应用文件属主权限。
-
进程的发起者,属于文件的属组:则应用文件属组权限。
-
其他,应用文件
其他权限。
如上:用户也就是执行操作者执行了一个程序文件,该程序文件有所属的用户、组,由于是执行者操作的,所以程序文件的的用户、组也是该执行者的用户、组,程序文件启动后成为内存中的进程,进程也有所属的成员和组,这里也就是该执行者的用户、组,在进程开始启动和操作的时候可能就会需要到进程访问的文件,该文件依旧有自身的访问权限控制,这里访问文件的用户、组也就是进程的用户、组。
▶ 特殊权限的使用
▷ 从 passwd 来讲
[root@server /]# ll /bin/passwd
-rwsr-xr-x. 1 root root 32656 May 15 2022 /bin/passwd
[root@server /]# ll /etc/shadow
----------. 1 root root 873 Aug 22 20:28 /etc/shadow
从 passwd 命令来看,passwd 有关的进程会修改 shadow 文件来更改用户的密码,但是该 shadow 文件什么权限都没有,能进行修改则需要看到 /bin/passwd 内 -rwsr-xr-x. 的权限,通过 user 的权限可以看到 x 位置被 s 替换掉了。
这里 s 就表示了使用了 特殊选项,这也就是为什么 passwd 可以访问 shadow 文件的原因。
▶ SUID
▷ 权限设定方法:
字母表示法:
chmod u+s FILE...
chmod u-s FILE...
数字表示法:
chmod 4755 FILE... 添加 SUID 权限到二进制程序文件(添加到DIR没有意义)
chmod 755 ... 可以删除文件的 SUID (无法删除目录的 SUID)
▷ 文件 SUID 权限表示:
[root@server /]# ll /bin/passwd
-rwsr-xr-x. 1 root root 32656 May 15 2022 /bin/passwd
文件属主的 x 权限,用 s 代替,表示设置了 SUID 。
如果属主没有 x 权限,会显示为大写 S,表示有故障(权限无效)。
▷ SUID 的相关说明
启动为进程之后,其进程的属主为源程序文件的属主;
只能作用在二进制程序上,不能作用在脚本上,且设置在目录上无意义。
执行 suid 权限的程序时,此用户将继承此程序的所有者权限。
▷ SUID 实操
对 文件 设置 SUID 的时候,注意该文件应该是 执行文件。
如果该文件不是执行文件而添加 SUID:
[root@server /]# touch my.sh
[root@server /]# ll my.sh
-rw-r--r--. 1 root root 0 Aug 23 01:12 my.sh
这里创建一个 my.sh 文件,但是此时该文件没有执行权限,也就是说现在该 my.sh 文件不是一个可执行文件。
此时如果对 my.sh 设置 SUID:
[root@server /]# chmod u+s my.sh
[root@server /]# ll my.sh
-rwSr--r--. 1 root root 0 Aug 23 01:12 my.sh
可以看到此时是 rwS,SUID 是大写 S,这就表示 SUID 设置错误了,这就需要对将 my.sh 文件设置成可执行文件。
改进,重新设置 SUID:
[root@server /]# chmod u-s my.sh
[root@server /]# chmod +x my.sh
[root@server /]# chmod u+s my.sh
[root@server /]# ll my.sh
-rwsr-xr-x. 1 root root 0 Aug 23 01:12 my.sh
这样 my.sh 的 SUID 就设置好了。
▶ SGID
▷ 权限设置方法:
字母表示法:
chmod g+s DIR/FILE...
chmod g-s DIR/FILE...
数字表示法:
chmod 2755 DIR/FILE 添加 SGID 到目录或文件
在普通数字权限位前,用 2 代表添加 SGID 位。
chmod 755 DIR/FILE 删除 SGID
▷ SGUID说明:
SGUID 作用在 二进制程序 上时候,此用户将继承此程序的所有组权限,作用于目录上时候: 此文件夹下所有用户新建文件都自动继承此目录的用户组。
▶ Sticky 粘滞位
▷ 权限表示方式
字母设定方法:
chmod o+t DIR...
chmod o-t DIR...
数字表示方法:
chmod 1755 DIR...
普通数字权限位前,用 1 代表添加Sticky位。
▷ 文件权限表示:
文件other位的 x 权限,用t代表,表示设置了 Sticky。
如果other位没有 x 权限,会显示为大写 T,表示有故障(权限无效)。
▷ Sticky相关说明:
对于一个多个可写的目录,如果设置了Sticky,则每个用户仅能删除和修改自己的文件或目录。只能作用在目录上,普通文件设置无意义,且会被Linux内核忽略。
用户在设置 Sticky 权限的目录下新建的目录不会自动继承 Stciky 权限。
▷ Sticky实例
目的: 系统创建一个很多用户可以共同使用的目录,但是要求用户之间不能相互删除改变对方的文件。
实现:
root 用户创建一个 777 权限目录 testdir,给 testdir 这个文件夹设置一个 Sticky 位。
[root@server ~]# mkdir testdir
[root@server ~]# chmod 777 testdir/
[root@server ~]# chmod 1777 testdir/
[root@server ~]# ll
drwxrwxrwt. 2 root root 6 Aug 26 10:56 testdir

浙公网安备 33010602011771号