我的公司要求,任何时候用户登录生产服务器时,都必须记录该人登录的原因以及用户打算进行的更改。我的团队想这样做,但很容易忘记。我想帮助他们记住。我考虑过一个 motd,但想要一些更强大的东西。
我的第一个想法是将用户的 shell 更改为执行类似操作的脚本
vim /logs/logindate.txt
bash -l
Run Code Online (Sandbox Code Playgroud)
有没有更好或更标准的技术?
注意:这个想法是这些用户是系统管理员并且希望在不破坏系统的情况下创建日志条目 - 他们只是经常忘记这样做。所以,如果他们可以按 ctrl-c,那么……我们假设他们不会。
我想将我的根服务器的访问权限授予外部系统管理员,但我想确保仔细检查他对我的服务器所做的事情,例如复制我不希望他们做的数据等等。我还想跟踪访问的任何文件,即使是只读且未编辑的文件。
我怎样才能做到这一点?
这个问题与我之前的问题有关:记录管理员在生产服务器上运行的所有命令
管理员通过个人用户名登录服务器,然后运行sudo -i成为 root ,这是公司的政策。运行时sudo -i,sudo 将创建一个名为 的环境变量SUDO_USER,其中包含原始用户的用户名。
是否可以auditd在每个命令的日志中包含此变量?或功能等价物。
这是当前的规则集auditd:
# First rule - delete all
-D
# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 320
# Log any command run on this system
#-a exit,always -F arch=b64 -S execve
-a exit,always -F arch=b32 -S execve
Run Code Online (Sandbox Code Playgroud) 这适用于 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 标准的方法来解决这个问题。
我熟悉配置 Linux 服务器以符合PCI-DSS 3.2 的一些更常见的方法,至少符合SAQ A的要求。一个常见的问题是要求 8.5,它要求:
通用用户 ID 和帐户被禁用或删除
这包括 root 用户,显然不能被禁用,因此需要“补偿控制”(在 PCI-DSS 的术语中)。一个常见的配方是以下的一些变体:
ssh才能使用 SSH 密钥;sudo获取root;pam_loginuid一旦用户有root,安装记录登录用户ID;和auditd以记录 root 操作和登录用户 ID。但是,如果我今天要处理,它不是我要保护的单一机器:它是一个小型集群(目前有 10 台机器),并且能够在机器之间ssh(和scp文件)进行(和文件)真的非常有用。作为非 root 用户必须这样做将是一个真正的痛苦:几乎总是你需要的文件只能被 root 读取,并且需要放在一些只有 root 可以写入的地方。
我想要做的是允许ssh在机器之间作为 root,使用服务器上存在的 SSH 密钥。这在块中使用命令很容易。我不太担心允许破坏一台机器的人控制整个集群的安全隐患:这些机器非常相似,如果他们设法破坏一台机器,他们可能可以使用相同的过程来访问其余的./etc/ssh/sshd_configPermitRootLoginMatch Address
但是,如果我这样做,我将失去跟踪谁在运行什么命令的能力,因为当我ssh到另一台机器时,没有登录 UID 不再附加到进程。PCI-DSS 中的补偿控制需要“满足原始 PCI DSS 要求的意图和严格性”,并且要求 8.5 的意图被声明为使“跟踪系统访问和活动到个人”成为可能。在不保留登录 UID 的情况下,我们不再为允许 root 用户存在提供补偿控制。 …