SFTP 日志记录:有办法吗?

SFTP 日志记录:有办法吗?

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

我在使用 SFTP 客户端时遇到了问题,并且创建者要求提供日志,但我找不到任何现有日志。

我希望同时登录 CentOS 或 OS X(尽管我怀疑如果可能的话,两者上都会类似)。

答案1

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

答案2

针对 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

答案3

为了澄清上述评论:

如果您使用 jail(chroot 环境)配置了 sftp,则您无法在没有额外配置的情况下进行日志记录。无法在 chroot 环境中写入日志,您需要创建挂载绑定或套接字。我建议使用套接字,因为它是 syslog-ng 以及 rsyslog(可能还有更多)提供的功能。

对于那些使用 syslog-ng 的人来说,可以看看此链接. 对于那些使用 rsyslog 的人;希望有帮助

相关内容