Linux 中的特殊权限 SUID, SGID , SBIT

Linux 中的特殊权限 SUID, SGID , SBIT

文件的特殊权限: SUID, SGID , SBIT

查看一下文件和目录的权限:

# ls -ld /tmp ; ls -l /usr/bin/passwd                                                                                                                                                           
drwxrwxrwt. 24 root root 4096 5月  16 19:30 /tmp
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

Set UID

我们可以看到 passwd 文件的权限是 -rwsr-xr-x ;当 s 这个标示出现在文件拥有者的 x 权限上时,就被成为 Set UID , 简称 SUID 的特殊权限. 它的限制与功能:

  • SUID 权限仅对二进制程序有效
  • 执行者对于该程序具有 x 的可执行权限
  • 本权限仅在执行该程序的过程中有效
  • 执行者将具有该程序拥有者的权限(重点)

举例: passwd 命令拥有者是 root , passwd 命令会修改 /etc/shadow 这个文件,而这个文件的权限为 ----------. 1 root root 2560 5月 6 20:37 /etc/shadow ,虽然任何人没有读和修改的权限,但是 root 是可以修改,因为 root 是可以修改系统中任意的文件,不受权限控制;

普通用户可以使用 passwd 修改自己的密码,但是修改密码就必须要去修改 /etc/shadow 文件,但普通用户又没有修改这个文件的权限,那是不是代表用户就用不了 passwd 这个命令了吗? 当然不是. SUID 就是处理此问题创造的;当用户执行了带有 SUID 的二进制文件命令时, 就会临时具有该文件拥有者的权限,在程序执行的过程中,携带着文件拥有者的权限来执行命令,也就解决了上面所说的问题;

即普通用户使用 passwd 修改自己密码, passwd 修改 /etc/shadow 文件时,拥有的是 root 用户的权限,也就可以修改 /etc/shadow 文件了;

仅可用 在二进制程序上,不能够用在 shell 脚本上

Set GID

当 s 标示在文件拥有者 x 项为 SUID, 那 s 在用户组的 x 时则称为 Set GID(SGID)

# ls -l /usr/bin/locate                                                                                                                                                                         
-rwx--s--x. 1 root slocate 40520 4月  11 2018 /usr/bin/locate

与 SUID 不同的是, SGID 可以针对文件或目录来设置.如果对文件来说 SGID 有如下的功能:

  • SGID 仅对二进制程序有用
  • 程序执行者对于该程序来说,需具备 x 的权限
  • 执行者在执行的过程中将会获得该程序用户组的权限

举例: /usr/bin/locate 命令会去读 -rw-r-----. 1 root slocate 2875836 5月 16 03:32 /var/lib/mlocate/mlocate.db 这个文件,如果我们使用普通账号执行 locate 时,那普通用户将会取得 slocate 用户组的权限,因此就能够去读取 mlocate.db

当 SGID 作用在一个目录上,它将具有如下功能:

  • 用户若对于此目录具有 r 与 w 的权限时,该用户能够进入此目录
  • 用户在此目录下的有效用户组将会变成该目录的用户组
  • 用途: 若用户在此目录下具有 w 的权限(创建文件),则该用户所建立的新文件,该文件的用户组与此目录的用户组相同

对于一个学习小组有一个共享目录的情况下,如果不设置 SGID, 那么每个人在该共享目录下创建的文件其他人都不能修改(除非修改了 umask), 使用起来很不方便,

Sticky Bit

Sticky Bit (SBIT) 目前只针对目录有效,对于文件已经没有效果了,SBIT 对于目录的作用是:

  • 当用户对于此目录具有 w,x 权限,即具有写入的权限
  • 当用户在该目录下创建文件或目录时,仅有自己与 root 才有权利删除该文件

当一个目录设置了 SBIT 时, 一个普通用户创建的文件,哪怕权限是 -rw-rw-rw,其他用户也无法删除 ,更名,移动等操作,仅可自己和 root 删除,更名,移动

SUID, SGID , SBIT 权限设置

chmod 是修改权限的命令,我们当然也是使用 chmod 来设置 SUID, SGID , SBIT 了

  • 4 为 SUID
  • 2 为 SGID
  • 1 为 SBIT

假设要将一个文件权限修改文 -rwsr-xr-x 时,由于 s 在用户权限中,所以是 SUID,因此在原先的 755 之前还要加上 4, 也就是 chmod 4755 filename 来设置 ;和设置普通的权限一样,如果要设置 SUID 又要设置 SGID 则是 chmod 6755 filename;以此类推


参考自:
[鸟哥的 Liunx 私房菜(第四版)]

你可能感兴趣的:(Linux)