前言
事情是这样的,在风和日丽的一天,我如往常一样在服务器上敲下了sudo xxxx,然而,这个指令竟然被kill了。
sudo: Operation not permitted
Killed
思索10min无所得,遂求助运维同学,答曰:4755。
咦,4755?这熟悉的陌生人,《鸟哥的Linux私房菜》里就有介绍过耶。
正文开始。
一、SUID
1.SUID的限制与作用
SUID即Set UID,s标志出现在user位的x上。
- SUID 权限仅对二进位程序(binary program)有效;(不能够用在 shell script 上面,因为shell script只是在运行一堆binary program)
- 运行者对于该程序需要具有 x 的可运行权限;
- 本权限仅在运行该程序的过程中有效 (run-time);
- 运行者将具有该程序拥有者 (owner) 的权限。 (运行过程中暂时获得该程序拥有者的权限)
- SUID对于目录无效
2.前言答案
关键就在于这个s,我的sudo会被kill掉,就是因为少了s:
leah@ubuntu:~$ ll /usr/bin/sudo
-rwsr-xr-x 1 root root 155008 Aug 27 2015 /usr/bin/sudo*
二、SGID
1.SGID作用在文件
SGID即Set GID,顾名思义,s标志出现在group的x上。
- SGID 对二进位程序有用;
- 程序运行者对于该程序来说,需具备 x 的权限;
- 运行者在运行的过程中将会获得该程序群组的支持。
2.SGID作用在目录
- 使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录;
- 使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
- 用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。
三、SBIT
SBIT 目前只针对目录有效,作用:
- 当使用者于於此目录具有 w, x 权限,亦即具有写入的权限时;
- 当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
举例来说,/tmp的权限为drwxrwxrwt,任何人都可以在 /tmp 内新增、修改文件,但仅有该文件/目录创建者与 root 能够删除自己的目录或文件。
四、SUID/SGID/SBIT 权限配置
SUID、SGID和SBIT用数字表示分别为
- 4:SUID
- 2:SGID
- 1:SBIT
到这里已经很清晰了,破解本次事件关键就是:
chmod 4755 /usr/bin/sudo
当然咯,这样也行:
chmod u+s /usr/bin/sudo
或者这样:
chmod u=rwxs /usr/bin/sudo
再来看个有趣的例子:
leah@ubuntu:~$ touch test.txt
leah@ubuntu:~$ ls -l test.txt
-rw-rw-r-- 1 leah leah 0 Jun 23 09:38 test.txt
leah@ubuntu:~$ chmod 7666 test.txt
leah@ubuntu:~$ ls -l test.txt
-rwSrwSrwT 1 leah leah 0 Jun 23 09:38 test.txt
发现了吗?大S和大T哦~ 原因很简单,user都没有x,其他人又怎么可能执行?所以,就是空啦!