15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > [Linux 安全运维] 第三章 Linux 用户以及权限管理

[Linux 安全运维] 第三章 Linux 用户以及权限管理

时间:2023-06-26 10:54:01 | 来源:网站运营

时间:2023-06-26 10:54:01 来源:网站运营

[Linux 安全运维] 第三章 Linux 用户以及权限管理:命令速查:

/etc/passwd 存储用户信息的文件/etc/shadow 存储用户密码信息文件/etc/group 存储了组信息/etc/sudoers sudo 命令配置文件groupadd 添加组 -g 指定组IDgroupmod 修改组的属性groupdel 删除组useradd 添加用户 -u 指定uid 号 -g 指定基本组 -G 指定附加组 -s 指定用户登录的命令解释器 -s /sbin/nologin -s /bin/bash -M 不创建家目录usermod 更新用户信息userdel 删除用户 -r 删除用户时,同时删除家目录passwd 修改用户密码 -S 查看用户密码状态 -l 锁定用户 -u 解锁用户chage 修改密码过期时间 -M 修改密码最长有效期为多少天ln -s /tmp/ajest.txt /root/Desktop/ajest.txt 将/tmp/ajest.txt 文件创建快捷方式到/root/Desktop/ajest.txtchmod 修改文件或者目录的权限 u-r 撤销读权限 u-w 撤销写权限 o=--- 其他用户权限全部撤销 o-r 撤销其他用户列出目录的权限 o=rwx 修改其他用户的权限 g=--- 修改所属组的权限chmod 1777 /tmp/ 对目录设置粘滞位chmod 2777 /tmp/rootDir 对目录设置sgid 标识chown root /tmp/ajestDir/ajest.txt 修改文件所属者为rootls -ld /tmp/rootDir/ 查看目录的权限sudo 以其他用户身份执行命令su 切换用户

Linux 用户和组

用户分类:

用户信息文件

/etc/passwd 文件中存储了所有用户信息。

passwd 格式

该文件每一行是一个用户信息,并且以: 为分隔符,一共7 段内容。

root:x:0:0:root:/root:/bin/bash[--] - - - [--] [---] [--------] | | | | | | | | | | | | | +-> 7. Login shell | | | | | +---------> 6. Home directory | | | | +---------------> 5. GECOS | | | +-------------------> 4. GID | | +---------------------> 3. UID | +-----------------------> 2. Password +---------------------------> 1. Username
字段序号示例解释说明
1root用户名
2x密码占位符用户的密码
x 代表有密码
无内容,用户登录系统无需密码
30UID当前用户的身份标识
0 就是超级管理员
40GID当前用户的基本组ID
5root用户的身份信息
大名
现已废弃
6/root用户家目录超管:/root
普通用户:/home/用户名
7/bin/bash用户登录系统后
(默认)命令解释器
/sbin/nologin 不允许登录系统
/bin/sh
[root@localhost ~]# id rootuid=0(root) gid=0(root) groups=0(root)[root@localhost ~]#

用户分类

用户分类UID
普通用户> 1000
程序用户1 - 1000
超级管理员用户0

用户密码文件

/etc/shadow 记录了系统中用户的密码信息。

shadow 格式

该文件每一行记录一个用户的密码信息,并且以: 作为分隔符,一共9 段内容。

可以尝试修改root 密码。

root:$6$.IOzaCZc$f.u0fVe5QZb0mhm6UZvjcfa.un7vRXw8frfyoURLrOHmo7JsTI40a/iaQuHm/uCFqRuljfAyBCJDvOk7ZsCEM.:18765:0:99999:7:::passwd rootroot:$6$T07ge8Py$.tZXOZIOpWq2sGZKEkKn2KMahL.mcyNrQrd3C3PIqNt8kA0p/K3JtG4Dwn4vyU2kSvyEg1K2xArTs61AG1Qo1/:18766:0:99999:7:::
字段序号示例含义说明
1root用户名
2$6$T07ge8密码密文sha-512 HASH 散列算法
salt 值
加密后的密文
318766密码修改时间距离1970 年1 月1 日
密码最近一次的修改时间(天)
40密码最短有效期在最短有效期之内不能修改密码
3:三天之内不可以修改自己的密码
root 用户不受此限制
599999密码最长有效期密码可以使用多长时间
建议设置成90 天
67密码过期时间密码过期前7 天会有警告提示
7密码的不活跃期过了密码有效期没有修改密码,
处于不活跃期,仍然可以登录系统。
8账户失效时间密码距离1970 年1 月1 日的失效时间(天)
9未分配功能
| 正常登录系统 | 仍然可以登录系统 |0 用户不能修改密码 3 用户可以修改密码 83 提示修改密码 90 登录 密码锁定|---------------------|------------------|--------------|---------|-------------->^ ^ ^ ^ ^密码修改时间 密码最短有效期 密码过期时间 密码最长有效期 密码不活跃期

shadow 爆破

密码密文:

$6$T07ge8Py$.tZXOZIOpWq2sGZKEkKn2KMahL.mcyNrQrd3C3PIqNt8kA0p/K3JtG4Dwn4vyU2kSvyEg1K2xArTs61AG1Qo1/$id$salt$encrypted$加密方式$盐值(随机的)$密码密文密码密文加密方式:

man cryptshadow 文件爆破原理:

[root@localhost ~]# pythonPython 2.7.5 (default, Apr 11 2018, 07:36:10)[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import crypt>>> crypt.crypt("123.com","$6$T07ge8Py")'$6$T07ge8Py$3/./MkHtBbziE5UiB/PvR0vkcwtvCoV0G2uYuFfIpbDleXrPJ0BPPNkFZfOY1iTsap.pdxaMrkyXJ/jQ5nxiH0'>>> crypt.crypt("123456","$6$T07ge8Py")'$6$T07ge8Py$JFrusYYpGVwWWiqt99Zjs1SJ6h0k.68kigzB5RIswP64SvGeGTY5MlpSwuThUw3dPKcUT214xnReGwPvlbjU41'>>>

组信息文件

/etc/group 保存了组信息。

group 格式

该文件的每一行记录了每一个组的信息,并且以: 作为分隔符,一共4 段内容。

ajest:x:1000:ajest
字段数示例含义说明
1ajest组名用户组的名称,由字母或数字构成。
2x密码x 是密码标识,
组密码默认保存在 /etc/gshadow 文件中。
31000GIDGroup ID
4ajest群组用户

组与用户

先有组,再有用户:

一个用户可以有多个附加组。

基本组内没有任何用户,才能被删除。

组与用户管理

组管理

组管理,主要包括如下操作:

建立组

建立组使用groupadd 命令。涉及的选项有:

新建class01 组:

[root@localhost ~]# groupadd class01[root@localhost ~]# tail -1 /etc/groupclass01:x:1001:[root@localhost ~]#新建class01 组,指定gid 为3000:

[root@localhost ~]# groupadd class01 -g 3000[root@localhost ~]# tail -1 /etc/groupclass01:x:3000:[root@localhost ~]#

更新组信息

可以使用groupmod 命令更新组信息。

修改class01 组的gid 为2000:

[root@localhost ~]# groupmod class01 -g 2000[root@localhost ~]# tail -1 /etc/groupclass01:x:2000:[root@localhost ~]#

删除组

使用groupdel 命令可以删除组。

删除class01 组:

[root@localhost ~]# groupdel class01[root@localhost ~]#

用户管理

用户管理操作,主要包括:

建立用户

可以通过useradd 命令创建用户,在创建用户的时候,可以通过选项指定用户基本信息,主要选项有:

新建tom 用户:

[root@localhost ~]# useradd tom[root@localhost ~]# id tomuid=1001(tom) gid=1001(tom) groups=1001(tom)[root@localhost ~]# tail -1 /etc/grouptom:x:1001:[root@localhost ~]#由以上命令结果可知,在创建tom 用户时,没有指定基本组,Linux 创建了一个名为tom 的组。可以通过查看日志,印证观察到的结果。

[root@localhost ~]# grep "tom" /var/log/secure Feb 23 11:44:23 localhost useradd[57489]: new group: name=tom, GID=1001Feb 23 11:44:23 localhost useradd[57489]: new user: name=tom, UID=1001, GID=1001, home=/home/tom, shell=/bin/bash[root@localhost ~]#

修改用户基本信息

可以通过usermod 命令修改用户基本信息,包括UID、基本组、附加组等。

修改tom 用户UID 为1500:

[root@localhost ~]# usermod tom -u 1500[root@localhost ~]# id tomuid=1500(tom) gid=1001(tom) groups=1001(tom)[root@localhost ~]#修改基本组为class01:

[root@localhost ~]# usermod tom -g class01[root@localhost ~]# id tomuid=1500(tom) gid=2000(class01) groups=2000(class01)[root@localhost ~]#修改附加组为class02:

[root@localhost ~]# groupadd class02[root@localhost ~]# usermod tom -G class02[root@localhost ~]# id tomuid=1500(tom) gid=2000(class01) groups=2000(class01),2001(class02)[root@localhost ~]#

删除用户

使用userdel 可以删除用户。默认情况下,创建用户的时候,会自动在/home 目录中,创建同名目录作为家目录,删除用户的时候,用户家目录,不会被删除。可以通过-r 选项,在删除用户的同时,删除用户家目录。

删除tom 用户,并删除其家目录:

[root@localhost ~]# ls /home/ajest tom[root@localhost ~]# userdel -r tomuserdel: group tom not removed because it is not the primary group of user tom.[root@localhost ~]# ls /homeajest[root@localhost ~]# id tomid: tom: no such user[root@localhost ~]#

用户密码管理

查看用户密码状态

[root@localhost ~]# passwd -S AJESTAJEST LK 2023-02-23 0 99999 7 -1 (Password locked.)[root@localhost ~]#由以上信息可知有AJEST 用户,用户信息如下:

状态值说明
AJEST用户名
LK密码状态:
LK,密码锁定
NP,没有密码
* PS,有可用密码
2023-02-23创建时间
密码最近一次修改时间
0最短有效期
99999最长有效期
7警告时间:
* 密码过期前7 天警告
-1失效时间:
* -1 表示没有失效时间
补充命令:

passwd -d AJEST 删除AJEST 用户密码

设置用户密码

[root@localhost ~]# passwd AJEST Changing password for user AJEST.New password: BAD PASSWORD: The password is shorter than 8 charactersRetype new password: passwd: all authentication tokens updated successfully.[root@localhost ~]# passwd -S AJESTAJEST PS 2023-02-23 0 99999 7 -1 (Password set, SHA512 crypt.)[root@localhost ~]# grep "^AJEST" /etc/shadowAJEST:$6$MzB2AgMk$/EDXAAvDD6eOMmoRl2Qn4Ru3MR9qNkuNQTRPxuZKAdqtBUIlJBaqs4QG7Apj8ZRDBEFHsBYOiSnvmOaJA8nr30:19411:0:99999:7:::[root@localhost ~]#

锁定用户

[root@localhost ~]# passwd -l AJEST Locking password for user AJEST.passwd: Success[root@localhost ~]# passwd -S AJEST AJEST LK 2023-02-23 0 99999 7 -1 (Password locked.)[root@localhost ~]# grep "^AJEST" /etc/shadowAJEST:!!$6$MzB2AgMk$/EDXAAvDD6eOMmoRl2Qn4Ru3MR9qNkuNQTRPxuZKAdqtBUIlJBaqs4QG7Apj8ZRDBEFHsBYOiSnvmOaJA8nr30:19411:0:99999:7:::[root@localhost ~]#

解锁账户

[root@localhost ~]# passwd -S AJEST AJEST LK 2023-02-23 0 99999 7 -1 (Password locked.)[root@localhost ~]# passwd -u AJEST Unlocking password for user AJEST.passwd: Success[root@localhost ~]# passwd -S AJEST AJEST PS 2023-02-23 0 99999 7 -1 (Password set, SHA512 crypt.)[root@localhost ~]# grep "^AJEST" /etc/shadowAJEST:$6$MzB2AgMk$/EDXAAvDD6eOMmoRl2Qn4Ru3MR9qNkuNQTRPxuZKAdqtBUIlJBaqs4QG7Apj8ZRDBEFHsBYOiSnvmOaJA8nr30:19411:0:99999:7:::[root@localhost ~]#

权限管理

Linux 系统中,通过ls -lh 命令查看文件或目录的权限。Linux 权限管理,包括调整文件或目录的权限。

权限分析

[root@localhost ~]# ls -lh...drwxr-xr-x. 2 root root 137 Feb 23 10:25 Desktop...-rw-r--r--. 1 root root 1.8K Feb 20 17:50 initial-setup-ks.cfg...[root@localhost ~]#ls -lh 命令结果中,每一行以空格为分隔符分为9 个字段(列)。

字段数例子说明
1drwxr-xr-x.文件或目录权限
22如果文件类型是文件,表示文件的节点数
如果文件类型是目录,表示子目录的个数
3root所有者的名字
4root所有组的名字
5137文件大小
注意:不是目录的大小。
6
7
8
Feb
23
10:25
文件最后一次修改时间
9Desktop文件或者目录的名字

权限表达

文件或目录权限,以含义分隔,分为5 个字段(列)。

d rwx r-x r-x .
字段数示例含义说明
1d文件类型- 文件
d 目录
l 符号链接
c 字符型设备
b 块设备
2rwx所有者权限u 所有者
3r-x所属组的权限g 所属组
4r-x其他用户的权限o 其他用户
5.
权限表达方式说明:

权限文件目录
r读取文件内容列出目录内容
w修改文件内容创建、删除目录中的文件
x执行程序或脚本可以进入该目录

权限验证

[root@localhost ~]# su - ajestLast login: Fri Feb 24 09:51:06 CST 2023 on :0[ajest@localhost ~]$ touch /tmp/ajest.txt[ajest@localhost ~]$ echo "i love linux" >> /tmp/ajest.txt [ajest@localhost ~]$ cat /tmp/ajest.txt i love linux[ajest@localhost ~]$ /tmp/ajest.txt-bash: /tmp/ajest.txt: Permission denied[ajest@localhost ~]$ ls -l /tmp/ajest.txt -rw-rw-r-- 1 ajest ajest 13 Feb 24 09:57 /tmp/ajest.txt[ajest@localhost ~]$

八进制赋权法

八进制赋权法,即用八进制数表达文件或者目录的权限,这种表达方式精炼方便。

权限位2 进制8 进制
---0000
--x0011
-w-0102
-wx0113
r--1004
r-x1015
rw-1106
rwx1117
常见权限:

权限修改

chmod

chmod 命令有固定的使用格式,如下:

chmod 对象 运算符号 权限 文件或者目录权限运算说明:

对象运算符号权限
u
g
o
a
+
-
=
r
w
x
t
s

文件权限演变

撤销所有者读权限:

[ajest@localhost ~]$ ls -l /tmp/ajest.txt -rw-rw-r-- 1 ajest ajest 13 Feb 24 09:57 /tmp/ajest.txt[ajest@localhost ~]$ chmod u-r /tmp/ajest.txt [ajest@localhost ~]$ cat /tmp/ajest.txt cat: /tmp/ajest.txt: Permission denied[ajest@localhost ~]$ ls -l /tmp/ajest.txt --w-rw-r-- 1 ajest ajest 13 Feb 24 09:57 /tmp/ajest.txt[ajest@localhost ~]$测试写权限:

[ajest@localhost ~]$ echo "can i do it?" >> /tmp/ajest.txt [ajest@localhost ~]$撤销写权限:

[ajest@localhost ~]$ chmod u-w /tmp/ajest.txt [ajest@localhost ~]$ echo "can i do it?" >> /tmp/ajest.txt -bash: /tmp/ajest.txt: Permission denied[ajest@localhost ~]$ ls -l /tmp/ajest.txt ----rw-r-- 1 ajest ajest 26 Feb 24 09:59 /tmp/ajest.txt[ajest@localhost ~]$思考:

[root@localhost ~]# cat /tmp/ajest.txt i love linuxcan i do it?[root@localhost ~]#权限从左向右匹配,先匹配,先生效。

目录权限演变

切换root 用户,并且创建目录/tmp/rootdir/。

[root@localhost ~]# mkdir /tmp/rootdir[root@localhost ~]# ls -ld /tmp/root-rw-r--r-- 1 root root 13 Feb 24 09:55 /tmp/root[root@localhost ~]#新建文件/tmp/rootdir/root.txt,并输入内容“this is from root”。

[root@localhost ~]# echo "this is from root" >> /tmp/rootdir/root.txt[root@localhost ~]# ls /tmp/rootdir/root.txt[root@localhost ~]#切换ajest 用户,尝试进入目录/tmp/rootdir/,并新建文件ajest.txt,内容为“this is from ajest”。

[root@localhost ~]# su - ajestLast login: Fri Feb 24 09:56:34 CST 2023 on pts/0[ajest@localhost ~]$ cd /tmp/rootdir/[ajest@localhost rootdir]$ echo "this is from ajest" >> ajest.txt-bash: ajest.txt: Permission denied[ajest@localhost rootdir]$ ls -ld /tmp/rootdir/drwxr-xr-x 2 root root 22 Feb 24 10:05 /tmp/rootdir/[ajest@localhost rootdir]$发现操作无法完成,报错信息为权限不允许,查看目录权限可知,其他用户对该目录没有写权限,也就是说,其他用户不能在该目录中,创建、删除文件。

切换root 用户,修改其他用户对目录/tmp/rootdir 的权限为0。

[root@localhost ~]# ls -ld /tmp/rootdir/drwxr-xr-x 2 root root 22 Feb 24 10:05 /tmp/rootdir/[root@localhost ~]# chmod o=--- /tmp/rootdir/[root@localhost ~]# su - ajestLast login: Fri Feb 24 10:07:44 CST 2023 on pts/0[ajest@localhost ~]$ cd /tmp/rootdir/-bash: cd: /tmp/rootdir/: Permission denied[ajest@localhost ~]$ ls -ld /tmp/rootdir/drwxr-x--- 2 root root 22 Feb 24 10:05 /tmp/rootdir/[ajest@localhost ~]$查看/root/rootdir 目录权限,发现其他用户对该目录权限为0,没有执行权限,即其他用户不能进入该目录。

调整/root/rootdir 目录权限,调整其他用户对该目录的权限为7:

[root@localhost ~]# chmod o=rwx /tmp/rootdir/[root@localhost ~]# su - ajestLast login: Fri Feb 24 10:12:46 CST 2023 on pts/0[ajest@localhost ~]$ echo "this is from ajest" >> /tmp/rootdir/ajest.txt[ajest@localhost ~]$ ls /tmp/rootdir/ajest.txt root.txt[ajest@localhost ~]$ rm -rf /tmp/rootdir/ajest.txt [ajest@localhost ~]$ echo "this is from ajest" >> /tmp/rootdir/root.txt -bash: /tmp/rootdir/root.txt: Permission denied[ajest@localhost ~]$ rm -rf /tmp/rootdir/root.txt [ajest@localhost ~]$ ls /tmp/rootdir/[ajest@localhost ~]$

文件所属

除了对文件权限进行调整以外,还可以调整文件的所有者。

chown

可以通过chown 命令,修改文件所有者,命令格式如下:

chown 修改后的所属者 目标文件或者目录常用命令选项:

修改文件所属者

切换到ajest 用户,创建目录/tmp/ajestdir/,并在目录中新建文件ajest.txt,内容为“My Name is AJEST”:

[ajest@localhost ~]$ whoamiajest[ajest@localhost ~]$ mkdir /tmp/ajestdir/[ajest@localhost ~]$ echo "My Name is AJEST" >> /tmp/ajestdir/ajest.txt[ajest@localhost ~]$ ls -ld /tmp/ajestdir/drwxrwxr-x 2 ajest ajest 23 Feb 24 09:39 /tmp/ajestdir/[ajest@localhost ~]$ ls -l /tmp/ajestdir/ajest.txt -rw-rw-r-- 1 ajest ajest 17 Feb 24 09:39 /tmp/ajestdir/ajest.txt[ajest@localhost ~]$切换root 用户,将文件/tmp/ajestdir/ajest.txt 的所有者修改为root:

[root@localhost ~]# chown root /tmp/ajestdir/ajest.txt [root@localhost ~]# ls -l /tmp/ajestdir/ajest.txt -rw-rw-r-- 1 root ajest 17 Feb 24 09:39 /tmp/ajestdir/ajest.txt[root@localhost ~]#切换ajest 用户,尝试向文件/tmp/ajestdir/ajest.txt 追加内容“Can I do it?”:

[root@localhost ~]# su - ajestLast login: Thu Feb 23 17:31:10 CST 2023 on pts/0[ajest@localhost ~]$ echo "Can I do it?" >> /tmp/ajestdir/ajest.txt [ajest@localhost ~]$ cat /tmp/ajestdir/ajest.txt My Name is AJESTCan I do it?[ajest@localhost ~]$由以上命令结果可知,即使将文件/tmp/ajestdir/ajest.txt 的所有者修改为root,ajest 用户依然可以向该文件中追加内容,这是为什么呢?注意到,对该文件拥有写权限的,除了所有者,还有所属组,然而ajest 用户在所属组ajest 中,所以ajest 用依然对该文件有写权限。

将文件/tmp/ajestdir/ajest.txt 文件所属组的权限调整为0,再次测试ajest 是否可以向该文件中追加内容。

[root@localhost ~]# chmod g=--- /tmp/ajestdir/ajest.txt [root@localhost ~]# ls -l /tmp/ajestdir/ajest.txt -rw----r-- 1 root ajest 30 Feb 24 09:43 /tmp/ajestdir/ajest.txt[root@localhost ~]# su - ajestLast login: Fri Feb 24 09:43:12 CST 2023 on pts/0[ajest@localhost ~]$ echo "Can I do it?" >> /tmp/ajestdir/ajest.txt -bash: /tmp/ajestdir/ajest.txt: Permission denied[ajest@localhost ~]$

特殊权限

粘滞位

粘滞位对目录有效,在具备粘滞位旗标的目录中创建的文件,只有所有者能够删除。

切换用户ajest,创建文件/tmp/ajest.txt。切换用户AJEST,创建文件/tmp/AJEST.txt。尝试在AJEST 用户下删除文件/tmp/AJEST.txt。

[root@localhost ~]# su - ajestLast login: Fri Feb 24 10:33:45 CST 2023 on pts/0[ajest@localhost ~]$ touch /tmp/ajest.txt[ajest@localhost ~]$ ls -l /tmp/ajest.txt -rw-rw-r-- 1 ajest ajest 0 Feb 24 10:34 /tmp/ajest.txt[ajest@localhost ~]$ exitlogout[root@localhost ~]# su - AJESTLast login: Thu Feb 23 15:47:21 CST 2023 on pts/0[AJEST@localhost ~]$ touch /tmp/AJEST.txt[AJEST@localhost ~]$ ls -l /tmp/AJEST.txt -rw-r--r-- 1 AJEST class01 0 Feb 24 10:35 /tmp/AJEST.txt[AJEST@localhost ~]$ rm -rf /tmp/ajest.txt rm: cannot remove ‘/tmp/ajest.txt’: Operation not permitted[AJEST@localhost ~]$撤销目录/tmp/ 的粘滞位权限,切换用户ajest,尝试删除文件/tmp/AJEST.txt。

[root@localhost ~]# su - ajestLast login: Mon Feb 27 09:21:19 CST 2023 on pts/0[ajest@localhost ~]$ find / -name "name.txt"find: ‘/run/user/0/gvfs’: Permission denied[ajest@localhost ~]$ find / -name "root.txt"find: ‘/run/user/0/gvfs’: Permission denied/tmp/rootdir/root.txt[ajest@localhost ~]$ chmod u-s /usr/bin/findchmod: changing permissions of ‘/usr/bin/find’: Operation not permitted[ajest@localhost ~]$ exitlogout[root@localhost ~]# chmod u-s /usr/bin/find[root@localhost ~]# su - ajestLast login: Mon Feb 27 10:40:05 CST 2023 on pts/0[ajest@localhost ~]$ find / -name "root.txt"...find: ‘/tmp/rootdir’: Permission denied...

SGID

特殊权限位SGID,对目录有效,其含义是在目录中建立的文件或目录的属组会继承父目录的属组。

创建目录/tmp/rootdir/,调整所有人对该目录的权限为7,给该目录这是sgid 权限。

[root@localhost ~]# mkdir /tmp/rootdir[root@localhost ~]# ls -ld /tmp/rootdir/drwxr-xr-x 2 root root 6 Feb 27 09:11 /tmp/rootdir/[root@localhost ~]# chmod a=rwx /tmp/rootdir/[root@localhost ~]# chmod g+s /tmp/rootdir/[root@localhost ~]# ls -ld /tmp/rootdir/drwxrwsrwx 2 root root 6 Feb 27 09:11 /tmp/rootdir/[root@localhost ~]#切换用户ajest,新建文件/tmp/rootdir/ajest.txt。

[root@localhost ~]# su - ajestLast login: Fri Feb 24 10:39:32 CST 2023 on pts/0[ajest@localhost ~]$ touch /tmp/rootdir/ajest.txt[ajest@localhost ~]$ ls -l /tmp/rootdir/ajest.txt -rw-rw-r-- 1 ajest root 0 Feb 27 09:14 /tmp/rootdir/ajest.txt[ajest@localhost ~]$可以通过2777 参数设置sgid 特殊权限位。

[root@localhost ~]# mkdir /tmp/rootdir[root@localhost ~]# ls -ld /tmp/rootdir/drwxr-xr-x 2 root root 6 Feb 27 09:21 /tmp/rootdir/[root@localhost ~]# chmod 2777 /tmp/rootdir/[root@localhost ~]# ls -ld /tmp/rootdir/drwxrwsrwx 2 root root 6 Feb 27 09:21 /tmp/rootdir/[root@localhost ~]#

SUID

特殊权限位SUID,对可执行文件有效。当一个可执行文件具有SUID 标志,无论哪个用户运行该文件(命令),谁就具有该文件所有者的权限。

查找find 命令,并赋予其suid 权限。

[root@localhost ~]# which find/usr/bin/find[root@localhost ~]# ls -l /usr/bin/find-rwxr-xr-x. 1 root root 199200 Nov 20 2015 /usr/bin/find[root@localhost ~]# chmod u+s /usr/bin/find [root@localhost ~]# ls -l /usr/bin/find-rwsr-xr-x. 1 root root 199200 Nov 20 2015 /usr/bin/find[root@localhost ~]#调整目录/tmp/rootdir/ 权限,并创建文件/tmp/rootdir/root.txt。

[root@localhost ~]# chmod g-s /tmp/rootdir/[root@localhost ~]# ls -ld /tmp/rootdir/drwx------ 2 root root 6 Feb 27 09:21 /tmp/rootdir/[root@localhost ~]# touch /tmp/rootdir/root.txt[root@localhost ~]#切换用户ajest,在根目录中查找文件root.txt。

root@localhost ~]# su - ajestLast login: Mon Feb 27 09:21:19 CST 2023 on pts/0[ajest@localhost ~]$ find / -name "root.txt"find: ‘/run/user/0/gvfs’: Permission denied/tmp/rootdir/root.txt[ajest@localhost ~]$ exitlogout[root@localhost ~]# chmod u-s /usr/bin/find[root@localhost ~]# su - ajestLast login: Mon Feb 27 10:40:05 CST 2023 on pts/0[ajest@localhost ~]$ find / -name "root.txt"...find: ‘/tmp/rootdir’: Permission denied...SUID 提权:

[root@localhost ~]# su - ajestLast login: Mon Feb 27 10:41:41 CST 2023 on pts/0[ajest@localhost ~]$ ls -l /usr/bin/find-rwsr-xr-x. 1 root root 199200 Nov 20 2015 /usr/bin/find[ajest@localhost ~]$ man find[ajest@localhost ~]$ find / -perm -4000find: ‘/proc/9079/task/9079/fd/5’: No such file or directoryfind: ‘/proc/9079/task/9079/fdinfo/5’: No such file or directoryfind: ‘/proc/9079/fd/6’: No such file or directoryfind: ‘/proc/9079/fdinfo/6’: No such file or directoryfind: ‘/run/user/0/gvfs’: Permission denied/usr/bin/find/usr/bin/fusermount/usr/bin/ksu/usr/bin/chfn/usr/bin/chsh/usr/bin/chage/usr/bin/gpasswd/usr/bin/passwd/usr/bin/newgrp/usr/bin/staprun/usr/bin/su/usr/bin/Xorg/usr/bin/umount/usr/bin/mount/usr/bin/pkexec/usr/bin/crontab/usr/bin/sudo/usr/bin/at/usr/sbin/pam_timestamp_check/usr/sbin/unix_chkpwd/usr/sbin/usernetctl/usr/sbin/userhelper/usr/sbin/mount.nfs/usr/lib/polkit-1/polkit-agent-helper-1/usr/libexec/abrt-action-install-debuginfo-to-abrt-cache/usr/libexec/flatpak-bwrap/usr/libexec/dbus-1/dbus-daemon-launch-helper/usr/libexec/sssd/krb5_child/usr/libexec/sssd/ldap_child/usr/libexec/sssd/selinux_child/usr/libexec/sssd/proxy_child/usr/libexec/spice-gtk-x86_64/spice-client-glib-usb-acl-helper/usr/libexec/qemu-bridge-helper[ajest@localhost ~]$ find /tmp/rootdir/ -exec whoami /;rootroot[ajest@localhost ~]$

注意

sudo 权限控制

Linux 是多用户多任务的分时操作系统,共享该系统的用户往往不只一个。考虑到root 账户密码的敏感性和root 账号的无限制权限,有必要采取如下措施:

sudo 命令就是来解决这个需求的。

sudo

sudo 执行流程

一般情况下,使用sudo 都是在申请root 用户身份特权执行某一个命令,要求输入密码时,输入的是当前用户密码。

具体某一个用户可以以哪一个用户身份执行某一个命令,是需要配置的。

sudoers

配置文件/etc/sudoers 是sudo 命令的配置文件,编辑该文件需要使用专用的编辑器visudo。visudo 用法与vim 类似。

典型配置文件格式:

[root@localhost ~]# grep -n "^root" /etc/sudoers92:root ALL=(ALL) ALL[root@localhost ~]#配置文件sudoers 关于权限的配置,大概分为5 个字段,具体含义如下:

示例字段含义
root1授权用户| 组
ALL2主机
(ALL:ALL)3用户:组
授权用户可以以此用户身份特权执行命令。
NOPASSWD:4是否需要输入密码验证
ALL5命令1,命令2,...
配置示例,用户ajest 可以以登录在任何地址的任何用户身份特权执行whoami 和id 命令,并且没有密码保护。

[root@localhost ~]# grep -n "^ajest" /etc/sudoers1:ajest ALL=(ALL:ALL) NOPASSWD: /usr/bin/whoami, /usr/bin/id[root@localhost ~]#

测试命令

[ajest@localhost ~]$ sudo -lMatching Defaults entries for ajest on localhost: !visiblepw, always_set_home, match_group_by_gid, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin/:/bin/:/usr/sbin/:/usr/binUser ajest may run the following commands on localhost: (ALL : ALL) NOPASSWD: /usr/bin/whoami, /usr/bin/id[ajest@localhost ~]$ sudo iduid=0(root) gid=0(root) groups=0(root)[ajest@localhost ~]$ sudo ls /home/[sudo] password for ajest: ^C[ajest@localhost ~]$

CVE-2019-14287

sudoer 配置

如果有如下配置:

[root@localhost ~]# grep -n "^ajest" /etc/sudoers1:ajest ALL=(ALL, !root) /usr/bin/whoami, /usr/bin/id[root@localhost ~]#

漏洞触发

[ajest@localhost ~]$ sudo -lMatching Defaults entries for ajest on localhost: !visiblepw, always_set_home, match_group_by_gid, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin/:/bin/:/usr/sbin/:/usr/binUser ajest may run the following commands on localhost: (ALL, !root) /usr/bin/whoami, /usr/bin/id[ajest@localhost ~]$ sudo -u AJEST iduid=1500(AJEST) gid=2000(class01) groups=2000(class01),2001(class02)[ajest@localhost ~]$ sudo -u root idSorry, user ajest is not allowed to execute '/bin/id' as root on localhost.localdomain.[ajest@localhost ~]$ sudo -u#1500 iduid=1500(AJEST) gid=2000(class01) groups=2000(class01),2001(class02)[ajest@localhost ~]$ sudo -u#0 idSorry, user ajest is not allowed to execute '/bin/id' as root on localhost.localdomain.[ajest@localhost ~]$ sudo -u#-1 iduid=0(root) gid=1000(ajest) groups=1000(ajest)[ajest@localhost ~]$

关键词:权限,管理,用户,安全

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭