首页 » SetUID - 临时身份转换

SetUID - 临时身份转换

用户用passwd命令修改密码时,其实修改了/etc/pasword和/etc/shadow文件。但通过ls可见普通用户对这2个文件都没有可写权限:

# ls -l /etc/passwd /etc/shadow
-rw-r--r-- 1 root root 1132 8月  29 20:12 /etc/passwd
-r-------- 1 root root  855 8月  29 20:12 /etc/shadow

之所以passwd可以修改这两个不可写的文件,全在于passwd有个特殊标志:

# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 30768 2月  22 2012 /usr/bin/passwd

注意可执行标志"x"被替换为了"s",表示SetUID。注意passwd的所有者是root,且有SetUID设置。设置SetUID的可执行文件在运行时,将切换为该文件的所有者身份执行,即普通用户运行passwd时,其实是以root身份在运行,因此能修改/etc/passwd和/etc/shadow文件。

如果去掉SetUID设置,普通用户就不能用passwd了:

去掉SetUID设置:

# chmod u-s /usr/bin/passwd
# ls -l /usr/bin/passwd
-rwxr-xr-x 1 root root 30768 2月  22 2012 /usr/bin/passwd

普通用户调用passwd:

$ passwd
Changing password for user bailing.
Changing password for bailing.
(current) UNIX password:
passwd: Authentication token manipulation error

注意最后一行的"passwd: Authentication token manipulation error"表示授权失败,调用passwd失败。

最后还原passwd命令的SetUID设置:

# chmod u+s /usr/bin/passwd

SetUID应用

为touch命令设置SetUID:

# chmod u+s /bin/touch

切换到普通用户,用touch命令创建文件,并查看新文件的属性:

$ touch /tmp/bynormal.txt
$ ls -l /tmp/bynormal.txt
-rw-rw-r-- 1 root bailing 0 Aug 29 20:34 /tmp/bynormal.txt

可见文件属主变为了root。如果调用SetGID,则连组属性也会变为root:

$ touch /tmp/bynormal-x.txt
$ ls -l /tmp/bynormal-x.txt
-rw-rw-r-- 1 root root 0 Aug 29 20:41 /tmp/bynormal-x.txt

测试结束,还原touch的设置:

# chmod g-s /bin/touch
# chmod u-s /bin/touch

扫描SetUID程序

find扫描SetUID/SetGID程序:

# find / -perm -4000 -o -perm -2000 > /tmp/setuid.txt

在测试机上有27个程序设置了SetUID/SetGID:

# wc /tmp/setuid.txt
 27  27 463 /tmp/setuid.txt

分享

0