作者:昏暗的夜风刮过 | 来源:互联网 | 2024-12-13 14:55
在Linux系统中,除了基本的读取、写入和执行权限外,还存在三种特殊权限:SetUserID(SUID)、SetGroupID(SGID)和StickyBit。这些特殊权限用于增强系统的安全性和功能性。
在 Linux 系统中,除了常规的读取 (r)、写入 (w) 和执行 (x) 权限之外,还存在三种特殊的权限设置,即 Set User ID (SUID)、Set Group ID (SGID) 和 Sticky Bit。
1. SUID 和 SGID
为了更好地理解 SUID 和 SGID 的作用,我们可以通过一个具体的例子来说明。例如,查看 /usr/bin/passwd
和 /etc/passwd
文件的权限:
[root@MyLinux ~]# ls -l /usr/bin/passwd /etc/passwd
-rw-r--r-- 1 root root 1549 08-19 13:54 /etc/passwd
-rwsr-xr-x 1 root root 22984 2007-01-07 /usr/bin/passwd
/etc/passwd
文件存储了用户账户及其相关信息,而 /usr/bin/passwd
是用于修改和查看该文件的程序。尽管 /etc/passwd
只有 root 用户具有写入权限,但所有用户都可以通过 /usr/bin/passwd
命令修改此文件。这是因为 /usr/bin/passwd
被赋予了 SUID 权限,如权限字符串中的 's' 所示。
SUID(Set User ID): 允许普通用户在执行某个程序时,暂时获得该程序所有者的权限。例如,当普通用户运行 passwd
命令时,他们可以临时获得 root 权限来修改 /etc/passwd
文件。
SGID(Set Group ID): 类似于 SUID,但它是针对组的。当文件或目录被设置为 SGID 时,任何执行该文件的用户都会获得该文件所属组的权限。
2. Sticky Bit(粘贴位)
另一个例子是查看 /tmp
目录的权限:
[root@MyLinux ~]# ls -dl /tmp
drwxrwxrwt 6 root root 4096 08-22 11:37 /tmp
/tmp
目录是一个所有用户都可以读写和创建文件的公共临时文件夹。然而,为了避免用户 A 创建的文件被用户 B 删除的情况,Linux 引入了 Sticky Bit 权限,如权限字符串中的 't' 所示。
Sticky Bit(粘贴位): 当一个目录被设置为 Sticky Bit 时,只有文件的所有者或 root 用户可以删除或重命名该目录中的文件。这确保了即使所有用户都有写入权限,也无法删除不属于自己的文件。
3. 如何设置特殊权限
可以使用 chmod
命令来设置这些特殊权限:
- 设置 SUID:
chmod u+s 文件名
- 设置 SGID:
chmod g+s 文件名
- 设置 Sticky Bit:
chmod o+t 目录名
还可以使用八进制表示法来设置这些权限。每个特殊权限对应的八进制值如下:
因此,可以这样设置:
- 设置 SUID:
chmod 4755 文件名
- 设置 SGID:
chmod 2755 文件名
- 设置 Sticky Bit:
chmod 1755 目录名
如果文件的特殊权限没有生效,权限字符串中的 's' 或 't' 会显示为大写的 'S' 或 'T',这通常是因为相应的执行权限未被授予。