问题描述
我们的小公司运行 Ubuntu Server 11.10,有几个人可以通过 SSH 访问。有时也会使用实际的终端。我们如何在本地记录所有运行的 Bash 命令以及用户和时间戳?
我们可以假设 no-one 是邪恶的并且积极地试图避免日志记录,但我们仍然希望用户不要将 write-access 直接写入他们的日志文件。必须正确处理同时会话。
最佳答案
对于 BASH shell,编辑 system-wide BASH 运行时配置文件:
sudo -e /etc/bash.bashrc
附加到该文件的末尾:
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
使用新文件为 “local6” 设置日志记录:
sudo -e /etc/rsyslog.d/bash.conf
而且内容…
local6.* /var/log/commands.log
重启 rsyslog:
sudo service rsyslog restart
登出。登录。瞧!
但我忘记了日志轮换:
sudo -e /etc/logrotate.d/rsyslog
有一个以相同方式轮换的日志文件列表…
/var/log/mail.warn
/var/log/mail.err
[...]
/var/log/message
因此,在该列表中添加新的 bash-commands 日志文件:
/var/log/commands.log
节省。
次佳答案
您可以使用 snoopy 。
史努比记录器可能很适合您的目的。它并不是不可避免的日志记录解决方案,而是对于喜欢跟踪自己操作的勤奋管理员的有用工具。
披露:我是史努比的维护者。
第三种答案
在这方面,进程记帐系统可能会有所帮助,尤其是提供 lastcomm 和 ac 命令的 acct 包。
ac 命令以小时为单位打印出有关用户连接时间的统计信息。这是用户通过 SSH 或串行终端远程或在控制台上连接到系统的时间。
lastcomm 命令显示有关先前执行的命令的信息。最近的条目显示在列表顶部。还显示每个进程使用的 CPU 时间总量。
一个可能有用的旧教程在这里:
http://www.linuxjournal.com/article/6144?page=0,1
其他会计命令如 last 等可以在本教程中找到:
http://www.techrepublic.com/article/system-accounting-in-linux/1053377