我的公司要求用户login到生产服务器时,必须logginglogin用户的原因以及用户打算做出的更改。 我的团队想要做到这一点,但很容易忘记。 我想帮助他们记住。 我考虑了一个动机,但想要更强一点的东西。
我的第一个想法是将用户的shell更改为一个类似的脚本
vim /logs/logindate.txt bash -l
有更好或更标准的技术?
注意:这个想法是,这些用户是系统pipe理员,并且希望在不破坏系统的情况下进行日志logging – 他们只是经常忘记这么做。 所以,如果他们可以按Ctrl-C,那么…我们假设他们不会。
看看pam_exec.so 。 您可以在PAM的system-auth的会话界面中login时运行脚本。 脚本在用户获取shell之前以root用户身份运行,因此可能无法通过read
捕获input? 不过,您可以尝试使用read
来获取用户的原因,并使用logger
语句将其logger
到syslog中。 (我已经在下面省略了,但是可以通过CTRL + C来阻止任何人无故退出。)$ PAM_USER将被设置为login人员,因此您可以将其包含在logging器语句中。
例:
在/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}"
道歉,如果这不起作用完美。 我没有testing,但最近做了类似的事情。 (它没有捕获input。)
编辑:我越想到这一点,越不认为它会运行,因为它的运行阶段。 使用$(logname)
replace$PAM_USER
之后,同样的getreason
脚本应该可以工作,但可能需要在/etc/profile
执行。 (首先testing交互式shell。)
我会留下这两个选项,因为如果没有别的东西,至less应该让你朝着正确的方向思考。
另一种方法是特权帐户pipe理解决scheme,pipe理员不用pipe理员访问自己的帐户,pipe理员帐户由第三方托pipe,强制性程序必须在pipe理员访问生产系统之前遵循。http:// en。 m.wikipedia.org/wiki/Privileged_Identity_Management
另一种方法是使用集中日志function(我在想Logstash,但是你可以通过其他方式来完成这个function)把你的auth.log带到生产系统上,并把它提供给一个应用程序,让用户logging他们的理由。
我看到在运行HP Server Automation *的客户中实现的方式是,他们依靠工具的先天日志和审批步骤的组合(我去过几个客户,除了开发者之外,没有sudo或root权限)。
批准可以通过Remedy和Operations Orchestration,SA内的pipe理login等来完成。
所有人都说,除了企业自动化和pipe理工具外,@ Aaron Copley的答案是一个很好的select。
*我是HP自动化套件顾问的高级HPSA,HPOO和其他方面的人员
在寻找解决scheme的同时,我读了Aaron Copley的回答,并认为:“如果我更换用户的shell,该怎么办?
我在Ubuntu 14.04机器上成功完成了这个任务:
# usermod -s /usr/bin/loginScript username
在脚本上,您可以简单地捕获login的原因。 我的是这样的:
#!/bin/bash read -p "Tell me why you logged in:" reason echo "You told me: $reason" >> /var/log/reasonLogin.log /bin/bash
有一件事情你应该注意:脚本不是以root身份运行的,所以你可能必须给用户一些权限才能使之工作。