linux 一文带你彻底搞懂特殊权限位suid,sgid,sticky
suid
linux系统有9位基本权限位,但除了这9位基础权限还有额外3位权限位,总共12位权限
这额外3位权限分别为:suid
,sgid
,sticky
-
suid
(setuid)位通过S字标识。 -
存在于基本权限的用户权限位x权限对应的位置。
-
如果用户权限位对应的x权限位上有x权限,则suid就用小写s标识
-
suid的s对应数字权限位4
-
完整权限用8进制数4000表示
-
设置数字权限例子:
-
取消suid权限:
数字取消:
chmod 644 1.txt
字符取消:
chmod u-s 1.txt
为什么会有suid?
例子:普通用户修改密码。
- 修改密码
passwd
其实是修改了 /etc/shadow
[dada@dada /]$ ls -l /etc/shadow
---------- 1 root root 1419 Dec 24 20:41 /etc/shadow
传统权限分析,dada是其他用户,修改/etc/shadow权限是---
,没有权限修改。
事实上可以修改。
- suid的特殊作用:可以绕过基础权限体系,可以修改没有权限的文件。基于二进制命令
- 给一个命令设置suid以后,所有使用这个命令的用户都拥有这个命令对应用户的权限
- 例如我是dada用户按基础权限来说是无法修改密码的,但是这个命令设置了suid,dada用户就拥有了这个命令对应用户的权限也就是root用户的权限,修改过程中是以root权限操作
suid核心小结
- suid功能是针对二进制命令或者程序,不能用在shell等类似脚本文件上
- 用户或属主对应的前三位权限的x位上,如果有s(S)就表示具有suid权限
- suid的作用就是让普通用户可以在执行某个设置suid位的命令或程序时,拥有和命令对应属主(一般为root管理员)一样的身份和权限(默认)
- 二进制命令程序需要可执行权限
x
配合才行不然提示Permission denied - suid对应的身份和权限仅在程序执行过程中有效
- suid是一个比较危险的功能,对系统安全有一定的威胁,企业用户授权可以使用sudo代替suid
不用把危险命令设置suid,比如rm命令
sgid
- 对于二进制命令或者程序来说,sgid的功能和suid基本相同,唯一区别是suid获得命令所属用户的身份和权限,而sgid是获得命令所属用户组的身份和权限
- 与suid不同的是,sgid既可以针对文件,也可以针对目录设置
- sgid的权限是针对用户组权限位的
- 对于文件来说,sgid功能如下
二进制命令或程序,也需要可执行权限x配合
执行命令的任意用户可以获得该命令程序执行期间所属组的身份和权限
理解suid
locate命令通过读取/var/lib/mlocate/mlocate.db
查询命令二进制文件位置,文件权限对其他用户来说是---
按道理来说其他用户无法使用locate命令,事实上可以使用,原因是locate 被设置了sgid
粘滞位sticky bit(sbit)
1.粘滞位的功能现在很少用,不过对于像/tmp目录这样的,是整个系统用户临时文件存放地,这个目录开放了所有权限,又设置了粘滞位,那么除了属主和root用户有权限删除它,其它用户不能删除这个目录,粘滞位用途一般是用来共享文件,虽然方便,但是带来一些安全隐患,生产环境禁止设置粘滞位。
特殊权限位说明 表格
类别 | SUID | SGID | sticky |
---|---|---|---|
字符标识 | S | S | T |
占据位置 | 基本权限前3位的x位 | 基本权限中3位的x位 | 基本权限后3位的x位 |
基本权限位x | s | s | s |
数字表示 | 4 | 2 | 1 |
八进制表示 | 4000 | 2000 | 1000 |
特殊权限作用 | 针对用户位 | 针对用户组 | 其他用户 |