vsftpd
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
安装部署
系统:centos7.3
1、关闭防火墙及Selinx
#关闭防火墙 systemctl stop firewalld # 关闭selinux:更改selinux配置文件/etc/selinux/config中的参数SELINUX=disabled # getenforce Disabled
2、安装vsftp并创建用户
!!!注意:前方有坑,:cetnos7.6的系统/etc/shells 文件中没有/sbin/nologin路径,创建用户指定的时候虽然不会报错,但是ftp登录的时候鉴权会失败,530妥妥的报错,你会一脸懵逼,必须手动写入文件中才行。
yum install -y vsftpd pam* db4* #管理vsftp服务命令 systemctl (start | stop | restart | enable |disable) vsftpd #创建用户并指定家目录 useradd -d /opt/test -s /sbin/nologin test #创建密码 passwd test #更改/etc/vsftpd/vsftpd.conf配置文件,取消匿名权限,并限制登陆用户不能离开主目录 anonymous_enable=NO #不允许匿名用户登录 chroot_list_enable=YES #是否禁锢chroot_list中的用户 chroot_list_file=/etc/vsftpd/chroot_list # chroot_list文件保存位置 allow_writeable_chroot=YES #允许在主目录下有写权限 #将限制的用户名填入chroot_list中 echo "test" > /etc/vsftpd/chroot_list 备注:从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了! 如果检查发现还有写权限,就会报该错误。 要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限,注意把目录替换成你自己的。 或者你可以在vsftpd的配置文件中增加下列两项中的一项: allow_writeable_chroot=YES #重启服务便可以使用创建的账号密码登录上传下载文件了。 systemctl restart vsftpd
常用配置文件参数更改
anonymous_enable=NO #不允许匿名用户登录
listen_port=21 #FTP监听端口
local_enable=YES #允许本地用户登录
write_enable=YES #是否允许本地用户具有写入权限
local_umask=022 #设置上传umask值为系统默认umask值
dirmessage_enable=YES #允许为配置目录显示信息
xferlog_enable=YES #打开日志记录功能
connect_from_port_20=YES #启用FTP数据端口的连接请求
xferlog_std_format=YES #是否以标准xferlog的格式书写传输日志文件
chroot_local_user=YES
chroot_list_enable=YES #是否禁锢chroot_list中的用户
chroot_list_file=/etc/vsftpd/chroot_list # chroot_list文件保存位置
listen=NO #是否作为一个独立守护进程运行
userlist_enable=YES
tcp_wrappers=YES #可以实现linux系统中网络服务的基于主机地址的访问控制
allow_writeable_chroot=YES #使主目录具有写权限
使用虚拟用户登录
以上创建的test用户为映射虚拟用户的宿主
1、创建虚拟用户列表
vim /etc/vsftpd/vuser.txt
goodjob # 账号
1234 # 密码
anonym
4567
......
......
像上述那样,单数行是用户名,双数行是密码每两行一条记录
!!!注意这里的账号也需要写入到/etc/vsftpd/chroot_list,否则将可以浏览所有目录
echo "goodjob" >> /etc/vsftpd/chroot_list
echo "anonym" >> /etc/vsftpd/chroot_list
2、生成虚拟用户的db数据库文件
db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db
3、创建新的pam.d文件
vim /etc/pam.d/vsftpdnew 特别注意 以下区别 32位系统增加以下两句: auth required pam_userdb.so db=/etc/vsftpd/vuser account required pam_userdb.so db=/etc/vsftpd/vuser 64位系统增加以下两句: auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser account required /lib64/security/pam_userdb.sodb=/etc/vsftpd/vuser
4、编辑配置文件开启虚拟用户登录
guest_enable=YES #开启虚拟用户 guest_username=test #FTP虚拟用户对应的系统用户 virtual_use_local_privs=YES #是否与本地用户同一权限,默认是NO,是无法删除文件的。 user_config_dir=/etc/vsftpd/vuser_conf #FTP虚拟用户所在目录配置文件,文件名对应虚拟用户名 pam_service_name=/etc/pam.d/vsftpdnew #PAM认证文件
5、创建虚拟用户配置目录及文件
mkdir /etc/vsftpd/vuser_conf vim goodjob #配置文件参数 local_root=opt/test # 默认主目录,此目录需自己创建 write_enable=YES #(可上传写入) anon_umask=022 #(掩码权限) anon_world_readable_only=NO #(浏览目录等) anon_upload_enable=YES #(上传文件) anon_mkdir_write_enable=YES #(新建文件夹) anon_other_write_enable=YES #(写入) !!!注意此内容里面两边不能有空格,否则登录会出现问题。 #最后重启服务,使用虚拟用户登录 systemctl restart vsftpd