一、概述
目前用作搭建FTP服务器端的软件有很多,比如 Vsftpd、ProFTPD、PureFTPd、Wuftpd、ServerU、Filezilla Server等,这里使用Vsftpd进行搭建。
vsftpd 是“very secure ftp daemon”的首字母缩写,它是一款在Linux发行版中最受推崇的免费且开源的ftp文件服务器软件,其支持很多其它 FTP 服务器软件所不支持的功能,具有很高的安全性。
二、准备
1、PC机
准备一台用于搭建FTP服务器端的虚拟PC,该虚拟PC的IP为192.168.1.100,内存为4G,网络适配器为NAT(实际开发中为桥接模式),参考视频:https://www.bilibili.com/video/BV15m4y1d7ZP/?spm_id_from=333.999.0.0
2、连接
安装MobaXterm并远程连接此虚拟PC。
三、安装
1、安装
# yum -y install vsftpd
2、启动
# systemctl start vsftpd.service
3、自启
# systemctl enable vsftpd.service
4、状态
# systemctl status vsftpd.service
四、配置
vsftpd支持匿名用户、系统用户和虚拟用户三类账号登陆:匿名用户不用登陆FTP服务器端即可访问其中资源,这种类型的账号登陆明显存在安全问题;系统用户访问可以解决匿名用户带来的安全问题,但是系统用户通过系统账号和系统密码也可以登录操作系统,对操作系统依然存在安全隐患,所以实际工作中大多使用虚拟用户访问ftp服务器:多个虚拟用户映射一个系统用户,虚拟用户和所映射的系统用户均不能登陆linux系统,用户只能通过虚拟用户登陆ftp服务器,这样大大提高了系统安全性。
下面配置三个用户:admin用户为管理员,可以添加、删除、下载和重命名FTP服务器端文件,其余两个用户只能下载FTP服务器端文件,具体步骤如下:
1、账号/密码
a、创建存储虚拟用户账号和密码的文件,并添加虚拟用户账号和密码。
# tee /etc/vsftpd/virtusers <<-'EOF'
zhangsan
123456
lisi
123456
admin
123456
EOF
# cat /etc/vsftpd/virtusers
说明:第一行用户名,第二行密码,以此类推,用户名不能使用root为用户名。
b、基于前面创建的/etc/vsftpd/virtusers文件生成/etc/vsftpd/virtusers.db数据库文件,该文件进行了hash加密。
# db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
说明:上面命令执行后,/etc/vsftpd/virtusers文件即可删掉。
c、清空/etc/pam.d/vsftpd内容,添加配置。
# cat > /etc/pam.d/vsftpd << EOF
auth required pam_userdb.so db=/etc/vsftpd/virtusers
account required pam_userdb.so db=/etc/vsftpd/virtusers
EOF
# cat /etc/pam.d/vsftpd
说明:db等号右边为数据库文件路径。
2、系统用户
# useradd ftpuser -d /home/share -s /sbin/nologin
说明:
ftpuser为用户名,该用户名就是多个虚拟用户所映射的系统用户账号,-d用于指定系统用户登入时的起始目录,这里为所有虚拟用户登陆ftp服务器的起始目录,即ftp上传下载根目录,-s用于设置该用户不可登录系统,因此无需为该用户设置密码;
该命令执行后将创建/home/share目录,share文件夹所有者为ftpuser。
3、权限权限
a、创建目录
# mkdir /etc/vsftpd/vconf
说明:该目录用于存储以**虚拟用户名(如admin、zhangsan、lisi)**命名的配置文件,文件内部指定了该用户名对应的权限。
b、管理员
# tee /etc/vsftpd/vconf/admin <<-'EOF'
write_enable=YES
anon_world_readable_only=NO
download_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF
# cat /etc/vsftpd/vconf/admin
c、其他用户
①、zhangsan
# tee /etc/vsftpd/vconf/zhangsan <<-'EOF'
anon_world_readable_only=NO
EOF
# cat /etc/vsftpd/vconf/zhangsan
②、lisi
# tee /etc/vsftpd/vconf/lisi <<-'EOF'
anon_world_readable_only=NO
EOF
# cat /etc/vsftpd/vconf/lisi
4、配置文件
修改/etc/vsftpd/vsftpd.conf配置文件
#12行 关闭匿名用户登录,不影响虚拟用户登陆
anonymous_enable=NO
#19行 允许登录用户是否有写权限
write_enable=NO
#29行 是否允许匿名上传文件
anon_upload_enable=NO
#33行 是否允许匿名创建和删除目录
anon_mkdir_write_enable=NO
##是否允许匿名其他写操作,如文件重命名、文件删除和文件覆盖
anon_other_write_enable=NO
#49行
chown_uploads=NO
#73行
async_abor_enable=YES
#84行
ascii_upload_enable=YES
#85行
ascii_download_enable=YES
#88行
ftpd_banner=Welcome to blah FTP service.
#111行
ls_recurse_enable=NO
#116行
listen=YES
#125行,注释掉该行配置,否则提示500 OOPS: run two copies of vsftpd for IPv4 and IPv6错误
# listen_ipv6=YES
#127行 指定pam服务名,该名称对应于/etc/pam.d/vsftpd文件的文件名,登录FTP服务器时依据此文件的内容进行认证
pam_service_name=vsftpd
#128行 vsftpd.user_list和ftpusers配置文件里的用户禁止访问ftp,俗称黑名单
userlist_enable=YES
#129行 是否开启限制IP登录功能
tcp_wrappers=YES
##指定端口号
listen_port=21
##开启虚拟用户
guest_enable=YES
##指定虚拟用户所映射的系统用户,和前面第2步useradd命令创建的用户相对应
guest_username=ftpuser
##指定虚拟用户配置文件所在目录,和前面第3步的创建目录相对应
user_config_dir=/etc/vsftpd/vconf
##vsftpd在2.3.5版本之后增强了安全检查,如果系统用户只能访问ftp根目录及其子目录,则该根目录(/home/share)不能有写权限,如果检查发现还有写权限,则登陆ftp服务器时报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES
5、重启服务
# systemctl restart vsftpd.service
6、SElinux策略
# setsebool -P ftpd_full_access 1
说明:上面命令用于修改SElinux策略,否则提示如下错误:
SELinux is preventing vsftpd from using the dac_read_search capability.
7、开放端口
# firewall-cmd --zone=public --add-port=21/tcp --permanent
# firewall-cmd --reload
五、访问
FTP客户端软件有很多,比如FireFTP、xFTP、FlashFXP和WinSCP,这里使用WinSCP。
1、下载
下载地址:https://winscp.net/eng/download.php,这里下载WinSCP-6.1-Setup.exe
2、安装
双击WinSCP-6.1-Setup.exe文件,按照提示进行安装即可,这里不再总结。
3、连接
a、启动WinSCP,如下所示:
b、输入主机名、端口号、用户名和密码—>点击“高级(A)…”,如下所示:
c、点击“连接”—>取消“被动模式§”选项—>点击“确定”,返回到第a步界面—>点击“登录”即可连接FTP服务器。