如何使用 vsftpd 设置有权访问 Web 根目录的 FTP 用户?
我目前正在建立一个网站,并试图在此过程中了解更多有关 Web 服务器的信息。我以前使用过共享托管提供商,但这次我想使用 VPS 从头开始设置服务器。我已经安装了 LAMP 堆栈并安装了 Wordpress。到目前为止,除了自动更新 Wordpress(因为它要求 FTP 访问)之外,一切都正常。
因此我vsftpd
按照这个安装教程. 这也同样有效。
问题是,在教程中,FTP 用户有其专用的文件目录(/home/ftp_user/ftp/files
),但我需要授予该用户访问/var/www/html/site
Wordpress 执行更新的 Web 根目录()的权限。
local_root
我试图/var/www/html
我尝试设置这样的符号链接
ln -s /var/www/html /home/ftp_user/ftp/files
但两种方法都行不通。当我尝试连接时,它说
vsftpd: refusing to run with writable root inside chroot()
实现此目的的正确方法是什么?或者/var/www/html
根本不使用位置会更好吗?
答案1
FTP 不遵循符号链接是有原因的。相反,您应该使用绑定挂载。
# Create mount directory below ftp/files
mkdir /home/ftp_user/ftp/files/www
# Mount
mount -o bind /var/www/html /home/ftp_user/ftp/files/www
尝试一下是否有效。
为了使其永久生效,请将其添加到/etc/fstab
:
/var/www/html /home/ftp_user/ftp/files/www none defaults,bind 0 0
请注意,与符号链接不同,如果删除文件www
夹,您也将删除其中的所有文件/var/www/html
。
答案2
描述的方法羅沃对我来说很管用。但我认为我一开始遇到了 2 个问题(chroot 和符号链接)。
通过添加allow_writeable_chroot=YES
到vsftpd.conf
文件,它现在也可以local_root
指向/var/www/html
我不确定添加该allow_writeable_chroot=YES
设置是否安全,但多个网站/博客文章中都提到了这一点,例如
- Ben Scobie:修复 500 OOPS:vsftpd:拒绝在 chroot 内以可写 root 身份运行()
- Mattias Geniar:Linux 上的 vsftpd:500 OOPS:vsftpd:拒绝在 chroot() 内以可写 root 身份运行。
为了完成这项local_root
工作,我将这一行添加到/ect/vsftpd.conf
:
user_config_dir=/etc/vsftpd/vsftpd-user-conf
并在文件夹中创建一个以 FTP 用户名称命名的文件,/etc/vsftpd/vsftpd-user-conf/
内容如下:
local_root=/var/www/html