ls -l /usr/bin/passwd
- rws r-x r-x root root …
关于ruid和euid
首先需要明确一下Linux进程中ruid和euid的概念.
每一个Linux进程都会包含这两个uid.
ruid(real user ID):
ruid可以理解为哪个用户执行了这个程序或者文件, ruid就是谁.
euid(effective user ID):
当进程执行时间, 操作系统会对euid进行识别, 以此来判断到底用什么权限来执行这个进程.
也就是说操作系统实际是通过判断进程的euid而不是ruid来给予其权限,只是在大多数情况下, euid和ruid是相等的.
SetUID
setuid是类unix系统提供的一个标志位, 其实际意义是set一个process的euid为这个可执行文件或程序的拥有者(比如root)的uid, 也就是说当setuid位被设置之后, 当文件或程序(统称为executable)被执行时, 操作系统会赋予文件所有者的权限, 因为其euid是文件所有者的uid
必须是一个可执行程序 命令 shell脚本 即必须首先有x权限 才能更改成s权限