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 |