一、vsftpd简介
vsftpd(Very Secure FTP Daemon),以灵活的用户权限控制和安全性著称,下面简单介绍一些配置文件选项用法和配置过程。
二、vsftpd的安装
首先介绍操作环境:
服务器操作系统:Centos 7.3
vsftpd版本:3.0.2
服务器域名:www.digeekao.xin
以CentOS操作系统为例,vsftpd包含在vsftpd包中。使用yum包管理器可以方便的安装:
yum -y install vsftpd ftp \\安装vsftpd,同时安装客户端工具,方便稍后测试
三、vsftpd的主要配置文件
如果使用yum安装,vsftpd的主要配置文件会默认存在在以下位置:
主程序:/usr/sbin/vsftpd
主配置 文件:/etc/vsftpd/vsftpd.conf
用户控制列表:
/etc/vsftpd/ftpusers 明确被禁止登陆的用户名列表
/etc/vsftpd/user_list 可根据设置灵活的设置为白名单或黑名单
主配置文件:/etc/vsftpd/vsftpd.conf
子配置文件:/etc/vsftpd/自定义文件夹/用户名 在开启虚拟用户登录时,可以单独为每个用户设置配置选项
四、vsftpd.conf 配置文件选项说明
#全局选项 listen=YES //是否以独立运行方式监听服务 listen_address=192.168.1.2 //设置监听的IP地址 listen_port=21 //监听FTP服务的端口号 write_enable=YES //是否启用写入权限 downlad_enable=YES //是否启用下载权限 userlilst_enable=YES //是否启用user_list列表文件,设为NO则文件不起作用 userlist_deny=YES //是否禁用user_list列表文件中的用户登录,如果为NO则只有列表中用户可登录 max_clients=0 //限制并发客户端连接数,总连接数限制 max_per_ip=0 //限制单个IP的并发连接数,单用户连接数限制 #匿名相关配置选项 anonymout_enable=YES //是否启用匿名登录 anon_umask=022 //匿名登录用户上传文件的权限掩码,是实际权限的反码 anon_root=/var/ftp //匿名用户的FTP根目录 anon_upload_enable=YES //是否允许匿名用户上传文件 anon_mkdir_write_enable=YES //是否允许匿名用户新建文件夹 anon_other_write_enable=YES //是否开启其他写入权限(重命名,删除……) anon_max_rate=0 //匿名用户的最大传输速率,单位B/S,0代表无限制 #本地用户相关配置选项 local_enable=YES //是否启用本地用户登录 local_umask=022 //本地用户上传文件的权限掩码,是实际权限的反码 local_root=/var/ftp //本地用户的FTP跟目录 chroot_local_user=YES //是否将本地用户禁锢在主目录 local_max_rate=0 //限制本地用户最大传输速率,单位B/S,0代表无限制 #自2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了! #如果检查发现还有写权限,就会提示错误信息: #500 OOPS: vsftpd: refusing to run with writable root inside chroot () #针对这个问题,可以直接去除主目录的写入权限,或添加如下选项到配置文件: allow_writeable_chroot=YES //允许具有写入权限的主目录 #虚拟用户相关选项 guest_enable=YES //是否启用用户映射 guest_username=virtual //指定虚拟用户映射的系统用户名,指定的用户必须存在 pam_service_name=vsftpd.vu //指定PAM认证文件,文件中保存虚拟用户数据文件的路径等信息 user_config_dir=/etc/vsftpd/vusers_dir //指定单独用户配置文件的存放位置
五、配置基于匿名访问的ftp服务器
修改/etc/vsftpd/vsftpd.conf,配置如下选项
#全局选项 listen=YES //是否以独立运行方式监听服务 listen_address=192.168.1.2 //设置监听的IP地址 listen_port=21 //监听FTP服务的端口号 write_enable=YES //是否启用写入权限 downlad_enable=YES //是否启用下载权限 userlilst_enable=YES //是否启用user_list列表文件,设为NO则文件不起作用 userlist_deny=YES //是否禁用user_list列表文件中的用户登录,如果为NO则只有列表中用户可登录 max_clients=0 //限制并发客户端连接数,总连接数限制 max_per_ip=0 //限制单个IP的并发连接数,单用户连接数限制 #匿名相关配置选项 anonymout_enable=YES //是否启用匿名登录 anon_umask=022 //匿名登录用户上传文件的权限掩码,是实际权限的反码 anon_root=/var/ftp //匿名用户的FTP根目录 anon_upload_enable=YES //是否允许匿名用户上传文件 anon_mkdir_write_enable=YES //是否允许匿名用户新建文件夹 anon_other_write_enable=YES //是否开启其他写入权限(重命名,删除……) anon_max_rate=0 //匿名用户的最大传输速率,单位B/S,0代表无限制
以上设置允许匿名登录,并将匿名目录设置在/var/ftp下,允许匿名用户写入和删除、重命名文件及目录。
使用ftp命令测试,匿名登录用户名默认为ftp:
ftp www.digeekao.xin
六、搭建基于本地用户认证的ftp服务器
在配置文件中删除或注释掉匿名相关选项,并配置如下选项:
#本地用户相关配置选项 local_enable=YES //是否启用本地用户登录 local_umask=022 //本地用户上传文件的权限掩码,是实际权限的反码 chroot_local_user=YES //是否将本地用户禁锢在主目录 local_max_rate=0 //限制本地用户最大传输速率,单位B/S,0代表无限制 #自2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了! #如果检查发现还有写权限,就会提示错误信息: #500 OOPS: vsftpd: refusing to run with writable root inside chroot () #针对这个问题,可以直接去除主目录的写入权限,或添加如下选项到配置文件: allow_writeable_chroot=YES //允许具有写入权限的主目录
新建测试用户ftptest,并设置密码:
useradd ftptest && passwd ftptest
使用ftp命令进行测试:
七、创建基于虚拟用户认证的ftp服务器
基于虚拟用户认证的登陆可以更加灵活的控制用户登陆的权限,大大提高FTP服务器的安全性。
基于虚拟用户认证的原理是将虚拟用户映射到一个本地用户,并将虚拟用户的PAM认证文件重新定位到指定的位置。
建立基于虚拟用户的认证一般需要以下几个步骤:
1、建立虚拟用户的账号数据库文件
2、创建虚拟用户映射的系统用户及FTP根目录
3、创建支持虚拟用户的PAM认证文件
4、在vsftpd.conf中添加相关配置
5、为个别用户创建独立配置文件
6、重载服务,进行测试
建立虚拟FTP用户的账号用户名密码列表文件,奇数行为用户名,偶数行为密码:
vim /etc/vsftpd/vusers.list
将虚拟用户用户名密码列表文件转换成账号数据库文件:
cd /etc/vsftpd/ db_load -T -t hash -f vusers.list vusers.db //只用db_load工具转换数据库 chmod 600 /etc/vsftpd/vusers.* //修改相关文件权限,重要!!!!!!
创建映射的系统账户:
useradd -d /home/vftproot -s /sbin/nologin vftp //创建vftp用户,设置主目录,禁止登陆 mkdir /home/vftproot/ftp //创建用户操作的ftp目录,解决2.3.5后可写主目录无法登陆问题 chown vftp:vftp /etc/vftproot/ftp //修改目录所有者
创建支持虚拟用户的PAM认证文件:
vim /etc/pam.d/vsftpd.vu //文件名可自定义 #键入一下内容 #%PAM-1.0 auth required pam_usedb.so db=/etc/vsftpd/vusers account required pam_usedb.so db=/etc/vsftpd/vusers #以上文件中内容为先前步骤中建立的数据库文件,不要扩展名。
在vsftpd.conf中添加相关配置选项:
#本地用户相关选项 local_enable=YES //本地用户认证必需打开 #虚拟用户相关选项 guest_enable=YES //是否启用用户映射 guest_username=virtual //指定虚拟用户映射的系统用户名,指定的用户必须存在 pam_service_name=vsftpd.vu //指定PAM认证文件,文件中保存虚拟用户数据文件的路径等信息 user_config_dir=/etc/vsftpd/vusers_dir //指定单独用户配置文件的存放位置
注意!!!
新添加的PAM认证选项必需位于“pam_service_name=vsftpd”选项位置后,否则认证会出错!!!!!
为个别用户设置独立配置文件:
vim /etc/vsftpd/vusers_dir/test1 //用户test1的配置文件 #键入以下内容 anon_upload_enable=YES anoo_mkdir_write_enable=YES touch /etc/vsftpd/vusers_dir/test2 //用户test2的配置文件
重载服务,在客户端中进行测试:
test1可以读写,新建目录:
test2可以读,不可以新建目录: