这适用于 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
接下来,我尝试限制 @admins 组中的用户。我发现只有这些用户才允许 sudo su 为 root(基于我们制定的自定义 sudo 规则)。
@admins hard maxlogins 1
这似乎能满足我的要求,但似乎很笨重/错误。这是一种直觉——我不太清楚我认为这个有什么问题。
最后,“为什么?”为什么我有这个要求?
我们正在尝试实施控制措施以满足 PCI-DSS 3.1 要求 8.5“请勿使用组、共享或通用 ID、密码或其他身份验证方法”——重点是“共享”。在 Windows 环境中,您只需授予用户执行任何操作的权限,并且没有人共享主管理员帐户。Linux 环境的设计使得对于某些事情,您确实希望以 root 身份登录。必须有一种符合 PCI 要求的方法来解决 Linux 环境中的这个问题。
答案1
这解决了我的问题:记录管理员在生产服务器上运行的所有命令
概括
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
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
(我添加了这个摘要,因为链接到解决方案违背了 Serverfault 方式)