我想设置 vsftpd 来允许用户(foouser)上传并创建目录到 /var/www/,目的是允许上传整个网站。
当前权限:
- Apache 运行于www-数据。
- 文档根目录是:/var/www/
- /var/www 的权限为 www-data:www-data(递归)。
已采取的措施:
创建用户:foouser
useradd foouser
将 foo 用户添加到 www-data 组。
usermod -a -G www-data foouser
将 /var/www/ 设置为 foouser 的主目录:
usermod -d /var/www/
这是我的 vsftpd.conf 文件:
root@c9e0266eb8c8:/var# cat /etc/vsftpd.conf | grep -v ^#
listen=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
chown_username=www-data
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
但是,我仍然无法上传文件:
Command: USER foouser
Response: 331 Please specify the password.
Command: PASS ******
Response: 230 Login successful.
Status: Server does not support non-ASCII characters.
Status: Connected
Status: Starting upload of /home/michael/settings.json
Command: CWD /var/www
Response: 250 Directory successfully changed.
Command: TYPE I
Response: 200 Switching to Binary mode.
Command: PASV
Response: 227 Entering Passive Mode (172,17,0,2,174,22).
Command: STOR settings.json
Response: 553 Could not create file.
Error: Critical file transfer error
现在...如果我将目录权限从 www-data 更改为 foouser:foouser,我就可以正常上传,但这(当然)会破坏 apache。
我究竟做错了什么?
编辑:允许匿名文件上传到 /var/www/ 也是可以的。这是一个 docker 容器,因此这种不安全的做法是可以的,因为它将用于开发而不是生产。
答案1
我认为您需要将被动模式配置添加到“/etc/vsftpd.conf”文件中,因为您的连接正在进入被动模式。以下是配置。
# Additional configuration
pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
pasv_address=xx.xx.xx.xx #Public IP of your server
local_root=/var/www
您可以根据需要进行设置。但请确保允许它们进入您的防火墙pasv_min_port
。pasv_max_port