![权限提升技术:攻防实战与技巧](https://wfqqreader-1252317822.image.myqcloud.com/cover/448/50053448/b_50053448.jpg)
1.3 Linux提权基础知识
本节将简单介绍Linux系统中与权限相关的知识,如Linux用户和用户组、Linux文件权限、Linux特殊权限等。
1.3.1 用户
只要是操作系统,就会涉及“用户”这个概念。Linux是一个支持多用户、多任务的操作系统,可以根据特定的任务来创建不同的用户,每个用户都有自己的用户名和密码。各用户可以同时登录操作系统,可以在自己的目录中存储个人文件,而不会干扰其他用户。
Linux操作系统引入了UID(User ID)和GID(Group ID)的概念来识别用户身份。每个用户都有独一无二的UID。根据UID的不同,可以将用户分为3种类型,即超级用户(root)、普通用户(User)和系统用户(伪用户),如图1-39所示。
❑超级用户:默认用户名为root。它拥有Linux系统的最高权限,可以对系统进行任何操作,如读取和修改文件、创建用户、安装软件、启动系统服务等。在实际环境中,为了系统安全,一般禁止root账号通过SSH远程登录服务器。该用户类型默认只有一个用户,UID固定为0。
❑普通用户:是为了能够使用Linux资源而建立的用户,普通用户可在指定的权限内执行有限的操作。该类型的用户一般由超级用户创建,UID通常大于1000。
❑系统用户(伪用户):系统用户是一种特殊的用户,用于运行特定的服务或程序,如bin、mail等。Linux系统为该类型用户预留了1~999的UID范围值。该类用户无法登录系统。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/38_01.jpg?sign=1738887393-uYbacqzOMJ9LGRUpsT8PfqzvWQEgC4a5-0-1f64f3f4068d07d7a869c9247b50b5f6)
图1-39 3种用户类型
在CentOS的不同版本下,UID设定范围是不同的,如表1-7所示。
表1-7 不同CentOS版本的UID设定范围
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/38_02.jpg?sign=1738887393-IbORo8OmWuHwg4fjZJ47aC9Tu7OgXVZ2-0-f17dfc61d18596f256c52bb2e06f6bdc)
1.3.2 用户组
Linux的用户组与Windows的用户组在作用上有相似之处,都是为了让多个用户拥有相同的权限或访问限制。将需要授权的用户添加到同一个用户组里,通过修改文件或目录的所属组,可以让该用户组下的所有用户具有相同的权限,从而方便地管理文件和目录的访问权限。
Linux下的用户组可以分为以下两类。
❑基本组(私有组):在建立用户账户时,若没有指定账户所属的组,那么系统会建立一个和用户名相同的组,此用户组的编号和用户的ID(UID)相同,这个组就是基本组。
❑附加组(公有组):可以容纳多个用户,组中的所有用户都具有该组所拥有的权限。
在Linux系统中,每个用户必定属于一个用户组。默认情况下,每个用户的基本组名称与用户名相同。此外,每个用户还可以属于多个附加组,Linux系统默认允许一个用户最多属于31个附加组。
用户和用户组的关系有一对一、一对多、多对一和多对多几种,如图1-40所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/39_01.jpg?sign=1738887393-Gg7VfTjOBLFOL0yWG4IjlLeybgf7QE5F-0-77cabd9a3ede4459496d15498ff40d03)
图1-40 用户和用户组的关系
1.3.3 用户配置文件
在Linux系统中,用户可以通过用户名和密码登录系统。在登录过程中,系统将用户名和密码发送到认证模块进行验证。认证模块首先会读取/etc/passwd文件来验证用户名是否存在,并且根据用户名查询相应的密码信息。如果用户名不存在,则返回认证失败的信息;如果用户名存在,则会将用户输入的密码进行加密处理,并与/etc/shadow文件中存储的密码密文进行对比,如果用户输入的密码与存储的密码匹配,则认证成功,否则认证失败。如果认证成功,那么系统会加载用户环境并启动对应的Shell。
表1-8列出了与Linux用户相关的主要配置文件。
表1-8 与Linux用户相关的主要配置文件
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/39_02.jpg?sign=1738887393-O3MVeFEQNgYr9WPJxACadJVpxMPZSSvf-0-eb54bcc88e24ee1eaf969dd624a97251)
1.账户文件
/etc/passwd是用于定义用户账户的系统文件。该文件中存储了每个用户的用户名、密码、用户ID、用户组ID、主目录以及登录时使用的Shell等信息。所有用户都可以读取该文件。
执行如下命令可以查看用户账户文件,如图1-41所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/39_03.jpg?sign=1738887393-BLg0VKMC2X1WPO6ptQSEpgkQFDlhVlvH-0-3ae4cda3c8bf6712f7511a66ebf472f0)
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/40_01.jpg?sign=1738887393-3jQoyN5zyUZadz4uhMraN4HlVOtBEsJe-0-83e9afd46a9a23e55831583964a3c856)
图1-41 /etc/passwd文件内容
/etc/passwd文件中的字段以“:”分隔,共有7个字段。对字段的解释如图1-42和表1-9所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/40_02.jpg?sign=1738887393-8hz1dF9ygtMw6niGQvN4OfsKE0cEhe9K-0-a75fcdd0efa9b5522500102d1a4b15a4)
图1-42 /etc/passwd文件信息
表1-9 /etc/passwd文件的字段及其含义
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/40_03.jpg?sign=1738887393-DDDwKawDk2thxmTgDEqFEQElzxKTLwbh-0-690e296c2a5cfbe46509aeb65fa7496a)
2.密码文件
/etc/shadow是Linux系统中用于存储用户密码信息的文件。该文件中存储了每个用户加密后的密码、密码最后更改的时间、密码过期时间、密码锁定时间等信息。只有超级用户或shadow组成员才能读取该文件。
执行如下命令可以查看用户密码文件,如图1-43所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/41_01.jpg?sign=1738887393-Tf9dnrWVe9TWBzkdWVcz7id2g0m8agFj-0-942a6a9a0974d513072c460477f72c88)
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/41_02.jpg?sign=1738887393-OMvBAfYEXvChHydEDVFGgdXkw69qAOdG-0-53cc4bc5a98fc18da07cd8a7ca9de64d)
图1-43 /etc/shadow文件内容
/etc/shadow文件的字段说明如图1-44所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/41_03.jpg?sign=1738887393-YUFB6qzWCrrtxALkZEih37E3dI2dXory-0-38b574159f3c8bb93aba7b0ea40fc439)
图1-44 shadow文件信息
/etc/shadow文件中的字段以“:”分隔,共有9个字段。对字段的解释如表1-10所示。
表1-10 /etc/shadow文件的字段及其含义
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/41_04.jpg?sign=1738887393-3aL5XMmvYpeLYmd7nAz5hOUY0krkv0Zc-0-d8f37de5daa19e83007f03813a0cf1bd)
3.用户组文件
/etc/group是用于存储用户组信息的系统文件。该文件中存储了每个用户组的组名称、组密码、用户组ID、组成员列表等信息。系统中的每个组在文件中都有一行记录,任何用户均可以读取用户组文件。
执行如下命令可查看用户组文件,如图1-45所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/42_01.jpg?sign=1738887393-eFUGH8bJSwzRhNK8EccSQgNOPoyVA0g0-0-440dbbeafb675ef142691e2f4ca8eecd)
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/42_02.jpg?sign=1738887393-VlHWuwXA7sj3gdpS5gCemGw8QhTtpvu9-0-415d94c9be217319bf1c42c5c6e7838a)
图1-45 /etc/group文件内容
/etc/group文件的字段说明如图1-46所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/42_03.jpg?sign=1738887393-C6ztNAzfqqAxMZKRotzKqEwJBWDnTFLf-0-983a68986d49c3499844893f8a63e4e0)
图1-46 /etc/group文件信息
/etc/group文件中的字段以“:”分隔,共有4个字段。对字段的解释如表1-11所示。
表1-11 /etc/group文件的字段及其含义
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/42_04.jpg?sign=1738887393-jCM7uCECk9V26VQr4MybKI0fuJ4WGZuO-0-ae5af0916b4556680dfb845f5f8dac2e)
4.用户组密码文件
/etc/gshadow是用于存储用户组密码的系统文件,与用户组配置文件/etc/group相对应,记录了用户组密码的相关信息。
执行如下命令可以查看用户组密码文件,如图1-47所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/43_01.jpg?sign=1738887393-HjWZF7tj6Fx2Vm8M9s9cFiACNk5Jvszj-0-40cd011ebffb8d1bb338fa638a39b7fd)
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/43_02.jpg?sign=1738887393-cjNrBRa4t1uPhMTsrdEA2WfV7pwKYNmO-0-28c1500854c706e53b37f2a4d31e88eb)
图1-47 /etc/gshadow文件内容
/etc/gshadow文件的字段说明如图1-48所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/43_03.jpg?sign=1738887393-DT74O8fNQGMhcXfit2p3N9Um0kd8p2BZ-0-c6ab78ff8127d9d3e246370ec8ef91ef)
图1-48 /etc/gshadow文件信息
/etc/gshadow文件中的字段以“:”分隔,共有4个字段。对字段的解释如表1-12所示。
表1-12 gshadow文件的字段及其含义
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/43_04.jpg?sign=1738887393-gwfTaqqsvyvYyVA4Ep2UsP8ZUeXfSPnx-0-b75051b55e93c48358ca02eadf3b6d1a)
1.3.4 用户管理相关命令
在渗透测试中,有时需要进行用户或用户组添加、密码更改和权限设定等操作,所以掌握用户管理的相关命令是非常重要的。
1.添加用户
在Linux系统中,可以使用useradd命令新建用户。此命令的格式如下:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/43_05.jpg?sign=1738887393-QzJDxnMYX382syb0Mr7AQCTjneYKKMKj-0-2de0b9833f7cd347960c87e171a8abe9)
该命令的常用参数如表1-13所示。
表1-13 useradd命令的常用参数
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/44_01.jpg?sign=1738887393-O6HD7arPFCUO4QG1hj4fOUP2xaur4Bho-0-ee2b5e035c4eb57e4dc4a1f00ee0d894)
useradd命令使用示例1:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/44_02.jpg?sign=1738887393-WvkOhNcWOirge4uHCkgLaqeIGI57EOJr-0-1414d9859e5216669f997a80e02d17e4)
上面第一条命令表示创建一个名为“linux”的普通用户,第二条命令表示创建一个名为“apache”的新用户,不为其创建家目录,并指定其默认的Shell为/sbin/nologin,即不允许登录。
useradd命令使用示例2:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/44_03.jpg?sign=1738887393-F7s417chE5qR8GdKi6VsNscLPAw4Z1Wl-0-87e36850563e61334001ba9ce6b5d7c9)
该命令表示创建一个名为whoami的普通用户,指定其UID为1003,登录Shell为/bin/bash,账号永不过期,如图1-49所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/44_04.jpg?sign=1738887393-ik8IgVGy2E2I7sdlCIDPqQQbdTkMbZ9O-0-e9bfb1c17bf4eacf095b451804af6b21)
图1-49 创建用户示例
创建用户的同时还会创建一个与用户名相同的用户组,在/home/目录下会创建一个名为whoami的目录,这就是whoami用户的家目录。
还有一个用来添加用户的命令“adduser”,adduser和useradd这两个用户创建命令之间的区别如下。
❑adduser:并不是标准的Linux命令,本质是一个perl脚本,也是调用的useradd命令。adduser可以以更友好的交互式方式来添加用户,会自动为创建的用户指定主目录和Shell信息,会在创建时提示输入用户密码和个人信息。
❑useradd:需要使用参数指定基本设置,如果不使用任何参数,则创建的用户无密码,无法登录系统。
在实际的渗透测试中可能无法获取交互式的Shell来执行添加用户并设置密码等命令,那么可以使用如下的一句话命令添加一个带密码的用户,如图1-50所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/45_01.jpg?sign=1738887393-8mMueJ5pviPEu4SbJNtqN4hg3RawCrr7-0-b2ae4f4532961e80d0758f22c633dbd0)
上面使用openssl passwd命令来生成一个基于明文密码(即“password”)和盐值(即“suiyi”)计算出来的哈希值。接下来,该哈希值会作为参数传递给useradd命令,以设置新用户的密码。该命令表示创建一个用户名为“yonghu”、密码为“password”的普通用户。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/45_02.jpg?sign=1738887393-v1RhIdnJSpG3XzPoCx1phcCMHNXpYKEf-0-b78e0d5a0ad3518bdec922abc1a62147)
图1-50 使用一句话命令添加一个带密码的用户
如下命令可在非交互式Shell下添加root用户,如图1-51所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/45_03.jpg?sign=1738887393-PgC6qeqbjMdQCjqVVjEksun2MqcvFd2f-0-5a29fcd6ada86239d53d1e5c828dcbbc)
该命令表示创建一个用户名为“rootyh”、密码为“password”的root用户。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/45_04.jpg?sign=1738887393-Z5pp9vc6KFZGNFWw86uNNCLM7wQKvG33-0-e28a2b16258569f739a8d0a1bc498cf3)
图1-51 添加root用户
命令参数解释如图1-52所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/45_05.jpg?sign=1738887393-sohU7ti6ElhN5DzBHFdU2q3AeRxxmjlB-0-9113296aba698b532e6f60062e05e86a)
图1-52 添加用户命令参数解释
2.设置密码
在Linux系统中,使用passwd命令可以为当前用户修改密码,或为指定的某个用户修改密码。普通用户修改密码时需要输入原密码,root用户可以随意修改其他用户的密码。此命令的格式如下:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/46_01.jpg?sign=1738887393-eAxTIY8sXXy68kLFdXZ6UVufckZD9FSB-0-ce8c844cebd5d085a979cf3ccbd71a2a)
该命令的常用参数如表1-14所示。
表1-14 passwd命令的常用参数
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/46_02.jpg?sign=1738887393-hzeHF2Yr33X2uqdtDPfZU3cYticjirk0-0-e9205be0d4da9f974c55e6a75a0a799c)
执行如下命令可以在交互式Shell下修改或添加用户密码,如图1-53所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/46_03.jpg?sign=1738887393-18kiFpnwuqZDtRd354Y2Irh7UqaUYpt9-0-5f3bfe7df37b98bc26a8aa3631e034f2)
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/46_04.jpg?sign=1738887393-ndKv9lI32UmQnjId7jxbwPG2B6QQLF9T-0-58acbc7c15676608d8be868ac7283f7e)
图1-53 配置用户密码
在实际的渗透测试中可能无法获取交互式的Shell来设置密码,同样可以使用一句话命令设置密码。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/46_05.jpg?sign=1738887393-OSZa3zknV9zJgjUijYw31GhtibbbDxon-0-1c82518bb01070c5a5695203989685e4)
上面的代码中,chpasswd是Linux系统中用于批量更改用户密码的命令。
3.删除用户
在Linux系统中,使用userdel命令可删除指定用户,如图1-54所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/46_06.jpg?sign=1738887393-h0XlmR7H4ry4hljPuLXLgwZipbkGi9js-0-a9f6ec91cb13dd5286fcc0dc14aaeedc)
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/46_07.jpg?sign=1738887393-3R5F1ez6UzDt5WpNRFew2u8YUWVmysMs-0-7d1c93312d797391a0b5de1563d40c6e)
图1-54 删除用户
该命令的常用参数如表1-15所示。
表1-15 userdel命令的常用参数
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/47_01.jpg?sign=1738887393-oWJKUmInzuUhVbAbalqUUXklng2Up0SM-0-008e8c80b2c3de1125e4c6e7bfd0b64c)
也可以通过删除/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow等文件中的用户所在行来手动清除一个用户。
4.切换用户
在Linux系统中,使用“su”(切换用户)命令可切换当前用户至指定用户。若普通用户要切换至root用户,则需输入“su -”或“su root”,并输入正确的root密码;若root用户要切换至普通用户,则只需输入“su<用户名>”即可,而无须输入密码。
切换用户的命令有两种执行方式:
❑su<账户名>:仅切换至指定用户,不会切换到其工作目录,不会载入此用户的环境变量。
❑su-<账户名>:切换用户的同时切换至其工作目录,载入此用户的环境变量和配置文件。
su命令使用示例1(如图1-55所示):
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/47_02.jpg?sign=1738887393-ujBwpL6FkAYDMaveiyzpv0LwN9L8wbR3-0-59082399c891daaa392992bbb91e5cce)
以上命令表示切换到root用户并以root身份执行“whoami”命令,一旦命令执行完成,将返回原用户的Shell下。
su命令使用示例2(如图1-56所示):
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/47_03.jpg?sign=1738887393-grAYrsaJSLpMdFcIzNPjr4RyrIkLNEzc-0-36530ac40b7fbcabc0fddd0543a8fe8b)
以上命令表示切换至root用户。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/47_04.jpg?sign=1738887393-JP6wiOMURnay5tLm3L5fJcc1asdCVfyZ-0-6e14d3cbd6d9f304e90919326fd086fc)
图1-55 切换用户并执行命令
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/47_05.jpg?sign=1738887393-6LGZDRPKDj2UGiK2RQ4zM47DrzZvQ4vQ-0-95a298b80e8dafec48c56534d109a6d3)
图1-56 切换至root用户
5.执行特权命令
在Linux系统中,sudo是一个非常重要的命令,它允许普通用户以超级用户(即root用户)的身份执行命令。在/etc/sudoers文件中定义了哪些用户可以使用sudo命令以及可以利用sudo执行哪些命令。要使用sudo命令,需要先输入当前用户的密码,密码验证成功后,将拥有15min的有效时间,在此期限内再次使用sudo命令时无须输入密码,超过期限则必须重新输入密码。如果未经授权的用户使用sudo,则系统会向管理员发送警告邮件。执行sudo命令的格式如下:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/47_06.jpg?sign=1738887393-4xHakuQGtBvrmodCIasFkUIAVXJzW9ZJ-0-cead92bf3ca3df5d0236e79831ba5704)
该命令的常用参数如表1-16所示。
表1-16 sudo命令的常用参数
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/48_01.jpg?sign=1738887393-R0PcH8RSwxAA5ibpQoW9VEzswBPN3Q40-0-8a6acdc14ac895b267519441adb4734c)
sudo命令使用示例:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/48_02.jpg?sign=1738887393-W7zfu2R20KfRuAs0lt3e84AM2qcyNJ2B-0-9d2b975b34b5a3e1343f8494580ed784)
该命令表示以特权身份读取/etc/gshadow文件,如图1-57所示。
执行如下命令,列出当前用户可以使用sudo执行哪些命令。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/48_03.jpg?sign=1738887393-j1xrY54jP2sY6BvdTGxpRWboKIA2jYzo-0-e7e0ac89f3ce3b64dee801dcc0b7833c)
1.3.5 文件及权限
在Linux系统中,为了确保只有授权的用户和进程才能访问特定的文件和目录,需要对文件和文件夹的权限进行严格的控制。每个文件和目录都有3组权限:所有者的权限、用户组的权限和其他用户的权限。每组权限都有3种访问权限:读取权限、写入权限和执行权限。
1.文件类型和访问权限
执行命令ls或ll可列出当前目录中的文件并查看文件信息(ls和ll的区别是:ll显示的信息更详细,还会显示当前目录下的隐藏文件,而ls不会),如图1-58所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/48_04.jpg?sign=1738887393-QcyTZDwVS7uPGrvuyzFGaRgBFBGugsUF-0-14903ca0f29ba29d9a7abe5df84bc24b)
图1-57 以特权身份读取文件
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/48_05.jpg?sign=1738887393-WsBPem5f8dzfWRgLYjoYehhwlQoKfpWJ-0-8038e8e36f66cb9fd85c0bd2c408f4fe)
图1-58 列出文件
ll命令的输出包括文件类型、权限、连接数、所属用户、所属用户组、文件大小、文件最近修改时间、文件名,如图1-59所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/49_01.jpg?sign=1738887393-SDkGB8XV6Ewkry92LCwOM07P9hVjcAlE-0-558b58e7b3b8e04ef2d17cbc21275e59)
图1-59 文件输出释义
(1)文件类型
在Linux系统中,有7种文件类型,如表1-17所示。
表1-17 Linux文件类型
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/49_02.jpg?sign=1738887393-ftLyBXzOfMfbxybdVmYsQbUtC2Ljj8N9-0-713bbe1302fe0f7df86fe7c6726b899d)
Linux系统不以扩展名来区分文件类型。扩展名的作用是帮助用户确定使用哪个软件打开文件。
(2)基本权限
在Linux系统中,文件权限分为3种,如表1-18所示。它们适用于每一类用户。
表1-18 Linux文件权限类型
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/49_03.jpg?sign=1738887393-RML0e6l8XdSorG6ZdL7u0YBphOdVd0lX-0-82e31cfbeef6a791c9a34281f49e2397)
某一位置为空时显示“-”,表示不具备这个权限。
(3)文件权限的表示方法
文件权限的字符表示如表1-19所示。
表1-19 文件权限的字符表示
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/50_01.jpg?sign=1738887393-NV9S0ul7pCAEzjlSQzdCNSWEygU9yC2x-0-2a7c3ae8a3cdba3af918e264c18bb6bf)
文件权限的进制表示如表1-20所示。
表1-20 文件权限的进制表示
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/50_02.jpg?sign=1738887393-hE1is9h5c4n5CLWOiBPny5zCRPtolWjL-0-7c73781384b5c57ab33d239f282aca53)
Linux系统中,文件/文件夹权限由9位组成,前3位表示所有者的权限,中间3位表示用户组的权限,后3位表示其他用户的权限,如表1-21所示。
表1-21 权限位
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/50_03.jpg?sign=1738887393-YdKYBGjrVJ7PZPzMigtNgFZa3XAiTql9-0-4886ef55f8858ea0257f630642fb3085)
举例如下:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/50_04.jpg?sign=1738887393-Di13dlBzS3zLIhkHjOzCiDFH836cipoY-0-ff97430c465b1c72e1812265e65c93cc)
以上内容表示,列出的是文件夹“account”的信息。该文件夹的所有者是“root”,具有可读、可写、可执行的权限;文件夹所属的用户组是“linux”,具有可读、可执行的权限,但没有可写的权限;其他用户对此文件夹具有可读、可执行的权限,但没有可写的权限。
(4)修改文件权限
在Linux系统中,使用chmod命令来修改文件或目录的访问权限。此命令的格式如下:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/50_05.jpg?sign=1738887393-CmALaOwPkJujR13uil9wvcTOeJM9JWpm-0-ef1641f6d97aab887f3a44cb00cbb688)
常见的权限表示方法有两种:字母法、数字法。
1)字母法。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/50_06.jpg?sign=1738887393-44FkVh4HHG2qNrTMKtopuQ31wJCRBTU3-0-a13fcb28d587336e594681466513328f)
每个参数代表不同的含义,具体解释如表1-22所示。
表1-22 chmod命令参数及其含义
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/51_01.jpg?sign=1738887393-4Y4anURs0WrQzyPw6oHKHwzwJDNfUi0K-0-c41f526b01f92a7e1c3bc3e7b49388cf)
操作符及其含义如表1-23所示。
表1-23 操作符及其含义
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/51_02.jpg?sign=1738887393-i8Id5Wf077Vt0sL0lKYYBJVlpuvWgkjA-0-bdd67cc068368b628e03a87ebc066031)
chmod命令的字母法使用示例(如图1-60所示):
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/51_03.jpg?sign=1738887393-wlmfcRMsAi58di1dCNytM1I0iMqJkFJa-0-943f3fe720466bc9ed352f16fe7d0d9e)
该命令表示对1.txt文件赋予其他用户可执行的权限。
2)数字法。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/51_04.jpg?sign=1738887393-ZCOXvaNUh8clkuB4DCrukxXZckj8Ab8t-0-e14b776f3b1df95de129c2b950ac3320)
在文件权限表示方法中,前文已提到过权限符号所对应的八进制表示方法(3种用户权限对应3位八进制数字)。
chmod命令的数字法使用示例1:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/51_05.jpg?sign=1738887393-OozgWrpQtZHLuR6CfPfvebd42OyqUr9n-0-7a935738cd37e7d9550b7f2847b43c4d)
该命令表示将1.txt文件设置为所有者和用户组可读、可写、可执行,以及其他用户可读的权限(774所对应的权限符号为rwxrwxr--),如图1-61所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/51_06.jpg?sign=1738887393-Jb2Uf8t8moRmdS1XqeGd03LlTOjTyHXP-0-356364b65d094decc0ef7cbfc5ba3dcf)
图1-60 chmod命令的字母法使用示例
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/51_07.jpg?sign=1738887393-QX9BwqtCcsjlcduAl0wqxwTmgRZmZxwo-0-44728bf77e5ed719ac0cb5023c7df221)
图1-61 chmod命令的数字法使用示例1
chmod命令的数字法使用示例2:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/51_08.jpg?sign=1738887393-LyatV0OT0orRw4c2w2kpRZSAoQo70u1x-0-2b3c3fc863e909da8048ffb7d28b3174)
该命令表示递归更改test目录及其所有子目录和文件的权限,赋予所有者、用户组和其他用户可读、可写和可执行权限,如图1-62所示。
(5)目录权限
在Linux渗透/提权中常需要上传漏洞利用程序或其他一些辅助工具,所以需要了解目录相关权限。目录权限主要分3种,如表1-24所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/52_01.jpg?sign=1738887393-Mk5SrnUESa6eDHlNwy3YEhSUcX6ptaJz-0-47e07d12934f096804f67de9ea378116)
图1-62 chmod命令的数字法使用示例2
表1-24 目录权限
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/52_02.jpg?sign=1738887393-93Vz6gFNL70rBVxGvgAh55lz6aV8odcT-0-601967c26ddb9236a9fa855c90d4c1bb)
2.特殊权限
前文介绍了r、w、x这3种基本权限,在Linux中还有3种特殊的权限:SUID、SGID、SBIT。
(1)SUID
SUID(Set User ID)一般出现在文件所有者的执行权限位上,如图1-63所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/52_03.jpg?sign=1738887393-59I48tn6CCgbmYfg0KYbysZvIAcqxvcX-0-40e6305a11194402c42aa6321df633f3)
图1-63 SUID示例
图1-63中,文件所有者中的“x”执行权限位,出现了“s”权限,此权限称为SETUID。
SUID特殊权限只适用于可执行文件。当用户执行此类型文件时,操作系统会暂时将当前用户的UID切换为文件所有者的UID。当文件执行结束后,身份的切换随之结束。
举个例子,当用户想修改自己的密码(使用passwd命令,调用/usr/bin/passwd文件)时,此操作需要修改shadow文件,而shadow文件只有root权限才能读取和修改。那么,为什么可以修改成功呢?通过查看passwd文件属性可以看到它已经被设置了特殊权限SUID,所以当普通用户执行passwd命令来修改密码时,是临时切换至root权限去修改shadow文件的,如图1-64所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/52_04.jpg?sign=1738887393-4OOz92tyW7u3RAXASkpmTzvr2sDajQ2x-0-91752df3a4dfd36684c2b746754cccba)
图1-64 修改密码流程
设置SUID也是权限维持中常用的一种方法。例如,将vim、nano等文件设置为SUID特殊权限,则可以修改/root/.ssh/authortizded_keys进行无密码登录,以及编辑/etc/shadow文件。
在Linux中可使用chmod命令为文件添加和撤销SUID特殊权限。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/53_01.jpg?sign=1738887393-cYTKNw3MFR8GFYT1LNRCx1uVpNW6f3m9-0-6ef5b0270e7524edf377bf3460a84426)
该命令表示使用字符法为/tmp/ServerScan文件添加SUID特殊权限,如图1-65所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/53_02.jpg?sign=1738887393-tnVjMlQMuwkfapef8OV4L0VHc1AcVsfZ-0-a172cfa8813993ac6b053c5c6f2daee2)
图1-65 为文件添加SUID权限
(2)SGID
SGID(Set Group ID)一般出现在文件所属用户组的执行权限位上,如图1-66所示。当用户执行此类型文件时,操作系统会暂时将当前用户的组身份切换为文件所属组。文件执行结束后,身份的切换随之结束。当SGID作用于目录时,进入此目录的用户在创建文件或文件夹时,新文件或文件夹的所属组将继承此目录的所属组。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/53_03.jpg?sign=1738887393-y7daoM67i0Aj6o2PPDykz8lWgDLZLhZX-0-969e7369711ea6ab559699e28c589794)
图1-66 SGID示例
如图1-66所示,原本文件所属组中的x执行权限位,出现了s权限,此权限称为SETGID。
在Linux中可使用chmod命令来添加和撤销SGID特殊权限,如图1-67所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/53_04.jpg?sign=1738887393-CpGBty4f6qX787st2ooQmx7Ha3KRonqW-0-52c1b56015c7901ae8a3a514aa10715b)
该命令表示使用字符法为/tmp/ServerScan文件添加SGID特殊权限。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/53_05.jpg?sign=1738887393-te31XX0AJWym9iJTzL3FXtLd9SbILB4u-0-2871c80a93b0abc98482a22a2b410388)
图1-67 为文件添加SGID权限
(3)SBIT
SBIT(Sticky Bit)是另一种特殊权限,用于在共享目录中保护文件和目录。当一个目录被设置了SBIT权限时,该目录中的文件和子目录只能被其所有者和root用户删除或移动,即使其他用户具有该目录的写权限,也无法修改或删除该目录中的文件和子目录。SBIT权限通常用于保护公共目录,如/tmp目录。