如何记录所有用户提交的所有UNIX Shell命令?


8

是否有一种优雅的方式来记录在计算机上所有shell中提交的每个命令?这是在不经常使用的Ubuntu服务器的背景下进行的,我是唯一的人工用户。(自动化系统使用了多个用户帐户。)

我希望这不引人注目且开销低,所以如果有一种简单的方法涉及到,我会喜欢它script

Answers:


9

自从时间的曙光(实际上可以追溯到人们必须为使用的每个计算机周期实际支付货币的时间)以来,Unix及其克隆都内置了一个名为Process Accounting(acct)的系统。这使系统管理员可以准确地知道他们的用户在做什么,因此可以相应地向他们收费。

acct设施仍然存在于大多数Unix和Linux系统的这一天。

该站点:http : //www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.html告诉您如何启用它。


这还可以用于记录哪个用户执行sudo和su,以及随后执行哪个root命令吗?
丹尼尔·贝克

我相信它会记录每条由用户,tty等输入的命令运行情况。您可以将tty上的命令与登录到该tty的用户进行匹配,以跟踪他们通过sud或sudo引导的用户。
Majenko 2011年

谢谢,我完全不知道此功能。对手册页的快速阅读表明,日志记录将继续进行,直到磁盘空间不足的情况为止-因此可能需要logrotate脚本。
jl6 2011年

我认为流程记帐只是记录了哪个程序在运行,而不是带有所有参数的命令?
Sirex

2

这是记录所有shell命令的一种非常好的快捷方法

步骤1:

使用您喜欢的文本编辑器打开/ etc / bashrc并在末尾添加以下行:

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

第2步:

通过在/etc/syslog.conf文件中添加以下行,将syslogger设置为将local6捕获到日志文件中:

local6.*                /var/log/cmdlog.log

[在此处查看完整的博客文章]


我警告用户可以通过重置变量来禁用此功能,并且由于它是在“发出每个主提示之前”执行的,因此不会记录该事实。
dmckee ---前主持人小猫,

2

您可以使用snoopy

安装和删除非常简单(不需要内核模块或修补程序)。请注意,这不是适当的审核解决方案,可以很容易地绕开它。

披露:我目前是史努比的维护者。


Bostjan Skufca在此处还提供了有关在Ubuntu中安装snoopy的其他说明,并在此处的同一线程中提供了其他注释。
karel 2014年

史努比+1;它在/var/log/auth.log中提供了一个漂亮的命令和参数日志
David Goodwin

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.