Skip to content

特殊权限

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/passwd
  • rwsr:用户本身的权限中可以看到有一个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。当普通用户使用这个文件的时候,可以拥有文件所属用户的执行权限,也就是rootx权限,这就是suid权限的意思。

SGID

含义:

  • 对于可执行文件,SGID的作用类似于SUID,即文件将以文件所属组的权限运行。
  • 对于目录,SGID表示在该目录下创建的新文件将继承目录的组属性,而不是创建者的组属性。

表示方法:在文件权限的组位上设置s或者S

应用场景:用于共享目录。

sticky 粘滞位

是针对目录的操作,当多个用户共同使用一个目录时,实现用户之间不能互相删除修改对方文件的权限。

  1. 尝试创建一个共享目录data

    mkdir data
  2. 修改权限为777

    chmod 777 data

    目录权限如下:

    drwxrwxrwx    2 root root  4096 Dec 20 18:16 data
  3. 使用普通用户身份在该目录中添加一个文件

    //在Eddie用户身份在该目录中新增一个文件
    touch Eddie.txt

    Eddie.txt文件权限如下:

    -rw-rw-r-- 1 Eddie Eddie 0 Dec 20 18:19 Eddie.txt
  4. 切换到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
  5. 此时data目录权限为777,任何人都可以往这个目录下添加文件。尝试切换为普通用户Eddie去删除root删除的文件

    //这里要切换到Eddie用户并且切换到/data目录下
    rm -rf root.txt

    ls查看文件列表:

    ls

    输出如下:

    Eddie.txt

    root.txt文件已经被普通用户Eddie删除。这是不对的,我们希望只有用户的创建者才能删除自身的文件。那么就可以使用sticky粘滞位来标记这个文件。

  6. 修改data目录的权限

    chmod o+t /data/

    查看执行指令之后data目录的权限:

    drwxrwxrwt    2 root root  4096 Dec 20 18:24 data

    根据ugo权限体系,在o部分的执行权限位置为t

  7. root再去data目录中新建一个文件

    //这里root用户要切换到/data目录中
    touch root.txt
  8. 切换到普通用户,再出尝试删除root用户创建的文件

    //这里要切换到Eddie用户,并且切换到/data目录中
    rm -rf root.txt

    输出如下:

    rm: cannot remove 'root.txt': Operation not permitted

粘滞位保护了共享目录中,不同用户之间不能互相删除对方的文件。

su 和 sudo

su

su 全称switch user.

  1. 用户切换

    //root用户可以很方便的切换到任意用户
    su - _userName
    
    //退出,又回到root用户
    exit
  2. 普通用户切换到root用户需要输入root用户密码

    su - root

不带-也是可以的,带-的话,就是切换完用户之后,直接到用户家目录下,不带-就不是家目录。

sudo

sudo全称是:super do。它的作用是用于授权的。就是赋予普通用户更高级的权限。原因是很多的操作,如果都需要root用户去做,太麻烦了。所以给普通用户做一些授权,普通用户操作就方便了。授权就需要用到sudosudo并不是直接给普通用户所有权限,而是一个命令一个命令的授权。

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,组合起来是牛的意思)时产生了竞争条件。恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问,所以大家都管这个提权方式叫做脏牛提权。原理这一块大家不需要掌握,会监测是否存在这个漏洞即可。