我一直在尝试在 Centos 6.6 上设置 VSFTPD 以允许虚拟用户。下面是我的vsftpd.conf
,它被配置为仅允许虚拟用户进入/etc/vsftpd/vsftpd-virtual-user.db
。
listen=YES
local_umask=002
anonymous_enable=NO
local_enable=YES
virtual_use_local_privs=YES
write_enable=YES
pam_service_name=vsftpd_virtual
guest_enable=YES
local_root=/var/sites
chroot_local_user=YES
hide_ids=YES
connect_from_port_20=YES
pasv_enable=YES
pasv_addr_resolve=YES
pasv_address=10.175.9.23
pasv_min_port=1024
pasv_max_port=65535
我还设置了 vsftpd_virtual 模块,其中/etc/pam.d/vsftpd_virtual
包含以下内容:
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-user
account required pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-user
session required pam_loginuid.so
当尝试登录到 localhost 上的 FTP 时,我收到来自 FTP 的 530 错误以及以下行/var/log/secure
:
vsftpd: pam_userdb(vsftpd_virtual:auth): user_lookup: could not open database `/etc/vsftpd/vsftpd-virtual-user': Permission denied
数据库文件的文件权限看起来不错,但我可能是错的:
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
答案1
根据您的指示,配置未指向数据库文件:(/etc/vsftpd/vsftpd-virtual-user.db
您正在使用“ /etc/vsftpd/vsftpd-virtual-user
”
答案2
看来您的问题在于虚拟用户到真实用户的映射。在 vsftp 中,虚拟用户在某种程度上被视为访客用户 - 这就是您guest_enable=YES
在配置中需要的原因。
一个建议是为此映射创建一个用户。就像是:
useradd -d /home/ftp virtual
echo guest_username=virtual >> /etc/vsftpd/vsftpd.conf
这会将虚拟用户映射到名为 virtual 的真实用户,并且它们将被 chroot 到 /home/ftp 目录。
作为旁注,/etc/vsftpd/vsftpd-virtual-user
需要由 root 用户读取( chmod 600 )。
答案3
这似乎已经在评论中得到了回答塔列津。
您可能会遇到 SELinux 阻止访问的情况。通过运行以下命令确认 SELinux 已参与:
ls -Z vsftpd-virtual-user.db
要解决该问题,请运行:
restorecon -v vsftpd-virtual-user.db