UNIX/Linux:介绍setuid文件权限
setuid是什么意思?
如何跟踪所有启用setuid的文件?
setuid表示在执行时设置用户ID。
如果setuid位打开了文件,则执行该可执行文件的用户将获得拥有该文件的个人或者组的权限。
您需要使用ls -l
或者find命令来查看setuid程序。
所有setuid程序在ls命令的许可权位(所有者执行)中显示" S"或者" s"。
执行以下命令:
ls -l /usr/bin/passwd
输出示例:
-rwsr-xr-x 1 root root 42856 2009-07-31 19:29 /usr/bin/passwd
如何列出所有启用setuid的文件?
以下命令在本地系统上发现并打印任何setuid文件:
# find / -xdev \( -perm -4000 \) -type f -print0 | xargs -0 ls -l
-rwsr-xr-x 1 root root 27256 2010-01-29 00:02 /bin/fusermount -rwsr-xr-x 1 root root 78096 2009-10-23 09:58 /bin/mount -rwsr-xr-x 1 root root 35600 2009-05-12 03:13 /bin/ping -rwsr-xr-x 1 root root 31368 2009-05-12 03:13 /bin/ping6 -rwsr-xr-x 1 root root 36864 2009-07-31 19:29 /bin/su -rwsr-xr-x 1 root root 56616 2009-10-23 09:58 /bin/umount -rwsr-xr-x 1 root root 578776 2009-10-30 17:51 /etc/thnuclnt/.thnumod -rwsr-xr-- 1 root messagebus 47520 2009-10-24 09:00 /lib/dbus-1.0/dbus-daemon-launch-helper -rwsr-xr-x 1 root root 13304 2010-02-15 14:03 /opt/google/chrome/chrome-sandbox -rwsr-xr-x 1 root root 14720 2009-10-23 10:36 /sbin/mount.ecryptfs_private -rwsr-xr-x 1 root root 14640 2009-05-12 03:13 /usr/bin/arping -rwsr-sr-x 1 daemon daemon 52112 2009-09-16 03:59 /usr/bin/at -rwsr-xr-x 1 root root 41864 2009-07-31 19:29 /usr/bin/chfn -rwsr-xr-x 1 root root 37128 2009-07-31 19:29 /usr/bin/chsh -rwsr-xr-x 1 root root 59752 2009-07-31 19:29 /usr/bin/gpasswd -rwsr-xr-x 1 root lpadmin 14256 2010-01-28 17:28 /usr/bin/lppasswd -rwsr-xr-x 1 root root 62368 2008-11-05 18:54 /usr/bin/mtr -rwsr-xr-x 1 root root 32384 2009-07-31 19:29 /usr/bin/newgrp -rwsr-xr-x 1 root root 42856 2009-07-31 19:29 /usr/bin/passwd -rwsr-xr-x 1 root root 14880 2009-10-16 17:13 /usr/bin/pkexec -rwsr-xr-x 1 root root 852296 2009-05-23 06:01 /usr/bin/schroot -rwsr-xr-x 1 root root 143656 2009-06-22 21:45 /usr/bin/sudo -rwsr-xr-x 1 root root 143656 2009-06-22 21:45 /usr/bin/sudoedit -rwsr-xr-x 1 root root 18848 2009-05-12 03:13 /usr/bin/traceroute6.iputils -rwsr-xr-x 1 root root 858000 2009-10-30 17:51 /usr/bin/vmware-mount -rwsr-sr-x 1 root root 10536 2009-11-10 16:18 /usr/bin/X -rwsr-xr-x 1 root root 724784 2009-10-30 17:51 /usr/lib/cups/filter/thnucups -rwsr-xr-x 1 root root 10392 2009-04-29 06:09 /usr/lib/eject/dmcrypt-get-device -rwsr-xr-x 1 root root 197320 2009-10-23 01:28 /usr/lib/openssh/ssh-keysign -rwsr-xr-x 1 root root 14712 2009-10-16 17:13 /usr/lib/policykit-1/polkit-agent-helper-1 -rwsr-xr-x 1 root root 10360 2010-01-03 17:33 /usr/lib/pt_chown -rwsr-sr-x 1 root root 22928 2009-10-15 10:44 /usr/lib/virtualbox/VBoxHeadless -rwsr-sr-x 1 root root 10536 2009-10-15 10:44 /usr/lib/virtualbox/VBoxNetAdpCtl -rwsr-sr-x 1 root root 22928 2009-10-15 10:44 /usr/lib/virtualbox/VBoxNetDHCP -rwsr-sr-x 1 root root 22920 2009-10-15 10:44 /usr/lib/virtualbox/VBoxSDL -rwsr-sr-x 1 root root 27024 2009-10-15 10:44 /usr/lib/virtualbox/VirtualBox -rwsr-xr-x 1 root root 9666976 2009-10-30 17:51 /usr/lib/vmware/bin/vmware-vmx -rwsr-xr-x 1 root root 11605432 2009-10-30 17:51 /usr/lib/vmware/bin/vmware-vmx-debug -rwsr-xr-x 1 root root 10192912 2009-10-30 17:51 /usr/lib/vmware/bin/vmware-vmx-stats -rwsr-xr-- 1 root dip 321600 2009-02-20 23:56 /usr/sbin/pppd -rwsr-sr-x 1 libuuid libuuid 18888 2009-10-23 09:58 /usr/sbin/uuidd -rwsr-xr-x 1 root root 898112 2009-10-30 17:51 /usr/sbin/vmware-authd
可以使用以下命令删除s位:
# chmod -s /path/to/file
Setuid程序风险
攻击者可以使用Shell脚本或者提供虚假数据来利用setuid二进制文件。
用户通常不应该安装setuid程序,尤其是除了自己以外的其他用户。
例如,您不应该在/home/Hyman/crack下找到root启用setuid的二进制文件。
这些通常是"特洛伊木马"之类的程序。
例
在此示例中,用户Hyman运行名为/usr/bin/vi /shared/financialdata.txt的命令,并且vi命令和文件/shared/financialdata.txt的权限如下:
-rwxr-xr-x 1 root root 1871960 2009-09-21 16:57 /usr/bin/vi -rw------- 1 root root 3960 2009-09-21 16:57 /shared/financialdata.txt
Hyman具有运行/usr/bin/vi的权限,但没有读取/shared/financialdata.txt的权限。
因此,当vi尝试读取文件时,将向Hyman显示权限被拒绝的错误消息。
但是,如果在vi上将SUID位置1:
chmod u+s /usr/bin/vi ls -l /usr/bin/vi
现在,当Hyman运行此SUID程序时,就可以访问/shared/financialdata.txt。
它是如何工作的?
UNIX系统不认为Hyman正在通过vi读取文件,而是认为root是用户,因此授予访问权限。
如何在Linux下为每个setuid二进制文件审核和记录setuid系统调用?
auditd可用于Linux下的系统审核。
它可以记录和审核setuid系统调用。
编辑/etc/audit/audit.rules:
# vi /etc/audit/audit.rules
-a always,exit -F path=/bin/ping -F perm=x -F auid>=500 -F auid!=4294967295 -k privileged -a always,exit -F path=/bin/mount -F perm=x -F auid>=500 -F auid!=4294967295 -k privileged -a always,exit -F path=/bin/su -F perm=x -F auid>=500 -F auid!=4294967295 -k privileged -a always,exit -F path=/bin/umount -F perm=x -F auid>=500 -F auid!=4294967295 -k privileged
运行以下命令以从/bin获取启用setuid的二进制文件,并按上述方式添加它们:
# find /bin -type f -perm -04000
保存并关闭文件。
重新启动审核:
# service auditd restart
使用aureport命令查看审核报告:
# aureport --key --summary # ausearch --key access --raw | aureport --file --summary # ausearch --key access --raw | aureport -x --summary # ausearch --key access --file /bin/mount --raw | aureport --user --summary -i
请参阅Linux审核文件以查看谁对该文件进行了更改。