如何通过inotify监视sftp并创建日志?

FTP & SFTP & FTPS

1 前言

一个问题,一篇文章,一出故事。
笔者今天遇到auditd服务异常问题,多次通过调整但是无法解决,于是想到通过inotify-tools监控内核事件记录用户的sftp服务操作日志,

如何修复auditd日志报错问题?

2 最佳实践

2.1 环境信息

如何基于Oracle Linux 9.x配置独立的SFTP服务?

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
没有评论

发表回复

FTP & SFTP & FTPS
如何修复auditd日志报错问题?

1 前言 一个问题,一篇文章,一出故事。 今天遇到sftp的audit日志没有记录问题,通过如下命令 …

Bash
如何实现按原目录结构迁移备份文件?

1 前言 一个问题,一篇文章,一出故事。 笔者最近需要实现将sftp的数据按照原目录结构迁移备份到备 …

FTP & SFTP & FTPS
如何解决Windows SFTP命令的权限提示?

1 前言 一个问题,一篇文章,一出故事。 今天笔者使用windows系统如下命令连接sftp服务器时 …