我想设置一个仅具有上传权限的 chrooted SFTP 服务器。
过去,我知道我曾通过使用 SETUD 在 FreeBSD 上使用 FTP 完成此操作。所有上传的文件都自动归 root 所有,而其他人只具有写入权限。我了解到此方法在 Linux 上不起作用(如果我错了,请纠正我)。
我还遇到过一些 FTP 守护进程,它们通过为上传的文件设置 umask 并拒绝使用 chmod 来允许这种情况。
我最接近的答案如下:
- 在 /etc/pam.d/sshd 中设置 umask,这样上传的文件就会自动创建为只写权限(例如 0222)。这很好,但 OpenSSH 允许用户 chmod 任何文件,这样他就可以下载任何上传的文件。我找不到阻止使用 chmod 命令的方法 - 它似乎是一个内部命令,将 /bin/chmod 更改为 0700 不会阻止用户运行 chmod。
- 使用 Gamin 或 cronjob 并编写脚本以在创建文件时自动更改其所有权。这感觉有点像黑客行为,并且依赖于脚本才能正确运行,而且感觉太像黑客行为了,并且对于我的需求来说有点复杂。
我正在运行带有 OpenSSH 5.3p1 的 RHEL 6。
这样做的目的是拥有一个可以在 50 个人之间安全共享的 SFTP 帐户,以将文件传送到服务器,而不是创建 50 个 SFTP 帐户。
答案1
ProFTPd 绝对支持 ssh 模拟模式以供 sftp 使用,而且我相当确定它将具有通常的 ftpd-normal 配置选项阵列,用于强制所有权、控制上传等。我认为它绝对值得您一看。我无法帮助解决 ftpd 仅上传配置问题,但这是我获取 SFTP 支持的配置代码:
LoadModule mod_sftp.c
<VirtualHost 12.34.56.78>
SFTPEngine on
Port 443
SFTPLog /var/tmp/proftpd-sftp.log
SFTPHostKey /etc/ssh/ssh_host_rsa_key
SFTPHostKey /etc/ssh/ssh_host_dsa_key
DefaultRoot /home/testuser
<Limit LOGIN>
AllowGroup sftponly
DenyAll
</Limit>
</VirtualHost>
这Port 443
是因为我们已经sshd
在端口 22 上运行了,而且我们必须支持各种极其愚蠢的防火墙后面的大量客户端,而端口 443 几乎是所有站点允许不受阻碍的唯一目的地。那里还有一些其他内容,关于限制一组用户的访问并将他们全部 chroot 到同一个地方,您可能不需要,但我将其包括在内,因为我可以确认该配置按原样工作。