如何通过inotify监视sftp并创建日志?
- By : Will
- Category : FTP & SFTP & FTPS

FTP & SFTP & FTPS
1 前言
一个问题,一篇文章,一出故事。
笔者今天遇到auditd服务异常问题,多次通过调整但是无法解决,于是想到通过inotify-tools监控内核事件记录用户的sftp服务操作日志,
2 最佳实践
2.1 环境信息
2.2 创建服务区监视
2.2.1 安装工具包
dnf install -y inotify-tools
2.2.2 创建监视脚本
vim /usr/local/bin/sftp-event
加入如下配置,
#!/bin/bash logDir="/data/sftp" logFile="/var/log/sftp/event.log" timeFormat="%Y-%m-%d %H:%M:%S" logEvent="create,move,delete,modify,open,access" IFS=';' /usr/bin/inotifywait -mrq --format '%T;%w%f;%e' --timefmt "$timeFormat" -e "$logEvent" "$logDir" | while read -r eventTime eventPath eventType; do if [ "$eventType" == "OPEN,ISDIR" ]; then continue fi if [ "$eventType" == "ACCESS,ISDIR" ]; then continue fi if echo $eventPath | grep -q "myshare.conf"; then continue fi if grep -q "$eventTime $eventPath $eventType" "$logFile"; then continue fi echo "$eventTime $eventPath $eventType" >> "$logFile" done
脚本创建后,你需要赋予脚本执行权限,
chmod +x /usr/local/bin/sftp-event
2.2.3 创建监视服务
vim /etc/systemd/system/sftpd-event.service
加入如下配置,
[Unit] Description=SFTP Directory Monitor After=network.target [Service] ExecStart=/usr/local/bin/sftp-event Restart=always User=root Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin StandardOutput=journal [Install] WantedBy=multi-user.target
脚本创建后,你需要重载服务使配置生效,
systemctl daemon-reload
接着,你应该启动服务并设置服务自启动,
systemctl start sftpd-event.service systemctl enable sftpd-event.service
2.2.4 验证监视服务
touch /var/log/sftp/event.log tail -f /var/log/sftp/event.log
注:执行以上命令后尝试通过sftp客户端上传文件,下载文件,删除文件并观察日志变化。
2.3 配置旋转日志
2.3.1 创建配置
vim /etc/logrotate.d/sftpd-event
加入如下配置,
/var/log/sftp/event.log { size 500M rotate 20 copytruncate delaycompress compress notifempty missingok }
2.3.2 测试配置
logrotate -d /etc/logrotate.conf
2.3.3 手动旋转日志
logrotate -f /etc/logrotate.conf
没有评论