Linux的特殊文件权限:SUID、SGID、Sticky
文章目录
- 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
用户密码文件。
which passwd
# /usr/bin/passwd
ll /usr/bin/passwd
# -rwsr-xr-x. 1 root root 33600 Apr 7 2020 /usr/bin/passwd
# 可以看到passwd程序的owner权限为rws,group权限为r-x,other权限为r-x
# 当非root用户运行passwd程序时,因为该程序的other权限为r-x,所以可以运行
# 运行该程序会修改/etc/shadow 用户密码文件,而该文件只有root用户能够修改
# 但是由于passwd的owner权限为rws,因此其他用户运行passwd程序时,实际上用的是root权限在运行,所以可以修改/etc/shadow文件
ll /etc/shadow
# ----------. 1 root root 1986 Feb 22 19:40 /etc/shadow
为一个程序(文件)添加SUID权限:
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
目录为例:
ll /tmp -d
# drwxrwxrwt. 6 root root 282 Feb 22 20:27 /tmp
# 任意用户都可以往/tmp目录写入文件,但是一个用户不能删除其他用户写入的文件
设置一个目录的Sticky权限:
chmod o+t <directory>
权限的数值表达法
3位数表达法
3位数表达法:owner|group|other
。
每一位的数值为:
- 从0开始
- 有读权限(
r
),加4 - 有写权限(
w
),加2 - 有执行权限(
e
),加1
比如640
,755
等。
4位数表达法
在3位数的基础上,加上特殊权限。
4位数表达法:special|owner|group|other
。
其中special
位 (首位)的数值为:
- 从0开始
- 有SUID(owner位有
s
),加4 - 有SGID(group位有
s
),加2 - 有Sticky(other位有
t
),加1
比如1777
、4755
、2771
等。
参考文档
- Linux permissions: SUID, SGID, and sticky bit
还没有评论,来说两句吧...