unix环境高级编程中进程一节提到了实际用户ID(RUID),有效用户ID(EUID)和设置用户ID(SUID)的概念。
RUID是当前登陆linux系统用户的ID,EUID是表示某个用户对当前可执行程序所具有的有效权限,SUID是设置用户对当前程序的修改以及可执行权限。
下面着重介绍EUID和SUID:
linux@ubuntu:/$ ll /etc/passwd
-rw-r--r-- 1 root root 1856 Jul 16 2013 /etc/passwd
输出rw-r--r-- root root 这表示当前用户对此文件具有读写,组用户和其他用户具有只读权限。这里RUID为linux,当前只有EUID为linux的用户具有写的权限,其他用户则没有
linux@ubuntu:/$ ll usr/bin/passwd
-r-sr-xr-x 1 root root 41284 Apr 8 2012 usr/bin/passwd*
输出的权限标识中有了字母s,这表示此文件绑定了SUID,也就是具有了设置有效用户对文件的修改和可执行权限。特别注意的是SUID是与文件绑定的。
奇怪的问题是我们的linux用户可以修改passwd:
linux@ubuntu:/$ passwd
Changing password for linux.
(current) UNIX password:
也就是具有了对当前文件的写权限,这正式s标示的左右,修改了EUID权限从linux变为root权限,而root用户具有写的权限,密码修改完成后再切换到linux用户之前的权限,保证文件的安全。
我们可以修改标示位去掉s,此时就会报错,进一步证实了s为设置EUID