我想阻止用户删除已经上传到我的sftp服务器的文件。 我知道我可以使用inotify / dnotify(或者pam钩子)来build立一个我自己的解决scheme,并且在文件被上传和closures后触发一个脚本来执行诸如chattr +i $filename之类的操作。 但是,我想知道是否已经有一些东西已经作为一个function或已经审查和解决scheme,我不知道。
目前的设置是,我正在使用openssh sftp和用户连接后被监禁。
看看lsyncd( http://code.google.com/p/lsyncd/ )。 它将为您的解决scheme提供inotify =>操作部分。 它看起来像这样:
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动作,以获得更好的逻辑,也许运行一个脚本,它会find上传的文件,并设置chattr +我。
如果使用参数0222添加sftp-server umask选项-u ,将会使用上面提到的umask创build新上传的文件,这意味着它们将不具有对文件的写入权限,因此它们将无法删除文件。
在你的sshd_config的行看起来像这样:
Subsystem sftp internal-sftp -u 0222