1.实际用户ID是登陆用户的ID。
有效用户ID在设置SUID后,为文件所有者ID。
2.比如说,用户修改密码,是通过运行命令passwd来实现的。最终必须要修改/etc/passwd文件。
/etc/passwd文件的属性是:
#ls -l /etc/shadow
----------. 1 root root 1039 Nov 13 2015 /etc/shadow
/etc/shadow只对root用户是可写的,对其他用户只有读权限。
普通用户通过运行passwd命令修改/etc/passwd文件时,
#ls -l /bin/passwd
-r-s--s--x 1 root root 16336 Feb 14 2003 passwd
由于passwd命令设置了SUID位,该进程的实际用户为leaf(普通用户),但是该进程的有效用户ID是文件所有者root的ID,因此通过passwd命令可以修改/etc/shadow文件。
(对应文件存取标志的s位就是通常说的SUID位,另外可以看到所有用户都有执行这个程序的权力。当leaf用户执行passwd命令的时候。Shell会fork出一个子进程,此时进程的有效用户ID还是steve,然后exec程序/usr/bin/passwd。exec会根据/usr/bin/passwd的SUID位会把进程的有效用户ID设成root, 此时这个进程都获得了root权限, 得到了读写/etc/shadow文件的权限, 从而leaf用户可完成密码的修改。 exec退出后会恢复steve用户的EUID为steve.这样就不会使steve用户一直拥有root权限。)