本来以为弄个FTP应该非常简单。不曾想花了两天时间才差不多搞定。自己能力是有多差啊。下面记录一下整个配置过程,备注一些注意点。以备今后使用。
1. 安装FTP
sudo yum install vsftpd -y
执行上面命令即可。执行完之后,用下面命令检查一下vsftpd的版本号。能返回版本号就属于安装成功了。
vsftpd -v
需要说明的是安装后,默认的FTP访问路径是/var/ftp/pub。安装位置路径是/etc/vsftpd。
启动服务并设置为开机自动启动。
sudo systemctl start vsftpd sudo systemctl enable vsftpd
2. 创建FTP用户
#增加用户ftpadmin,并指定用户的主目录为/var/ftp/pub useradd -d /var/ftp/pub ftpadmin #为ftpadmin用户设置密码 passwd ftpadmin #限定用户ftpadmin只能ftp登陆 usermod -s /sbin/nologin ftpadmin
3. 修改目录权限
chmod -R 777 /var/ftp/pub
4. 打开PASV模式
#编辑vsftpd配置 nano /etc/vsftpd/vsftpd.conf #在文件末尾添加下面三行命令 pasv_enable=YES pasv_min_port=6000 pasv_max_port=7000 #重启FTP服务 service vsftpd restart
关于PORT方式和PASV方式的区别:
主动模式PORT MOD & 被动模式 PASV MOD
FTP的连接一般是有两个连接的通道:
一个用来客户端程序和ftp服务器传输控制命令,默认端口21;另一个用来传输数据的链接通道,默认端口20。
假设客户端为C,服务端为S:
主动模式:当客户端C向服务端S发起连接并通过账户密码验证后,客户端C会发送一条命令告诉服务端S,客户端在本地打开了一个端口N在等待进行数据链接,当服务端S收到这个Port命令后,就会主动向客户端打开的那个端口N发起请求,这种数据通道就生成了。
Pasv模式:当客户端C向服务端S发起连接并通过账户密码验证后,服务端S告知客户端C,服务的在本地打开了一个端口M作为数据传输通道,等待客户端来建立链接,即被动地接受客户端来链接。
所以在vsftpd配置中需要打开PASV方式。具体定义如下:
pasv_enable=YES (Default: YES) 设置是否允许pasv模式
#pasv_promiscuous=NO (Default: NO) 是否屏蔽对pasv进行安全检查,(当有安全隧道时可禁用)
pasv_max_port=6000 (Default: 0 (use any port)) pasv使用的最大端口
pasv_min_port=7000 (Default: 0 (use any port)) pasv使用的最小端口
5. 防火墙设置
给防火墙添加FTP访问转换支持模块。
nano /etc/sysconfig/iptables-config #添加下面两行内容,顺序不能颠倒 IPTABLES_MODULES="ip_conntrack_ftp" IPTABLES_MODULES="ip_nat_ftp"
给防火墙添加访问规则允许
iptables -L -n iptables -L INPUT --line-numbers iptables -D INPUT 7 iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 20 -j ACCEPT iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT iptables -A INPUT -p tcp --dport 6000:7000 -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited service iptables save service iptables restart
6. 修改SELINUX
nano /etc/selinux/config #将SELINUX设置为disable SELINUX=disabled #重启系统 reboot
至此,所有配置都完成了。