如何为OpenSSH设置SFTP文件访问日志记录?

我使用OpenSSH的内置sftp子系统和chrooted用户进行SFTP设置。

在我以前使用FTP的过去,我能够看到用户在日志中访问了哪些文件。

如何使用OpenSSH / SFTP实现相同目的?

/etc/ssh/sshd_config相关部分:

 Subsystem sftp internal-sftp Match group sftponly ChrootDirectory /home/%u X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp 

默认情况下, sshd会使用日志级别INFO和syslog工具AUTH记录到系统日志。 所以从sshd查找日志数据的地方就在

/var/log/auth.log

可以使用SyslogFacility和LogLevel指令覆盖这些默认值。 以下是授权日志中的典型服务器启动条目。

在大多数情况下,默认的日志记录级别很好。

以下应该只给你ssh相关的日志行

 grep 'sshd' /var/log/auth.log 

为了安全起见,获取最后几百行然后搜索(因为如果日志文件太大,整个文件上的grep会消耗更多系统资源,更不用说运行时间会更长)

 tail -500 /var/log/auth.log | grep 'sshd' 

编辑:

来自man sshd_config

  LogLevel Gives the verbosity level that is used when logging messages from sshd(8). The possible values are: QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3. The default is INFO. DEBUG and DEBUG1 are equivalent. DEBUG2 and DEBUG3 each specify higher levels of debugging output. Logging with a DEBUG level violates the privacy of users and is not recommended. 

所以你可以在sshd_config更改这个参数。 但似乎它不跟踪文件。

你可以调查一下:

1)要查找主文件夹中未登录用户拥有的所有文件,请键入:

 find ~ -type f ! -user $USER 

1.1)要查找不属于任何合法用户的所有文件(它们不应存在),请键入:

 find ~ -type f -nouser 

2)由于系统上的文件有三个时间戳称为mtime (文件修改时间), ctime (inode更改时间和权限)和atime (文件访问时间),因此可以查询这些时间戳以了解文件的修改方式。 通常会讨论哪些是最好用的,但是找出文件被访问或修改的最佳方法是使用find命令搜索几天前指定的atimemtime ,以及其他find选项mminmmin ,您可以在几分钟前指定。

对于这些命令中的每一个,都使用相同的命令开关:例如, -atime 1将匹配那些在1天前正好访问的文件; 指定多于少于 ,分别附加+- 。 下面的示例可以澄清所有这些(指定目录的-type d ):

 find ~ -type f -atime 1 find ~ -type f -amin -23 find ~ -type f -mtime 2 find ~ -type f -mmin -45 

要结合我的方法到目前为止,您可以从您的主文件夹输入以下命令; 第一次搜索非您用户访问的文件,第二次搜索由用户以外的人修改的文件,不到两天前。

 find ~ -type f -atime -2 ! -user $USER find ~ -type f -mtime -2 ! -user $USER 

您可以使用sftp-server可执行文件周围的包装器:

 ` #!/bin/sh # sftpd wrapper script for executing pre/post session actions # pre session actions and logging here SOURCE_IP=${SSH_CLIENT%% *} MSG_SESSION_START="user $LOGNAME session start from $SOURCE_IP" logger -p local5.notice -t sftpd-wrapper -i "$MSG_SESSION_START" # start actual SFTP session /usr/libexec/openssh/sftp-server # add post session actions here ` 

…然后,调整syslogd.conf配置以将local5.notice指向正确的日志文件,如下所示:

 local5.* /var/log/sftpd.log 

最后,要查看正在传输的文件,您可以在sshd_config中进行全局调整; 或者通过调整上面的脚本,只需添加以下设置,使sftp子进程记录正在传输的文件:

 /usr/libexec/openssh/sftp-server -f local5 -l info 

希望这可以帮助 ! :p

在你的sshd_config(主要是/ etc / ssh / sshd_config)中,尝试类似的东西

 Subsystem sftp internal-sftp -f AUTH -l INFO 

要么

 Subsystem sftp internal-sftp -l INFO 

我认为这些是日志记录级别:

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

如果需要有关日志的更多详细信息,请提高日志记录级别