文件和目录的特殊权限 :
在文件权限里 除了 前面我们讲的普通权限 ( r w x );
还有三个特殊权限 :
SET UID( SUID ) ---- 针对 用户
SET GID ( SGID ) ---- 针对用户组
Sticky Bit ( 粘滞位 ) ---- 针对其它用户
SUID :
官方 : SUID 是为了让一般用户在执行某些程序的时候, 在程序的运行期间, 暂时获得该
程序拥有者的权限。
# 注意上述中的 执行 二字,其实是说,当你普通用户在执行 SUID 的前提是已经
具备了 执行(x) 的权限
假设现在 有一个 scprit.sh(所属者是 testuser8 ) 程序,现在让 用户 rhcsa 去执行它,如果
使用了 SUID ,那么,在执行期间就会让 用户 rhcsa 暂时获得 testuser8 的权限!!
scrpit.sh 的权限是 rwxr-xr-x , rhcsa 对于这个程序的权限即是 r-x , 那么,现在如果有
SUID之后,那么 rhcsa 就会获取到 tsetuser8 的权限!!
实际示例 : 例如 我们在 使用 Passwd 修改用户密码 !!
我们有一个用户 natash 现在要去修改自己的密码,是执行 passwd 命令去
修改密码的; 修改的密码呢,实质上 是要 保存在 / etc / shadow 文件的,
也就是说 用户 natash 是要对 / etc / shadow 进行 访问 修改的;
好,那现在来看一个问题 :
我们查看了 / etc / shadow 文件的权限, 其权限是 :
----------. 1 root root 2041 Oct 23 15:11 /etc/shadow
这个权限告诉我们什么呢, 说明了 / etc /shadow 这个文件对于所有用户是
没有任何的权限的!! 除了 root ( 因为 root 是具备 所有权限的 )
natash 执行的命令 passwd 它的所属用户及用户组是 root root
那这不就是问题 :
/ etc / shadow 的权限 针对所有用户都是 无权限,那 对于 普通用户 natash
它是怎么去访问的呢??? natash 是没有权限访问 /etc /shadow 的啊!!
这就是因为 s 权限 !! ( 即 SUID )
我们普通用户 natash 访问不了,而 root 用户是可以访问的,那也就是说 我
们让 普通用户 去执行 passwd 的时候 临时获取 root 用户的权限就好了啊,
就能够访问 / etc /shadow 了,这就需要 SUID 出面了!!!!!
( 当然了, 普通用户natash 获取了 root 的权限,也只能修改自己 natash
的密码,你不能获取了 root 用户的权限就可以修改 其他用户的密码了,
这是不可能的! )
所以,在 passwd 上面 会有一个 SUID 的设置( 在用户位的执行位上 加 s
这个 s 就代表的是 SUID ) 就意味着 其它用户 在执行 passwd 的时候会临
时获取 root 的权限,为什么会获取的是 root 的权限呢?? 而不是其它用户
的权限呢??
===>>>
这就在前面我们说到的, passwd 它的 所属用户 是 root !!
为什么会获取 root 权限,当然是 passwd 命令的所属主 就是
root 啊,那 当 s 权限 一具备的时候,就意味着 其它用户临时具
备了 root 用户的权限!!!
我们看下 passwd 的权限是怎样的 ? 在它的执行位上是不是 s ??
===>>>
-rwsr-xr-x. 1 root root 34512 Aug 13 2018 /usr/bin/passwd
可以看到, 在用户位的执行权限上 是 s 这就意味着 SUID !!
综上 就解释了 为什么 / etc /shadow 的权限是 -----------,而普通用户
natash 却依然可以访问 /etc/shadow ,就是因为 passwd 的 SUID
的权限作用!!!
SUID 即 : set UID UID 指的就是 拥有者的ID , 以上示举例 passwd的程序就是
( /usr /bin /passwd ) 的拥有者就是 root
注 : SUID 仅对 二进制文件 有效 !!!!
实际示例 : 我们再以 cat 命令 举例
先看下准备材料 :
[natash@bogon ~]$ vim spec.txt
[natash@bogon ~]$ ls -l spec.txt
-rw-rw-r--. 1 natash natash 13 Nov 4 11:26 spec.txt
[natash@bogon ~]$ chmod 700 spec.txt
[natash@bogon ~]$ ls -l spec.txt
-rwx------. 1 natash natash 13 Nov 4 11:26 spec.txt
上示 是说 在普通用户 natash 下 创建了一个 spec.txt 的文件,并且改了
spec.txt 的权限使得其权限 变为 -rwx-------- ,也就是说 对于 spec.txt 文件的权
限只有其 所属主 具备 rwx 权限,其它所有普通用户都不具备普通权限!!
我们要用 cat 举例,现在也需要看看 cat 的权限 :
===>>>
-rwxr-xr-x. 1 natash natash 51856 Jan 11 2019 /usr/bin/cat
看下 spec.txt 文件里的内容 :
材料准备完了,现在看问题 :
我们修改了 spec.txt 的权限变为了 -rwx--------, 其它普通用户是没权限访问的,那现在
又有一个 harry 用户,就是想要查看 spec.txt 的内容怎么办 ??
当然了,在什么都不做的情况下,你 普通用户 harry 是压根就没法查看 spec.txt 的,
你没有权限呀!!
那 harry 想要 查看 spec.txt 内容 怎么办 ????
我们自然就要想到 SUID 的作用!!!!
也就是说 现在我们需要 给 cat 的程序( /usr/bin/cat ) 加上 s 权限!!
那怎么进行 SUID 的设置呢 ???
SUID 我们是说 针对 用户的 ,所以我们就使用 chmod u +- s 权限!!
所以我们就给 cat 加上 s 权限:
[natash@bogon ~]$ chmod u+s /usr/bin/cat
[natash@bogon ~]$ ls -l /usr/bin/cat
-rwsr-xr-x. 1 natash natash 51856 Jan 11 2019 /usr/bin/cat
可以看到 cat 命令的权限 已经有 s 权限了,这也就意味着 harry 用户 在使用 cat 命
令时候,可以临时获取 natash 权限,也就具备了 查看 spec.txt 的权限!!
===>>>
[harry@bogon ~]$ cat /home/natash/spec.txt
123456jujuju
如上所示,现在 harry 用户 就可以查看 spec.txt 的内容了!!!
注 : 还需要提的一点是
[natash@bogon ~]$ ls -l /usr/bin/cat
-rwsr-xr-x. 1 natash natash 51856 Jan 11 2019 /usr/bin/cat
我们给 cat 设置了 s 权限, 上面说过了,要想设置 s 权限的前提是 已经具备了 执
行权限( 已经具备了 x 权限)
上示也是如此,虽然显示了 s 权限,并没有显示 x 权限,但实际上 x 权限已经具
备了!!
现在我们做一点小改变:
在上示权限的基础上 删除 执行( x ) 权限再查看,看看会有什么变化 :
看上示, 是不是 小 s 变为了 大 S !
这就是说 如果用户位上没有执行权限 那么 就会变为 大 S,
如果用户位上有执行权限那么 就是 小 s !!