我的公司要求,每次用户登录生产服务器时,都必须记录该用户登录的原因以及用户想要进行的更改。我的团队想这样做,但很容易忘记。我想帮助他们记住。我考虑过使用 motd,但想要更强大的功能。
我的第一个想法是将用户的 shell 更改为执行类似以下操作的脚本
vim /logs/logindate.txt
bash -l
有没有更好或者更标准的技术?
注意:这些用户是系统管理员,他们希望在不破坏系统的情况下进行日志记录 - 他们只是经常忘记这样做。所以,如果他们可以按 ctrl-c 键,那么...我们假设他们不会这样做。
答案1
看着pam_exec文件。您可以在 PAM 的 system-auth 会话界面中运行登录脚本。该脚本在用户获得 shell 之前以 root 身份运行,因此它可能无法使用read
? 捕获输入。不过,您可以尝试使用read
从用户那里获取原因,并使用语句将其记录到 syslog 中logger
。(我在下面省略了,但您可以捕获 CTRL+C 以防止任何人无故退出。)$PAM_USER 将设置为登录的人,因此您可以将其包含在记录器语句中。
例子:
在 /etc/pam.d/system-auth 会话的顶部:
session required pam_exec.so /usr/local/sbin/getreason
以及 /usr/local/sbin/getreason:
#!/bin/bash
read -p "Reason for logging into production: " reason
logger -t $(basename $0) "$PAM_USER logged in with reason: ${reason}"
如果这个功能不能完美运行,请见谅。我没有测试过,但最近做过类似的事情。(它没有捕获输入。)
编辑:我越想越觉得它不会起作用,因为它运行的阶段。用 替换后,相同的脚本getreason
应该可以工作,但可能需要在 中执行。(首先测试交互式 shell。)$PAM_USER
$(logname)
/etc/profile
我会保留这两个选项,因为至少它能让你朝着正确的方向思考。
答案2
另一种选择是特权帐户管理解决方案,其中管理员不是使用自己的帐户访问,而是由第三方托管管理员帐户,并且必须遵循强制性程序,管理员才能访问生产系统http://en.m.wikipedia.org/wiki/Privileged_Identity_Management
答案3
实现此目的的另一种方法是让您的集中日志记录设施(我正在考虑 Logstash,但您也可以通过其他方式来实现)在生产系统上获取您的 auth.log,将其输入到人们可以记录其理由的应用程序中。
答案4
在寻找解决方案时,我阅读了 Aaron Copley 的回答并想到:“如果我更改用户的 shell 会怎样?”
我在我的 Ubuntu 14.04 机器上成功完成了此操作:
# usermod -s /usr/bin/loginScript username
在您的脚本中,您可以简单地捕获登录的原因。我的脚本如下:
#!/bin/bash
read -p "Tell me why you logged in:" reason
echo "You told me: $reason" >> /var/log/reasonLogin.log
/bin/bash
您应该注意一件事:该脚本不是以 root 身份运行的,因此您可能必须授予用户一些权限才能使其工作。