Linux服务器vsftpd安装与配置
前言
本文,主要以vsftp软件为主进行讲解,版本为3.0.2。以介绍设置虚拟用户、权限验证为主,linux权限知识默认大家都有所了解。vsftpd设置有两种模式:主动模式、被动模式。
Linux网络文件共享。例如NFS、Sambs、FTP,其中以FTP应用最为广泛,成为了当下linux文件系统中主流的网络文件共享工具。介绍FTP主要有几种常见的工具vsftp、proftp、wu-ftp、pureftp,各种FTP软件无优劣之分,实际工作中选择自己熟悉的一款即可。

正文
一、vsftp安装
注意:以Redhat7系列(或者支持systemd环境的linux系统)
1、准备安装包
可以到此网站下载各个版本:http://www.rpmfind.net/linux/rpm2html/search.php?query=vsftpd
1  | vsftpd-3.0.2-29.el7_9.x86_64.rpm  | 
2、安装
1  | rpm -ivh vsftpd-3.0.2-29.el7_9.x86_64.rpm  | 
查询是否安装
1  | rpm -qa | grep vsftpd  | 
二、启动与停止
1、设置开启自启
1  | systemctl enable vsftpd.service  | 
2、启动vsftpd服务
1  | systemctl start vsftpd.service  | 
3、查看vsftpd服务状态
1  | systemctl status vsftpd.service  | 
4、查看vsftpd进程
1  | ps -ef | grep vsftpd  | 
三、错误排查
1、通过Git Bash验证ftp登录
在本机会提示没有ftp命令,直接就在远端测试连接。
1  | ftp remote_ip  | 
2、排查错误
其实翻译一下就知道了,chroot配置没有写入的权限。
1  | OOPS: vsftpd: refusing to run with writable root inside chroot()  | 
3、在vsftpd.conf加入如下配置
后续的版本更新了,需要手动加上allow_writeable_chroot=YES参数配置
1  | allow_writeable_chroot=YES  | 
4、重启vsftpd服务(Redhat7系列)
1  | systemctl restart vsftpd.service  | 
四、优化设置
1、设置防火墙规则
关于防火墙的设置,可以参考我的历史文章(在站内搜索firewalld与iptables)
重启测试vsftpd上传文件,默认存储路径为该用户的home目录下
1  | #例如  | 
如需更改配置,如下设置
1  | local_root=/var/ftp/pub  | 
防火墙加入ftp服务
1  | firewall-cmd --zone=public --add-service=ftp --permanent  | 
主动模式,防火墙开启20、21端口
1  | firewall-cmd --zone=public --add-port=21/tcp --permanent  | 
设置当前ftp存储目录用户权限、chroot_list文件配置用户登录、设置虚拟用户。
注意:在Windows资源管理访问,网络共享中心->Internet属性->高级,开启被动访问ftp(开启兼容模式)
2、设置selinux
1、设置SELinux为宽容模式或者临时关闭
1  | #临时改成宽容模式  | 
2、永久设置selinux,修改配置文件/etc/sysconfig/selinux
1  | #查看,默认配置文件是开启的  | 
五、配置参考
1、示例配置虚拟用户
编辑配置文件vim  /etc/vsftpd/vsftpd.conf
1  | # Example config file /etc/vsftpd/vsftpd.conf  | 
在/etc/vsftpd/chroot_list加入虚拟用户user1和user2。这里直接用vim编辑是一样的加入配置,每行对应一个用户。
1  | echo 'user1' >> /etc/vsftpd/chroot_list  | 
2、新增用户并指定目录
建议:linux下赋予权限底线,在最小权限范围内满足需求即可。
1  | #创建虚拟用户目录  | 
3、设置用户名密码数据库
下面使用的\n并非错误输入,是的,就是正常的换行。熟悉编程的小伙伴应该不陌生,在Java语言的打印输出大家应该有印象吧!
1  | class test{  | 
在虚拟用户存储用户名以及密码
1  | #用vusers.list来区分本机用户与虚拟用户配置  | 
4、指定认证方式
1  | echo -e "#%PAM-1.0\n\nauth required pam_userdb.so db=/etc/vsftpd/vusers\naccount required pam_userdb.so db=/etc/vsftpd/vusers" > /etc/pam.d/vsftpd.vu  | 
如果没有指定虚拟用户的ftp目录,默认访问目录如下
1  | /var/ftp/pub/  | 
经过测试设置的虚拟用户user2禁锢在了/data/user2 目录下
1  | #在Windows下访问到新增的test1、test2文件,如果没变过来多刷新几遍  | 
5、ftp命令登录验证
Git Bash验证
1  | ftp remote_ip  | 
或者在资源管理验证测试新增、删除、修改。
1  | ftp://remote_ip  |