Centos7安装vsftp并配置
- 说明
本次测试基于在centos7中使用vsftp时总是遇到各种问题,测试对所遇到的问题进行逐一测试并对其中的问题进行描述,为以后使用vsftp积累经验并就部分问题进行解答。此文中使用的用户、端口等均为个人测试使用,在实际中需要测试端口是否已被使用。
- 测试环境
本次测试使用的是阿里云服务器,使用的系统为centos7.8。初始防火墙是关闭的,selinux默认也是未启用的(disabled)。
- 安装vsftp并配置
- 申请阿里云服务器
此处省略申请过程。此处需要注意的是申请的云服务器有两个IP地址,一个是公有IP地址,一个是私有IP地址,我们在外网连接的情况下可以使用公有IP地址进行访问。测试使用,配置可以选择最低配。
- 云服务器安全组配置
此处需要将我们计划测试的所有端口均添加到此安全组,不然公有IP地址无法访问。我添加了21、8021、8022、4000/40100的配置,为测试准备基础环境。
- ssh修改端口号(临时添加)
- 修改sshd_config文件
vim /etc/ssh/sshd_config
放开Port 22,然后添加Port 8022,别的配置不变。
- 修改ssh_config文件
vim /etc/ssh/ssh_config
放开Port 22,然后添加Port 8022,别的配置不变。
- 测试登陆
配置修改完成后,使用systemctl restart sshd重启ssh服务。然后使用8022端口登陆ssh,测试是否能正常登陆,如果能正常登陆,说明没有问题。如果不能登陆,还可以用22端口继续登陆,查看配置是否修改正确。
- 关闭22端口
如果8022端口测试正常,就可以修改sshd_config、ssh_config文件,继续将Port 22注释掉,然后systemctl restart sshd重启ssh服务,测试22端口是否能登陆,如果不能登陆,说明修改完成。
- 安装vsftp
使用yum安装即可,可以使用yum install vsftpd -y自动安装。
- 测试安装是否正常
useradd ftpceshi -d /ftp_ceshi -g ftp -s /sbin/nologin
passwd ftpceshi
其中,ftpceshi是ftp用户名,-d -d /ftp_ceshi指定了用户的默认目录,-g ftp代表用户所属组,-s /sbin/nologin代表此用户不能登陆系统,只能登陆ftp。
使用ftpceshi用户测试登陆ftp是否正常,如果能正常登陆则表示正常。
- 修改vsftp默认端口
vim /etc/vsftpd/vsftpd.conf
添加如下配置:
listen_port=8021
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40100
pasv_promiscuous=YES
配置说明:
listen_port代表修改后的端口号;
pasv_enable代表被动模式;
pasv_min_port和pasv_max_port代表被动连接时最小端口号和最大端口号;
pasv_promiscuous此选项激活时,将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址。小心打开此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中。默认值为NO。(因为我用的是云服务器,公有IP和私有IP不一致,所以没办法只能启动此选项,如果IP保持一致,则此项不用配置)。
vim /etc/services
修改如下配置
ftp 8021/tcp
ftp 8021/udp
默认端口修改完成后,重启vsftpd服务(systemctl restart vsftpd),然后使用ftpceshi用户测试8021端口登陆,是否能正常登陆,如果能正常登陆则表是正常。还需测试21端口登陆测试,此时21端口已经无法登陆。
- 关闭匿名登陆(这一步可以关闭默认用户登陆)
vim /etc/vsftpd/vsftpd.conf
修改如下配置:
anonymous_enable=NO
配置说明:
此配置会关闭匿名登陆。
重启vsftpd服务(systemctl restart vsftpd),然后使用默认ftp用户测试登陆,是否能正常登陆,如果不能登陆则表是正常。
- 配置ftp用户只能访问当前目录
vim /etc/vsftpd/vsftpd.conf
添加如下配置:
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
配置说明:
chroot_local_user #是否将所有用户限制在主目录,YES为启用 NO禁用。(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的);
allow_writeable_chroot,允许受限用户的写权限;
chroot_list_enable #是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用);
chroot_list_file=/etc/vsftpd/chroot_list #是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值。chroot_local_user总是一个全局性的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。此名单中的用户为例外情况。此文件可以自定义路径和名称,此文件需要手动创建。
重启vsftpd服务(systemctl restart vsftpd),然后使用ftpceshi用户登陆,查看是否能够访问别的路径。
- 其它配置
vim /etc/vsftpd/vsftpd.conf
修改如下配置:
listen=YES
listen_ipv6=NO
配置说明:
listen=YES vsftp不以独立的服务启动,通过xinetd服务管理,建议改为YES;
listen_ipv6=NO 启用IPv6监听。
重启vsftpd服务(systemctl restart vsftpd)。
- 创建ftp上传、下载脚本
脚本内容如下:
#!/bin/bash
ftp -n<<!
open 116.62.36.159 8021
user ftpceshi ftpceshi123
binary
hash
cd /ftp_ceshi
lcd /home/ftp
prompt
mkdir `date +"%Y%m%d"`
cd `date +"%Y%m%d"`
mput *.dat
mget *.dat
close
bye
!
说明:
脚本中的内容可以通过百度自行了解ftp的这些命令。ftp的上传和下载一定要有这种理解,上传是指上传到ftp服务器的内容,下载的是指从ftp服务器去下载,主体是你的服务器,而不是ftp服务器。
- 创建定时任务实现实时上传、下载
在crontab -e中进行编辑:
* * * * * /home/ftp/ftpput.sh &> /home/ftp/ftpput.log && rm -rf /home/ftp/*.dat
说明:
/home/ftp/ftpput.sh为脚本路径,/home/ftp/ftpput.log为日志路径,rm -rf /home/ftp/*.dat为在ftp上传后清除原始文件(避免重复上传)。定时任务说明自行百度。
- 查看ftp上传、下载日志
在/etc/vsftpd/vsftpd.conf中查看xferlog_enable=YES这个参数是否配置,如果配置了则是有上传下载日志的,然后查看xferlog_file这个参数,查看日志位置。
- 开启防火墙(临时添加)
防火墙开启配置:
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --permanent --add-port=8022/tcp
firewall-cmd --permanent --add-port=8021/tcp
firewall-cmd --permanent --add-port=40000-40100/tcp
firewall-cmd --permanent --remove-port=8021/tcp
firewall-cmd --reload
说明:
systemctl start firewalld启动防火墙;
systemctl enable firewalld开机自启动防火墙;
firewall-cmd --permanent --add-port=8022/tcp开通8022端口,后面两条类似;
firewall-cmd --permanent --remove-port=8021/tcp删除8021端口(从防火墙开通策略中删除);
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.3/32" accept'这个在上面没设置,这个是关于开通与192.168.1.3服务器互通。
firewall-cmd --reload重新加载防火墙配置。
- 备注
查看ssh端口:netstat -tunlp | grep "ssh";查看ftp端口:netstat -tunlp | grep "ftp"。