特殊权限
在linux操作系统中,除了常规的读、写和执行权限外,还存在一些特殊的权限,用于实现更复杂的权限控制机制。
SUID(Set User ID)
含义:当执行一个设置了SUID位的可执行文件时,该文件以文件所有者的权限运行,而不是以执行者的权限运行。人话:就是某个可执行文件有super超级管理员权限,这个文件普通用户也能使用。
表示方法:在文件权限的用户位上设置s或者S
应用场景:常用于需要特权的程序。
//例子1:
passwd _userName
//查看passwd问价的权限
ll /usr/bin/passwd
//输出如下
-rwsr-xr-x. 1 root root 37288 Aug 3 2022 /usr/bin/passwdrwsr:用户本身的权限中可以看到有一个s,其实这个s就是x权限,但是用s就是用来标记这个文件是一个具有suid权限的特殊执行文件。由于特殊权限位只有9位,所以特殊权限的执行权限用s代替了x。
为什么会给这个文件一个叫做suid的权限呢?这个文件是用于修改用户密码的执行文件,普通用户是不是也可以修改自己的密码。但是修改密码修改的是/etc/shadow文件的内容。查看一下/etc/shadow文件的权限。
ll /etc/shadow
//输出如下:
---------- 1 root root 1207 Dec 17 20:39 /etc/shadow这个文件的权限是000,普通用户根本没有修改这个文件的权限。因为如果普通用户可以修改这个文件的话,那么root用户的密码也能被普通用户修改,系统安全性降低。但是每次该密码都需要root用户修改,也是很麻烦的。
root用户修改普通用户密码和普通用户自己修改密码的区别:
- 普通用户修改密码,必须要输入原来的密码,
root用户不需要 - 普通用户修改密码,密码复杂度要更高,比如说新密码要符合具有大小写和长度必须至少为8个字符的规则。
普通用户修改密码也要用passwd所以系统给这个文件一个特殊的权限,也就是s。当普通用户使用这个文件的时候,可以拥有文件所属用户的执行权限,也就是root的x权限,这就是suid权限的意思。
SGID
含义:
- 对于可执行文件,
SGID的作用类似于SUID,即文件将以文件所属组的权限运行。 - 对于目录,
SGID表示在该目录下创建的新文件将继承目录的组属性,而不是创建者的组属性。
表示方法:在文件权限的组位上设置s或者S。
应用场景:用于共享目录。
sticky 粘滞位
是针对目录的操作,当多个用户共同使用一个目录时,实现用户之间不能互相删除修改对方文件的权限。
尝试创建一个共享目录
datamkdir data修改权限为
777chmod 777 data目录权限如下:
drwxrwxrwx 2 root root 4096 Dec 20 18:16 data使用普通用户身份在该目录中添加一个文件
//在Eddie用户身份在该目录中新增一个文件 touch Eddie.txtEddie.txt文件权限如下:-rw-rw-r-- 1 Eddie Eddie 0 Dec 20 18:19 Eddie.txt切换到
root用户添加一个文件touch root.txt此时该目录下的文件权限如下:
-rw-rw-r-- 1 Eddie Eddie 0 Dec 20 18:19 Eddie.txt -rw-r--r-- 1 root root 0 Dec 20 18:21 root.txt此时
data目录权限为777,任何人都可以往这个目录下添加文件。尝试切换为普通用户Eddie去删除root删除的文件//这里要切换到Eddie用户并且切换到/data目录下 rm -rf root.txtls查看文件列表:ls输出如下:
Eddie.txtroot.txt文件已经被普通用户Eddie删除。这是不对的,我们希望只有用户的创建者才能删除自身的文件。那么就可以使用sticky粘滞位来标记这个文件。修改
data目录的权限chmod o+t /data/查看执行指令之后
data目录的权限:drwxrwxrwt 2 root root 4096 Dec 20 18:24 data根据
ugo权限体系,在o部分的执行权限位置为t。root再去
data目录中新建一个文件//这里root用户要切换到/data目录中 touch root.txt切换到普通用户,再出尝试删除
root用户创建的文件//这里要切换到Eddie用户,并且切换到/data目录中 rm -rf root.txt输出如下:
rm: cannot remove 'root.txt': Operation not permitted
粘滞位保护了共享目录中,不同用户之间不能互相删除对方的文件。
su 和 sudo
su
su 全称switch user.
用户切换
//root用户可以很方便的切换到任意用户 su - _userName //退出,又回到root用户 exit普通用户切换到
root用户需要输入root用户密码su - root
不带-也是可以的,带-的话,就是切换完用户之后,直接到用户家目录下,不带-就不是家目录。
sudo
sudo全称是:super do。它的作用是用于授权的。就是赋予普通用户更高级的权限。原因是很多的操作,如果都需要root用户去做,太麻烦了。所以给普通用户做一些授权,普通用户操作就方便了。授权就需要用到sudo。sudo并不是直接给普通用户所有权限,而是一个命令一个命令的授权。
linux 普通用户提权
sudo 提权
我们使用sudo授权时给的权限太高,或者给授权时控制不合理,就会被普通用户利用来提权。
示例1:
vim # 命令模式执行: !/
# 通过vim修改/etc/sudoers,授权ALL
# 再通过vim进入一个文件
# :输入指令,是可以直接输入系统指令的,前面加一个!即可,比如创建一个文件,!touch 3.txt
# 查看3.txt信息如下
[jaden@localhost ~]$ ll
总用量 0
-rw-r--r-- 1 root root 0 3月 27 17:05 3.txt # 以root用户身份创建的文件
# 如果在vim文件时,执行!/bin/bash,就进入到了root的命令终端,可以为所欲为。
# 这就是sudo提权,但是sudo提权需要借助到可以执行系统指令的交互式的功能,比如vim。
示例2:
find # sudo find . -exec bash \; # 直接进入root的命令终端,这个指令退出root终端可能
要退好几次才行,看find找到了几个文件,找到了3个文件,就输入三次exit才能退出。
示例3:
awk # sudo awk 'BEGIN {system("/bin/bash")}' jaden.txt # 直接进入到root命令终
端,exit直接退出。
# 还有好多指令可以提权,比如cp命令也可以提权,将其他电脑上的/etc/shadow文件拷贝到这个系统中,
密码就改掉了,再su切换到root即可等等,还有什么mv、vi、sed修改文件、chmod改重要文件权限等等这
里就不多提了。大家可以试试,普通用户使用sudo来修改shadow文件的root用户的密码。脏牛提权
dcow全称dirty cow,脏牛,原理:Linux内核的内存子系统在处理写入时复制(copy-on-write, COW,组合起来是牛的意思)时产生了竞争条件。恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问,所以大家都管这个提权方式叫做脏牛提权。原理这一块大家不需要掌握,会监测是否存在这个漏洞即可。