![权限提升技术:攻防实战与技巧](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=1739257106-jcJ9B2kOOJ6DMe1kRrRkLQWxNQHEu4wi-0-f91f53a0f227f6e67d1034bbeb792e03)
图1-39 3种用户类型
在CentOS的不同版本下,UID设定范围是不同的,如表1-7所示。
表1-7 不同CentOS版本的UID设定范围
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/38_02.jpg?sign=1739257106-x3Vcaqb07riFYh7Vywp98F3WOKh6iQeH-0-75af8b2895166896d362678b7ed84d4a)
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=1739257106-qtPjOtDKHkFxC0qVV6bj3GSS9haD2sMh-0-50939a110da7914c8de1b813047c50d7)
图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=1739257106-6VUpQ2TCuDgIUNTZdz4ElFxyO2oQRKvV-0-79be879c842688a1bbd3fbaebbfce513)
1.账户文件
/etc/passwd是用于定义用户账户的系统文件。该文件中存储了每个用户的用户名、密码、用户ID、用户组ID、主目录以及登录时使用的Shell等信息。所有用户都可以读取该文件。
执行如下命令可以查看用户账户文件,如图1-41所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/39_03.jpg?sign=1739257106-Sd4EHeGl9RjDP6yHwiiZ5JatIe3c6qC3-0-002f73238caab0ffc20a177b70d49c99)
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/40_01.jpg?sign=1739257106-tdvisbavWFM2evQiXngQmGptGy6RNor2-0-80ace981481e51247a4d0052dbefa7cf)
图1-41 /etc/passwd文件内容
/etc/passwd文件中的字段以“:”分隔,共有7个字段。对字段的解释如图1-42和表1-9所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/40_02.jpg?sign=1739257106-xdO4BsTMcJkLQH19IkxKuZSgJ9Odnvo6-0-b1e83176f3b34d8b46f09f79d913ff01)
图1-42 /etc/passwd文件信息
表1-9 /etc/passwd文件的字段及其含义
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/40_03.jpg?sign=1739257106-kJPrFyXTP4HK2uCp3eaWP0oMxZ0wA8b3-0-62d5eb29307b9eca7f6dc1644fd922fe)
2.密码文件
/etc/shadow是Linux系统中用于存储用户密码信息的文件。该文件中存储了每个用户加密后的密码、密码最后更改的时间、密码过期时间、密码锁定时间等信息。只有超级用户或shadow组成员才能读取该文件。
执行如下命令可以查看用户密码文件,如图1-43所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/41_01.jpg?sign=1739257106-DIzUHSe5grN4kjoIVDNuYIkCIUTaL5Ai-0-677b90e56355d88e746cdf8ee3867a61)
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/41_02.jpg?sign=1739257106-I0ss5ftqwVgXmRqla20tBex8xSv7P2J4-0-62c9afb0919a09911d05f780e3de0bb1)
图1-43 /etc/shadow文件内容
/etc/shadow文件的字段说明如图1-44所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/41_03.jpg?sign=1739257106-tkqkfLAFylTQI1CC1VwatBqMZDH5XLNE-0-d5ab6cfefca6ba0138a9e59857956514)
图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=1739257106-gVOKzHDB6HPeRfqXjsfyeOyCnBPqKdmR-0-b7ae481e6ce8f2b6f674f7374568a56e)
3.用户组文件
/etc/group是用于存储用户组信息的系统文件。该文件中存储了每个用户组的组名称、组密码、用户组ID、组成员列表等信息。系统中的每个组在文件中都有一行记录,任何用户均可以读取用户组文件。
执行如下命令可查看用户组文件,如图1-45所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/42_01.jpg?sign=1739257106-QiNPa8LBKkh3TrPhnT7a5dxreyVLJu6u-0-2135135afb4f4288e1173eac7f219597)
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/42_02.jpg?sign=1739257106-2gD0G8j71zO5DS8KzgwAoC159fcomHLC-0-fd5fc2e82d1f7c985be1410cd5f23ab8)
图1-45 /etc/group文件内容
/etc/group文件的字段说明如图1-46所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/42_03.jpg?sign=1739257106-wnt1LJMP13XacplpxmzdjyL6eoDi9RCA-0-1974315d04144ea9b539228ca001f255)
图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=1739257106-MaAQp59MWw2RIuQpDJw3vHmB7HVOEHFc-0-eedaaf7aea84f118f222ff62361096cf)
4.用户组密码文件
/etc/gshadow是用于存储用户组密码的系统文件,与用户组配置文件/etc/group相对应,记录了用户组密码的相关信息。
执行如下命令可以查看用户组密码文件,如图1-47所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/43_01.jpg?sign=1739257106-CC9TVUO9HIxU2osha903tz365YBwtkDZ-0-16eba04726d176066e22f6bfc4fa81d5)
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/43_02.jpg?sign=1739257106-E26SJRsl9fyi0Qxfd9pjEaMBjXmqrDct-0-b83a2cf48a89e79b93d64fd783c4877c)
图1-47 /etc/gshadow文件内容
/etc/gshadow文件的字段说明如图1-48所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/43_03.jpg?sign=1739257106-TUu9aulkiagAhsjVNi2pocbjf1LCTuvK-0-ffca5ea09f43c50a5d464d442548c03b)
图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=1739257106-KAWLyY08SCL36gAWEg6S0rd1AaIWSGp6-0-5dd70f3faeeb7e582d3cb31df53aeeec)
1.3.4 用户管理相关命令
在渗透测试中,有时需要进行用户或用户组添加、密码更改和权限设定等操作,所以掌握用户管理的相关命令是非常重要的。
1.添加用户
在Linux系统中,可以使用useradd命令新建用户。此命令的格式如下:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/43_05.jpg?sign=1739257106-ti5qpGyh7JWSmYr19ZXjzKwOrjqIaOjz-0-ce0b71d2a27a1ba482ad50fffc621c7e)
该命令的常用参数如表1-13所示。
表1-13 useradd命令的常用参数
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/44_01.jpg?sign=1739257106-CwFNiuNUMY4CDKQrNP0EUOSZmsMNEb7q-0-073df7108c363c080cc743bd86b3fef8)
useradd命令使用示例1:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/44_02.jpg?sign=1739257106-mfWuGcKYsxatPI2Hmi0uvp8M1bZKFwie-0-5b2dbd1583dff6884c3115777a0f56e9)
上面第一条命令表示创建一个名为“linux”的普通用户,第二条命令表示创建一个名为“apache”的新用户,不为其创建家目录,并指定其默认的Shell为/sbin/nologin,即不允许登录。
useradd命令使用示例2:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/44_03.jpg?sign=1739257106-nbFd1ObWcxiMFTAtag8qFt26rEchOMKn-0-7a0e74d84e3c6513f90542dc627722f6)
该命令表示创建一个名为whoami的普通用户,指定其UID为1003,登录Shell为/bin/bash,账号永不过期,如图1-49所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/44_04.jpg?sign=1739257106-dkCcbbbQ4GaJmkbal31Pmu6JPXLAZaOl-0-8a5c64678323f83580810edd0bc0ba6a)
图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=1739257106-JI0J779Klmdm5x0RE5m4v3WGme7B5S4s-0-99bb0658769c6f857080b81cc162d104)
上面使用openssl passwd命令来生成一个基于明文密码(即“password”)和盐值(即“suiyi”)计算出来的哈希值。接下来,该哈希值会作为参数传递给useradd命令,以设置新用户的密码。该命令表示创建一个用户名为“yonghu”、密码为“password”的普通用户。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/45_02.jpg?sign=1739257106-HVG17TzQYbOCbprEYO2Ycfdy8TcGEZLi-0-1880f604b8bc9e3d63030e2e5cd3f490)
图1-50 使用一句话命令添加一个带密码的用户
如下命令可在非交互式Shell下添加root用户,如图1-51所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/45_03.jpg?sign=1739257106-5lgKRO1xI5atLjBkkt08Im5qc0U8UEtV-0-49ebf2de04a19cf3e09a6ff0d8c32b6d)
该命令表示创建一个用户名为“rootyh”、密码为“password”的root用户。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/45_04.jpg?sign=1739257106-qqdO4o1qW8QkyZhRdlPDpfFFlAk4ymYG-0-69fd0d5bdbe2157b83124b1499080608)
图1-51 添加root用户
命令参数解释如图1-52所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/45_05.jpg?sign=1739257106-pYhTRqEluEMvV2nVrpAHV2c9oiTh129w-0-8847f420443314c1dc3cda46db5f0a42)
图1-52 添加用户命令参数解释
2.设置密码
在Linux系统中,使用passwd命令可以为当前用户修改密码,或为指定的某个用户修改密码。普通用户修改密码时需要输入原密码,root用户可以随意修改其他用户的密码。此命令的格式如下:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/46_01.jpg?sign=1739257106-BwlL1foevsUVuL4qaRsyxw5fxjMXzQDE-0-6012a2f4790c67e03963772f26af8a4b)
该命令的常用参数如表1-14所示。
表1-14 passwd命令的常用参数
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/46_02.jpg?sign=1739257106-YRqlKTlAph8yUe7yQ3f9qSR9A8w2YmTr-0-ee976c0ac4b7119012c2eb1ae4dcf6c6)
执行如下命令可以在交互式Shell下修改或添加用户密码,如图1-53所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/46_03.jpg?sign=1739257106-HXmgcCJaQnD0MpwcL25R1YtUHOZbMjtR-0-aa1312aa90c1f409c4ddc20c53c02793)
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/46_04.jpg?sign=1739257106-FBFsUqtjOph0HFQlNBZpueweedVswYR7-0-d46315e1bcfc2bfb0c6d2749e86c4e0f)
图1-53 配置用户密码
在实际的渗透测试中可能无法获取交互式的Shell来设置密码,同样可以使用一句话命令设置密码。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/46_05.jpg?sign=1739257106-bpe1d4z9ALtfJbnpbRpqjrgNByyCOSTu-0-40f0e7bac787e3a9ae988740aaef012c)
上面的代码中,chpasswd是Linux系统中用于批量更改用户密码的命令。
3.删除用户
在Linux系统中,使用userdel命令可删除指定用户,如图1-54所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/46_06.jpg?sign=1739257106-7HUU1fcQP0rL50gU68dc7U2yiP2uKs2K-0-05c3926ceac904e9861f146676584d88)
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/46_07.jpg?sign=1739257106-BWDPq03W9jEcfRo6Vlwc6nqzZQB9yFVC-0-a9bcc961a9a5a92df9ba5d43ddb04046)
图1-54 删除用户
该命令的常用参数如表1-15所示。
表1-15 userdel命令的常用参数
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/47_01.jpg?sign=1739257106-07xwl8enmGoVgi82zmCrsVRE69oBRMeh-0-a59b7ea4a3ce67c4ab42db9f92ac437d)
也可以通过删除/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=1739257106-QyvHD07HP9ORhS0NqSpxbZ9VawEYovQ9-0-f50bbd2ebc0111e282fe46b8a3f80c9d)
以上命令表示切换到root用户并以root身份执行“whoami”命令,一旦命令执行完成,将返回原用户的Shell下。
su命令使用示例2(如图1-56所示):
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/47_03.jpg?sign=1739257106-Uw1MXwPFEo8jKSGFT2EuZfh4mxbK3K7s-0-6ec9de482fbbf890a1657b1478b67b70)
以上命令表示切换至root用户。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/47_04.jpg?sign=1739257106-ZbhnsHCEhHhFPAFZkZ3pTKNM5GPUBd5b-0-a60591f28d34820f941fc50428629228)
图1-55 切换用户并执行命令
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/47_05.jpg?sign=1739257106-dMoTxRo7biy56FeO2K3cWLgHXPpPDSng-0-47235b41bb0f3fe6f85bebc61dc70a09)
图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=1739257106-aOatEj8WKhM8en6toOUFMW5rqyLWmHMk-0-3e1fd199f64effeb02fc69a7dffea21b)
该命令的常用参数如表1-16所示。
表1-16 sudo命令的常用参数
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/48_01.jpg?sign=1739257106-QdPYTNXbTk8YwhmmUooyiIEsBBxZiSfS-0-30388b4b9296dd779896c68dc01ad14f)
sudo命令使用示例:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/48_02.jpg?sign=1739257106-3eUTjqzpWyqPsyKy57BLBwBM2jCdEfSh-0-6106429da299b7451e8dc4e474d43fb6)
该命令表示以特权身份读取/etc/gshadow文件,如图1-57所示。
执行如下命令,列出当前用户可以使用sudo执行哪些命令。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/48_03.jpg?sign=1739257106-KVT3ESCb1pTd9tv1T5uXDwIWN0l6tx5y-0-7a14b20ed3d7bbd00b852fa83e2bd3d2)
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=1739257106-Qofde9exZsWgzGBHU0BKadyurAuzCaMk-0-38326bd0e896b1df8b6a28d512e6f6c5)
图1-57 以特权身份读取文件
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/48_05.jpg?sign=1739257106-VbHQoWAcNFqMShOF6JVZyU2M1K8fRG59-0-f9eca609d0c145020ccfcfcf3bdafa00)
图1-58 列出文件
ll命令的输出包括文件类型、权限、连接数、所属用户、所属用户组、文件大小、文件最近修改时间、文件名,如图1-59所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/49_01.jpg?sign=1739257106-IkLTCVwHaMyx22KmpP5jpZ46cCSbb52v-0-c1728ec5b7d0235e0c578736d17a18d3)
图1-59 文件输出释义
(1)文件类型
在Linux系统中,有7种文件类型,如表1-17所示。
表1-17 Linux文件类型
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/49_02.jpg?sign=1739257106-inigbUnC5Sb9LW6CJ5i2OL91sfVA9J88-0-4d7c1975d2d1431b885fbb944c425139)
Linux系统不以扩展名来区分文件类型。扩展名的作用是帮助用户确定使用哪个软件打开文件。
(2)基本权限
在Linux系统中,文件权限分为3种,如表1-18所示。它们适用于每一类用户。
表1-18 Linux文件权限类型
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/49_03.jpg?sign=1739257106-YsJPINIzhCGWb8vTMPzXB3GuKL7SdwGN-0-c20adeecf0d6aaa7fbf7472ba5415119)
某一位置为空时显示“-”,表示不具备这个权限。
(3)文件权限的表示方法
文件权限的字符表示如表1-19所示。
表1-19 文件权限的字符表示
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/50_01.jpg?sign=1739257106-083hY09KkleICEnWGZapH95NrHDRvZ3e-0-509692b129ad7b130c91321dd27e4617)
文件权限的进制表示如表1-20所示。
表1-20 文件权限的进制表示
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/50_02.jpg?sign=1739257106-CpNrjfV6wxmYfcbRd5CowbidcJ9BQYNo-0-c26c7022d166feebc218a766321a9219)
Linux系统中,文件/文件夹权限由9位组成,前3位表示所有者的权限,中间3位表示用户组的权限,后3位表示其他用户的权限,如表1-21所示。
表1-21 权限位
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/50_03.jpg?sign=1739257106-qtrWwwusuSHEoFiVvJMg9WBTSAibqGcV-0-894a5c64547b27b11e02cf69772ccebe)
举例如下:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/50_04.jpg?sign=1739257106-jUkIss8tj0tHSvlKhsACRRrwzk7X9M0q-0-c15cdd961badee04395191177d166dba)
以上内容表示,列出的是文件夹“account”的信息。该文件夹的所有者是“root”,具有可读、可写、可执行的权限;文件夹所属的用户组是“linux”,具有可读、可执行的权限,但没有可写的权限;其他用户对此文件夹具有可读、可执行的权限,但没有可写的权限。
(4)修改文件权限
在Linux系统中,使用chmod命令来修改文件或目录的访问权限。此命令的格式如下:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/50_05.jpg?sign=1739257106-WgvcTLySWJcL8RTdM7YCS1ZbpnuUjf02-0-d24188623febe32fd11a9ca56e321e0a)
常见的权限表示方法有两种:字母法、数字法。
1)字母法。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/50_06.jpg?sign=1739257106-e1wmUtxHcn67m4dEeSuZisLWFRJ2coCh-0-b71f26f8aad359cf8bd224264181dd68)
每个参数代表不同的含义,具体解释如表1-22所示。
表1-22 chmod命令参数及其含义
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/51_01.jpg?sign=1739257106-BcgL1LCntn8tw6njj6r5nyUn7YNC9Ci2-0-692c46a4c33d9dd13599bb6323046210)
操作符及其含义如表1-23所示。
表1-23 操作符及其含义
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/51_02.jpg?sign=1739257106-LvFME72rREICLgRbvUm1sm2tOulJ8PZs-0-74aed1b7953372ac57f0c50562673a72)
chmod命令的字母法使用示例(如图1-60所示):
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/51_03.jpg?sign=1739257106-HX6fvuRlFD9vpBDPVC7dA5qMuAsKTikQ-0-be17a4b2d2e0043fe18736d767f67165)
该命令表示对1.txt文件赋予其他用户可执行的权限。
2)数字法。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/51_04.jpg?sign=1739257106-RQCqM9KBBRvTnfwapsYYltkH7lmI9s22-0-82c9502f8e1a249500ad7b8da9049838)
在文件权限表示方法中,前文已提到过权限符号所对应的八进制表示方法(3种用户权限对应3位八进制数字)。
chmod命令的数字法使用示例1:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/51_05.jpg?sign=1739257106-l4Wzy7zOctEeVCKpLBKRdddisMOTYWtr-0-b27ee7ef618c8ce97c3b5bffee1420e4)
该命令表示将1.txt文件设置为所有者和用户组可读、可写、可执行,以及其他用户可读的权限(774所对应的权限符号为rwxrwxr--),如图1-61所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/51_06.jpg?sign=1739257106-akApzzjpxRKHiZ7KIsJq7quNscK9l7Nc-0-01d156f42f9ec4d06bd4fffa2db36c36)
图1-60 chmod命令的字母法使用示例
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/51_07.jpg?sign=1739257106-hrRxIqvj78NfgIRdAz22kHZJ6BZrt0UF-0-bcd7cd4127137c851f47e32976206bdd)
图1-61 chmod命令的数字法使用示例1
chmod命令的数字法使用示例2:
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/51_08.jpg?sign=1739257106-btw0O9ZcfmMVUBmgAFQtrwKlbSsqK3H0-0-c97d9b308e3d4cd75963f37d8bd47bd2)
该命令表示递归更改test目录及其所有子目录和文件的权限,赋予所有者、用户组和其他用户可读、可写和可执行权限,如图1-62所示。
(5)目录权限
在Linux渗透/提权中常需要上传漏洞利用程序或其他一些辅助工具,所以需要了解目录相关权限。目录权限主要分3种,如表1-24所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/52_01.jpg?sign=1739257106-MTEUlYZo90l2HjsNRSuS2qU2aauuDTeF-0-668bc8cf2b6c02cca4f8018570fe6936)
图1-62 chmod命令的数字法使用示例2
表1-24 目录权限
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/52_02.jpg?sign=1739257106-ILwf69r5GbkrWpno2BotkGW9jJYI5c38-0-4e12abf0c79c930bb42400b5ac97f75d)
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=1739257106-OtTO1mBiNkIssVr6eUSj2IXileAAFbbN-0-c39adad6e78b317de96ac17c45325785)
图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=1739257106-AKFgu7zjNLKFGG1jTUpVpc37f4OHa8Oe-0-6c1bd408c345be6bd7c685a1b41becc8)
图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=1739257106-whVpYQ7YLMCmsV36lvkXyp3MAA6IBxaI-0-3b8ff58362f4ef95a09f3320b4e14d99)
该命令表示使用字符法为/tmp/ServerScan文件添加SUID特殊权限,如图1-65所示。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/53_02.jpg?sign=1739257106-5qGag0EuHcyoSZn3GC5dwjcXfXxxWnr8-0-d2d1097f7f9b1a854c0b86def6940671)
图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=1739257106-64rKz7I8pa88PF251yH4xM1UIPGPLdG5-0-0cbbe8dd427997c9f316bdec991df0cf)
图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=1739257106-mpt2544M54c660TMo5X4oL5bbp0iJRCy-0-3340a5a03684453dded5430a2f29ac8e)
该命令表示使用字符法为/tmp/ServerScan文件添加SGID特殊权限。
![](https://epubservercos.yuewen.com/E8FBE0/29427546503421506/epubprivate/OEBPS/Images/53_05.jpg?sign=1739257106-thCr0H39lRZM1JMXSyVNKamVZTNKUPJT-0-4c124d20f758879b75d19ebfdf85a14f)
图1-67 为文件添加SGID权限
(3)SBIT
SBIT(Sticky Bit)是另一种特殊权限,用于在共享目录中保护文件和目录。当一个目录被设置了SBIT权限时,该目录中的文件和子目录只能被其所有者和root用户删除或移动,即使其他用户具有该目录的写权限,也无法修改或删除该目录中的文件和子目录。SBIT权限通常用于保护公共目录,如/tmp目录。