文章目录
前言:
上一节我们了解了Linux操作系统的权限管理,今天我们来聊聊文件特殊管理权限:
文件特殊管理权限主要从以下几点进行讨论:
SUID
SGID
Sticky bit
1. SUID详解
chmod u+s
chomd 4777
chmod u-s
我们平时创建用户后都会设置密码,我们都 知道passwd 和shadow,我们来看看他们的权限
[root@zmgaosh test]# ll /etc/passwd-rw-r--r-- 1 root root 1317 6月 20 15:16 /etc/passwd[root@zmgaosh test]# ll /etc/shadow---------- 1 root root 1073 6月 20 15:16 /etc/shadow[root@zmgaosh test]#
从上面可以看到,/etc/shadow,没有任何的访问权限,修改密码就是要把密码写入到这个没有权限的shadow, 如果是root修改密码我们可以理解,那如果是一个普通用户呢,能不能修改自己的密码。
- 不能,因为没有权限,只能root帮他修改密码
- 能,既然你这么问了肯定要猜能
我们来做个试验试一下:
[root@zmgaosh test]# useradd gaosh[root@zmgaosh test]# passwd gaosh更改用户 gaosh 的密码 。 新的 密码: 无效的密码: 密码未通过字典检查 - 它没有包含足够的不同字符 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。[root@zmgaosh test]# su - gaosh[gaosh@zmgaosh ~]$ whoamigaosh[gaosh@zmgaosh ~]$ passwdChanging password for user gaosh. Changing password for gaosh.(current) UNIX password: #先输入本身的密码New password: #输入新密码Retype new password: passwd: all authentication tokens updated successfully.[gaosh@zmgaosh ~]$ [gaosh@zmgaosh ~]$ ll /usr/bin/passwd -rwsr-xr-x 1 root root 27856 Aug 9 2019 /usr/bin/passwd
可以看到,普通用户设置密码也能成功,所以猫腻在哪里呢,我们查看下passwd这个命令,发现该命令在owner区域的执行权限字段不是x而是s
结论: 如果一个命令的SUID位被设置为s, 那么其在执行的过程中,命令的执行用户就会切换成命令的owner进行执行。
接下来为了验证上述结论,我们拿一个没有s权限的来试一下
实验步骤:
- 在没有suid权限时候能否执行操作
- 加上suid权限再次查看结果
本次我们用more命令
[root@zmgaosh test]# ll /usr/bin/more-rwxr-xr-x 1 root root 41112 12月 3 2019 /usr/bin/more
可以看到没有suid权限
[root@zmgaosh test]# su - gaosh 上一次登录:一 6月 22 07:54:55 CST 2020pts/0 上[gaosh@zmgaosh ~]$ whoamigaosh[gaosh@zmgaosh ~]$ more /etc/shadow #没有suid权限的时候,无法查看此文件/etc/shadow: Permission denied[gaosh@zmgaosh ~]$ exitlogout[root@zmgaosh test]# chmod u+s /usr/bin/more #加上suid权限[root@zmgaosh test]# ll !$ll /usr/bin/more -rwsr-xr-x 1 root root 41112 12月 3 2019 /usr/bin/more #可以看到x位的s[root@zmgaosh test]# su - gaosh上一次登录:一 6月 22 08:06:14 CST 2020pts/0 上[gaosh@zmgaosh ~]$ whoamigaosh[gaosh@zmgaosh ~]$ more /etc/shadow #已经能够查看root:$6$SlVomD$EBjlGVUUOnCCk.lupiqnL58ESGeVJBNCvIc7IE6LNQ9J66OEhNSvlZQvk8EJkx6laSHDeDnuVN3NnJgqZxZid.:18430:0:999 99:7:::
注意,有时候在owner区的s可能设置的是S。给普通文件强行加suid权限,显示的就是大写的S,因为普通文件本身没有x执行权限, 正确的用法是先给文件x权限,然后在给s权限,这样才是小写的s.
实验步骤:
- 先查看普通文件的权限
- 给予普通文件s权限,查看是否出现大S
- 去掉suid权限,先给予执行权限再给予s权限
- 查看是否x位是否为小s
[root@zmgaosh test]# ll总用量 0 -rw-r--r-- 1 root root 0 6月 22 07:31 gaosh.txt[root@zmgaosh test]# chmod u+s gaosh.txt [root@zmgaosh test]# ll总用量 0 -rwSr--r-- 1 root root 0 6月 22 07:31 gaosh.txt[root@zmgaosh test]# chmod u-s gaosh.txt [root@zmgaosh test]# ll总用量 0 -rw-r--r-- 1 root root 0 6月 22 07:31 gaosh.txt[root@zmgaosh test]# chmod u+x gaosh.txt [root@zmgaosh test]# chmod u+s gaosh.txt [root@zmgaosh test]# ll总用量 0 -rwsr--r-- 1 root root 0 6月 22 07:31 gaosh.txt[root@zmgaosh test]#
2. .SGID (Set-group identification)
SGID和SUID基本类似,知识在命令执行后切换的用户不是owner而是group
可以给二进制可执行文件设置,也可以给目录设置
如果给目录设置SGID权限,那么在这个目录下新创建文件的时候,新创建的文件所属组会集成上级目录的权限。
[root@zmgaosh test]# mkdir gaosh[root@zmgaosh test]# ll -d gaoshdrwxr-xr-x 2 root root 4096 6月 22 08:20 gaosh[root@zmgaosh test]# chmod g+s gaosh[root@zmgaosh test]# ll总用量 4 drwxr-sr-x 2 root root 4096 6月 22 08:20 gaosh[root@zmgaosh test]# chown :gaosh gaosh #改变文件目录的属组[root@zmgaosh test]# ll -d gaoshdrwxr-sr-x 2 root gaosh 4096 6月 22 08:21 gaosh[root@zmgaosh test]# cd gaosh[root@zmgaosh gaosh]# touch test1 #验证新创建的文件的属组会不会改变[root@zmgaosh gaosh]# ll总用量 0 -rw-r--r-- 1 root root 0 6月 22 08:21 test[root@zmgaosh gaosh]#
注意: SGID的s权限也是分大小写的,当g权限组没有x权限的时候,设置SGID后就会变成大写的S,这点跟SUID一样。
3. SBIT 权限 (Sticky Bit)
设置方法: chmod g+s
注意: 只对目录有效
Sticky Bit主要用于目录的共享。目录 /var/tmp and /tmp就具备共享功能,所有用户都可以创建文件,还可以修改或执行其它用户的文件,但是删除文件只能是文件拥有者。一旦目录的Sticky Bit被设置了,就能保证目录中各自的文件只有文件的拥有者和root可以删除。
[root@zmgaosh gaosh]# ll -d /var/tmpdrwxrwxrwt. 4 root root 4096 6月 20 20:31 /var/tmp
权限t也有大小写之分,大写说明没有x权限,小写说明有x权限,这点和权限s是一样的。
总结:
- 三种权限的设置方法:
SUID: chmod u+s SGID: chmod g+s SBIT: chmod o+t
数字表示: SUID =4 SGID =2 SBIT=1
chmod 4777 chmod 2777 chmod 1777
如果三种权限都设置的话,就是chmod 7777
- 及时排除拥有特殊权限的用户,如果不是你本人设置的一定要去掉特殊权限,并检查是否 有后门漏洞。
我是高胜寒,一个在教培行业不忘初心的人