【网络安全】服务底子第二阶段——第三节:Linux系统管理底子----Linux用户 ...

打印 上一主题 下一主题

主题 527|帖子 527|积分 1581

目次
一、用户与组管理命令
1.1 用户分类与UID范围
1.2 用户管理命令
1.2.1 useradd
1.2.2 groupadd
1.2.3 usermod
1.2.4 userdel
1.3 组管理命令
1.3.1 groupdel
1.3.2 检察密码文件 /etc/shadow
1.3.4 passwd
1.4 Linux密码暴力破解
二、权限管理
2.1 文件与目次权限
2.2 目次管理命令
2.2.1 chown
2.2.2 chomd
2.3 特别权限
2.3.1 SUID(Set User ID)
2.3.2 SGID(Set Group ID)
2.3.3 SBIT(Sticky Bit)
三、Linux提权
3.1 sudo
3.2 SUID
3.3 SGID提权
3.4 Sticky Bit
3.5 其他提权方法
3.5.1 内核毛病
3.5.2 设置错误
3.5.3 文件权限滥用

一、用户与组管理命令
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.创建用户:
  1. //创建新用户
  2. [root@localhost bin]# useradd testuser1
  3. //查看用户信息
  4. [root@localhost bin]# cat /etc/passwd
  5. root:x:0:0:root
  6. //如果觉得上一种方式太杂乱,可以指定显示最后五个用户信息
  7. [root@localhost bin]# tail -5 /etc/passwd
  8. postfix:x:89:89::/var/spool/postfix:/sbin/nologin
  9. tcpdump:x:72:72::/:/sbin/nologin
  10. allen:x:1000:1000:allen:/home/allen:/bin/bash
  11. saned:x:988:982:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
  12. testuser1:x:1001:1001::/home/testuser1:/bin/bash
复制代码
2.指定用户UID
  1. [root@localhost bin]# useradd -u 5200 testuser2
  2. //查看创建的组
  3. [root@localhost bin]# cat /etc/group
  4. ……
  5. testuser1:x:1001:
  6. testuser2:x:5200:
复制代码


  • 注意:系统默认创建和UID相同的组,假如未指定UID则从默认1000以上开始今后排
3.不创建家目次而且禁止登陆
  1. [root@localhost bin]# useradd -M -s /sbin/nologin testuser3
  2. //-M 选项告诉 useradd 不要创建用户的主目录。
  3. //-s /sbin/nologin 选项指定用户的登录 shell 为 /sbin/nologin,这意味着用户不能通过密码登录系统。
  4. [root@localhost bin]# tail -5 /etc/passwd
  5. allen:x:1000:1000:allen:/home/allen:/bin/bash
  6. saned:x:988:982:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
  7. testuser1:x:1001:1001::/home/testuser1:/bin/bash
  8. testuser2:x:5200:5200::/home/testuser2:/bin/bash
  9. testuser3:x:5201:5201::/home/testuser3:/sbin/nologin
  10. [root@localhost home]# ls
  11. allen  testuser1  testuser2  //这里没有显示testuser3,禁止登陆
复制代码
4.创建新用户并指定UID,指定组,shell类型为/bin/sh
  1. [root@localhost home]# useradd -u 520 -s /bin/sh -G root testuser4
  2. [root@localhost home]# tail -5 /etc/passwd
  3. saned:x:988:982:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
  4. testuser1:x:1001:1001::/home/testuser1:/bin/bash
  5. testuser2:x:5200:5200::/home/testuser2:/bin/bash
  6. testuser3:x:5201:5201::/home/testuser3:/sbin/nologin
  7. testuser4:x:520:5202::/home/testuser4:/bin/sh
复制代码
5.创建新用户并设置用户过期时间,过2天后停权,指定家目次
  1. [root@localhost home]# useradd -e 2024-09-06 -f 2 -d/tmp/testuser5 -m testuser5
  2. [root@localhost home]# chage -l testuser5
  3. Last password change                                        : Sep 06, 2024
  4. Password expires                                        : never
  5. Password inactive                                        : never
  6. Account expires                                                : Sep 06, 2024
  7. Minimum number of days between password change                : 0
  8. Maximum number of days between password change                : 99999
  9. 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
  1. [root@localhost home]# groupadd -g 8888 ceo   //创建工作组
  2. [root@localhost home]# useradd -u 1111 -g 8888 testuser6
  3. [root@localhost home]# id testuser6    //查看用户信息UID GID扩展组
  4. uid=1111(testuser6) gid=8888(ceo) groups=8888(ceo)
复制代码
2.新增用户,基本组root,扩展组ceo
  1. [root@localhost home]# useradd -g root -G ceo testuser7
  2. [root@localhost home]# id testuser7
  3. 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.更改登录目次
  1. [root@localhost home]# mkdir /tmp/testuser1  //创建了一个名为 testuser1 的新目录在 /tmp 下
  2. [root@localhost home]# usermod -d /tmp/testuser1 testuser1  //更改了 testuser1 用户的主目录为 /tmp/testuser1
  3. [root@localhost home]# tail /etc/passwd | grep testuser1
  4. testuser1:x:1001:1001::/tmp/testuser1:/bin/bash
  5. //现在,testuser1 用户的主目录是 /tmp/testuser1,而不是原来的 /home/testuser1。这意味着当 testuser1 用户登录系统时,他们的家目录将是 /tmp/testuser1。
复制代码
2.更改UID
  1. [root@localhost home]# usermod -u 12345 testuser6
  2. [root@localhost home]# tail /etc/passwd | grep testuser6
  3. testuser6:x:12345:8888::/home/testuser6:/bin/bash
复制代码
3.更改用户名为abc
  1. [root@localhost home]# usermod -l abc testuser6
  2. [root@localhost home]# tail /etc/passwd | grep testuser6
  3. abc:x:12345:8888::/home/testuser6:/bin/bash
  4. [root@localhost home]# tail /etc/passwd | grep abc
  5. abc:x:12345:8888::/home/testuser6:/bin/bash
复制代码
4.锁定与解锁用户名密码
  1. [root@localhost home]# usermod -L abc
  2. [root@localhost home]# usermod -U abc
复制代码
1.2.4 userdel

命令来删除指定的⽤户及其干系⽂件。这个命令会从系统中删除⽤户账户
删除的⽂件包括 /etc/passwd /etc/group /etc/shadow
而且可以选择删除与该⽤户干系的全部⽂件(如⽤户的家⽬录和邮件)。
注意事项:


  • 进⾏中的进程:假如⽤户当前正在运⾏某些进程,系统会阻⽌删除⽤户账户。可以使⽤ -f 选项逼迫删除账户,但这种操纵需要谨慎,由于逼迫删除大概会影响正在运⾏的进程。
  • ⽂件删除:使⽤ -r 选项可以删除⽤户的家⽬录以及该⽤户拥有的全部⽂件。假如不使⽤此选项,系统只会删除⽤户账户,但不会删除⽤户的家⽬录和⽂件
1.删除用户,但是不会删除用户的家目次和文件
  1. [root@localhost home]# userdel testuser4
  2. [root@localhost home]# tail /etc/passwd | grep testuser4
  3. [root@localhost home]# ls /home | grep testuser4
  4. testuser4
复制代码
2.删除用户以及家目次和文件
  1. [root@localhost home]# userdel -f testuser5
  2. [root@localhost home]# tail /etc/passwd | grep testuser5
复制代码
3.删除家目次,但是可以登录
  1. [root@localhost home]# rm -rf /home/testuser3
  2. [root@localhost home]# ls /home | grep testuser3
  3. [root@localhost home]# cat /etc/passwd | grep testuser3
  4. testuser3:x:5201:5201::/home/testuser3:/sbin/nologin   //禁止登陆
复制代码
1.3 组管理命令

1.3.1 groupdel

groupdel 命令来删除⽤户组。 groupdel 命令将会从系统中删除指定的组,但不会删除该组内的⽤户或其⽂件
注意事项:


  • 组内的⽤户: groupdel 不会删除属于该组的⽤户。假如某个⽤户的基本组是被删除的组,删除操纵将会失败。因此,在删除组之前,确保该组不再是任何⽤户的基本组。
  • ⽂件权限: groupdel 不会更改由该组拥有的⽂件的权限。删除组后,⽂件的权限中仍大概体现该组的 GID(组标识符),但该 GID 不会再映射到任何组名。
假如想要删除组,在删除之前可以先检查是否有效户仍然属于该组,可以使用以下命令来检查:
  1. grep developers /etc/passwd
  2. //这将列出所有属于 developers 组的⽤户
复制代码
假如某个⽤户的基本组是 developers , 可以使⽤ usermod 修改该⽤户的基本组,然后再删除该组:
  1. 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.修改当前登陆的用户的密码
  1. [root@localhost ~]# passwd
  2. Changing password for user root.
  3. New password:
  4. Retype new password:
  5. passwd: all authentication tokens updated successfully.
复制代码
2.锁定用户密码,不能自行修改(管理员除外)
  1. [root@localhost ~]# passwd -l testuser2
  2. Locking password for user testuser2.
  3. passwd: Success
  4. //测试:切换用户尝试修改密码,失败,无法修改
  5. Locking password for user testuser2.
  6. passwd: Success
  7. [root@localhost ~]# ^C
  8. [root@localhost ~]# su testuser2
  9. [testuser2@localhost root]$ passwd
  10. Changing password for user testuser2.
  11. Changing password for testuser2.
  12. (current) UNIX password:
  13. passwd: Authentication token manipulation error
复制代码
3.解锁
  1. [root@localhost ~]# passwd -u testuser2
  2. Unlocking password for user testuser2.
  3. passwd: Warning: unlocked password would be empty.
  4. passwd: Unsafe operation (use -f to force)
  5. [root@localhost ~]# passwd -f testuser2
  6. Changing password for user testuser2.
  7. New password:
  8. Retype new password:
  9. passwd: all authentication tokens updated successfully.
复制代码
4.下次登陆逼迫修改密码
  1. [root@localhost ~]# passwd -e testuser3
  2. Expiring password for user testuser3.
  3. passwd: Success
复制代码
5.扫除登陆密码,扫除之后登陆时不再需要密码,可直接登录(高风险)
  1. [root@localhost ~]# passwd -d testuser3
  2. Removing password for user testuser3.
  3. passwd: Success
复制代码
6.检察密码状态
  1. [root@localhost ~]# passwd -S root
  2. root PS 2024-09-06 0 99999 7 -1 (Password set, SHA512 crypt.)
复制代码
1.4 Linux密码暴力破解

假设 拿到了shadow⽂件 , 查到 root ⽤户 的hash 值 (混合了盐值)
暴⼒破解思绪: 依次测试每个密码 + 盐值 ------ sha 算法 ----- > 得出带有盐值的hash 值
将哈希值 和 之前 shadow ⽂件中的 哈希值 对⽐ ⼀样则分析 破解乐成
   这种方法说白就是靠“猜”
  

  1. [root@localhost ~]# python
  2. Python 2.7.5 (default, Oct 30 2018, 23:45:53)
  3. [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2
  4. Type "help", "copyright", "credits" or "license" for more information.
  5. >>> import crypt
  6. >>> crypt.crypt('123','$6$6i1X7QIf8B4zRGTs$')
  7. '$6$6i1X7QIf8B4zRGTs$OT5SjkRsCewtqZna5HF5gl6eNG6wVkxvoolB7Tg8lqB7r9hm4/TjGfq1oyUJW9WmZFGutzHCmL7V5JGdKJHvL/'
  8. >>> crypt.crypt('root','$6$6i1X7QIf8B4zRGTs$')
  9. '$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.仅更改文件的全部者
  1. [root@localhost Desktop]# chown allen file
  2. 将file的所有者更改为用户allen
复制代码
2.更改目次的全部者和组
  1. [root@localhost Desktop]# chown allen:developers file
  2. //将file的所有者更改为allen,所属组更改为developers
复制代码
3.递归更改目次的全部者和组
  1. chown -R allen:developers /path/to/directory
  2. //递归更改目录/path/to/directory及其所有子文件和子目录的所有者为allen,所属组为developers
复制代码
4.只修改全部者
  1. [root@localhost Desktop]# ll file
  2. -rw-r--r--. 1 root root 0 Sep  4 17:54 file
  3. [root@localhost Desktop]# chown allen file
  4. [root@localhost Desktop]# ll file
  5. -rw-r--r--. 1 allen root 0 Sep  4 17:54 file
复制代码
5.只修改全部者和所属组
  1. [root@localhost Desktop]# ll file
  2. -rw-r--r--. 1 root root 0 Sep  4 17:54 file
  3. [root@localhost Desktop]# chown allen:allen file
  4. [root@localhost Desktop]# ll file
  5. -rw-r--r--. 1 allen allen 0 Sep  4 17:54 file
复制代码
6.只修改所属组
  1. [root@localhost Desktop]# ll file
  2. -rw-r--r--. 1 allen allen 0 Sep  4 17:54 file
  3. [root@localhost Desktop]# chown :root file
  4. [root@localhost Desktop]# ll file
  5. -rw-r--r--. 1 allen root 0 Sep  4 17:54 file
复制代码
7.将当前目次下全部内容全部者都修改为allen
  1. chown -R allen *
复制代码
2.2.2 chomd

chomd是Linux和Unix系统中用来修改文件和目次权限的命令。
1.添加权限:使用+来为全部者、组和其他人添加权限
  1. chmod ugo + r 文件名
  2. 这个命令为文件的所有者(u)、组(g)、其他人(o)增加读取权限(r)
复制代码
2.修改权限:可以同时对差别用户种别修改权限
  1. chmod u-w,g+w,o+x 文件名
  2. 该命令:去掉所有者的写权限,正价所属组的写权限,增加其他用户的执行权限
  3. //对于所有者,所属组和其他人都增加读权限
  4. chmod ugo+r
  5. 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的使用方法
  1. 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 ⽂件时出现格式错误,通常使⽤以下命令来编辑:
  1. 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 ,通常可以使⽤以下命令:
  1. apt install sudo # 在 Debian/Ubuntu 系列系统中
  2. yum install sudo # 在 CentOS/RHEL 系列系统中
复制代码


  • sudo 缓存扫除:假如 想逼迫要求每次使⽤ sudo 都输⼊密码,⽽不缓存认证信息,可以使⽤以下命令扫除缓存:
  1. 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命令:
  1. vim -c '!sh'
复制代码


  • 攻击者会搜刮系统中SUID位设置错误的可执⾏⽂件,可以使⽤以下命令列出全部具有SUID权限的⽂件:
  1. find / -perm -u=s -type f 2>/dev/null
复制代码


  • 在这些⽂件中,攻击者会寻找可以直接或间接执⾏系统命令的⽂件,进⾏提权。
3.3 SGID提权

SGID 在⽂件和⽬录上起差别的作⽤,但假如被错误设置,也可以被攻击者利⽤来进⾏提权。
SGID提权:


  • 假如⼀个可执⾏⽂件设置了SGID,而且属于某个关键的系统组(比方 root 或 sudo 组),那么任何⽤户在运⾏这个⽂件时,都会以该组的权限运⾏。攻击者可以利⽤这⼀点来访问或修改他们通常⽆法访问的资源。
  • 假如某个⽬录设置了SGID,而且⽤户可以在此中创建⽂件,那么攻击者大概通过创建⽂件并利⽤组权限进⾏进⼀步的攻击。
  • 示例:某个SGID⽂件的执⾏权限设置不当,比方允许⽤户访问某些秘密⽂件。攻击者可以尝试通过在组权限下运⾏该⽂件来读取或修改这些⽂件。
  • 列出全部带有SGID权限的⽂件:
  1. 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:虽然不直接⽤于提权,但它的错误设置大概造成安全⻛险。
提权通常依赖于对系统毛病的充实了解,恶意⽤户会通过探索系统中的误设置、毛病和不当权限设置来尝试提升⾃⼰的权限。因此,系统管理员应当定期检查⽂件权限、修补已知毛病并确保合理的系统设置,以防⽌此类攻击。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

钜形不锈钢水箱

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表