在 Linux 中通过 ssh 审计文件修改

cha*_*dur 2 linux ssh tty audit

我想监视对 Linux 服务器中的文件所做的所有修改

在一些研究中,我发现我使用以下命令安装和配置了审计工具

yum install audit # installation
/etc/init.d/auditd start # started service
auditctl -w /root/file-name -p war -k password-file # configured rule to audit file 
ausearch -f /root/file-name # Command to search modifications
Run Code Online (Sandbox Code Playgroud)

它记录了对特定文件所做的所有修改

一切都很好,直到我遇到以下

案例 1:我使用以下命令从服务器中删除了我正在使用审计监控的文件

rm -rf /root/file-name
Run Code Online (Sandbox Code Playgroud)

记录如下
type=SYSCALL msg=audit(1540222267.321:1057): arch=c000003e syscall=2 success=yes exit=3 a0=7ffe22abf91a a1=941 a2=1b6 a3=7ffe22abed70 items=2 ppid=21053 pid=42458 auid=14628 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=5 comm="touch" exe="/bin/rm" key="password-file"

案例 2:我使用以下命令从远程服务器删除了文件

ssh cl14470 "echo 'rm -rf /root/chaithu'|sudo su - root"
Run Code Online (Sandbox Code Playgroud)

记录如下
type=SYSCALL msg=audit(1540222588.196:1118): arch=c000003e syscall=263 success=yes exit=0 a0=ffffffffffffff9c a1=ce70c0 a2=0 a3=7fff52a6af40 items=2 ppid=42520 pid=42533 auid=14628 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=9 comm="rm" exe="/bin/rm" key="password-file"

现在让我困惑的一点是为什么当我远程执行命令时 tty 被记录为 none

我已经在网上搜索过有关此问题的信息,但不幸的是我找不到任何可以消除我困惑的东西

有人能解释一下为什么在情况 2 中它被记录为 tty=(none)

mos*_*svy 6

因为这就是命令的执行方式——没有任何控制 tty。

您尚未将任何-t选项传递给ssh,并且ssh在使用参数调用时默认不分配伪终端,就像您的情况一样。( ssh cl14470 "echo ...").

这是ssh(1)联机帮助页中描述的默认行为:

当服务器接受用户的身份后,服务器要么在非交互式会话中执行给定的命令,要么在未指定命令的情况下登录机器并为用户提供正常的 shell 作为交互式会话。与远程命令或 shell 的所有通信都将自动加密。

如果请求交互式会话,默认情况下 ssh 只会在客户端有一个交互式会话时请求一个伪终端 (pty)。标志 -T 和 -t 可用于覆盖此行为。

所以默认情况下ssh只会在远程机器上分配一个伪终端,如果a)它在没有“命令”参数的情况下运行并且 b)本地机器上的 ssh 客户端的 stdin是一个 tty。

-t选项强制ssh分配一个伪 tty,该-T选项强制它分配一个,而不管其他因素。