suid 权限可以让执行这个文件时,是以文件的拥有者的权限进行,而不是执行这个命令的用户本身的权限。如:
[Plain Text] 纯文本查看 复制代码
ls -l /bin/ping
-rwsr-xr-x 1 root root 39864 06-07 03:48 /bin/ping
从上面的指令的结果看出,ping 指令具有 suid 的特殊权限,那为什么这样呢?
ping 指令使用 ICMP 协议测试计算机与计算机之间是否连通。而在 linux 的 kernel 里面设定了只有 root 才有权限控制 ICMP 的封包。 所以,设定了 ping 命令具有 suid 特殊权限并且 ping 命令的所有者(owner)是 root 后,这样就不管是哪一个使用者使用 ping 这个指令都是以 root 的身份来执行这个命令。
先测试一下 ping 命令的正常使用(在非 root 下执行):
ping 192.168.1.1 -c4 /*c4 表示 ping 4 次*/
返回结果如下:PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.01 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.621 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=1.04 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.638 ms
假如这么修改 ping 的权限:
chmod u-s /bin/ping
再查看 ping 的权限情况,变为:
-rwxr-xr-x 1 root root 39864 06-07 03:48 /bin/ping
从上可见,suid 的特殊权限已经被去除,而 o 组仍然具有可执行的权限,这样再回到非 root 的用户下测试一下 ping 指令:
ping 192.168.1.1 -c4
结果出现:
ping: icmp open socket: Operation not permitted /* 不允许操作 icmp 的 socket,但仍然允许执行指令 */
sgid 的作用类似于 sguid |