我有一个使用 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
搜索命令atime
和mtime
(指定几天前)以及附加find
选项amin
和mmin
(指定几分钟前)。
对于每个命令,都使用相同的命令开关:例如,-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