我已经在我的 CentOS 机器上建立了一个 sftpusers 组并且正在使用内部 SFTP 服务来允许用户将文件上传到 chroot 配置的目录。
该目录的所有者是 root,其组是 sftpusers,并且他们对该目录具有读/写权限,这允许他们通过 SFTP 上传文件。
我想要的是禁止删除并在远程文件上传后立即读取它们,这样他们上传的任何内容都会永久地保留在那里,并且使用相同登录名的其他人无法读取或删除彼此的文件。
我的问题是:
1)有没有办法使用简单的权限来做到这一点?
2) 有没有办法设置 sftpusers 组成员上传的任何文件的“默认权限”?这样一旦他们上传了文件,它就自动不可读了,或者其他什么?
3)有没有其他方法可以做到这一点没有涉及每分钟运行一次的 cron 脚本或其他任何方法来更改权限?
4) 有没有办法在文件上传完成后立即运行脚本(或以其他方式触发某些事件)?我可以以某种方式挂载某种“onFileFinishUpload”事件类型的东西?
干杯!
答案1
抱歉,我没有足够的声誉来发布所有链接。我准备了一个保留它们的要点:https://gist.github.com/3590779
仅使用简单的权限无法实现这一点。由于 OpenSSH 的 sftp 服务器,您将无法实现完整的要求列表,但根据文件上传到的文件系统,您可以利用 [属性] 和 [ACL] 来实现部分要求。
是的,[sftp-server 带有 -u 参数](您可以在 [sshd_config] 中设置此
Subsystem sftp
参数),它设置了全部上传。是的,您可以使用 inotify,其中一种方法可能是使用 [incron] 工具,尽管使用 inotify 的方法有很多。Inotify 允许您让内核在您识别的文件系统事件(例如将文件添加到目录)上通知用户空间程序。然后您可以在此事件上运行命令。
(3 第 2 部分)另一种可能不适合您使用的方法是使用像 vsftpd 这样的带有 SSL 保护的 FTP 的程序。这允许加密 FTP,但由于 vsftpd 是一个功能齐全的 FTP 服务器,因此它提供了简单的配置(请参阅 vsftpd.conf 中的 [chown_uploads 参数])以满足您的确切需求。
是的,通过 inotify 子系统,您可以注册一个 [IN_CLOSE_WRITE] 事件监视。