我正在设置一个服务器来托管我的雷斯蒂奇备份。备份将通过 SFTP 完成。在备份期间,restic 无需删除或修改任何文件,因此我决定防止用户这样做。这样,任何有权访问正在备份的机器的人都无法轻易破坏我的备份。
我想使用 chroot 来限制该用户仅能访问备份存储库。我想到的唯一办法是chmod -R 444 $BACKUP_LOCATION && chown -R root:root $BACKUP_LOCATION
每分钟运行一次 cron,但这似乎有点不靠谱。
有没有更优雅的方法?
答案1
你可以通过混合使用来实现这一点属性(Linux 的扩展属性) &inotify 实用程序:
实现此目的的一种方法是使用扩展属性:
1- 在您的目录中设置正确的权限,以便任何人都可以在其中创建文件并'光盘' 至此:
sudo chmod 777 $BACKUP_LOCATION
2-安装inotify 工具(这取决于你的操作系统),这个实用程序将使你能够观察对 $BACKUP_LOCATION 所做的更改,这里是新文件创建检测:
3-编辑并保存以下脚本,此处新文件将具有扩展属性不可变的(这意味着即使使用 root 用户也无法删除或编辑它们)并且r--,r--,r--权限:
#!/bin/sh
BACKUPDIR="/path/your/backup/directory"
inotifywait -m -r -e create --format '%w%f' "${BACKUPDIR}" | while read NEWFILE
do
chmod 444 "$NEWFILE"
chattr +i "$NEWFILE"
done
4- 在以下位置创建服务“/etc/systemd/system/backuprotection.service” 这会将您的脚本作为守护进程运行,因为它需要在后台运行,同时还要确保脚本在重新启动后仍能继续运行:
[Unit]
Description=Service for backup protection
[Service]
User=root
ExecStart=/path/your/script.sh
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
5-从磁盘重新加载新配置:
sudo systemctl 守护进程重新加载
6-启用您的服务,以便它在 systemd 启动后启动:
sudo systemctl enable backuprotection
7-启动并检查状态备份保护服务 :
sudo systemctl start script.sh
sudo systemctl status backuprotection
8- 检查 $BACKUP_LOCATION 下新创建的文件 xattributes 和权限:
# Permissions should be r--,r--,r--
ls -ltr $BACKUP_LOCATION
# "i" should be set on the 5th position
lsattr $BACKUP_LOCATION