设置VSFTPD用户具有写入访问权限到Apache2的HTML目录

5
似乎这应该很容易,但我真的很苦恼。我对Linux不是很熟悉,但我能四处走动。我刚刚设置了一个新的Ubuntu v20.04.2 Server并在上面安装了Apache2。然后我也在上面安装了VSFTPD
现在我正在尝试通过用户名"remote"登录时,将其锁定到/var/www/html/目录,但又可以对其中任何东西进行写访问。
我的vsftpd.conf文件中有以下未被注释的设置:
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
local_root=/var/www/html
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO

当我在/var/www/html目录上设置了chown时,现在vsftpd拒绝连接,因为根目录是可写的。如果我将其设置为默认所有权(即root),那么当使用remote登录通过FTP登录时,我就无法对其进行写操作。
我如何让我的remote ftp登录账户完全访问/var/www/html目录,但仅限于该目录(及其子目录),同时保持安全?
1个回答

9
您可能需要在 vsftpd.conf 文件中添加一些选项。以下是通常我过去使用的设置:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=0022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
file_open_mode=0777

这使得本地账户可以设置上传文件的默认权限(umask)。为了使掩码正常工作,需要将anon_upload_enableanon_mkdir_write_enable设置为YES。如果没有设置,则上传的文件将应用700权限,这没有任何价值。

file_open_mode选项设置文件的默认设置。即使值为777local_umask设置为022确保文件被赋予755

设置完成后,您可以重新启动FTP服务器以使所有内容生效。

对于用户帐户,最简单的方法通常是将其主目录设置为Apache根目录,并将他们添加到www-data组中。

sudo adduser ftpuser
sudo usermod -d /var/www -m ftpuser
sudo usermod -a -G www-data ftpuser

请务必将 ftpuser 更改为您希望人们或服务在登录 web 服务器时使用的用户名。

从这里开始,我们可以确保在 /var/www 目录中设置了适当的权限:

sudo chgrp -R www-data /var/www
sudo chmod -R g+w /var/www

接下来我们可以将目录及其下面的所有子目录设置为 "set GID",这意味着在 /var/www 下创建的所有新文件和目录都属于 www-data 组。第二个命令将确保文件被正确设置:

sudo find /var/www -type d -exec chmod 2775 {} \;
sudo find /var/www -type f -exec chmod ug+rw {} \;

就是这样了。


谢谢您的回复!那帮了很多忙。 - DauntlessRob
非常感谢。我正在尝试启动自己的LAMP服务器,但在获取文件访问权限和所有权方面遇到了困难[以前使用Docker或预制服务器映像时从未考虑过这个问题]。 - Leroy105

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接