SUID(Set User ID)、SGID(Set Group ID)和 SBIT(Sticky Bit)是 Linux 系统中的三种特殊权限,它们各自有不同的用途和应用场景:
1. **SUID**:
- SUID 允许用户执行一个文件时,以该文件所有者的权限来运行。这通常用于那些需要更高权限才能执行的程序,如 `passwd` 命令,它允许普通用户修改自己的密码,而密码文件通常只有 root 用户才能修改。
- SUID 通常用于可执行文件,当设置在二进制文件上时,执行该文件的用户将暂时获得文件所有者的权限。
- 例如,`/usr/bin/passwd` 命令通常设置有 SUID 权限,以便用户在执行时能够修改 `/etc/shadow` 文件。
2. **SGID**:
- SGID 权限允许用户在执行一个文件时,以该文件所属组的权限来运行。这通常用于需要组成员之间共享文件或目录的场景。
- 当 SGID 设置在目录上时,用户在该目录中创建的新文件将继承该目录的组,而不是用户自己的主组。
- 通常用于需要组成员之间共享文件或目录的场景,例如,一个项目组的成员需要访问某些共享文件或目录。
- 例如,`/usr/bin/wall` 命令允许发送消息给所有终端用户,它通常设置有 SGID 权限。
3. **SBIT**:
- SBIT 权限仅对目录有效,它允许在公共目录中创建文件的用户只能删除或修改自己的文件。
- 这是通过阻止其他用户删除或重命名目录中的文件来实现的,除非他们是文件的所有者或超级用户(root)。
- SBIT 通常用于公共目录。
- 例如,`/tmp` 目录通常设置有 SBIT 权限,以防止用户删除或重命名其他用户的临时文件。
管理员通常使用 `chmod` 命令来设置这些特殊权限,例如使用 `chmod u+s` 来添加 SUID 权限,使用 `chmod g+s` 来添加 SGID 权限,使用 `chmod o+t` 来添加 SBIT 权限。这些权限也可以通过数字方式设置,SUID 对应数字 4,SGID 对应数字 2,SBIT 对应数字 1。在使用这些特殊权限时,应确保它们是必要的,并且对系统的影响有充分的理解。定期审计系统中的特殊权限设置也是一个好的做法,以确保系统的安全性。