理想情况下,我希望 proftpds 能够做到这一点
DefaultRoot /var/www/whatever/userone/ user1
DefaultRoot /home/directory/whatever/ user2
对于虚拟用户来说,这一点很重要。
答案1
是的,这是可能的,请参阅我的帖子:
vsftpd-local_root=/var/www/sites/$USER 未被解释?
您需要使用每个用户的配置文件来为它们指定唯一的 chroot 位置。在您的例子中,每个用户的配置“local_root”将根据需要在 /var/www/sites/ 之外改变值。
答案2
使用 PAM 可以非常轻松地完成此操作。
如果您的 disto 没有附带 PAM,那么您需要获取一份副本,因为 vsftpd 使用 PAM 来对虚拟用户进行身份验证。
已经有 pam_pwdfile 的 debian 包可用,或者,如果你的 Linux 副本没有附带它,请下载并编译它:
apt-get install libpam-pwdfile
首先,为第一个用户创建密码文件:
htpasswd -c /etc/vsftpd/passwd user1
进而:
htpasswd /etc/vsftpd/passwd user2
接下来需要编辑 vsftpd 配置文件 /etc/vsftpd.conf
listen=YES
anonymous_enable=NO
local_enable=YES
virtual_use_local_privs=YES
write_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/sites/$USER
chroot_local_user=YES
hide_ids=YES
最后,您需要配置 PAM 以使用密码文件,因此编辑 /etc/pam.d/vsftpd
# Customized login using htpasswd file
auth required pam_pwdfile.so pwdfile /etc/vsftpd/passwd
account required pam_permit.so
不要忘记重新启动 vsftpd,就这样!