SFTP日志记录:有办法吗?


91

我想知道是否有一种方法来记录服务器接收的命令。只要包含有关文件传输的命令信息,它就可以是所有SSH命令。

我在SFTP客户端上遇到问题,创建者正在询问日志,但是我找不到任何现有的日志。

我正在寻找同时登录CentOS或OS X的系统(尽管我怀疑是否有可能,但两者都类似)。


Answers:


94

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服务以更新更改(中心):

systemctl restart sshd

1
我不知道您可以像这样登录SFTP,这就是我所需要的。它在哪里存储日志?/var/log/auth.log?
罗里

4
这取决于您的syslog配置。使用INFO日志级别,大多数默认syslog.conf会将这些条目放置在/ var / log / messages中。
rvf'2

4
是否可以使用内部sftp服务器执行此操作?
Cian

这对SFTP完全适用,但是SCP呢?我没有找到日志与SCP命令复制一个文件中的任何条目,虽然日志是成功的SFTP
啤酒

2
在Ubuntu上,这些日志默认为/var/log/auth.log。添加-f USER到该Subsystem配置行以将其发送到/var/log/syslog
扔掉帐户

43

围绕sftp-server的日志记录的相同开关也适用于internal-sftp。这是我的/ etc / ssh / sshd_config中的一个示例:

Subsystem   sftp    internal-sftp -f AUTH -l INFO

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

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

2
我发现,就我而言,它仅记录root用户的sftp会话,而不记录我的chroot用户测试。我不明白为什么,您有什么主意吗?
JohnnyFromBF 2012年

4
看来您/dev/log在chroot区域中需要。喜欢的东西sudo mkdir /chrooted/area/devsudo touch /chrooted/area/dev/logsudo chmod 511 /chrooted/area/devsudo chattr +i /chrooted/area/devsudo mount --bind /dev/log /chrooted/area/dev/log。用户仍然可以对该/ dev / log进行写访问,但是由于它是一个套接字,因此只要访问权限为,就不会造成太大的伤害sftp
sch

1
感谢您的提示。但是,我似乎无法使其正常运行。您能更具体一点吗?
user1092608

4
FWIW:在ArchLinux Wiki中,有一个关于如何在chroot环境中启用日志的很好的描述:wiki.archlinux.org/index.php/SFTP_chroot#Logging
Kaii 2015年

0

为了澄清以上评论:

如果使用监狱(chroot环境)配置了sftp,则在没有其他配置努力的情况下无法登录。无法在chroot环境中写入日志,您需要创建安装绑定或套接字。我建议您使用套接字,因为它是syslog-ng和rsyslog(也许还有更多)提供的功能。

对于使用syslog-ng的用户,请查看https://wiki.archlinux.org/index.php/SFTP_chroot#Logging。对于使用rsyslog的用户,https://wiki.kairaven.de/open/os/linux/sftpssh 是您的朋友。

希望能有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.