了解了Linux下文件的SUID和SGID后我们就可以解释为什么普通用户也能调用/usr/bin/passwd命令来修改/etc/passwd了。
[root@RD224 uid_gid]# ll /usr/bin/passwd /etc/passwd
-rw-r--r-- 1 root root 1738 Dec 10 08:40 /etc/passwd
-r-s--x--x 1 root root 27728 Jun 17 2005 /usr/bin/passwd
如上/etc/passwd文件只有root用户才有写权限,其他用户只有读权限,但普通用户却可以passwd修改自己的密码。原因就在/usr/bin/passwd的属性s,见我另一篇博文
Linux uid gid。
一般情况下,如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的用户具有的权限. 而setuid, setgid 可以来改变这种设置。比如我们自己开发的一个程序,里头有用到root才会操控的资源,比如让PC重启。我们可以在普通用户下开发编译,然后切到root用户下将可执行文件属主改为root,将其权限加上SUID,这样切到普通用户下运行这个程序就可以得到我们想要的功能了。
/* # ScriptName: transeuid.c
# Author: JH Gao <gaopenghigh@gmail.com>
# Create Date: 2012-06-05
# Function: transmit euid a