在设置 vsftpd 时,我陷入了困境。当我离开 ftpuser 的主目录而没有写入权限时,我可以登录,一切都很好,尽管我无法写入(当然)。当我添加写入权限时,我得到了类似
cannot change to directory with write permissions if user is chrooted
然后我补充说
allow_writeable_chroot=YES
到 vsftpd.conf。但现在我得到
ECONNREFUSED - Connection refused by serverss
我迷路了。我做错了什么?
这是我的配置:
ubuntu 12.04 - vsftpd 2.3.5 - etc/vsftpd.conf:
write_enable=YES
dirmessage_enable=YES
ftpd_banner="Welcome to my FTP service."
local_enable=YES
local_umask=022
chroot_local_user=YES
allow_writeable_chroot=YES
anonymous_enable=YES
anon_upload_enable=YES
anon_umask=022
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
syslog_enable=YES
connect_from_port_20=YES
ascii_upload_enable=YES
ascii_download_enable=YES
pam_service_name=vsftpd
listen=YES
答案1
在早期版本中,该allow_writeable_chroot=YES
配置选项不可用(它是在 vsftpd 版本 3 及更高版本中添加的)。
正如其他答案所述,您可以在子文件夹上创建写权限,但保持 chroot 文件夹(及其中的隐藏文件)为只读。
在我的实现中,你可以在 chroot 中创建另一个 /home/username 文件夹。这样,连接到 FTP 服务器将默认进入用户的主目录相对的到 chroot。
在我的用户帐户创建脚本中,这是完成的方法(所有命令都以 sudo 运行):
chown root:root /home/$username
mkdir -p /home/$username/home/$username
chown $username:$username /home/$username/home/$username
然后,当用户登录 ftp 服务器时,他们就会拥有一个相对于其 chroot 的新主文件夹。他们拥有此文件夹,并且可以在该文件夹中进行更改。可能需要进行其他配置才能将其设置为其默认登录文件夹 (passwd?);当用户在其所使用的任何 ftp 客户端上单击“主文件夹”按钮时,系统都会将他们带到此文件夹。
答案2
我通过不授予用户根目录的写入权限但建立具有写入权限的子文件夹来解决这个问题,这样他仍然可以上传文件。不是上传到根目录,而是上传到子文件夹。虽然不是完美无缺的,但确实有效!