1.SetUID
一.SetUID的功能
SetUID主要是给命令提供一个root权限,就是命令运行时拥有root用户权限,命令运行结束后root权限消失
1.只有执行的二进制程序才能设定SUID权限
2.命令执行者要对该程序有用x(执行)权限
3.命令执行者在执行该程序时获得该程序文件属主(所有者)的身份(在执行程序的过程中灵魂附体为文件的属主)
4.SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效.
passwd
passwd命令拥有SetUID权限,所以普通用户可以修改自己的密码
修改密码是向/etc/shadow写入数据的
但是/etc/shadow文件的权限是---------,只有root用户可以操作,普通用户连看都不可以
[root@izm5e2q95pbpe1hh0kkwoiz ~]
---------- 1 root root 1097 Dec 10 17:02 /etc/shadow
所以passwd命令拥有SetUID权限,让普通用户在修改自己密码的时候,短暂拥有root权限,
修改完密码之后,root权限也就没有了
passwd命令中其他组拥有的权限是r-x,普通用户划归在其他组中,对应上面第2条,命令执行者要对该程序有用x(执行)权限
[root@izm5e2q95pbpe1hh0kkwoiz ~]
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
上面所有者的权限是rws
s权限代表的就是SetUID功能
cat
cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容
[eternity@izm5e2q95pbpe1hh0kkwoiz ~]$ ll /bin/cat
-rwxr-xr-x. 1 root root 54080 Nov 6 2016 /bin/cat
[eternity@izm5e2q95pbpe1hh0kkwoiz ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
二.设定SetUID的方法
4代表SUID
- chmod 4755 文件名
- chmod u+s 文件名
4代表给所有者设定SUID权限
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
-rw-r--r-- 1 root root 0 Dec 13 10:06 abc
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
-rwSr--r-- 1 root root 0 Dec 13 10:06 abc
为什么会报错呢?
2.命令执行者要对该程序有用x(执行)权限
第2条要求就是,命令执行者对程序拥有执行权限,此时除了root之外其他人对命令都没有执行权限
所以就会报错
怎么解决???
权限需要设置为755,也就是rwxr-xr-x
此时所有人都有x执行权限
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
-rwSr--r-- 1 root root 0 Dec 13 10:06 abc
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
-rw-r--r-- 1 root root 0 Dec 13 10:06 abc
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
-rwsr-xr-x 1 root root 0 Dec 13 10:06 abc
三.取消SetUID的方法
- chmod 755 文件名
- chmod u-s 文件名
四.危险的SetUID
1.关键目录应严格控制写权限.比如"/","/usr"等
2.用户的密码设置要严格遵守密码三原则
3.对系统中默认应该具有SetUID权限的文件作一个列表,定时检查有没有这个之外的文件被设置了SetUID权限(通过shell脚本去查看)
假如对vim设定了SetUID权限,则普通用户就可以使用vim编辑任何的文件,造成系统问题
2.SetGID
一.SetGID针对文件的作用
对文件常用,对目录不常用.对文件主要也就是二进制程序,主要是提升程序执行者的所属组,使程序执行者拥有较高的权限,跟SetUID类似.
1.只有可执行的二进制程序才能设置SGID权限
2.命令执行者要对该程序拥有x(执行)权限
3.命令执行在执行程序的时候,组身份升级为该程序文件的属组
4.SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效.
locate
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
-rwx--s--x 1 root slocate 40520 Apr 11 2018 /usr/bin/locate
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
-rw-r----- 1 root slocate 7489360 Dec 13 03:07 /var/lib/mlocate/mlocate.db
二.SetGID针对目录的作用
1.普通用户必须对此目录拥有r和x权限,才能进入此目录
2.普通用户在此目录中的有效组会变成此目录的属组
3.若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组.
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
drwxr-xr-x 2 root root 4096 Dec 13 10:55 test
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
drwxrwsrwx 2 root root 4096 Dec 13 10:55 test
[root@izm5e2q95pbpe1hh0kkwoiz tmp]
Last login: Fri Dec 13 09:51:16 CST 2019 on pts/0
[eternity@izm5e2q95pbpe1hh0kkwoiz test]$ cd /tmp
[eternity@izm5e2q95pbpe1hh0kkwoiz tmp]$ touch aaa
[eternity@izm5e2q95pbpe1hh0kkwoiz tmp]$ ll aaa
-rw-rw-r-- 1 eternity eternity 0 Dec 13 10:56 aaa
[eternity@izm5e2q95pbpe1hh0kkwoiz tmp]$ cd /tmp/test
[eternity@izm5e2q95pbpe1hh0kkwoiz test]$ touch bbb
[eternity@izm5e2q95pbpe1hh0kkwoiz test]$ ll bbb
-rw-rw-r-- 1 eternity root 0 Dec 13 10:57 bbb
三.设定SetGID
- chmod 2755 文件/文件名
- chmod g+s 文件/文件名
四.取消SetGID
- chmod 755 文件/文件名
- chmod g-s 文件/文件名
3.Sticky BIT
一.SBIT粘着位作用
针对普通用户,在有粘着位的文件夹下,每个用户只能创建删除自己的文件,不能删除其他用户的文件
1.粘着位目前只对目录有效
2.普通用户对该用户有用w和x权限,即普通用户可以在此目录拥有写入全新啊
3.如果没有粘着位,因为普通用户拥有w权限,则可以删除此目录下所有文件,包括其他用户建立的文件.
一旦赋予了粘着位,
除了root可以删除所有文件,普通用户就算拥有w权限,
也只能删除自己建立的文件,但是不能删除其他用户建立的文件.
二.设置和取消粘着位
设置粘着位
- chmod 1755 目录名
- chmod o+t 目录名
取消粘着位
- chmod 777 目录名
- chmod o-t 目录名
总结
SetUID只对文件生效
SetGID对文件和目录生效
Sticky BIT只对目录生效
拥有SetUID权限显示
rwsr-xr-x
即所有者的执行权限x替换为了s
拥有SetGID权限
rwxr-sr-x
即所属组的执行权限x替换为了s
拥有Sticky BIT权限
rwxrwxrwt
即其他人的执行权限x替换为了t
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端