网上有很多文章,如果你简单照着配置,大概率是不行的,因为每个人的软件和系统环境都有所差异,所以本文不是告诉你一步一步怎么配置,而是把过程中的要点记录下来,便于排查问题。
虚拟用户归属的系统用户
我们也称为虚拟用户的宿主用户,这里我们一般建议直接使用ftp账户:
ftp:x:104:107:ftp daemon,,,:/srv/ftp:/bin/false
guest_enable=YES
guest_username=ftp
虚拟用户chroot目录
一般我们使用虚拟用户,每个虚拟用户都配置成拥有自己专有的目录和权限。目录配置如下:
user_config_dir=/etc/vsftpd/vusers
user_sub_token=$USER
local_root=/home/virtual/$USER
虚拟用户权限
经过实际验证,主要是配置anon_umask来控制文件权限,通过anon_xxx来配置动作行为。
pam配置
网上的文章大部分是基于db4工具db_load 下的pam_userdb.so 的pam配置,并没全场景通过,有待后继进一步确认。在实际的验证中,测试实际通过使用的的是pwdfile库:
auth required pam_pwdfile.so pwdfile /etc/vsftpd/vsftpd.passwd
account required pam_permit.so
这个库的对应账号数据不是通过db_load,而是openssl工具:
openssl passwd -1 "$VSFTPD_USER_PASS"
文件夹及目录权限
经过配置,如果你发现,所有的账户还是不能达到预期的权限控制和可达性,请结合 anon_umask 来确认用户的chroot 目录及所操作文件的实际权限
SELinux
需要进行相应的ftp权限配置,或者关闭
参考配置
vsftpd.conf
### # Config file for vsftpd ### # Daemon options listen=YES listen_ipv6=NO session_support=NO # Log In Options and Access Controls anonymous_enable=YES anon_root=/home/virtual/share ftpd_banner=Wellcom to iTransCloud ftp server! local_enable=YES # pam pam_service_name=vsftpd # Local User Options chmod_enable=YES chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd/empty guest_enable=YES guest_username=ftp local_umask=0022 anon_umask=0222 user_config_dir=/etc/vsftpd/vusers user_sub_token=$USER local_root=/home/virtual/$USER # ascii ascii_upload_enable=YES ascii_download_enable=YES # Directory Options dirlist_enable=YES dirmessage_enable=NO force_dot_files=NO hide_ids=NO ls_recurse_enable=NO use_localtime=YES # File Transfer Options download_enable=YES chown_uploads=NO write_enable=YES # Logging Options dual_log_enable=NO log_ftp_protocol=NO syslog_enable=NO vsftpd_log_file=/var/log/vsftpd/vsftpd.log xferlog_enable=YES xferlog_std_format=NO # Network Options connect_from_port_20=YES listen_port=21 pasv_enable=YES pasv_address=changeme pasv_min_port=changeme pasv_max_port=changeme pasv_promiscuous=NO port_enable=YES # Connection Options tcp_wrappers=YES max_clients=10 max_per_ip=5 max_login_fails=3 # Tweak seccomp_sandbox=NO allow_writeable_chroot=YES
虚拟用户配置文件
这里给出的是一个读写全权限的配置,其他组合自行修改
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_upload_enable=YES
anon_umask=0022
匿名用户
在支持虚拟用户的支持,是可以实现支持匿名访问的,实现的要点也是,关注配置和被访问文件夹以及被访问文件的权限设置,设置正确,就可以支持了。