题 SFTP日志记录:有办法吗?


我想知道是否有办法记录服务器收到的命令。它可以是所有SSH命令,只要它包含与文件传输相关的命令的信息。

我遇到SFTP客户端问题,创建者要求记录日志,但我无法找到任何现有日志。

我想要登录两者或CentOS或OS X(虽然我怀疑是否可能,两者都相似)。


82
2017-10-11 01:42






答案:


OpenSSH版本4.4p1及更高版本(应包括CentOS 5的最新版本)内置了SFTP日志记录功能 - 您只需配置它即可。

在你的sshd_config中找到它(在centos文件中 的/ etc / SSH / sshd_config中):

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

并将其更改为:

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

INFO只是默认情况下的一个细节 - 它提供有关文件传输,权限更改等的详细信息。如果您需要更多信息,可以相应地调整日志级别。各个级别(按细节顺序)是:

QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3

任何超过VERBOSE的东西可能都是比您正在寻找的更多信息,但它可能是有用的。

最后重启SSH服务以更新更改(centos):

systemctl restart sshd

86
2017-10-13 23:21



我不知道你可以像那样记录SFTP,这就是我需要的东西。它在哪里存储日志? /var/log/auth.log? - Rory
这取决于您的syslog配置。使用INFO loglevel,大多数默认的syslog.conf将这些条目放在/ var / log / messages中。 - rvf
是否可以使用内部sftp服务器执行此操作? - Cian
这对SFTP来说非常有效,但SCP呢?我没有在日志中找到使用scp命令复制的文件的任何条目,尽管sftp的日志成功 - Ale
在Ubuntu上,这些日志默认为 /var/log/auth.log。加 -f USER 那个 Subsystem config行发送给他们 /var/log/syslog。 - Throwaway Account 3 Million


针对sftp-server的日志记录的相同切换也适用于internal-sftp。这是我的/ etc / ssh / sshd_config的一个例子:

Subsystem   sftp    internal-sftp -f AUTH -l INFO

启用INFO级别日志记录后,消息将开始显示在/ var / log / messages下(至少在基于Red Hat的Distros下):

May 27 05:58:16 test-server sshd[20044]: User child is on pid 20049
May 27 05:58:16 test-server sshd[20049]: subsystem request for sftp by user test-user
May 27 05:58:16 test-server internal-sftp[20050]: session opened for local user test-user from [192.168.1.1]
May 27 05:58:16 test-server internal-sftp[20050]: received client version 3
May 27 05:58:16 test-server internal-sftp[20050]: realpath "."
May 27 05:58:21 test-server internal-sftp[20050]: opendir "/home/test-user/"
May 27 05:58:21 test-server internal-sftp[20050]: closedir "/home/test-user/"
May 27 05:58:21 test-server internal-sftp[20050]: lstat name "/home/test-user/upload"
May 27 05:58:21 test-server internal-sftp[20050]: realpath "/home/test-user/upload/"
May 27 05:58:21 test-server internal-sftp[20050]: stat name "/home/test-user/upload"
May 27 05:58:24 test-server internal-sftp[20050]: open "/home/test-user/upload/test-file.pdf" flags WRITE,CREATE,TRUNCATE mode 0664
May 27 05:58:25 test-server internal-sftp[20050]: close "/home/test-user/upload/test-file.pdf" bytes read 0 written 1282941

39
2018-05-29 12:42



我发现,在我的情况下,它只记录root的sftp会话,但不是我的chrooted用户测试。我不明白为什么,你有什么想法吗? - JohnnyFromBF
看起来你需要 /dev/log 在你的chroot区域。就像是 sudo mkdir /chrooted/area/dev, sudo touch /chrooted/area/dev/log, sudo chmod 511 /chrooted/area/dev, sudo chattr +i /chrooted/area/dev, sudo mount --bind /dev/log /chrooted/area/dev/log。用户仍然可以对该/ dev / log具有写入权限,但由于它是一个套接字,如果他们只有访问权限,他们就不会造成太大的伤害。 sftp。 - sch
谢谢你的提示。但是,我似乎无法使其发挥作用。你能更具体一点吗? - user1092608
FWIW:在ArchLinux Wiki中,有一个很好的描述如何在chroot环境中启用日志记录: wiki.archlinux.org/index.php/SFTP_chroot#Logging - Kaii