1. 安装相关软件
yum -y install vsftpd* pam* db4*
vsftpd:ftp软件 pam:认证模块 DB4:支持文件数据库
2.新建一个用户,可以不设置密码,并且不让他能够登陆shell
useradd ftpuser -d /ftpfile -s /sbin/nologin
3.vsftpd.conf文件中添加以下配置
#启用虚拟用户功能
guest_enable=YES
#指定虚拟的宿主用户
guest_username=virtusers
#设定虚拟用户的权限符合他们的宿主用户
virtual_use_local_privs=YES
#设定虚拟用户个人vsftp的配置文件存放路劲。这个被指定的目录里,将被存放每个虚拟用户个性的配置文件,注意的地方是:配置文件名必须
和虚拟用户名相同。
user_config_dir=/etc/vsftpd/vconf
#设定pam服务下的vsftpd验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。
pam_service_name=vsftpd
4.建立虚拟用户
(1)mkdir /etc/vsftpd/vconf/
(2)建立一个虚拟用户名单文件,用来记录虚拟用户的账号和密码,格式为:一行用户名,一行密码。奇数行表示用户名,偶数行表示密码
vim /opt/vsftp/passwd
test
123456
test1
654321
3.)生成虚拟用户数据文件
db_load -T -t hash -f /opt/vsftp/passwd /opt/vsftp/passwd.db
5.设置pam验证文件
cat /etc/pam.d/vsftpd
#%PAM-1.0
#####32位系统配置
#auth sufficient /lib/security/pam_userdb.so db=/etc/se'rvsftpd/xnpasswd
#account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/xnpasswd
#####64位系统配置
##注意/opt/vsftp/passwd这个路径是你用db_load命令生成db密码数据库相对应的,并且这里不用加db后缀,切记
auth sufficient /lib64/security/pam_userdb.so db=/opt/vsftp/passwd
account sufficient /lib64/security/pam_userdb.so db=/opt/vsftp/passwd
#以上两条是手动添加的,内容是对虚拟用户的安全和帐户权限进行验证。
#这里的auth是指对用户的用户名口令进行验证。
#这里的accout是指对用户的帐户有哪些权限哪些限制进行验证。
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include system-auth
account include system-auth
session include system-auth
session required pam_loginuid.so
6.
虚拟用户的配置
1.)定制虚拟用户模板配置文件(虚拟用户的配置文件名需要和虚拟用户名字一致,因为在登录ftp时输入相应的用户名之后会根据名称去加载相应的配置文件)
vim /etc/vsftpd/vconf/test
复制代码
local_root=/opt/vsftp/file
#指定虚拟用户仓库的具路径
anonymous_enable=NO
#设定不允许匿名访问
write_enable=YES
#允许写的操作
local_umask=022
#上传文件的权限掩码
anon_upload_enable=NO
#不允许匿名上传
anon_mkdir_write_enable=NO
#不允许匿名用户建立目录
idle_session_timeout=300
#设定空闲链接超时时间
data_connection_timeout=1000
#设定单次传输最大时间
max_clients=0
#设定并发客户端的访问数量
max_per_ip=0
#设定客户端的最大线程数
local_max_rate=0
#设定用户的最大传输速率,单位b/s
复制代码
2.)建立虚拟用户的仓库目录并更改相应属主/组且赋予相应权限
mkdir -p /opt/vsftpd/file
chown virtusers:virtusers /opt/vsftpd/file
chmod 755 /opt/vsftpd/file
7.测试
如果连接不上,可以将系统的防火墙关闭,或者检查是否开放相应的端口
建议关闭iptables 与 selinux 进行测试。
可能会出现的错误:
1.)500 OOPS:错误
有可能是你的vsftpd.con配置文件中有不能被实别的命令,还有一种可能是命令的YES 或 NO 后面有空格
2.)若是提示权限问题,检测配置文件无误后执行:setsebool -P ftp_home_dir=1
vsftpd 对于权限的要求并不严格,对于指定ftp的宿主用户vsftpd也只是需要有日志文件的权限,其他地方默认即可,而虚拟用户的宿主则需要有相关的虚拟用户仓库路径的权限,且新版本下针对仓库的上级目录貌似不能是777权限可以是755