设置 VSFTPD 用户对 apache2 的 html 目录具有写权限

Dau*_*Rob 5 ubuntu apache2 vsftpd

看起来这应该很容易,但我在这里真的很挣扎。我不太熟悉 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
Run Code Online (Sandbox Code Playgroud)

当我设置chown目录时/var/www/html,现在 vsftpd 拒绝连接,因为根目录是可写的。如果我将其设置为默认所有权(root),那么当使用登录名通过 FTP 登录时我将无法写入它remote

如何让我的remoteftp 登录能够完全访问该/var/www/html目录,但只能访问该目录(及其子目录),同时保持安全?

小智 10

您可能需要向文件中添加更多选项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
Run Code Online (Sandbox Code Playgroud)

这允许本地帐户为上传的文件设置默认权限(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
Run Code Online (Sandbox Code Playgroud)

请务必更改ftpuser为您希望人员或服务在登录 Web 服务器时使用的任何内容。

从这里我们可以确保在目录中设置正确的权限/var/www

sudo chgrp -R www-data /var/www
sudo chmod -R g+w /var/www
Run Code Online (Sandbox Code Playgroud)

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

sudo find /var/www -type d -exec chmod 2775 {} \;
sudo find /var/www -type f -exec chmod ug+rw {} \;
Run Code Online (Sandbox Code Playgroud)

就是这样