监视文件与SCP通过SSH完成的副本

有没有办法保留使用SCP复制的文件日志? 我正在pipe理一个服务器,其中包含一些应该监视的文件(在特定的文件夹及其子文件夹中),所以当有人通过SSH复制它们时,应该logging复制过程。

我考虑过查看用户的Bash命令历史logging,并search以scp开头的命令,但这是对隐私的公然侵犯,用户也很容易删除这个历史logging(即使没有错误的意图)。

有没有人知道这个方法? 我可以使用用户名/密码为服务器build立一个基于Web的界面,然后logging下载会很容易,但是我对“裸机”解决scheme感兴趣,如果有的话。

编辑:我看了SSHD的日志logging选项,如FascistLogging或debugging日志logging,但这些似乎并不合适。 他们真的是解决scheme吗?

编辑2:我开始相信,这个问题不应该堆栈溢出,而是服务器故障…我该怎么办?

我会用incron 。 它利用Linux内核inotify子系统,如果某些受监视的目录树/文件被修改,你可以执行任何你想要的。 例如, incrontab文件格式非常简单

 /your/directory IN_MODIFY /usr/local/bin/log_file_modifications.sh $@/$# 

会在/your/directory目录树中每次修改/usr/local/bin/log_file_modifications.sh ,使用完整path( $@参数)和修改后的文件( $#参数)调用脚本。

你的脚本可以像

 #!/bin/bash logger -t modification_stalker "Yo dawg, these files got modified $1 $2 ..." 

sshd选项在这里没用。 scp只是在远程主机上运行'scp -t-dest_file'之类的东西。

最简单的方法 – 围绕真正的scp程序创build包装,logging命令行参数。

我意识到现在这只是sftp而不是最初要求的scp,但是我在这里留下答案来帮助人们。

一直试图find自己的答案,所以在这里。

首先,您需要启用ssh使用的sftp子程序的日志logging:

在/ etc / ssh / sshd_config中

 Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO 

然后重新启动sshd,但是你的特定的分布是这样的:

 service sshd restart 

现在,我们应该看到scp日志消息出现在类似/ var / log / messages的内容中,或者可能是/var/log/auth.log,具体取决于您的系统日志设置。

我正在使用syslog-ng,并希望我的日志sftp传输与ssh的其他日志分开。

在/etc/syslog-ng/syslog-ng.conf中:

 #sftp configuration destination sftp { file("/var/log/sftp.log"); }; filter f_sftp { program("sftp-server"); }; log { source(s_src); filter(f_sftp); destination(sftp); }; 

这意味着日志现在转到/var/log/sftp.log – 您可能需要编辑程序(“sftp-server”)以匹配您在SSH中使用的任何程序,因为有各种选项

最后,为了阻止日志进入ssh日志,我们将它们过滤掉:

  filter f_auth { facility(auth, authpriv) and not filter(f_debug) and not filter(f_sftp); }; 

重新启动系统日志ng(或您的系统日志守护进程):*当我试图重新加载更改没有工作,我不得不重新启动它。

 service syslog-ng restart 

OpenSSH支持scplogging。 所以,如果你打开VERBOSE模式,你甚至可以看到客户端遍历的目录。

查看日志检查

 /var/log/auth.log 

您可以为sshd设置详细的日志logging级别,并使用一些审计软件,例如auditd根据日志消息创build报告。