有哪些方法可以严格且永久地限制对 Linux 中超级用户权限的访问?

有哪些方法可以严格且永久地限制对 Linux 中超级用户权限的访问?

所以我想知道是否有可能创建一个没有任何(或几乎没有)用户空间进程以超级用户/root 身份运行的 Linux 系统,并且没有(或几乎没有)其他进程可以提升其权限?

有哪些技术方案可以实现这一目标?其中存在哪些技术缺陷?

答案1

虽然删除超级用户不切实际,但root出于安全考虑,可以限制用户的访问权限。

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-controlling_root_access#sec-Disallowing_Root_Access

我将包括一些摘录,但全部复制会产生很大的答案,所以我只给出要点:

以下是管理员可以进一步确保禁止 root 登录的四种不同方法:

更改根外壳

为了防止用户直接以root身份登录,系统管理员可以在/etc/passwd文件中将root帐户的shell设置为/sbin/nologin。

使用任何控制台设备 (tty) 禁用 root 访问

要进一步限制对 root 帐户的访问,管理员可以通过编辑 /etc/securetty 文件在控制台禁用 root 登录。该文件列出了允许 root 用户登录的所有设备。如果该文件根本不存在,root 用户可以通过系统上的任何通信设备登录,无论是通过控制台还是原始网络接口。这是危险的,因为用户可以使用 Telnet 以 root 身份登录到他们的计算机,Telnet 通过网络以纯文本形式传输密码。

禁用 root SSH 登录

要防止 root 通过 SSH 协议登录,请编辑 SSH 守护程序的配置文件 /etc/ssh/sshd_config,并更改以下行:

#PermitRootLogin yes

阅读如下:

PermitRootLogin no

使用 PAM 限制 root 对服务的访问

PAM 通过 /lib/security/pam_listfile.so 模块在拒绝特定帐户方面提供了极大的灵活性。管理员可以使用此模块来引用不允许登录的用户列表。要限制 root 对系统服务的访问,请编辑 /etc/pam.d/ 目录中目标服务的文件,并确保身份验证需要 pam_listfile.so 模块。

所有部分都有我遗漏的更多信息,但如果您感兴趣,可以让您进一步阅读。

塞林克斯

selinuxroot可以通过修改服务/可执行文件/端口/等的selinux上下文来整体剥夺权限。不过,这涉及到一个很大的主题,因此我将链接 RHEL 文档,而不是深入讨论这一点:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/index

对于一个非常残酷的示例限制,请运行selinuxenforcing尝试:semanage login -a -s user_u root

这会将标准用户权限分发给 root 用户(假设它甚至可以运行,我不确定,因为我目前没有机器可以砖化),并限制它执行任何“root”之类的操作。

然而,这可能会阻止init一堆服务启动,因此可能需要大量其他selinux配置才能允许这些服务作为其他用户运行(考虑到损害一项服务,这可能非常安全,并且非常难以维护)不会向其他人提供任何访问权限)。

答案2

不提供超级用户能力的发行版实际上无法使用,因为它在设计上不允许其用户执行任何系统配置、驱动程序安装或更新。

这就像著名的“完全安全的计算机”,它是一台拔掉插头并关闭的机器。
这是“安全性/可用性”达到极端平衡(实现最大安全性和低可用性)的示例。

此外,内核在启动时仍然执行高于用户权限的操作,并且这些(如任何操作)仍然是可破解的。

答案3

森蒂曼给了一个非常彻底的答案。以下是一些额外的想法:

  • 您可能想要删除cron,因为它需要有权将进程的 UID 设置为任何值。
  • 任何需要能够读取任何文件的进程都可以作为具有“CAP_DAC_READ_SEARCH”功能的非root用户运行 - 请参阅 , , 和
  • 需要能够写入“系统”文件的进程可以被赋予非根 UID(可能每个程序或每个资源都有不同的 UID),然后通过 ACL 授予访问权限。
  • 需要能够执行“特权”操作的进程可以使用其他功能来执行此操作(如上所述);看最小特权原则

为了在设置后更改配置并解决限制root: 

  • 将计算机设置为双启动。
  • 一种操作系统将是经过强化的操作系统,具有最少的 root 访问权限和活动。 
  • 另一种是或多或少的普通 Linux,但删除了网络驱动程序。 
  • 在(罕见?)系统管理员需要管理系统的情况下,他们可以关闭、启动到常规 Linux、执行需要执行的操作,然后重新启动。

显然SELinux 和 AppArmor 明确支持这个概念

相关内容