SUID 的权限其实与程序的相关性非常的大!为什么呢?先来看看 SUID 的程序是如何被一般使用者运行,且具有什么特色呢?
- SUID 权限仅对二进位程序(binary program)有效;
- 运行者对於该程序需要具有 x 的可运行权限;
- 本权限仅在运行该程序的过程中有效 (run-time);
- 运行者将具有该程序拥有者 (owner) 的权限。
所以说,整个 SUID 的权限会生效是由於『具有该权限的程序被触发』,而我们知道一个程序被触发会变成程序,所以罗,运行者可以具有程序拥有者的权限就是在该程序变成程序的那个时候啦!第七章我们还没谈到程序的概念,所以你或许那时候会觉得很奇怪,为啥运行了 passwd 后你就具有 root 的权限呢?不都是一般使用者运行的吗?这是因为你在触发 passwd 后,会取得一个新的程序与 PID,该 PID 产生时透过 SUID 来给予该 PID 特殊的权限配置啦!我们使用 dmtsai 登陆系统且运行 passwd 后,透过工作控制来理解一下!
[dmtsai@www ~]$ passwd Changing password for user dmtsai. Changing password for dmtsai (current) UNIX password: <==这里按下 [ctrl]-z 并且按下 [enter] [1]+ Stopped passwd [dmtsai@www ~]$ pstree -u init-+-acpid ....(中间省略).... |-sshd---sshd---sshd(dmtsai)---bash-+-more | |-passwd(root) | `-pstree ....(底下省略).... |
从上表的结果我们可以发现,底线的部分是属於 dmtsai 这个一般帐号的权限,特殊字体的则是 root 的权限!但你看到了, passwd 确实是由 bash 衍生出来的!不过就是权限不一样!透过这样的解析,你也会比较清楚为何不同程序所产生的权限不同了吧!这是由於『SUID 程序运行过程中产生的程序』的关系啦!
那么既然 SUID/SGID 的权限是比较可怕的,您该如何查询整个系统的 SUID/SGID 的文件呢?应该是还不会忘记吧?使用 find 即可啊!
find / -perm +6000
PS:
1.查看在背景中运行的进程:
jobs -l
-r:查看运行的进程,
-s:查看暂停的进程
2.杀死由于Ctrl+Z而stopped的进程:
kill -9 %n(或者直接加进程的PID)
n可以由jobs查得。
本文深入讲解了SUID权限的工作原理,包括如何使普通用户在运行特定程序时获得root权限,以及如何通过find命令查找系统中所有具有SUID权限的文件。
14

被折叠的 条评论
为什么被折叠?



