hkt1998

hkt1998

Linux系统用户最小化检测方法

2024-07-17

在对车机的Linux系统做用户最小化检查时遇到用户复杂、不好判断的情况。大部分系统中会运行着各种服务进程,这些服务会创建各种用户用来专门运行各自的进程。所以在判断系统是否存在多余用户的时候,没有一个明确的规则,判断模糊,效率低下。

在网上搜寻查阅了Linux用户相关的信息,了解了Linux用户类型、伪用户等知识,写了个命令方便以后测试时快速找出可疑用户。

Linux伪用户:实现访问控制的利器-猿码集 (yingnd.com)

Linux用户类型

用户类型

超级用户(root用户):拥有对系统的完全控制权,用户ID(UID)为0,通常用于系统管理和维护任务。

系统用户:由系统进程和服务使用,而不是实际的用户。例如,Web服务器、数据库服务器等进程可能以特定系统用户的身份运行。

普通用户:大多数使用Linux系统的用户。对系统的访问权限受到限制,以保护系统免受意外或恶意操作的影响。

用户组类型

私有用户组:默认情况下,当用户被创建时,系统会创建一个与之同名的私有用户组。该用户是其私有用户组的唯一成员。

系统用户组:用于系统进程和服务。例如,Web服务器进程可能属于www-data用户组。

共享用户组:允许多个用户共享对特定文件或目录的访问权限。例如,一个项目团队可能共享一个用户组,以便共同访问项目文件。

特殊用户组:具有特殊权限或用途的用户组。例如,sudo用户组允许其成员执行需要超级用户权限的命令。

Linux的etc目录

etc目录下一些与用户权限、安全配置相关的文件:

文件/目录路径

具体作用

/etc/passwd

包含系统上所有用户的基本信息,如用户名、用户ID、用户所属的主组ID、家目录和默认Shell等。

/etc/shadow

存储用户的加密密码及与密码相关的安全策略,如密码的过期时间、密码更改间隔等。只有root用户才能读取。

/etc/group

包含系统上所有用户组的信息,包括组名、组ID以及属于该组的用户列表。用于管理用户组及其成员。

/etc/sudoers

sudo程序的配置文件,用于定义哪些用户可以以何种权限执行哪些命令。用于精细控制用户对系统资源的访问权限。

/etc/hosts.allow

用于配置TCP Wrappers的访问控制,定义了允许访问的规则。

/etc/hosts.deny

用于配置TCP Wrappers的访问控制,定义了拒绝访问的规则。

/etc/ssh/sshd_config

SSH服务器的配置文件,用于设置SSH连接的参数和安全选项。

/etc/selinux/config

SELinux的配置文件,用于控制SELinux的安全策略模式。

/etc/pam.d/

包含PAM认证模块的配置文件。PAM提供了一种灵活的认证机制,用于控制对系统资源的访问。

/etc/login.defs

包含系统登录时的默认设置,如密码策略、用户会话时间限制等。用于统一设置系统范围内的登录策略。

/etc/security/limits.conf

用于设置系统资源的限制,如每个用户或进程可以打开的文件数、可以使用的CPU时间等。用于防止单个用户或进程消耗过多资源。

在做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(拥有账户文件)等。

伪用户名

简要说明

bin

拥有可执行的用户命令文件

daemon

系统守护进程通常使用的伪用户身份

sys

拥有系统文件,确保系统文件的安全性和正确性

adm

拥有帐户文件,与系统的账户管理相关

uucp

UUCP(Unix-to-Unix Copy)服务使用

lp/lpd

打印机守护进程使用,与打印服务相关

mail

邮件守护进程使用,处理系统邮件

news

新闻守护进程使用,与新闻组服务相关

nobody

不拥有任何文件访问权限,用于运行不需要特定用户权限的进程或服务

其他

如apache、ftp、mysql、sshd等,与特定的网络服务相关,用于隔离和限制服务权限

可以没有宿主目录:与普通用户不同,伪用户可能并没有分配宿主目录。这是因为伪用户通常不需要存储个人文件或配置信息,它们仅仅是为了满足系统进程的需求而存在的。

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中不包含nologinfalse。如果登录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系统中,为了增强系统的安全性和管理效率,应尽量减少不必要的用户账户和权限分配。具体来说,这一原则包括但不限于以下几个方面:

  1. 登录用户最小化:平时应养成不使用root账号登录的好习惯,只有在必要时才使用root账户。普通用户应通过sudo等方式提升权限来执行需要高权限的操作。

  2. 用户授权最小化:为每个用户分配最小的必要权限,确保用户只能访问和修改其工作所必需的系统资源。避免为用户分配过多的权限,以减少潜在的安全风险。

  3. 系统服务最小化:无用的服务不开启,减少系统暴露的攻击面。只有必要的服务才应该运行,以降低系统被恶意利用的风险。

提供一条参考用例

  • 用例名称:系统用户管理

  • 测试目的:测试系统是否存在不必要的用户

  • 测试工具:ADB、SSH

  • 测试步骤:

    1. 尝试通过ADB、SSH等远程调试工具连接进入样件系统;

    2. 通过查看/etc/passwd等相关文件判断系统是否存在非必要的用户,如果系统存在除伪用户以外的其它用户则进行步骤3,如果不存在其它用户则测试通过;

    3. 查看其它用户的权限,如果用户存在不必要权限,则测试不通过;如果用户权限为系统正常运行所必需权限,则测试通过。