简介
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。<br /> FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。<br /> 2、使用场合<br /> 用于文件的传输;<br /> 3、FTP的作用<br /> 用于文件的上传和下载;<br /> 4、FTP属于协议及端口号<br /> 属于tcp协议<br /> 端口号:<br /> 21:控制层面,用于账户密码验证,权限的验证;<br /> 20:数据层面,用于文件的上传和下载;
原理
FTP 是 C/S 架构的服务,拥有一个服务器端和一个客户端,FTP 底层通过 TCP 协议来作为传输协议,所以 FTP 协议是一种可靠的文件传输方式,FTP 提 供了两个端口号, 20 和 21 号端口,20 号是数据接口,提供数据之间的传输,21 号是命令接口,提供命令之间的传输。<br /> FTP 服务端与客户端连接一般有两种模式:主动模式(Active Mode)和被动模 式(Passive Mode) <br /> 在主动模式下,FTP 客户端随机开启一个大于 1024 的端口 N 向服务器的 21 号端口发起连接,发送 FTP 用户名和密码,然后开放 N+1 号端口进行监听,并 向服务器发出 PORT N+1 命令,告诉服务端客户端采用主动模式并开放了端口。 FTP 服务器接收到 PORT 命令后,会用其本地的 FTP 数据端口(通常是 20)来 连接客户端指定的端口 N+1,进行数据传输。如图: <br /> <br /> 在被动模式下,FTP 客户端随机开启一个大于 1024 的端口 N 向服务器的 21 号端口发起连接,发送用户名和密码进行登陆,同时会开启 N+1 端口。然后向 服务器发送 PASV 命令,通知服务器自己处于被动模式。服务器收到命令后,会 开放一个大于 1024 的端口 P(端口 P 的范围是可以设置的,后面会说到这个是 很重要的)进行监听,然后用 PORT P 命令通知客户端,自己的数据端口是 P。 客户端收到命令后,会通过 N+1 号端口连接服务器的端口 P,然后在两个端口之 间进行数据传输。如图: <br /> 
安装FTP
*ftp节点上操作*//更改主机名[root@bbb ~]# hostnamectl set-hostname ftp[root@bbb ~]#//刷新[root@ftp ~]# bash//yum安装FTP服务[root@ftp ~]# yum install vsftpd -y//重启ftp[root@ftp ~]# systemctl restart vsftpd//安装端口查询依赖[root@ftp ~]# yum install net-tools telnet -y//查看21端口(ftp有两个端口号)[root@ftp ~]# netstat -lntp | grep 21tcp6 0 0 :::21 :::* LISTEN 10104/vsftpd//关闭防火墙[root@ftp ~]# systemctl stop firewalld[root@ftp ~]# systemctl enable firewalld[root@ftp ~]# setenforce 0*NFS节点上操作*[root@aaa ~]# hostnamectl set-hostname nfs[root@aaa ~]#[root@nfs ~]# bash[root@nfs ~]# yum install vsftpd -y[root@nfs ~]# systemctl restart vsftpd//安装端口查询依赖[root@nfs ~]# yum install net-tools telnet -y[root@nfs ~]# netstat -lntp | grep 21tcp6 0 0 :::21 :::* LISTEN 10104/vsftpd[root@nfs ~]# systemctl stop firewalld[root@nfs ~]# systemctl enable firewalld[root@nfs ~]# setenforce 0*ftp节点上操作*//移动到vsftpd目录下[root@ftp ~]# cd /etc/vsftpd///查看目录下的文件(重要的是 vsftpd.conf 配置文件)[root@ftp vsftpd]# lsftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh//复制备份配置文件[root@ftp vsftpd]# cp vsftpd.conf{,.bak}//查看[root@ftp vsftpd]# ll总用量 28-rw-------. 1 root root 125 6月 10 2021 ftpusers-rw-------. 1 root root 361 6月 10 2021 user_list-rw-------. 1 root root 5116 6月 10 2021 vsftpd.conf-rw-------. 1 root root 5116 12月 14 19:30 vsftpd.conf.bai-rwxr--r--. 1 root root 338 6月 10 2021 vsftpd_conf_migrate.sh//获取写入文件([root@nfs vsftpd]# grep -v '#' vsftpd.conf.bak > vsftpd.conf)[root@nfs vsftpd]# egrep -v '^$|^#' vsftpd.conf.bak > vsftpd.conf[root@nfs vsftpd]#[root@nfs vsftpd]# cat vsftpd.confanonymous_enable=YESlocal_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_std_format=YESlisten=NOlisten_ipv6=YESpam_service_name=vsftpduserlist_enable=YEStcp_wrappers=YES
配置FTP
创建账号数据
虚拟用户配置

*ftp节点上操作*1.创建账号数据[root@ftp vsftpd]# vi users.conf[root@ftp vsftpd]# cat users.confzhanghao //账号123456 //密码mima //账号000000 //密码//vsftpd 服务使用 Berkeley DB 格式的数据库文件来存放虚拟用户账号。建立这种数据库文件需要用到 db_load 工具,db_load 工具由 db4-utils 软件包提供,默认已安装//所以转换下[root@ftp vsftpd]# db_load -T -t hash -f /etc/vsftpd/users.conf /etc/vsftpd/users.db[root@ftp vsftpd]# ll总用量 40-rw-------. 1 root root 125 6月 10 2021 ftpusers-rw-------. 1 root root 361 6月 10 2021 user_list-rw-r--r--. 1 root root 28 12月 14 20:09 users.conf-rw-r--r--. 1 root root 12288 12月 14 20:11 users.db-rw-------. 1 root root 248 12月 14 19:42 vsftpd.conf-rw-------. 1 root root 5116 12月 14 19:30 vsftpd.conf.bai-rwxr--r--. 1 root root 338 6月 10 2021 vsftpd_conf_migrate.sh//为了提高虚拟用户账号文件的安全性,应将文件权限设置为 600,以免数据外泄[root@ftp vsftpd]# chmod 600 users.db//*创建 FTP 根目录及虚拟用户映射的系统用户[root@ftp vsftpd]# useradd vsftpd -d /home/vsftpd -s /sbin/nologin[root@ftp vsftpd]# mkdir -p /home/vsftpd/xmcsxy[root@ftp vsftpd]# chmod -R 755 /home/vsftpd([root@ftp vsftpd]# chmod -R 777 /home/)//*建立支持虚拟用户的 PAM 认证文件(若要读取虚拟用户的账号数据文件,则需要创建新的 PAM 认证配置)[root@ftp vsftpd]# vi /etc/pam.d/vsftpdauth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/usersaccount sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/users
2.添加虚拟用户支持
//2.添加虚拟用户支持//*在 vsftpd.conf 文件中添加虚拟用[root@ftp vsftpd]# vi vsftpd.confanonymous_enable=yes //把这个换成no//再添加四行chroot_local_user=YESguest_enable=YESallow_writeable_chroot=YESuser_config_dir=/etc/vsftpd/vsftpd_user_conf//*有了上述配置以后,就可以在/etc/vsftpd/vsftpd_user_conf 目录中为每个虚拟用户分别建立配置文件了。[root@ftp vsftpd]# mkdir -p /etc/vsftpd/vsftpd_user_conf//移动到虚拟用户使用的配置文件目录[root@ftp vsftpd]# cd /etc/vsftpd/vsftpd_user_conf[root@ftp vsftpd_user_conf]# vi zhanghao//添加这三行local_root=/home/vsftpd/xmcsxyanon_upload_enable=YESwrite_enable=YES[root@ftp vsftpd_user_conf]# vi mima//也添加这三行local_root=/home/vsftpd/xmcsxy# //当本地用户登入时,将被更换到定义的目录下。默认值为各用户的家目录anon_upload_enable=YESwrite_enable=YES
3,启动服务并测试
//重启[root@ftp vsftpd_user_conf]# systemctl restart vsftpd[root@ftp vsftpd_user_conf]# systemctl enable vsftpdCreated symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.如果报错是553应该就是权限错误[root@ftp ~]# chmod 755 -R /etc/vsftpd/vsftpd_user_conf/[root@ftp ~]# chmod 777 -R /home/vsftpd/

成功
//在nfs上测试[root@nfs ~]# yum -y install lftp[root@nfs ~]# lftp zhangsan@192.168.100.11[root@nfs ~]# lftp bai:1234@192.168.142.162:21lftp bai@192.168.142.162:~> ls-rw------- 1 14 50 1244 Dec 14 09:35 anaconda-ks.cfg-rw------- 1 14 50 751 Dec 14 09:37 bai.html-rwxrwxrwx 1 0 0 0 Dec 14 09:29 bai.txt-rw------- 1 14 50 552085090 Dec 14 09:37 英语.pptxlftp bai@192.168.142.162:/>
