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

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

在大多数二进制文件中,除了以下文件外,/bin都没有设置粘性位:fusermout,,,,和。mountumountpingping6su

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

答案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。这样做是因为:

  • pingping6需要 root 权限才能使用原始套接字。请参阅这篇超级用户帖子这篇 Unix 和 Linux 文章. 正如 SU 的回答所指出的,一些发行版现在使用功能而不是 setuid — — 我的 Arch Linux 系统没有 setuid 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
    

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

另请参阅:

相关内容