我有一个使用 Debian 6.0 的 VPS。目前,SSH 设置为不接受密码登录,只接受基于密钥的登录。
需要在某个特定网站(虚拟主机)上工作的人希望使用 FTP。他不需要/不想要 SSH。我该如何为他设置 FTP 访问权限,使他能够对相关目录中的所有文件以及仅相关目录具有写入权限?目录是/srv/www/domainname.com/public_html
目前,该目录中的所有目录和文件都属于www-data:www-data,并且为644/755。
我已经安装了 vsftpd 并阅读了一些指南,但它们似乎都涉及允许多个用户拥有自己的用户名目录,而这并不是我想要的。我似乎无法弄清楚如何简单地定义一个具有密码的 FTP 用户,该用户有权访问我选择的一个目录。
这是我第一次设置 FTP 服务器的经历。
谢谢。
编辑:还发现这- 也许我应该使用 ProFTPd,或者 vsftpd 也可以满足我的要求吗?
答案1
如果您想采用仅 SFTP 解决方案,我最近创建了一篇博客文章,其中详细描述了这一点,包括一些常见错误: http://blog.frands.net/sftp-only-chroot-users-with-openssh-in-debian-166/
如果您想使用 FTP 解决方案,vsftpd 确实是一个不错的选择。但是,当用户上传文件时,将按照定义的 umask 设置其用户和组。您可以将用户的主要组设置为 www-data,然后创建适合 vsftpd 的 umask。
这是按照我的建议快速执行的方法:
创建具有 www-data 组的用户,没有真正的 shell 和正确的主目录,然后设置密码
useradd -d /path/to/his/domain.com -g www-data -s /bin/false theusername
passwd theusername
确保 vsftpd 接受他的 shell。cat /etc/shells 并查找 /bin/false(默认情况下它不应该在那里) - 如果它不存在,请添加它:
echo "/bin/false" >> /etc/shells
接下来,编辑 vsftpd 配置文件。修改以下参数:(如果它们被注释掉,请删除 #)
禁用对服务器的匿名访问
anonymous_enable=NO
允许本地用户使用 FTP
local_enable=YES
允许文件上传
write_enable=YES
设置 umask,以便用户上传的文件也可由组 (www-data) 写入
local_umask=002
将用户 chroot,这样他就无法离开他的主目录
chroot_local_user=YES
现在,重新启动 vsftpd
/etc/init.d/vsftpd restart
一切就绪。
但!
- FTP 通常不安全。
- 如果可以使用 SFTP,请使用它。
- 允许网络服务器写入文件是一个安全漏洞,除非该目录用于上传或网站经常更改的文件。