我打算使用vsftpd充当安全的 ftp 服务器,但我很难控制用作 ftp 登录的 linux 用户。
用户需要被“关”在特定的目录(和子目录)中并拥有完全的读/写访问权限。
要求: - 用户帐户“admin_ftp”应被限制在 /var/www 目录中。 - 根据需要为每个站点添加其他帐户...例如: - 用户帐户“picturegallery_ftp”应被限制在 /var/www/picturegallery.com 目录中。
我尝试了以下方法,但无济于事:
# Group to store all ftp accounts in.
groupadd ftp_accounts
# Group for single user, with the same name as the username.
groupadd admin_ftp
useradd -g admin_ftp -G ftp_accounts admin_ftp
chgrp -R ftp_accounts /var/www
chmod -R g+w /var/www
当我使用帐户 admin_ftp 登录 FTP 时,出现错误消息:
500 OOPS:无法更改目录:/home/admin_ftp
但是我不是指定了主目录吗?
额外的互联网指南如何专门为 vsftpd 执行此操作 :)
答案1
我的第一反应很简单:
除非绝对必要,否则不要使用 FTP。 它不安全,而且现在也没有理由使用它。
相反,使用 SSH 和/或 SCP 和/或 SFTP(所有类似和相关的协议)。
至于如何做到这一点,有很多方法。我将链接到一些谷歌搜索结果(不保证其中任何一个):
还有更多,只需搜索一下...
答案2
专门针对 vsftpd,是吗?好的:
在 vsftpd.conf 中,添加:
user_config_dir=/etc/vsftpd/user_conf
然后在 /etc/vsftpd/user_conf/admin_ftp 中输入:
anon_root=/var/www
local_root=/var/www
...其他帐户亦如此。
现在,值得指出的是,在没有其他保障措施的情况下,像这样监禁人们是没有意义的;毕竟,由于它位于 DocRoot 中,他们只需上传一个 PHP 文件,然后通过 Web 浏览器访问该 PHP 文件,此时他们就不再被监禁了。因此,请记住要仔细考虑整个安全环境。
至于 FTP 对话本身的安全性(ircmaxell 的顾虑),只需设置 FTPS。在 vsftpd 中这样做非常简单,如果您使用 FTPES,则可以通过任意方式进行连接。
答案3
如何为这些帐户设置相应的本地主页,然后使用 chroot 和 chroot_local_user 或 chroot_list_enable 配置选项?
答案4
当您创建 admin_ftp 用户时,您并未指定希望此用户的主目录为 /home/admin_ftp 以外的任何目录。因此,ftp 服务器尝试进入 /home/admin_ftp,因为这是它在 passwd 文件中看到的内容。如果您希望在使用该用户进行 FTP 时进入 /var/www/ 目录,则应将 admin_ftp 的主目录更改为 /var/www/:
usermod -d /var/www admin_ftp
我不知道你使用什么发行版,但 Arch Linux 有一个关于设置 vsftp 的很好的 wiki 页面: 非常安全的 FTP 守护进程