我有一个Linux服务器(CentOS),许多用户可以通过ssh访问这个服务器。我需要从用户那里获得所有历史记录命令:
发布于 2018-11-02 04:06:52
这个问题有一个相当复杂的答案,因为您正在寻找信息,而且您没有提供太多信息( Linux、版本、应用程序、用例的发行版)。
您需要至少合并两组日志(如果不是更多的话)才能解决这个问题,除非您编写了一些自定义的日志来完成,否则每天、每周甚至每个月以这种方式对系统进行审计将需要大量的工作。最好是修复sudoers文件中的任何问题,并研究如何控制和审核用户,而不是在事后查看如何找到这些信息。
/var/log/secure (RHEL/CentOS,/var/log/auth.log for Debian,取决于您的发行版和安装程序)应该显示人们何时通过SSH连接,以及当他们使用sudo执行命令时;使用grep,您可以找到他们的IP,从那里您可以获得他们连接的历史记录:
grep '$USER_NAME‘/var/log/secure
向我展示这样一个输出(当然,是santized的):
Nov 1 22:38:41 $HOSTNAME sshd[26732]: Accepted publickey for $USERNAME from $IP_ADDRESS port 51203 ssh2: RSA $HASH
Nov 1 22:38:41 $HOSTNAME sshd[26732]: pam_unix(sshd:session): session opened for user $USERNAME by (uid=0)
Nov 1 22:38:41 $HOSTNAME systemd-logind[471]: New session 3427 of user $USERNAME.
Nov 1 22:38:41 $HOSTNAME systemd: pam_unix(systemd-user:session): session opened for user $USERNAME by (uid=0)
Nov 1 22:46:37 $HOSTNAME sudo: $USERNAME : TTY=pts/0 ; PWD=$HOME ; USER=root ; COMMAND=/bin/grep $USERNAME /var/log/auth.log
Nov 1 22:46:37 $HOSTNAME sudo: pam_unix(sudo:session): session opened for user root by $USERNAME(uid=0)因此,在安全/auth日志中,我已经可以看到IP地址、用户名、连接时间戳、用户执行的所有特权命令以及它们的时间戳。
但是,您可以通过用用户的用户名替换$USER_NAME并执行此命令来查看用户命令的完整历史记录,但不需要时间戳。这将在无意中显示它们也在哪个目录中。
su -c "history" $USER_NAME从用户那里给我看这个
500 exit
501 ls
502 cd Archive
503 ls
504 rm -rf *.NOTREAL
505 cd ../我知道这个人(实际上是我,获得这个例子)第一次连接SSH时执行命令501,因为exit是它之前的命令(这是一个错误的指示符,因为如果他们超时而不是使用exit呢?),但是一旦连接,他们就进入Archive目录,删除所有的.NOTREAL文件,然后转移到父目录。
根据我在安全/auth日志中发现的内容和用户的历史记录,我通常可以知道他们在什么时候做了什么,但这是一个松散的关联。如果让用户通过ssh进行连接,然后执行sudo或sudo -i这样的操作来作为所有事情的根,这将变得更加困难,因为历史最终是结合在一起的。
如果您真的想监视这样的事情,那么您确实需要了解如何设置特权用户帐户、sudoers文件、日志记录和应用程序。我已经给出了一种基本的方法来解决这个问题,但它远不是最好的方法,而且在现实世界的场景中,它也远远不能正常使用。
https://unix.stackexchange.com/questions/479286
复制相似问题