首先说 SUID 这个权限,仔细看,s 在什么位置?


我们知道,rwx 这三个权限,是一个权限占一格,如果没有x的权限,就会变成一条横杠(rw-),而不是变成两个权限(rw)。
由此可以看出,这个 s 必然与 x (执行)有关。
先看下passwd这个程序,当你执行passwd的时候,你其实就是修改密码,但是,密码是存在 shadow 这个文件里的,权限 rw------- ,除了root ,谁能改这个文件里的内容?但是,实际情况是,任何用户都能通过 passwd 这个程序,修改自己的密码。
如果你想到,这个 s 与提权有关,恭喜你,猜对了!
这个s,全称Set UID。那么,这个 SUID 有什么作用呢?
就是使有 Set UID 权限的可执行文件的执行者,变成这个文件的 own 。比如说,前面说到的修改密码,就是通过执行者变成这个文件的own实现的。
不过,SUID 也有限制的!
首先,是仅对可执行文件有效。如果不是可执行文件,你给它 s 权限,也没有意义。
其次,运行者要对这个文件有执行权限。比如说,如果你把passwd这个bin的权限改成 rws------ ,那么,别的用户也是无法运行的。
最后,这个权限仅在运行具有s权限的可执行文件时有效,也就是你 passwd 里密码一改完,你又变会原来的用户了!