如何记录每个键入的命令


24

您如何记录有人输入到Shell中的每个命令?

我是在保护自己的基础上询问您是否已登录到他人的服务器并且出现故障,或者是否有人(有意或恶意地)登录到您的服务器。

即使新手也能够分流历史unset history或创建一个新的外壳,以隐藏自己的踪迹。

我很好奇Linux高级管理员如何跟踪已输入的命令/对系统所做的更改。

Answers:


29

审核。如果添加

-a exit,always -F arch=b64 -S execve
-a exit,always -F arch=b32 -S execve

/etc/audit/audit.rules每个执行的命令都会被记录。参见:http : //whmcr.com/2011/10/14/auditd-logging-all-commands/

然后将其发送到syslog服务器。


当然,execve这不是您唯一需要登录的系统调用。为什么不execvp那么好呢?还是execl?等
2rs2ts '16

实际上,我注意到在手册页中exec它说:“ exec() 功能族用新的过程映像替换了当前过程映像。本手册页中描述的功能是。的前端execve(2)。” 因此,尽管我不确定,但execveat我可以对exec家人放心。
2rs2ts '16

5

您可以使用脚本命令。该命令未包含在POSIX中,但是您会发现将所有击键以及输出和错误消息存储在文件中很有用。您以后可以查看文件。如果您正在做一些重要的工作,并希望保留所有活动的日志,则应在登录后立即调用此命令:

$ script
脚本已启动,文件为打字稿
$ _ 请注意,这是另一个外壳程序-登录外壳程序的子级

提示符返​​回,您现在在此处输入的所有击键(包括用于退格的击键)都记录在文件“ typescript”中。录制结束后,您可以输入exit来终止会话。
注意:如果输入script filename,则会话将存储在文件而不是typescript中,即,如果未指定特定文件名,则typescript是默认值。

现在,无论哪种情况,您都可以使用cat filenamecat typescript来查看记录的会话。

如果您希望将新会话附加到旧文件,请使用: script -a 将新会话附加到打字稿,相同的默认规则也适用于此

这是系统管理员可以跟踪会话的一种方式。希望它能提供有用的信息。干杯!

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.