Linux中文件的三大权限:SUID、SGID、Sticky解析
在 Linux 和类 Unix 系统中,除了常规的读(r)、写(w)、执行(x)权限外,还存在三种特殊的文件权限,通常被称为“三大超级权限”或“特殊权限”。它们分别是 SUID、SGID 和 Sticky 权限。
以下是这三种权限的详细解析:
- SUID (Set User ID)
作用对象:通常作用于二进制可执行文件。
核心功能:当普通用户执行带有 SUID 权限的文件时,该进程会临时继承文件所有者(通常是 root)的权限,而不是执行者本身的权限。
典型应用:例如 passwd 命令。普通用户需要修改自己的密码,而密码存储在只有 root 才能写入的 /etc/shadow 文件中。通过给 passwd 命令设置 SUID 权限,普通用户在执行该命令时就能临时获得 root 权限来修改密码文件。 - SGID (Set Group ID)
作用对象:可执行文件或目录。
核心功能:
作用于文件时:与 SUID 类似,执行该文件的进程会临时继承文件所属用户组的权限。
作用于目录时:在该目录下创建的任何新文件或子目录,都会自动继承该目录的所属用户组,而不是创建者的默认用户组。
典型应用:常用于团队协作。例如,多个用户同属一个 dev 组,将共享工作目录设置为 SGID,这样无论谁在该目录下创建文件,其他组成员都能通过组权限进行访问和编辑。 - Sticky Bit (粘滞位)
作用对象:主要作用于公共目录。
核心功能:限制目录内文件的删除权限。在一个设置了 Sticky 权限的目录中,即使其他用户对该目录拥有写(w)权限,他们也只能删除自己创建的文件,无法删除其他人创建的文件。
典型应用:最经典的例子是 /tmp 目录。该目录允许所有用户写入临时文件,但为了防止用户误删或恶意删除他人的临时文件,系统为其设置了 Sticky 权限。
补充说明:如何设置特殊权限
这三种特殊权限同样可以使用数字法进行设置,通常在常规的三位权限数字前加上一位数字来表示:
SUID:对应数字 4(例如 4755)
SGID:对应数字 2(例如 2755)
Sticky:对应数字 1(例如 1777)