通用login脚本

几个星期前,我认为这是一个好主意,写一个脚本,每当有用户login到我的服务器应该给我一个电子邮件。

所以我来到一个完美的工作脚本notifyLogin.sh ,然后我决定从每个用户的.bash_login脚本调用它。

只要这么好,但今天我发现有人可以使用ssh client -t选项login我的服务器,从而select一个可用的shell。 例如:

 ssh user@myserver -t sh 

这样, .bash_login不会执行,也不会执行/etc/profile

我的问题是:是否有任何“通用”(这意味着ID不重要哪个shell正在使用)脚本执行每当用户login?

一种方法是使用syslog并将消息redirect到电子邮件:

  • 邮件输出模块(ommail)为rsyslog
  • smtp()驱动程序在syslog-ng中

另一种方法是使用像SEC或Splunk这样的日志parsing器。

另一种select是使用pam。 从google中find的页面被盗

 session optional pam_exec.so /path/to/your/script/or/executable 

有关详细信息,请参阅pam_exec(8)手册页。 好处是你不需要parsing日志来完成它 – 它使用标准机制来插入会话。 根据您的放置位置,您可以在用户创build新会话时或仅在通过SSH进行连接时使用它。

另一种方法是:可以在后台运行安全日志过滤来提取有趣的事件,如:

 tail -n 0 -f /var/log/secure | grep --line-buffered "sshd:session): session opened" > /var/log/sec-filtered 

并有一个周期性的任务,检查已过滤的输出文件的大小,以发送电子邮件并在安全日志上重新启动过滤。