目录
一、用户与组管理命令
1.1 用户分类与UID范围
在 CentOS/RHEL 7 中,⽤户分为三类:
- 管理员⽤户 ( root ): UID 0 ,系统中权限最⾼的⽤户,能够管理系统的所有资源。
- 系统⽤户: UID 1-999 ,⽤于系统进程和服务的账户,不能直接⽤于⽤户登录。系统⽤户⽤于运⾏后台服务或守护进程,确保系统的各项服务隔离运⾏。
- 普通⽤户: UID 从 1000 开始 ,⽤于⽇常操作的普通⽤户,由系统管理员创建。普通⽤户可以登录系统,但权限有限,通常⽤于⾮系统管理任务。
1.2 用户管理命令
1.2.1 useradd
- 添加用户:使用useradd命令创建一个新用户:
常见参数:
- -u 指定UID
- -g 指定基本组
- -G 指定附加组 //⼀个⽤户⾄少有⼀个基本组,最多添加⼀个附加组
- -M 不需要家⽬录
- -s 指定登陆时的shell环境 /sbin/nologin 不能登陆
- -d 指定新⽤户每次登陆时 使⽤的家⽬录
- -e 指定⽤户中⽌时间 ,时间格式 YYY--MMM--DD
- -f ⽤户过期⼏天 后 永久停权 , 0 ⽤户到期后⽴刻停权 -1 关闭此功能
- -m ⾃动创建 ⽤户家⽬录
1.创建用户:
//创建新用户
[root@localhost bin]# useradd testuser1
//查看用户信息
[root@localhost bin]# cat /etc/passwd
root:x:0:0:root
//如果觉得上一种方式太杂乱,可以指定显示最后五个用户信息
[root@localhost bin]# tail -5 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
allen:x:1000:1000:allen:/home/allen:/bin/bash
saned:x:988:982:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
testuser1:x:1001:1001::/home/testuser1:/bin/bash
2.指定用户UID
[root@localhost bin]# useradd -u 5200 testuser2
//查看创建的组
[root@localhost bin]# cat /etc/group
……
testuser1:x:1001:
testuser2:x:5200:
- 注意:系统默认创建和UID相同的组,如果未指定UID则从默认1000以上开始往后排
3.不创建家目录并且禁止登陆
[root@localhost bin]# useradd -M -s /sbin/nologin testuser3
//-M 选项告诉 useradd 不要创建用户的主目录。
//-s /sbin/nologin 选项指定用户的登录 shell 为 /sbin/nologin,这意味着用户不能通过密码登录系统。
[root@localhost bin]# tail -5 /etc/passwd
allen:x:1000:1000:allen:/home/allen:/bin/bash
saned:x:988:982:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
testuser1:x:1001:1001::/home/testuser1:/bin/bash
testuser2:x:5200:5200::/home/testuser2:/bin/bash
testuser3:x:5201:5201::/home/testuser3:/sbin/nologin
[root@localhost home]# ls
allen testuser1 testuser2 //这里没有显示testuser3,禁止登陆
4.创建新用户并指定UID,指定组,shell类型为/bin/sh
[root@localhost home]# useradd -u 520 -s /bin/sh -G root testuser4
[root@localhost home]# tail -5 /etc/passwd
saned:x:988:982:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
testuser1:x:1001:1001::/home/testuser1:/bin/bash
testuser2:x:5200:5200::/home/testuser2:/bin/bash
testuser3:x:5201:5201::/home/testuser3:/sbin/nologin
testuser4:x:520:5202::/home/testuser4:/bin/sh
5.创建新用户并设置用户过期时间,过2天后停权,指定家目录
[root@localhost home]# useradd -e 2024-09-06 -f 2 -d/tmp/testuser5 -m testuser5
[root@localhost home]# chage -l testuser5
Last password change : Sep 06, 2024
Password expires : never
Password inactive : never
Account expires : Sep 06, 2024
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
1.2.2 groupadd
- 添加组: 使⽤ groupadd 命令创建⼀个新的⽤户组:
- 组(Group):每个⽤户都可以属于⼀个或多个组。组有助于控制⽤户对⽂件和资源的访问权限。⽂件或⽬录的权限不仅受⽤户身份控制,还受组身份控制。
- GID(组标识符):每个组都有唯⼀的 GID(组标识符)。管理员⽤户组的 GID 是 0,系统⽤户组的 GID 范围为 1-999,普通⽤户组的 GID 从 1000 开始。
创建的⼯作组 实际上 写⼊到 /etc/group ⽂本⽂件中
常见参数:
- -g 指定新建的⼯作组
- -r 创建系统⼯作组 , 系统⼯作组 1-999
- -o 允许添加组ID 不唯⼀ 的⼯作组
- -G 指定扩展组
1.新增用户,UID为1111,GID为8888
[root@localhost home]# groupadd -g 8888 ceo //创建工作组
[root@localhost home]# useradd -u 1111 -g 8888 testuser6
[root@localhost home]# id testuser6 //查看用户信息UID GID扩展组
uid=1111(testuser6) gid=8888(ceo) groups=8888(ceo)
2.新增用户,基本组root,扩展组ceo
[root@localhost home]# useradd -g root -G ceo testuser7
[root@localhost home]# id testuser7
uid=5203(testuser7) gid=0(root) groups=0(root),8888(ceo)
1.2.3 usermod
usermod 命令⽤于修改⽤户账户信息及其相关设置。它是管理现有⽤户的关键命令之⼀,可以⽤于修改⽤户的组、密码、登录 shell 等多种信息。
常见参数:
- -d 登陆⽬录 ,修改⽤户登⼊时的⽬录
- -e 有效期限 , 修改账号的有效期
- -f 缓存期 , 修改密码过期后的多少天 关闭账号
- -g 群组 , 修改⽤户基本组
- -G 群组 修改⽤户附加组
- -L ,锁定⽤户密码 , 使密码失效,⽤户不能登陆
- -s 修改⽤户登陆的shell 环境
- -u 修改⽤户的UID
- -U 解除密码锁定
- -l 修改⽤户名
1.更改登录目录
[root@localhost home]# mkdir /tmp/testuser1 //创建了一个名为 testuser1 的新目录在 /tmp 下
[root@localhost home]# usermod -d /tmp/testuser1 testuser1 //更改了 testuser1 用户的主目录为 /tmp/testuser1
[root@localhost home]# tail /etc/passwd | grep testuser1
testuser1:x:1001:1001::/tmp/testuser1:/bin/bash
//现在,testuser1 用户的主目录是 /tmp/testuser1,而不是原来的 /home/testuser1。这意味着当 testuser1 用户登录系统时,他们的家目录将是 /tmp/testuser1。
2.更改UID
[root@localhost home]# usermod -u 12345 testuser6
[root@localhost home]# tail /etc/passwd | grep testuser6
testuser6:x:12345:8888::/home/testuser6:/bin/bash
3.更改用户名为abc
[root@localhost home]# usermod -l abc testuser6
[root@localhost home]# tail /etc/passwd | grep testuser6
abc:x:12345:8888::/home/testuser6:/bin/bash
[root@localhost home]# tail /etc/passwd | grep abc
abc:x:12345:8888::/home/testuser6:/bin/bash
4.锁定与解锁用户名密码
[root@localhost home]# usermod -L abc
[root@localhost home]# usermod -U abc
1.2.4 userdel
命令来删除指定的⽤户及其相关⽂件。这个命令会从系统中删除⽤户账户
删除的⽂件包括 /etc/passwd /etc/group /etc/shadow
并且可以选择删除与该⽤户相关的所有⽂件(如⽤户的家⽬录和邮件)。
注意事项:
- 进⾏中的进程:如果⽤户当前正在运⾏某些进程,系统会阻⽌删除⽤户账户。可以使⽤ -f 选项强制删除账户,但这种操作需要谨慎,因为强制删除可能会影响正在运⾏的进程。
- ⽂件删除:使⽤ -r 选项可以删除⽤户的家⽬录以及该⽤户拥有的所有⽂件。如果不使⽤此选项,系统只会删除⽤户账户,但不会删除⽤户的家⽬录和⽂件
1.删除用户,但是不会删除用户的家目录和文件
[root@localhost home]# userdel testuser4
[root@localhost home]# tail /etc/passwd | grep testuser4
[root@localhost home]# ls /home | grep testuser4
testuser4
2.删除用户以及家目录和文件
[root@localhost home]# userdel -f testuser5
[root@localhost home]# tail /etc/passwd | grep testuser5
3.删除家目录,但是可以登录
[root@localhost home]# rm -rf /home/testuser3
[root@localhost home]# ls /home | grep testuser3
[root@localhost home]# cat /etc/passwd | grep testuser3
testuser3:x:5201:5201::/home/testuser3:/sbin/nologin //禁止登陆
1.3 组管理命令
1.3.1 groupdel
groupdel 命令来删除⽤户组。 groupdel 命令将会从系统中删除指定的组,但不会删除该组内的⽤户或其⽂件
注意事项:
- 组内的⽤户: groupdel 不会删除属于该组的⽤户。如果某个⽤户的基本组是被删除的组,删除操作将会失败。因此,在删除组之前,确保该组不再是任何⽤户的基本组。
- ⽂件权限: groupdel 不会更改由该组拥有的⽂件的权限。删除组后,⽂件的权限中仍可能显示该组的 GID(组标识符),但该 GID 不会再映射到任何组名。
如果想要删除组,在删除之前可以先检查是否有用户仍然属于该组,可以使用以下命令来检查:
grep developers /etc/passwd
//这将列出所有属于 developers 组的⽤户
如果某个⽤户的基本组是 developers , 可以使⽤ usermod 修改该⽤户的基本组,然后再删除该组:
usermod -g newgroup ⽤户名
- 使⽤ groupdel 命令删除组,但确保没有⽤户的基本组是该组。
- 删除组不会影响组内⽤户的⽂件和权限,只会删除该组本身。
1.3.2 查看密码文件 /etc/shadow
密码文件默认只有root用户才能查看,所以在进行之前需要提升权限:
1. root :⽤户名,表示该条记录是 root ⽤户的密码信息。
2. $6$ :表示使⽤ SHA-512 哈希算法对密码进⾏加密。
- 1gq8PHf :这是盐值(Salt),⽤于增强密码哈希的安全性,防⽌彩虹表攻击。
- 后面的一串 :这是通过 SHA-512 算法加密后的密码哈希值。
总结:
- root ⽤户的密码是使⽤ SHA-512 算法加密的,带有盐值。
- 密码可以随时修改,最⻓有效期为 99999 天(⼏乎永不过期)。
- 在密码过期前 7 天,系统会提醒⽤户。
- 没有设置账户失效⽇期和密码的宽限期。
1.3.4 passwd
- 如果不指定⽤户名, passwd 默认会修改当前⽤户的密码。
- 只有 root ⽤户可以修改其他⽤户的密码
常用参数:
- -d 删除密码
- -l 锁定⽤户密码 , ⽆法被⽤户⾃⾏修改
- -u 解锁 允许⾃⾏修改
- -e 密码⽴刻过期 , 下次登陆时 强制修改密码
- -k 保留过期⽤户 可以继续使⽤
- -S 查询密码状态
1.修改当前登陆的用户的密码
[root@localhost ~]# passwd
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
2.锁定用户密码,不能自行修改(管理员除外)
[root@localhost ~]# passwd -l testuser2
Locking password for user testuser2.
passwd: Success
//测试:切换用户尝试修改密码,失败,无法修改
Locking password for user testuser2.
passwd: Success
[root@localhost ~]# ^C
[root@localhost ~]# su testuser2
[testuser2@localhost root]$ passwd
Changing password for user testuser2.
Changing password for testuser2.
(current) UNIX password:
passwd: Authentication token manipulation error
3.解锁
[root@localhost ~]# passwd -u testuser2
Unlocking password for user testuser2.
passwd: Warning: unlocked password would be empty.
passwd: Unsafe operation (use -f to force)
[root@localhost ~]# passwd -f testuser2
Changing password for user testuser2.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
4.下次登陆强制修改密码
[root@localhost ~]# passwd -e testuser3
Expiring password for user testuser3.
passwd: Success
5.清除登陆密码,清除之后登陆时不再需要密码,可直接登录(高风险)
[root@localhost ~]# passwd -d testuser3
Removing password for user testuser3.
passwd: Success
6.查看密码状态
[root@localhost ~]# passwd -S root
root PS 2024-09-06 0 99999 7 -1 (Password set, SHA512 crypt.)
1.4 Linux密码暴力破解
假设 拿到了shadow⽂件 , 查到 root ⽤户 的hash 值 (混合了盐值)
暴⼒破解思路: 依次测试每个密码 + 盐值 ------ sha 算法 ----- > 得出带有盐值的hash 值
将哈希值 和 之前 shadow ⽂件中的 哈希值 对⽐ ⼀样则说明 破解成功
这种方法说白就是靠“猜”
[root@localhost ~]# python
Python 2.7.5 (default, Oct 30 2018, 23:45:53)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt
>>> crypt.crypt('123','$6$6i1X7QIf8B4zRGTs$')
'$6$6i1X7QIf8B4zRGTs$OT5SjkRsCewtqZna5HF5gl6eNG6wVkxvoolB7Tg8lqB7r9hm4/TjGfq1oyUJW9WmZFGutzHCmL7V5JGdKJHvL/'
>>> crypt.crypt('root','$6$6i1X7QIf8B4zRGTs$')
'$6$6i1X7QIf8B4zRGTs$sU5gtwRwEl8pgUFi8XPnJhFeWq7wHPupHK0xv5RXmGEPsyWUGKg7FVU8WlYEmogQaF1Glezu7MkTMmg4S2Vei/'
Hydra 是⼀个著名的⽹络服务暴⼒破解⼯具,⼴泛⽤于密码测试和⽹络服务的安全性评估。它⽀持对许多不同的协议(如 FTP、SSH、Telnet、SMTP 等)进⾏密码破解,并且具有很⾼的可扩展性,可以⽤于渗透测试中对远程服务进⾏密码攻击。
在 Kali Linux 中,Hydra 是预装的渗透测试⼯具之⼀。其强⼤的功能使其成为⽤于暴⼒破解⽹络服务的利器。
二、权限管理
2.1 文件与目录权限
权限符号:
- 读(r):表示可以读取文件内容或列出目录内容
- 写(w):表示可以修改文件内容或在目录中创建、删除文件
- 执行(x):表示可以执行文件(如果文件是可执行的程序或脚本),或者进入目录
在 Linux 中,文件和目录的权限通常用三组字符来表示,每组字符代表不同的用户类别:
- 所有者(Owner):文件的创建者,默认拥有对文件的控制权。
- 所属组(Group):文件的所属用户组。
- 其他人(Others):系统中除了文件所有者和所属组成员之外的所有用户
示例:
文件权限:
- rwx------:所有者可以读、写和执行,但其他人没有权限
- rw-r--r--:所有者可以读写,其他人只能读。
目录权限:
- rwxr-xr-x:所有者可以读、写、执行,其他人可以读和执行,但不能写入(不能在目录中创建或删除文件)
常用命令:
- ls:列出目录内容
- cat:查看文件内容
- vim:编辑文件
- touch:创建一个空文件
- cd:进入目录
注意:root用户的最高权限:即使文件的权限设置为---------(没有任何权限),root用户仍然可以读取、写入或执行文件。root用户在系统中拥有最高权限,不受普通权限限制
2.2 目录管理命令
2.2.1 chown
chown命令用于修改文件或目录的所有者和组
- 基本语法为 [所有者] : [所属组] 文件/目录
- 所有者:指文件的新拥有者用户
- 所属组:指文件的新用户组
- 如果 不想更改所属组,可以省略组信息
1.仅更改文件的所有者
[root@localhost Desktop]# chown allen file
将file的所有者更改为用户allen
2.更改目录的所有者和组
[root@localhost Desktop]# chown allen:developers file
//将file的所有者更改为allen,所属组更改为developers
3.递归更改目录的所有者和组
chown -R allen:developers /path/to/directory
//递归更改目录/path/to/directory及其所有子文件和子目录的所有者为allen,所属组为developers
4.只修改所有者
[root@localhost Desktop]# ll file
-rw-r--r--. 1 root root 0 Sep 4 17:54 file
[root@localhost Desktop]# chown allen file
[root@localhost Desktop]# ll file
-rw-r--r--. 1 allen root 0 Sep 4 17:54 file
5.只修改所有者和所属组
[root@localhost Desktop]# ll file
-rw-r--r--. 1 root root 0 Sep 4 17:54 file
[root@localhost Desktop]# chown allen:allen file
[root@localhost Desktop]# ll file
-rw-r--r--. 1 allen allen 0 Sep 4 17:54 file
6.只修改所属组
[root@localhost Desktop]# ll file
-rw-r--r--. 1 allen allen 0 Sep 4 17:54 file
[root@localhost Desktop]# chown :root file
[root@localhost Desktop]# ll file
-rw-r--r--. 1 allen root 0 Sep 4 17:54 file
7.将当前目录下所有内容所有者都修改为allen
chown -R allen *
2.2.2 chomd
chomd是Linux和Unix系统中用来修改文件和目录权限的命令。
1.添加权限:使用+来为所有者、组和其他人添加权限
chmod ugo + r 文件名
这个命令为文件的所有者(u)、组(g)、其他人(o)增加读取权限(r)
2.修改权限:可以同时对不同用户类别修改权限
chmod u-w,g+w,o+x 文件名
该命令:去掉所有者的写权限,正价所属组的写权限,增加其他用户的执行权限
//对于所有者,所属组和其他人都增加读权限
chmod ugo+r
chmod a+r
权限也可以用数字表示,将读、写、修改算作二进制中的三位,权限值为读4、写2、执行1,组合如下:
- rwx:111,即4+2+1=7
- rw-:6
- r-x:5
- 以此类推
将文件的权限 设置为所有者具有读写执行权限,组和其他人具有读取和执行权限
- chmod 755 文件名
将文件权限设置为所有者只读,组和其他人没有权限:
- chomd 400 文件名
2.3 特殊权限
2.3.1 SUID(Set User ID)
SUID是一种文件权限位,通常应用于可执行文件。当文件具有SUID位时,无论哪个用户执行这个文件,文件会以文件所有者(通常是root用户)的身份运行,而不是以当前执行用户的身份运行
对二进制程序设置的特殊权限,使二进制程序在执行的过程中临时拥有所属主的权限(仅对拥有执行权限的二进制有效,也就是说,只对可执行文件如.py等有效)
作用:
- 应用于可执行文件:SUID位只对可执行文件有意义,如果一个文件具有SUID位,那么当任何用户执行该文件时,文件将以文件拥有者的权限运行
- 常见示例:如/bin/passwd命令,密码文件需要超级用户权限才能修改,通过SUID,用户可以暂时以root权限执行
设置SUID:
- 使用命令chmod u+s filename 可以给文件添加SUID权限
- 使用命令chmod u-s filename可以移除权限
权限表示:
- 在文件的权限表中,设置SUID位出现在所有者(u)的执行位(x)的位置。如果SUID被设置,权限显示为s,如rwsr-xr-x
- 如果文件所有者没有执行权限但设置了SUID,权限显示为S,如rwSrw-r--
- 也就是说,如果本身有这个权限,则变成s,如果本身没有变成S
2.3.2 SGID(Set Group ID)
SGID是针对组权限的一种特殊位,应用于可执行文件和目录。他的作用取决于他是应用文件还是目录
作用:
- 在二进制文件上设置SGID:当某个二进制文件具有SGID权限时,普通用户执行该文件时,会临时获得该文件所属组的权限,而不是该用户自身的权限
- 在目录上设置SGID:SGID在目录上的作用与文件不同,设置SGID权限后,当用户在该目录中创建新文件或目录时,文件的所属组将继承该目录的所属组,而不是创建文件的用户的默认组
设置SGID:
- 使用chmod g+s filename 可以给文件或目录添加SGID权限
- 使用chmod g-s filename 可以移除SGID权限
权限表示:
- 在文件的权限列表中,SGID位出现在组执行位(x)的位置,如果SGID被设置,权限显示为s,如rwxr-sr-x
- 类似的,如果本来没有权限但设置了SGID,显示为S,如rw-r-Sr--
2.3.3 SBIT(Sticky Bit)
Sticky Bit是⼀种特殊权限,通常⽤于⽬录。它⽤于限制⽤户删除或修改其他⽤户在同⼀⽬录下的⽂件。在设置了Sticky Bit的⽬录中,只有⽂件的拥有者或root⽤户才能删除或重命名这些⽂件,⽽不是⽬录的其他⽤户。
作用:
- 应⽤于⽬录:Sticky Bit通常⽤于共享⽬录(如 /tmp ⽬录),确保⽤户不能删除或修改其他⽤户的⽂件。
- 常⻅示例: /tmp ⽬录具有Sticky Bit,因为这是⼀个所有⽤户都可以访问的临时⽬录,Sticky Bit防⽌⽤户删除其他⼈的临时⽂件。
设置SBIT:
- 使⽤命令 chmod +t directoryname 可以给⽬录设置Sticky Bit权限。
- 使⽤命令 chmod -t directoryname 可以移除Sticky Bit权限。
权限表示:
- Sticky Bit在权限列表的最后⼀个执⾏位(x)位置显示。如果Sticky Bit被设置,权限显示为 t ,如 rwxrwxrwt 。
- 如果其他⽤户没有执⾏权限但设置了Sticky Bit,权限显示为 T ,如 rw-rw-r-T
总结:
- SUID:⽂件以拥有者的权限运⾏,权限标识为 s 或 S 。
- SGID:⽂件以⽂件所属组的权限运⾏,或者新创建的⽂件继承⽗⽬录的组,权限标识为 s 或 S
- Sticky Bit:⽬录中⽂件只能由⽂件拥有者或root删除,权限标识为 t 或 T 。
可以通过命令 ls -l 来查看⽂件或⽬录的权限,并观察是否设置了这些特殊权限位。
三、Linux提权
Superuser Do,其作⽤是允许普通⽤户以超级⽤户(root)权限执⾏命令,⽽不需要直接登录到root 账号。 sudo 是提升权限的安全机制之⼀,通常⽤于系统管理任务,如安装软件、修改配置⽂件、管理服务等
3.1 sudo
1.sudo的基本功能
- 执⾏管理任务:普通⽤户可以通过 sudo 执⾏需要超级⽤户权限的命令,⽽⽆需直接以 root登录。
- 安全性:相⽐直接使⽤ root ⽤户, sudo 提供了更好的安全性。它只允许⽤户执⾏特定命令,并且每次执⾏需要进⾏身份验证(通常通过输⼊⽤户密码),这减少了系统被误操作或恶意操作的⻛险。
- ⽇志记录:系统会记录所有使⽤ sudo 的命令,⽅便审计和安全检查
2.sudo的使用方法
sudo [选项] [命令]
- 以root权限运行命令 : sudo apt update
- 查看系统日志文件 : sudo cat /var/log/syslog
- 编辑系统配置文件 : sudo nano /etc/ssh/sshd_config
- 切换到root用户 : sudo su
3.sudo配置文件(/etc/sudoers)
sudo 的⾏为通过 /etc/sudoers ⽂件进⾏配置。该⽂件决定了哪些⽤户或⽤户组可以使⽤ sudo ,以及哪些命令可以使⽤ sudo 执⾏
为了避免⼿动编辑 sudoers ⽂件时出现格式错误,通常使⽤以下命令来编辑:
sudo visudo
- visudo :这是⼀个专⽤命令,⽤于安全编辑 sudoers ⽂件,并确保⽂件语法正确。
4.sudo的优势
- 安全性更⾼:通过限制某些⽤户只能运⾏特定命令, sudo 提供了更好的访问控制,⽽不必将 root 权限完全暴露。
- 身份验证:每次执⾏ sudo 时都需要身份验证(输⼊⽤户密码),提⾼了安全性。
- 操作记录:所有 sudo 执⾏的命令都会记录到⽇志中(通常是 /var/log/auth.log ),⽅便追踪和审计。
- 权限分配灵活:管理员可以通过 sudoers ⽂件分配⾮常细粒度的权限,如允许某个⽤户只执⾏特定命令。
5.常见问题与解决方案
- sudo 权限不⾜:如果 尝试执⾏ sudo 命令时出现权限不⾜的提示,可能是 的⽤户没有被赋予 sudo 权限。确保 的⽤户名被添加到 sudoers ⽂件或相关的⽤户组中。
- sudo: command not found :这意味着系统中没有安装 sudo 。 需要以 root ⽤户身份登录并安装 sudo ,通常可以使⽤以下命令:
apt install sudo # 在 Debian/Ubuntu 系列系统中
yum install sudo # 在 CentOS/RHEL 系列系统中
- sudo 缓存清除:如果 想强制要求每次使⽤ sudo 都输⼊密码,⽽不缓存认证信息,可以使⽤以下命令清除缓存:
sudo -k
6.sudo与su的区别
- sudo :允许普通⽤户在需要时执⾏某些 root 权限的命令,⽤户必须在执⾏命令时输⼊⾃⼰的密码。 sudo 提供了精细的权限控制,并且⽇志化操作使得审计变得容易。
- su :⽤于切换⽤户,通常是切换到 root ⽤户,要求知道 root ⽤户的密码。与 sudo 不同, su 是持续性的权限提升,意味着⽤户在进⼊ su 环境后,所有命令都以 root 身份执⾏,直到退出该会话。
总结:
- sudo 是 Linux 系统中⽤来让普通⽤户执⾏需要超级⽤户权限的命令的⼯具。它具有安全性、灵活性和可审计性,是系统管理员在管理和保护系统时的有⼒⼯具。
- 通过 /etc/sudoers ⽂件,管理员可以为⽤户或⽤户组分配特定的权限。
- 使⽤ sudo 时,普通⽤户仍然使⽤⾃⼰的密码进⾏身份验证,⽽不需要知道 root 密码,这在提升权限的同时保持了系统安全性。
3.2 SUID
SUID 允许⽂件以⽂件拥有者(通常是root)的权限执⾏。SUID提权就是通过滥⽤设置了SUID的⽂件,获得更⾼权限(通常是root权限)
SUID提权:
- 攻击者寻找SUID设置不当的⼆进制⽂件。如果某个可执⾏⽂件意外地或错误地设置了SUID,并且这个⽂件允许执⾏⼀些危险的操作(例如:可以启动shell),攻击者可以利⽤这个⽂件执⾏系统命令,并获得root权限。
- 示例: 假设⼀个可执⾏⽂件(如 /usr/bin/vim )具有SUID权限,攻击者可能通过它以root身份打开并编辑系统关键配置⽂件,或者直接执⾏root权限的shell命令:
vim -c '!sh'
- 攻击者会搜索系统中SUID位设置错误的可执⾏⽂件,可以使⽤以下命令列出所有具有SUID权限的⽂件:
find / -perm -u=s -type f 2>/dev/null
- 在这些⽂件中,攻击者会寻找可以直接或间接执⾏系统命令的⽂件,进⾏提权。
3.3 SGID提权
SGID 在⽂件和⽬录上起不同的作⽤,但如果被错误配置,也可以被攻击者利⽤来进⾏提权。
SGID提权:
- 如果⼀个可执⾏⽂件设置了SGID,并且属于某个关键的系统组(例如 root 或 sudo 组),那么任何⽤户在运⾏这个⽂件时,都会以该组的权限运⾏。攻击者可以利⽤这⼀点来访问或修改他们通常⽆法访问的资源。
- 如果某个⽬录设置了SGID,并且⽤户可以在其中创建⽂件,那么攻击者可能通过创建⽂件并利⽤组权限进⾏进⼀步的攻击。
- 示例:某个SGID⽂件的执⾏权限设置不当,例如允许⽤户访问某些机密⽂件。攻击者可以尝试通过在组权限下运⾏该⽂件来读取或修改这些⽂件。
- 列出所有带有SGID权限的⽂件:
find / -perm -g=s -type f 2>/dev/null
3.4 Sticky Bit
Sticky Bit 主要⽤于防⽌⾮⽂件所有者删除共享⽬录中的⽂件。因此,Sticky Bit本身不直接⽤于提权,但它的错误配置可以产⽣安全漏洞。
SBIT提权:
- 如果Sticky Bit未正确配置或未启⽤,攻击者可以在共享⽬录(如 /tmp )中删除或重命名其他⽤户的⽂件,从⽽可能导致拒绝服务攻击,或⼲扰其他⽤户的⼯作,进⽽诱导系统管理员采取错误操作。
- 在⼀些情况下,攻击者可以通过这种⽅式获得对系统的间接控制,但Sticky Bit通常不是直接的提权⼯具。
3.5 其他提权方法
3.5.1 内核漏洞
- ⼀些内核漏洞可能被恶意⽤户利⽤进⾏提权。例如,利⽤某些内核模块的不安全函数调⽤来提升⽤户权限。攻击者可以通过编写特制的代码触发漏洞,最终获得root权限。
3.5.2 配置错误
- 系统管理员在配置⽤户权限时的疏忽,⽐如设置了过于宽松的sudo权限,可能让普通⽤户通过 sudo 命令执⾏root级别的操作,导致提权。
- 如果配置⽂件的权限设置不当(例如 /etc/passwd 或 /etc/shadow ⽂件),攻击者可能会利⽤这些⽂件执⾏恶意操作,改变系统账户的密码。
3.5.3 文件权限滥用
- 系统中某些关键⽂件(如⽤户密码⽂件、sudoers⽂件)如果权限配置不当,攻击者可能会通过直接修改这些⽂件获得超级⽤户权限。
总结:
SUID、SGID 和 Sticky Bit 都在Linux提权中扮演了重要⻆⾊。通常,Linux提权通过以下⽅式实现:
- 利⽤SUID:运⾏以root权限执⾏的⼆进制⽂件,从⽽获得root权限。
- 利⽤SGID:滥⽤组权限进⾏权限提升或访问系统资源。
- Sticky Bit:虽然不直接⽤于提权,但它的错误配置可能造成安全⻛险。
提权通常依赖于对系统漏洞的充分了解,恶意⽤户会通过探索系统中的误配置、漏洞和不当权限设置来尝试提升⾃⼰的权限。因此,系统管理员应当定期检查⽂件权限、修补已知漏洞并确保合理的系统配置,以防⽌此类攻击。