限制切换到root帐户的并发用户数?

JDS*_*JDS 5 linux sudo pci-dss limits ubuntu-14.04

这适用于 Ubuntu 14.04 和 Centos 7。

我需要限制以 root 身份主动运行的用户数量。即在 CLI 上以 root 身份登录。

基本上,我一次只希望一个用户能够以 root 身份运行命令。这里的目的是审计。

我研究了在 /etc/security/limits.conf 中设置限制,但 pam_limits.so 模块似乎只影响登录。或者登录shell。没有把握。但无论具体情况如何,它确实会阻止用户多次通过 SSH 连接到一个盒子,但不会阻止多个用户通过“sudo su”成为 root 用户。因此,设置limits.conf 仍然可以允许多个用户同时以root 身份登录。

这是我尝试过的limits.conf行来限制这个:

root            hard    maxlogins            1
Run Code Online (Sandbox Code Playgroud)

接下来我尝试限制@admins 组中的用户。我认为这些用户是唯一允许 sudo su 到 root 的用户(基于我们现有的自定义 sudo 规则)。

@admins            hard    maxlogins            1
Run Code Online (Sandbox Code Playgroud)

这似乎做我想做的事,但似乎笨拙/错误。称之为直觉——我不太清楚我认为这个错误的地方。

最后,“为什么?”。为什么我有这个要求?

我们正在尝试实施控制以满足 PCI-DSS 3.1 要求 8.5“不要使用组、共享或通用 ID、密码或其他身份验证方法”——强调“共享”。在 Windows 环境中,您只需授予用户执行任何操作的权限,并且没有人共享主管理员帐户。Linux 环境的设计使得在某些情况下,您确实希望以 root 身份登录。在 Linux 环境中必须有一种符合 PCI 标准的方法来解决这个问题。

JDS*_*JDS 2

这解决了我的问题:记录管理员在生产服务器上运行的所有命令

概括

1)安装auditd

2)execve使用audit.rules中的这些规则审核系统调用

-a exit,always -F arch=b64 -F euid=0 -S execve
-a exit,always -F arch=b32 -F euid=0 -S execve
Run Code Online (Sandbox Code Playgroud)

3)添加audit=1到grub.conf

Centos 和 Ubuntu 的示例:

#Centos
grep audit=1  /etc/default/grub || \
( sed -i.bak -e '/^GRUB_CMDLINE_LINUX=/ s/" *$/ audit=1"/' /etc/default/grub && \
/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg )

#ubuntu
grep audit=1  /etc/default/grub || \
( sed -i.bak -e '/^GRUB_CMDLINE_LINUX=/ s/" *$/ audit=1"/' /etc/default/grub && \
/usr/sbin/update-grub )
Run Code Online (Sandbox Code Playgroud)

4) 将此行放入这些文件 /etc/pam.d/{login,kdm,sshd} 中

session  required                pam_loginuid.so
Run Code Online (Sandbox Code Playgroud)

(我包含此摘要,因为链接到解决方案违反了服务器故障方式)