在 CentOS 上启用 SFTP 日志,通常是通过 OpenSSH 的 internal-sftp 来实现的。下面按 推荐做法 → 排错要点 给你一个完整说明(适用于 CentOS 7/8/Stream)。
编辑配置文件:
vi /etc/ssh/sshd_config
找到或添加以下内容(不要直接改掉整段,只改对应部分):
# 覆盖原来的 sftp 配置
Subsystem sftp internal-sftp -l INFO -f AUTH
或者更详细一点(推荐):
Subsystem sftp internal-sftp -l VERBOSE -f AUTH
参数说明:
-l:日志级别
INFO:基本操作(推荐)VERBOSE:包含上传 / 下载 / 删除-f:日志设施(facility)在 sshd_config 末尾添加:
Match Group sftpusers
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp -l VERBOSE -f AUTH
AllowTcpForwarding no
X11Forwarding no
如果你没有使用
Chroot,可省略ChrootDirectory
编辑 rsyslog 配置:
vi /etc/rsyslog.conf
确保没有注释掉这一行:
authpriv.* /var/log/secure
然后重启 rsyslog:
systemctl restart rsyslog
systemctl restart sshd
SFTP 日志默认在:
/var/log/secure
示例查看:
tail -f /var/log/secure
或搜索 SFTP 行为:
grep internal-sftp /var/log/secure
Dec 19 10:21:03 centos internal-sftp[12345]: open "/data/test.txt" flags WRITE,CREATE,TRUNCATE
Dec 19 10:21:04 centos internal-sftp[12345]: close "/data/test.txt"
Dec 19 10:21:10 centos internal-sftp[12345]: remove "/data/test.txt"
检查以下几点:
是否使用 internal-sftp
grep Subsystem /etc/ssh/sshd_config
必须是:
Subsystem sftp internal-sftp
是否使用 Chroot
chown root:root /data/sftp
chmod 755 /data/sftp
SELinux 是否拦截
getenforce
临时关闭测试:
setenforce 0
# rsyslog 规则
:programname, isequal, "internal-sftp" /var/log/sftp.log
& stop
然后:
systemctl restart rsyslog
Subsystem sftp internal-sftp -l INFO -f AUTH
systemctl restart sshd
tail -f /var/log/secure
如果你愿意,可以告诉我:
我可以帮你定制一套最合适你的 SFTP 审计方案 ✅