为什么 mount、ping 和 su 设置了粘性位?

wha*_*489 2 permissions executable

/bin大多数二进制文件没有粘滞位除外:fusermoutmountumountpingping6su

为什么这些不应该被删除或重命名?是否因为它们用于某些关键脚本中,如果是这样,是否意味着所有其他二进制文件都不重要并且系统可以在没有它们的情况下工作?

mur*_*uru 5

这不是粘性位,而是 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
Run Code Online (Sandbox Code Playgroud)

所述t表示粘滞位,一个s在用户模式指示setuid和一个s在组模式指示setgid的。

setuid 位使命令以拥有文件的用户身份运行,通常是root。这样做是因为:

  • ping并且ping6需要 root 访问权限才能使用原始套接字。请参阅此超级用户帖子此 Unix 和 Linux 帖子。正如 SU 的回答所指出的,一些发行版现在使用功能而不是 setuid——我的 Arch Linux 系统没有 setuid on ping
  • 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
    
    Run Code Online (Sandbox Code Playgroud)

    (注意:crontab 目录也是粘性的。)

另见:

  • [现在有了。](http://unix.stackexchange.com/questions/293149/) (2认同)