我完全知道这个问题被问过无数次,但是之前提到的解决方案都不适用于我的情况。
我的配置:
$ cat /etc/vsftpd-anon.conf
listen=YES
local_enable=NO
anonymous_enable=YES
write_enable=YES
anon_root=/var/anonftp
xferlog_enable=YES
listen_address=10.0.0.2
listen_port=9988
allow_writeable_chroot=YES
瞧,我没有使用任何主目录。我专门为这种情况创建了一个目录。我还添加了allow_writeable_chroot
选项,vsftpd 可以识别它,但会忽略它。
目标目录:
$ ls -l /var/ | grep anonftp
drwxrwxrwx 3 root root 4096 led 26 11:09 anonftp
我尝试如何使用它:
$ sudo killall vsftpd
$ sudo vsftpd /etc/vsftpd-anon.conf &
[1] 21064
$ ftp 10.0.0.2 9988
Connected to 10.0.0.2.
220 (vsFTPd 3.0.2)
Name (10.0.0.2:david): anonymous
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
vsftpd.log 中没有任何内容
答案1
跑步echo "allow_writeable_chroot=YES" >> /etc/vsftpd.conf && service vsftpd restart
答案2
我遇到了同样的问题,但没有任何帮助。没有:
- vsftpd.conf 中的 allow_writeable_chroot=YES
- chmod 到 ftp 根目录
因此我对 vsftpd 进程进行了 strace 检查,发现以下几行:
... 18825 chdir(“/usr/share/empty”) = 0 18825 chroot(“。”)= 0 ...
使用以下命令更改 /usr/share/empty 的权限后
chmod 0644 /usr/share/empty
错误已消失。
答案3
echo "allow_writeable_chroot=YES" >> /etc/vsftpd.conf && service vsftpd restart
每次编辑conf时都运行上述命令。
答案4
短的
就我而言,配置非常相似,问题是新创建的用户没有自己的/home/{username}
目录
长的
在 中vsftpd.conf
,我有以下几行:
...
user_sub_token=$USER
local_root=/var/www/$USER
...
不确定,但是,它看起来像是首先vsftpd
尝试将用户登录到用户的/home
目录中,然后成功后再执行此操作chroot()
,local_root
并且由于用户没有自己的/home/{username}
目录 - 它失败并出现上述错误。
因此,通过添加/home/{username}
目录并将用户设置为所有者 - 解决了它!