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 |