![为什么 mount、ping 和 su 都设置了粘滞位?](https://linux22.com/image/991477/%E4%B8%BA%E4%BB%80%E4%B9%88%20mount%E3%80%81ping%20%E5%92%8C%20su%20%E9%83%BD%E8%AE%BE%E7%BD%AE%E4%BA%86%E7%B2%98%E6%BB%9E%E4%BD%8D%EF%BC%9F.png)
在大多数二进制文件中,除了以下文件外,/bin
都没有设置粘性位:fusermout
,,,,和。mount
umount
ping
ping6
su
为什么这些文件不应该被删除或重命名?是不是因为它们用于某些关键脚本?如果是这样,是否意味着所有其他二进制文件都不重要,系统可以在没有它们的情况下运行?
答案1
那不是粘性位,那是 setuid 位。粘性位通常适用于目录,/tmp
例如,您可以在以下示例中看到这一点:
$ stat -c '%A %n' /tmp /bin/ping /usr/bin/crontab
drwxrwxrwt /tmp
-rwsr-xr-x /bin/ping
-rwxr-sr-x /usr/bin/crontab
表示t
粘滞位,s
用户模式下的表示 setuid,s
组模式下的表示 setgid。
setuid 位使命令可以作为拥有该文件的用户,通常是root
。这样做是因为:
ping
并ping6
需要 root 权限才能使用原始套接字。请参阅这篇超级用户帖子和这篇 Unix 和 Linux 文章. 正如 SU 的回答所指出的,一些发行版现在使用功能而不是 setuid — — 我的 Arch Linux 系统没有 setuidping
。su
需要 root 权限才能切换到任意用户mount
(和umount
等)需要 setuid 来挂载被指定为可由任何人挂载的东西(通过users
中的选项/etc/fstab
)(参见这个Unix和Linux答案)crontab
是 setgid,因为 crontab 文件存储在只有 root 和crontab
组可写的位置:$ stat -c '%A' /var/spool/cron/crontabs drwx-wx--T
(注意:crontab 目录也是粘性的。)
另请参阅: