Linux系统用户最小化检测方法
编辑在对车机的Linux系统做用户最小化检查时遇到用户复杂、不好判断的情况。大部分系统中会运行着各种服务进程,这些服务会创建各种用户用来专门运行各自的进程。所以在判断系统是否存在多余用户的时候,没有一个明确的规则,判断模糊,效率低下。
在网上搜寻查阅了Linux用户相关的信息,了解了Linux用户类型、伪用户等知识,写了个命令方便以后测试时快速找出可疑用户。
Linux伪用户:实现访问控制的利器-猿码集 (yingnd.com)
Linux用户类型
用户类型
超级用户(root用户):拥有对系统的完全控制权,用户ID(UID)为0,通常用于系统管理和维护任务。
系统用户:由系统进程和服务使用,而不是实际的用户。例如,Web服务器、数据库服务器等进程可能以特定系统用户的身份运行。
普通用户:大多数使用Linux系统的用户。对系统的访问权限受到限制,以保护系统免受意外或恶意操作的影响。
用户组类型
私有用户组:默认情况下,当用户被创建时,系统会创建一个与之同名的私有用户组。该用户是其私有用户组的唯一成员。
系统用户组:用于系统进程和服务。例如,Web服务器进程可能属于www-data
用户组。
共享用户组:允许多个用户共享对特定文件或目录的访问权限。例如,一个项目团队可能共享一个用户组,以便共同访问项目文件。
特殊用户组:具有特殊权限或用途的用户组。例如,sudo
用户组允许其成员执行需要超级用户权限的命令。
Linux的etc目录
etc目录下一些与用户权限、安全配置相关的文件:
在做Linux用户最小权限检查时,主要关注以下几个文件:
/etc/passwd
/etc/shadow
/etc/group
/etc/sudoers
Linux伪用户(pseudo user)
Linux系统中的伪用户(pseudo user)是一种特殊的用户身份标识,它们并不对应于真实的个体用户,而是由系统创建并用于特定的目的。伪用户在系统资源访问控制、运行环境配置以及满足特定系统进程对文件、目录、设备等资源的属主和组信息要求方面发挥着重要作用。
伪用户特征
没有登录权限和有效的shell:伪用户并不能像普通用户那样登录系统,它们也没有分配有效的shell。这意味着伪用户不能直接与系统交互或执行命令。 伪用户的登录Shell通常为空,或者设置为特定的值,如/usr/sbin/nologin
或/bin/false
。
用户名与特定系统进程或服务关联:如bin
(拥有可执行的用户命令文件)、sys
(拥有系统文件)、adm
(拥有账户文件)等。
可以没有宿主目录:与普通用户不同,伪用户可能并没有分配宿主目录。这是因为伪用户通常不需要存储个人文件或配置信息,它们仅仅是为了满足系统进程的需求而存在的。
ID值范围:虽然这个特征与你提到的UID范围有些重叠,但值得注意的是,伪用户的ID值(包括UID和GID)通常会被分配在特定的范围内(如1~499),以便与普通用户(UID通常从500或1000开始)相区分。不过,具体的范围可能会因不同的Linux发行版和配置而有所不同。
查找“真用户”
根据伪用户特征,可以写一条命令来自动输出所有非伪用户。
awk -F':' '($7 !~ /nologin|false/ || $1 == "root")' /etc/passwd
这条命令使用!~
操作符,它表示字段$7
(登录shell)不匹配正则表达式/nologin|false/
,即登录shell中不包含nologin
或false
。如果登录shell不包含这两个字符串之一,或者用户名是root
,则输出该用户的完整记录。
由于不同Linux发行版中伪用户的UID范围不一样,所以就没有把ID值加入判断条件。
以下是我在kali中运行的结果:
┌──(kali㉿kali)-[~]└─$ awk -F':' '($7 !~ /nologin|false/ || $1 == "root")' /etc/passwdroot:x:0:0:root:/root:/usr/bin/zshsync:x:4:65534:sync:/bin:/bin/syncpostgres:x:130:132:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bashkali:x:1000:1000:,,,:/home/kali:/usr/bin/zshcntlm:x:138:65534::/var/run/cntlm:/bin/sharpwatch:x:139:142:ARP Watcher,,,:/var/lib/arpwatch:/bin/sh
Linux用户权限最小化原则
Linux的用户最小化原则是指在Linux系统中,为了增强系统的安全性和管理效率,应尽量减少不必要的用户账户和权限分配。具体来说,这一原则包括但不限于以下几个方面:
登录用户最小化:平时应养成不使用root账号登录的好习惯,只有在必要时才使用root账户。普通用户应通过sudo等方式提升权限来执行需要高权限的操作。
用户授权最小化:为每个用户分配最小的必要权限,确保用户只能访问和修改其工作所必需的系统资源。避免为用户分配过多的权限,以减少潜在的安全风险。
系统服务最小化:无用的服务不开启,减少系统暴露的攻击面。只有必要的服务才应该运行,以降低系统被恶意利用的风险。
提供一条参考用例
用例名称:系统用户管理
测试目的:测试系统是否存在不必要的用户
测试工具:ADB、SSH
测试步骤:
尝试通过ADB、SSH等远程调试工具连接进入样件系统;
通过查看/etc/passwd等相关文件判断系统是否存在非必要的用户,如果系统存在除伪用户以外的其它用户则进行步骤3,如果不存在其它用户则测试通过;
查看其它用户的权限,如果用户存在不必要权限,则测试不通过;如果用户权限为系统正常运行所必需权限,则测试通过。
- 2
- 0
-
分享