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

这是Ubuntu 14.04和Centos 7。

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

基本上,我一次只需要一个用户就可以以root身份运行命令。 这里的目的是审计。

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

这里是limits.conf行我试图限制这个:

root hard maxlogins 1 

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

 @admins hard maxlogins 1 

这似乎做我想要的,但似乎笨重/错误。 称之为一种直觉 – 我并不完全明白这个问题。

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

我们正试图实施控制措施,以满足PCI-DSS 3.1要求8.5“不要使用组,共享或通用的ID,密码或其他身份validation方法” – 强调“共享”。 在Windows环境中,您只需向用户授予执行任何操作的权限,而且没有人共享主pipe理员帐户。 Linux环境的devise使得对于某些情况,你真的想以root身份login。 在Linux环境中必须有PCI兼容的方式来解决这个问题。

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

概要

1)安装auditd

2)在audit.rules中用这些规则审计execve系统调用

 -a exit,always -F arch=b64 -F euid=0 -S execve -a exit,always -F arch=b32 -F euid=0 -S execve 

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 ) 

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

 session required pam_loginuid.so 

(我包括这个摘要,因为链接到解决scheme违反Serverfault方法)