当前位置:首页 > 服务器技术 > 正文

深入理解Linux文件特殊权限(SUID、SGID与Sticky Bit详解)

在Linux系统中,除了常见的读(r)、写(w)、执行(x)权限外,还存在三种“特殊权限”:SUID、SGID 和 Sticky Bit。这些权限对于系统安全和多用户协作至关重要。本教程将用通俗易懂的方式,帮助Linux初学者掌握这些概念。

什么是Linux特殊权限?

普通权限控制用户对文件的访问,而特殊权限则影响程序运行时的身份或目录中文件的删除行为。它们通常用于特定场景,比如让普通用户临时获得更高权限来执行某些任务。

深入理解Linux文件特殊权限(SUID、SGID与Sticky Bit详解) Linux特殊权限  SUID权限 SGID权限 Sticky Bit 第1张

1. SUID权限(Set User ID)

SUID 允许用户在执行某个文件时,暂时获得该文件所有者的权限。这在需要普通用户执行只有root才能操作的任务时非常有用。

例如,/usr/bin/passwd 命令就设置了SUID。普通用户修改密码时,实际是在修改 /etc/shadow 文件(只有root可写),但因为 passwd 有SUID,所以进程以root身份运行。

查看方式:

-rwsr-xr-x 1 root root 68208 Mar 10  2023 /usr/bin/passwd

注意第一个权限位中的 s(代替了原本的 x),表示SUID已设置。

设置SUID命令:

chmod u+s filename

取消SUID:

chmod u-s filename

2. SGID权限(Set Group ID)

SGID 有两种用途:

  • 用于文件:执行时以文件所属组的身份运行(类似SUID,但针对组)。
  • 用于目录:在该目录下创建的新文件自动继承目录的组所有权,便于团队协作。

例如,一个项目目录 /project 属于 devgroup 组,设置SGID后,无论哪个用户在其中创建文件,文件的组都会是 devgroup

查看方式(目录):

drwxrwsr-x 2 alice devgroup 4096 Jun 10 10:00 /project

注意组权限中的 s 表示SGID。

设置SGID命令:

chmod g+s directory_or_file

3. Sticky Bit(粘滞位)

Sticky Bit 主要用于目录,确保只有文件所有者(或root)才能删除或重命名该目录下的文件,即使其他用户对该目录有写权限。

典型例子是 /tmp 目录,所有用户都可以在里面创建文件,但不能删除别人的文件。

查看方式:

drwxrwxrwt 10 root root 4096 Jun 12 08:30 /tmp

注意最后一位的 t(或 T)表示Sticky Bit已启用。

设置Sticky Bit命令:

chmod +t directory

数字表示法

特殊权限也可以用数字表示:

  • SUID = 4
  • SGID = 2
  • Sticky Bit = 1

例如,给文件设置 rwxr-xr-x 并加上 SUID,可用:

chmod 4755 filename

给目录设置 rwxrwxrwx 并加上 SGID 和 Sticky Bit:

chmod 3777 directory

(3 = 2 + 1,即 SGID + Sticky Bit)

安全提示

虽然这些权限功能强大,但滥用可能导致安全风险。例如,给可执行脚本设置SUID可能被恶意利用。因此,应仅在必要时使用,并定期检查系统中的特殊权限文件:

find / -perm -4000 2>/dev/null  # 查找SUID文件find / -perm -2000 2>/dev/null  # 查找SGID文件

总结

掌握 Linux特殊权限 是系统管理和安全配置的重要一环。通过合理使用 SUID权限SGID权限Sticky Bit,你可以在保障安全的同时提升多用户环境下的协作效率。希望这篇教程能帮助你轻松入门!