# Readme

file-minitor是一个监控sftp和scp上传文件动作并对上传文件进行病毒扫描的工具

## 工作方式

(1) 针对sftp，它解析实时sftp日志，识别上传文件行为并使用clamdscan扫描文件

需要rsyslog和sshd服务同时启用

a. 修改rsyslog配置，将日志发送到unix socket中

```bash
# 写入配置文件
cat > /etc/rsyslog.d/sftp.conf <<EOF
\$ModLoad omuxsock
\$OMUxSockSocket /tmp/rsyslog.sock
authpriv.* :omuxsock:
EOF

# 重启rsyslog服务，启用上述配置
systemctl restart rsyslog
```

b. 修改 sshd_config 配置，让sftp将日志写入rsyslog的AUTHPRIV事件队列中

```
# Subsystem       sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    /usr/libexec/openssh/sftp-server -l INFO -f AUTHPRIV
```

重启sshd服务：`systemctl restart sshd`

经过上述配置后，即可在unix socket `/tmp/rsyslog.sock` 监听到sftp日志了


(2) 针对scp，它利用auditd中的审计规则判识别写文件动作，需要系统auditd服务，并添加以下审计规则：

```bash
# 监控scp创建文件动作
-a always,exit -F arch=b64 -S openat -F exe=/usr/bin/scp -F a2&0x40 -F key=scp_create_file
-a always,exit -F arch=b64 -S open -F exe=/usr/bin/scp -F a1&0x40 -F key=scp_create_file
# 监控scp关闭文件动作
-a always,exit -F arch=b64 -S close -F exe=/usr/bin/scp -F key=scp_close_file
```

可以将上述规则写到 `/etc/audit/rules.d/audit.rules` 中并通过 `service auditd reload`命令持久化


一旦上传文件完成，file-monitor会立即修改文件名，添加 `.scanning` 后缀，若扫描到文件，删除文件，否则会恢复文件名


扫描病毒文件的时间会根据文件类型、文件大小而变化，最长扫描时间为5分钟

同样大小下，`.zip`文件扫描比较慢，建议压缩包格式为 `.tar.gz`

## 日志

日志会记录在 `/var/log/file-monitor.<启动时间>.log` 文件里

## todo

添加白名单：

- 用户白名单：不扫描指定用户上传的文件
- 路径白名单：不扫描上传到指定路径的文件

增加可识别文件类型功能，对于文本类型，直接跳过扫描
针对压缩包，使用流式扫描以加速扫描