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

如何为 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

答案1

默认情况下sshd日志记录到系统日志中,日志级别为 INFO,系统日志功能为 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选项aminmmin(指定几分钟前)。

对于每个命令,都使用相同的命令开关:例如,-atime 1将匹配那些被访问的文件确切地1天前;具体说明更多的或者少于,分别附加 a+或 a -。下面的例子可以阐明这一切(指定-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

答案2

在你的 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

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

答案3

您可以使用包装器来包装您的 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

相关内容