Linux的特殊文件权限:SUID、SGID、Sticky

旧城等待, 2022-10-31 13:37 237阅读 0赞

文章目录

  • Linux的特殊文件权限
    • SUID (`u+s`)
    • SGID(`g+s`)
    • Sticky(`o+t`)
    • 权限的数值表达法
      • 3位数表达法
      • 4位数表达法
    • 参考文档

Linux的特殊文件权限

一般情况下,在Linux中运行程序或创建文件时,用的是当前登录的用户权限。

但是Linux中也支持一些特殊文件权限,以满足特定的使用场景。

SUID (u+s)

一个有SUID (Set User ID)权限的程序在执行时,将会以该程序的所有者权限运行,而不是以当前登录的用户权限。

以普通用户运行passwd 命令修改用户密码为例,运行该命令会最终修改 /etc/shadow 用户密码文件。

  1. which passwd
  2. # /usr/bin/passwd
  3. ll /usr/bin/passwd
  4. # -rwsr-xr-x. 1 root root 33600 Apr 7 2020 /usr/bin/passwd
  5. # 可以看到passwd程序的owner权限为rws,group权限为r-x,other权限为r-x
  6. # 当非root用户运行passwd程序时,因为该程序的other权限为r-x,所以可以运行
  7. # 运行该程序会修改/etc/shadow 用户密码文件,而该文件只有root用户能够修改
  8. # 但是由于passwd的owner权限为rws,因此其他用户运行passwd程序时,实际上用的是root权限在运行,所以可以修改/etc/shadow文件
  9. ll /etc/shadow
  10. # ----------. 1 root root 1986 Feb 22 19:40 /etc/shadow

为一个程序(文件)添加SUID权限:

  1. chmod u+s <file>

SGID(g+s)

SGID(Set Group ID) 有两种使用场景:

  • chmod g+s file - 作用于文件时,执行该文件(程序)时,将以该文件的所属组的权限而不是当前登录用户权限运行,类似SUID。
  • chmod g+s directory - 作用于目录时,该目录下新建的文件的所属组都为该目录的所属组,而不是当前登录的用户组。常用与一个组的多个用户往同一个目录写入文件的场景。

Sticky(o+t)

一个有Sticky权限的目录,该目录下的文件,只有文件所有者和root能够删除文件。

/tmp 目录为例:

  1. ll /tmp -d
  2. # drwxrwxrwt. 6 root root 282 Feb 22 20:27 /tmp
  3. # 任意用户都可以往/tmp目录写入文件,但是一个用户不能删除其他用户写入的文件

设置一个目录的Sticky权限:

  1. chmod o+t <directory>

权限的数值表达法

3位数表达法

3位数表达法:owner|group|other

每一位的数值为:

  • 从0开始
  • 有读权限(r),加4
  • 有写权限(w),加2
  • 有执行权限(e),加1

比如640755等。

4位数表达法

在3位数的基础上,加上特殊权限。

4位数表达法:special|owner|group|other

其中special位 (首位)的数值为:

  • 从0开始
  • 有SUID(owner位有s),加4
  • 有SGID(group位有s),加2
  • 有Sticky(other位有t),加1

比如177747552771 等。

参考文档

  • Linux permissions: SUID, SGID, and sticky bit

发表评论

表情:
评论列表 (有 0 条评论,237人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Linux特殊权限

    Linux下的文件权限 前面我们提到了关于文件的三个重要权限,那就是r、w、x这三个读、写、可执行的权限,是不是文件系统只有这三个权限呢?答案当然是否定的,首先,我们来看

    相关 文件特殊权限

    1. SetUID 只有可以执行的二进制文件才能设定SUID权限。 命令的执行者要对该可执行文件拥有x(执行)权限。 命令的执行者在执行该文件时,身份会