设置 VSFTPD 用户对 apache2 的 html 目录具有写入权限
Setting up VSFTPD user to have write access to apache2's html directory
看起来这应该很容易,但我真的很挣扎。我不太精通 Linux 但我可以四处走走。我刚刚设置了一个新的 Ubuntu v20.04.2 Server
并在其上安装了 Apache2
。然后我也在上面安装了 VSFTPD
。
现在我正在尝试获取它,所以当我使用“远程”用户登录时,我被锁定在 /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
目录的完全访问权限,但只能访问该目录(及其子目录),同时确保安全?
您可能需要向 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_enable
和 anon_mkdir_write_enable
需要设置为 YES
。如果未设置这些,则上传的文件将看到应用的 700
权限,这是没有价值的。
file_open_mode
选项设置文件的默认设置。即使值为 777
,022
的 local_umask
设置确保文件被赋予 755
.
设置完成后,您可以重新启动 FTP 服务器以使一切生效。
对于用户帐户,通常最简单的方法是将他们的主目录设置为 Apache 根目录,并将他们添加到 www-data
组。
sudo adduser ftpuser
sudo usermod -d /var/www -m ftpuser
sudo usermod -a -G www-data ftpuser
请务必将 ftpuser
更改为您希望用户或服务在登录网络服务器时使用的任何内容。
从这里我们可以确保在 /var/www
目录中设置了正确的权限:
sudo chgrp -R www-data /var/www
sudo chmod -R g+w /var/www
接下来我们可以将目录及其下的所有子目录设置为“设置GID”,即在/var/www
下创建的所有新文件和目录都属于www-data
组。第二个命令将确保文件设置正确:
sudo find /var/www -type d -exec chmod 2775 {} \;
sudo find /var/www -type f -exec chmod ug+rw {} \;
就是这样
看起来这应该很容易,但我真的很挣扎。我不太精通 Linux 但我可以四处走走。我刚刚设置了一个新的 Ubuntu v20.04.2 Server
并在其上安装了 Apache2
。然后我也在上面安装了 VSFTPD
。
现在我正在尝试获取它,所以当我使用“远程”用户登录时,我被锁定在 /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
目录的完全访问权限,但只能访问该目录(及其子目录),同时确保安全?
您可能需要向 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_enable
和 anon_mkdir_write_enable
需要设置为 YES
。如果未设置这些,则上传的文件将看到应用的 700
权限,这是没有价值的。
file_open_mode
选项设置文件的默认设置。即使值为 777
,022
的 local_umask
设置确保文件被赋予 755
.
设置完成后,您可以重新启动 FTP 服务器以使一切生效。
对于用户帐户,通常最简单的方法是将他们的主目录设置为 Apache 根目录,并将他们添加到 www-data
组。
sudo adduser ftpuser
sudo usermod -d /var/www -m ftpuser
sudo usermod -a -G www-data ftpuser
请务必将 ftpuser
更改为您希望用户或服务在登录网络服务器时使用的任何内容。
从这里我们可以确保在 /var/www
目录中设置了正确的权限:
sudo chgrp -R www-data /var/www
sudo chmod -R g+w /var/www
接下来我们可以将目录及其下的所有子目录设置为“设置GID”,即在/var/www
下创建的所有新文件和目录都属于www-data
组。第二个命令将确保文件设置正确:
sudo find /var/www -type d -exec chmod 2775 {} \;
sudo find /var/www -type f -exec chmod ug+rw {} \;
就是这样