在过去,我们可以轻松设置具有匿名上传访问权限的 ftp 服务器,而文件上传后,用户无法查看、删除或修改他们上传的文件。
我现在正尝试在 CentOS 6.2 或 ubuntu 11.10 中设置类似的东西,但我们正在传输需要通过 sftp/scp/ftps 连接的敏感数据。我尝试使用 chrooted sftp 连接,但是由于 linux 文件夹和文件权限的工作方式,如果用户对文件夹具有写访问权限,那么无论如何他们都可以删除该文件夹中的文件。
有其他人设置过类似的环境吗?我希望他们有一个用户名或用户名/密码组合,以便我们可以记录下来,这样我们就可以知道谁上传了什么文件,但是一旦文件上传,他们就不再有权删除或修改该文件。
谢谢!
答案1
从未使用过,但 ProFTPD 有一个 sftp 模块。请参阅http://www.proftpd.org/docs/contrib/mod_sftp.html#Usage它显示了如何像 FTP 一样限制它(例如,Limit DELE
防止删除的条款)。
答案2
*编辑:我写的是胡说八道,因为我没有正确阅读问题,这篇文章有一个现场操作性脑白质切除术,现在希望它与问题有某种关联.. ;-)
我认为推荐的步骤是使用一些传统的端口 21 主动/被动类型 ftp 服务器,该服务器在标准老式 chroot 用户 ftp dropbox 之上提供 SSL/TLS 层。
vsftpd是一个 ftp 服务器的例子,它可以配置为使用 ssl并支持用户权限的低级配置允许您创建经过验证的 Dropbox 样式 ftp 系统。
我将为这个 ftp 项目创建单独的用户,使用 shell /sbin/nologin 并将他们添加到文本文件中,该文件可以作为允许的本地用户传递给 vsftpd。
您还可以设置以下选项来限制符合您要求的用户
#If set to NO, all directory list commands will give permission denied.
dirlist_enable NO
#If set to NO, all download requests will give permission denied.
download_enable NO
#If activated, all non-anonymous logins are forced to use a secure SSL connection
force_local_data_ssl YES
#If activated, all non-anonymous logins are forced to use a secure SSL
force_local_logins_ssl YES
#obfusciate, probably not needed given directory listing restrictions
hide_ids YES
# allow users with no shell to access ftp, but you have to disable these users via the
#vsftpd local permitted users list, not via /etc/passwd
check_shell NO
您还需要使用一些配置来强制执行只写、不删除的要求,这可能需要您使用 cmds_allowed 和 cmds_denied 配置选项指定适当的命令列表。
这里有一个 ftp 命令列表,其中包含简短的这里有解释;,您可能需要尝试一些反复试验,因为这些尚未经过现场测试......
#
chmod_enable No
#something like the following...
#cmds_allowed=PASV,RETR,QUIT,PUT,USER,PORT,SYST,QUIT,STOR,CWD,PWD
#add any other commands that allow READ or DELETE, or rename, etc.
cmds_denied=DELE,GET,LIST,MDTM,MKD,NLST,RETR,RMD,RNFR,RNTO,APPE
有多种文档可供使用,其中讨论了可能的 vsftpd 设置 - http://viki.brainsware.org/?en/cmds_allowed
您可以完全自定义此处完整列表中可用的命令;https://calomel.org/vsftpd.html
命令的解释在这里; http://www.nsftools.com/tips/RawFTP.htm