有一个服务器,许多用户可以使用ssh访问该服务器。我试图找出哪个用户执行了某个命令。
我可以知道当前正在使用来访问服务器的用户列表。我也可以知道使用来who
执行的命令列表history
。
但是如何知道哪个用户cp file1.sh file2.sh
在服务器中执行了命令呢?用户已执行命令并注销
有一个服务器,许多用户可以使用ssh访问该服务器。我试图找出哪个用户执行了某个命令。
我可以知道当前正在使用来访问服务器的用户列表。我也可以知道使用来who
执行的命令列表history
。
但是如何知道哪个用户cp file1.sh file2.sh
在服务器中执行了命令呢?用户已执行命令并注销
Answers:
每个新的用户连接都会产生一个sshd
具有特定PID 的新会话。您可以pstree
用来打印从哪个sshd
会话继承的命令,然后在中交叉检查此PID /var/log/auth.log
。
示例(匿名):我以相同的远程用户登录到具有3个同时会话的远程服务器。我现在想找出运行命令的客户端来自哪个IP watch date
。
$ pstree -p | grep watch
| |-sshd(15243)---sshd(15342)---bash(15343)---watch(15450)
$ sudo grep 15243 /var/log/auth.log
Mar 7 15:37:29 XXXXXXXXXX sshd[15243]: Accepted publickey for XXXXXXXXXX from 12.34.56.78 port 48218 ssh2
Mar 7 15:37:29 XXXXXXXXXX sshd[15243]: pam_unix(sshd:session): session opened for user XXXXXXXXXX by (uid=0)
Mar 7 15:37:44 XXXXXXXXXX sudo: XXXXXXXXXX : TTY=pts/7 ; PWD=/home/XXXXXXXXXX ; USER=root ; COMMAND=/bin/grep 15243 /var/log/auth.log
pstree -p
显示该watch
命令是从sshd
PID 15243 继承的grep
。对此PID的/var/auth/auth.log
显示表明,开始此会话的是IP 12.34.56.78。因此,这也是开始的用户watch
。
至于history
专门针对该用户的查找,当所有远程用户都使用同一本地SSH用户时,我无法看到它。另外,它很容易被欺骗/灭活等,因此并不是很可靠。如果将其保存到历史记录文件中,则只需cp
在该文件中查找该命令并向后看即可,但是如果该命令不存在,则没有太多事情要做。
/var/log/secure
。
/var/log/auth.log.1
存在等,请尝试使用它们,以查看它们是否包含信息。之后,重新启动rsyslog
(sudo service rsyslog restart
),看看它是否开始填充auth.log
,它应该已经在做。在Ubuntu中,SSHD /var/log/auth.log
默认情况下会记录日志,因此,除非您通过/etc/ssh/ssd_config
或/etc/syslog.conf
(可以auth
在此处检查级别所记录到的文件)显式更改了记录目标,否则它应该在那里。如果不是:出现问题:-)。
您可以将这两行添加到/ etc / profile或/ etc / bashrc中,以便记录bash执行的所有命令:
whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local3.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
这将使用syslog记录每个执行的命令以及执行该命令的用户及其IP地址,格式如下:
Jan 8 08:43:49 xpto local3.debug root: root@192.168.x.y [29385]: ls -al [0]
另外,您可以将以下行添加到syslog配置(/etc/syslog.conf)中,以将local3消息重定向到特定文件。
local3.* /var/log/prompt.log
syslog-ng
作为改进,配置文件为/etc/syslog-ng/syslog-ng.conf
。
假设您正在使用bash,history
则只会显示您的命令行历史记录。默认情况下,它将读取~/.bash_history
历史记录。请注意,可以通过执行类似的操作来更改(尽管可能性很小)HISTFILE=/home/userFoo/.my_alt_history
。
假设您是root用户,则可以扫描所有用户目录并阅读其历史记录,以查看谁在运行该命令。
grep: /var/log/auth.log: No such file or directory
:-(