chardliu@ubuntu:~/apue.2e/file$ su
Password:
root@ubuntu:/home/chardliu/apue.2e/file# chmod o-r /etc/shadow
root@ubuntu:/home/chardliu/apue.2e/file# ll /etc/shadow
-r-------- 1 root shadow 1235 Apr 11 18:50 /etc/shadow
root@ubuntu:/home/chardliu/apue.2e/file# chown root a.out
root@ubuntu:/home/chardliu/apue.2e/file# chmod u+s a.out
root@ubuntu:/home/chardliu/apue.2e/file# ll a.out
-rwsrwxr-x 1 root chardliu 7839 Jun 26 21:01 a.out*
退出超级用户,以正常用户运行:
root@ubuntu:/home/chardliu/apue.2e/file# exit
exit
chardliu@ubuntu:~/apue.2e/file$ ./a.out /etc/shadow
access error for /etc/shadow: Permission denied
open for reading OK
会发现运行结果access失败,而打开文件成功。access是以实际用户IDchardliu对shadow进行访问权限检测的,发现其他用户读没有设置权限,所以失败;a.out设置了用户ID,所以当进程执行a.out时,进程的有效用户ID由chardliu设置为了a.out所有者的用户ID root了,所以可以成功打开文件,open是以进程的有效用户ID进行访问权限检测的。
通过这个过程,相信会对文件的访问权限控制有一个比较清晰的理解。
参考资料:W.Richard Stevens, Stephen A.Rago《UNIX环境高级编程》