说明:目前主流的FTP服务器端软件包括:Vsftpd、ProFTPD、PureFTPd、Wuftpd、Server-U FTP、FileZilla Server等软件,其中Unix/Linux使用较为广泛的FTP服务器端软件为Vsftpd 。
非常安全的FTP服务进程(Very Secure FTP daemon,Vsftpd),Vsftpd在Unix/Linux发行版中最主流的FTP服务器程序,优点小巧轻快,安全易用、稳定高效、满足企业跨部门、多用户的使用等。
这里说明:aarch64架构与x86-64架构安装过程一致,只是安装文件不一样而已。
一、安装前准备:
1、关闭防火墙,禁止开机自启(后面安装完还需要开始,保障网络安全)
systemctl stop firewalld
systemctl disable firewalld
2 关闭selinux
vim /etc/selinux/config
SELINUX=disable
setenforce 0使修改立即生效
二、安装过程:
2.1在线安装:查找可安装版本
[root@localvm ~]# yum list|grep vsftp
vsftpd.x86_64 3.0.2-29.el7_9 updates
vsftpd-sysvinit.x86_64 3.0.2-29.el7_9 updates
[root@localvm ~]#yum install vsftpd* -y
2.2手动安装:
资源请自行下载:
x86架构:vsftpd-3.0.2-29.el7_9.x86_64.rpm
aarch64架构:vsftpd-3.0.3-28.h1.eulerosv2r8.aarch64.rpm
[root@localvm ~]# rpm -ivh vsftpd-3.0.2-29.el7_9.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:vsftpd-3.0.2-29.el7_9 ################################# [100%]
三、安装后测试:
3.1启动命令:
[root@localvm ~]# systemctl start vsftpd
3.2登录测试ftp://localhost
默认系统目录(匿名用户可以访问的目录): /var/ftp/pub/
四、基本配置(个性配置):
4.1停止服务:
[root@localvm ~]#systemctl stop vsftpd
4.2编辑配置文件:
[root@localvm ~]# vim /etc/vsftpd/vsftpd.conf
FTP主被动模式,默认为被动模式,设置为被动模式使用端口方法如下:
4.3在文件末尾加上如下内容
pasv_enable=YES
pasv_min_port=60000
pasv_max_port=60100
4.4以下内容有点绕,看不懂可以略过
#####################
#开启控制用户访问,默认开启;
#当 userlist_enable=NO时user_list列表不生效,此时只有user_list和不在ftpusers里面的系统用户可以访问;
#当 userlist_enable=YES,userlist_deny=YES时此时只有不在ftpusers和user_list的系统用户可以访问(默认);
#当 userlist_enable=YES , userlist_deny=NO时此时只有user_list用户可以访问,只能用命令行进行访问;
#如果用户同时出现在ftpuser和user_list中,ftpuser的优先权大于user_list;
#/etc/vsftpd/ftpusers
#黑名单文件,此文件里的用户不允许访问 FTP 服务器。
#/etc/vsftpd/user_list
#是白名单文件,此文件里的用户允许访问 FTP 服务器。
#######################
4.5备份配置文件
[root@localvm vsftpd]# cp -a /etc/vsftpd/vsftpd.conf{,.bak}
4.6提取配置文件中有用的配置信息
[root@localvm vsftpd]# egrep -v "^#|^$" /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #开启匿名用户访问;
local_enable=YES #启用本地系统用户访问;
write_enable=YES #本地系统用户写入权限;
local_umask=022 #本地用户创建文件及目录默认权限掩码;
dirmessage_enable=YES #打印目录显示信息,通常用于用户第一次访问目录时,信息提示;
xferlog_enable=YES # 启用上传/下载日志记录;
connect_from_port_20=YES #FTP使用20端口进行数据传输;
xferlog_std_format=YES #日志文件将根据xferlog的标准格式写入;
listen=YES #Vsftpd不以独立的服务启动,通过Xinetd服务管理,建议改成YES;
listen_ipv6=NO # 启用IPV6监听;
pam_service_name=vsftpd #登录FTP服务器,依据/etc/pam.d/vsftpd中内容进行认证;
userlist_enable=YES #Vsftpd.user_list和ftpusers配置文件里用户禁止访问FTP;
tcp_wrappers=YES # 设置vsftpd与tcp wrapper结合进行主机的访问控制,Vsftpd服务器检查/etc/hosts.allow 和/etc/hosts.deny中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。
ascii_upload_enable=YES
ascii_download_enable=YES
virtual_use_local_privs=YES #虚拟用户与本地用户权限一致
guest_username=vsftpd #虚拟用户使用的系统用户名
guest_enable=YES #启动虚拟用户
chroot_local_user=YES #是否将所有用户限制在主目录
allow_writeable_chroot=YES #允许受限用户的写权限
chroot_list_enable=YES #是否启动限制用户的名单
#注意:以上配置信息不要粘贴你的配置文件里,因为vsftpd.conf里面不支持中文,会报错。
4.7我虚拟机里的vsftpd.conf配置如下:
======================服务器里的配置============
#说明:ftp根目录:/data/ftpdata,有2个用户admin不受限权限;wenjian仅有上传权限。
[root@localhost vsftpd]# egrep -v "^#|^$" /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
listen=YES
listen_ipv6=NO
pasv_enable=YES
pasv_min_port=60000
pasv_max_port=60100
pam_service_name=vsftpd
userlist_enable=YES
virtual_use_local_privs=YES
guest_username=vsftpd
guest_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd/user_list
user_config_dir=/etc/vsftpd/vuserconf
local_root=/data/ftpdata
==================================
五、开启vsftp虚拟用户配置:
#5.1、创建vsftpd使用的系统用户,主目录为/home/vsftpd,禁止ssh登录。创建之后所有虚拟用户使用这个系统用户访问文件。
[root@localvm vsftpd]# useradd vsftpd -d /home/vsftpd -s /bin/false
#5.2、设置vsftpd的虚拟用户的验证
vim /etc/pam.d/vsftpd
#%PAM-1.0
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
#5.3、虚拟用户配置介绍:
5.3.1. 建立虚拟用户个人vsftp的配置文件
mkdir -p /etc/vsftpd/vuserconf
5.3.2.进入目录
cd /etc/vsftpd/vuserconf
5.3.3.创建并编辑定义的虚拟用户的配置文件(admin用户权限都是通过这个来限制)
vim admin
# 允许admin用户对FTP服务器文件具有写权限:
write_enable=YES
anon_world_readable_only=NO
vim wenjian
# wenjian仅有上传权限:内容如下:
write_enable=YES
download_enable=NO
#5.4.然后生成虚拟用户数据库文件(用于登录验证)
可能你没有安装db工具包,所以先查找一下。
1)rpm -qa | grep db
2) 确实没安装,就查下yum可提供的版本
yum search db4
3) 安装(或者安装libdb-utils.x86_64)
yum install-y compat-db47.x86_64
4) 利用db_load命令生成数据文件(添加新虚拟用户,都要重新执行一次下面的操作,)
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
5) 设定PAM验证文件,并指定对虚拟用户数据库文件进行读取(权限r,w即可)
chmod 600 /etc/vsftpd/virtusers.db
六.ftp根目录权限设置
chown -R vsftpd:vsftpd /data/ftpdata
七、最后vsftp设置开机启动:
[root@localhost ~]# systemctl list-unit-files |grep vsftp
vsftpd.service disabled
[email protected] indirect
vsftpd.target disabled
[root@localhost ~]# systemctl enable vsftpd
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.
[root@localhost ~]# systemctl list-unit-files |grep vsftp
vsftpd.service enabled
[email protected] indirect
vsftpd.target disabled
[root@localhost ~]#大功告成。测试以下吧:最后我还是放弃了vsftpd。
选择了proftpd,因为vsftpd对中文支持不好,在windows客户端,使用资源管理器直接访问ftp服务器和上传的文件名出现乱码。proftpd 有编码转换功能UseEncoding UTF-8 GBK,不会出现这个问题。
参考:
https://blog.csdn.net/D1179869625/article/details/122984871
Centos7 搭建FTP服务器
https://blog.csdn.net/fengge55/article/details/125439766
centos7部署vsftpd虚拟用户
https://blog.csdn.net/will0532/article/details/79175478
centos7安装vsftp配置虚拟用户