其实,passwd命令所对应的可执行文件就拥有SetUID权限。
[root@localhost tmp]# ll /usr/bin/passwd-rwsr-xr-x. 1 root root 25980 2月 22 2012 /usr/bin/passwd可以发现,/usr/bin/passwd的文件所有者的执行权限是小写字母s(如果是大写字母S,就有问题) ,这就说明该可执行文件拥有SUID权限。正是因为如此,普通用户才能更改自己的密码,普通用户更改自己的密码时,身份临时变为超级用户root,所以才能将密码变更写入/etc/shadow(权限为000)的文件。
cat 命令没有SUID权限,所以普通用户不能查看 /etc/shadow 文件的内容。要想让普通用户也能使用cat命令查看 /etc/shadow 文件,可给cat命令赋予SUID权限。
数字4代表SUID,给一个可执行文件(一般为命令)设置SUID权限的方法有两种:
chmod 4755 文件名chmod u+s 文件名常见用法:
给cat命令赋予SUID权限:chmod 4755 /bin/cat或chmod u+s /bin/cat删除SUID权限的方法也有两种:
chmod 755 文件名chmod u-s 文件名常见用法:
chmod u-s /bin/cat删除cat命令的SUID权限作为一名合格的linux系统管理员,必须定期对系统中默认应该具有SUID权限的可执行文件进行列表,并定期检查是否有新的可执行文件被设置了SUID权限。
千万不要对vi命令或vim命令设置SUID权限,否则,所有的普通用户都能使用vi命令编辑一些特殊文件(如/etc/passwd),进而将自己的UID改为0(普通用户就会拥有超级用户root的所有权限),甚至对整个系统安全造成更加严重的灾难。
locate命令就具有SGID权限。
[root@localhost ~]# ll /usr/bin/locate-rwx--s--x. 1 root slocate 31492 3月 12 2015 /usr/bin/locate可以发现,locate命令的所属组的执行权限是小写字母s。
[root@localhost etc]# ll /var/lib/mlocate/mlocate.db-rw-r-----. 1 root slocate 2310094 12月 2 08:17 /var/lib/mlocate/mlocate.db数字2代表SGID,设置SGID权限的方法有两种:
chmod 2755 文件或文件夹名chmod g+s 文件或文件夹名删除SGID权限的方法有两种:
chmod 755 文件或文件夹名chmod g-s 文件或文件夹名对于可执行文件,设置SGID权限也是一种很危险的操作。应该尽量避免人为地给可执行文件赋予SGID权限,并定期检查系统中可能存在的SGID权限的文件,列出清单以供排查。
Linux系统中默认就具有SBIT权限的目录是 /tmp 目录。
[root@localhost etc]# ll -d /tmpdrwxrwxrwt. 5 root root 4096 1月 27 17:12 /tmp可以发现,/tmp目录的执行权限是小写字母t。
数字1代表SBIT,设置SBIT权限的方法有两种:
chmod 1755 目录名chmod o+t 目录名删除SBIT权限的方法有两种:
chmod 777 目录名chmod o-t 目录名新闻热点
疑难解答