我想防止用户删除他们已上传到我的 sftp 服务器的文件。我知道我可以使用 inotify/dnotify(或 pam hook)和 lsof 来设置自己的解决方案,它会触发脚本执行某些操作,例如chattr +i $filename
在文件上传后和已关闭。但我想知道是否有一些功能已经可用,或者有解决方案已经过审查并可用,而我却不知道。
当前的设置是,我正在使用 openssh sftp,用户在连接时就会被监禁。
答案1
看看 lsyncd(http://code.google.com/p/lsyncd/)。它将为您的解决方案提供 inotify=>action 部分。它看起来会像这样:
cat /etc/lsyncd.conf
settings {
logfile = "/var/log/lsyncd.log",
statusFile = "/var/run/lsyncd.status",
nodaemon = false,
insist = true,
}
-- config action
my_config = {
delay = 10,
maxProcesses = 1,
onCreate = "chattr +i -R /path/to/dir/*",
}
sync { my_config,
source="/path/to/dir/",
}
-- EOF
您可以更改 onCreate 操作以获得更好的逻辑,也许运行一个脚本来查找上传的文件并设置 chattr +i。
答案2
如果您使用参数添加sftp-server
umask 选项,则新上传的文件将使用上面提到的 umask 创建,这意味着它们将没有对其文件的写访问权限,因此它们将无法删除这些文件。-u
0222
你的遗嘱内容sshd_config
如下:
Subsystem sftp internal-sftp -u 0222