FTP基本原理

--------- Client                   Server--------------

①客户端向服务器发出连接请求,同时客户端系统动态地打开一个大于1024的端口等候服务器连接(比如1031端口)
②若FTP服务器在端口21侦听到该请求,则会在客户端1031端口和服务器的21端口之间建立一个FTP会话连接
③当需要传输数据时,FTP客户端动态地打开一个大于1024的端口(比如1032端口)连接到服务器的20端口,并在这两个端口之间进行数据的传输。当数据传输完毕后,这两个端口会自动关闭
④当FTP客户端断开与FTP服务器的连接时,客户端上动态分配的端口将自动释放


FTP工作模式
主动传输模式(Active FTP):默认
        在主动传输模式下,FTP客户端随机开启一个大于1024的端口N(1025)向服务器的21号端口发起连接,然后开放N+1号端口(1026)进行监听,并向服务器发送PORT 1026命令。服务器接收到命令后,会用其本地的FTP数据端口(通常20)来连接客户端指定的端口1026,进行数据传输。

被动传输模式(Passive FTP):
        在被动传输模式下,FTP客户端随机开启一个大于1024的端口N(1025)向服务器的21号端口发起连接,同时会开启N+1号端口(1026),然后向服务器发送PASV 命令。通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024端口P(1521)进行监听,然后用PORT P命令通知客户端,自己的数据端口是1521.客户端收到命令后会通过1026号端口连接服务器的端口1521,然后在两个端口之间进行数据传输。

FTP安装

FTP  server    hostname  fanxh1    192.168.1.10

FTP  clinet    hostname  fanxh2    192.168.1.20 

yum -y install vsftpd           采用YUM安装ftp

service iptables stop           关闭iptables

sentenforce                     查看Selinux 是否开启,如果值为1说明是开启的

sentenforce   0                  关闭Selinux且不需要重启服务器

service vsftpd restart  (/etc/init.d/vsftpd restart)        重新启动ftp服务

chkconfig vsftpd on             ftp服务随系统开机而自动启动服务(2345级别开启)

chkconfig --list vsftpd         查看vsftpd在那些级别启动

用netstat -anptul | grep vsftpd  查看ftp服务端口是否开启

服务器的配置(192.168.1.10)

vim /etc/vsftpd/vsftpd.conf     修改ftp的主配置文件

 12 anonymous_enable=YES        修改匿名用户是否可以登录(YES)代表允许匿名用户可以登录(NO)代表不允许匿名用户登录
 15 local_enable=YES            修改本地用户是否可以登录(YES)代表允许本地用户登录(NO)代表不允许本地用户登录

 96 #chroot_local_user=YES      修改是否禁锢本地用户在自己的家目录,默认是注释以#开头的,如果想开启把前面的#去掉        
 120 listen_port=21             修改连接ftp服务器的端口,默认连接ftp服务器的端口是21

  122 max_clients=20             修改最多并发连接的数量(20)
 123 max_per_ip=2               修改每个IP地址最多的并发连接数(2)
 124 anon_max_rate=50000        修改匿名用户下载速度(50KB/S)
 125 local_max_rate=100000      修改本地用户下载速度(100KB/S)

客户端测试

1.在(服务器端192.168.1.10)添加一个本地用户,并且密码为123456

[root@fanxh1 ~]# useradd fanxiaohui                                     创建一个用户fanxiaohui
[root@fanxh1 ~]# echo 123456 | passwd --stdin fanxiaohui  给用户fanxiaohui添加一个密码

[root@fanxh1 ~]#cd /var/ftp/pub                                            默认匿名用户家目录

[root@fanxh1 ~]#ls -l /etc/* > /var/ftp/pub/anon.txt             在匿名用户的家目录下创建一个文件为anon.txt

2.在(服务器端192.168.1.10)创建一个测试文件

[root@fanxh1 ~]# ls -l /etc/* > ~fanxiaohui/fanxiaohui.txt    在本地用户的家 目录下创建一个文件为fanxiaohui.txt


3.在客户端测试(192.168.1.20)

 匿名用户登录ftp登录方式和上传、下载

[root@fanxiaohui2 ~]# ftp 192.168.1.10

Name (192.168.1.10:root): ftp                  匿名用户登录的用户名
Password:                                                  匿名用户登录的密码(默认没有)

230 Login successful.                                说明登录成功

ftp> ls                                                       查看ftp目录下的内容

drwxr-xr-x    2 0        0            4096 Jan 06 18:16 pub

ftp> cd pub                                               切换到pub目录下,可以查看到服务器端/var/ftp/pub的内容
ftp> ls                                                       查看pub目录下内容
-rw-r--r--    1 0        0           27370 Jan 06 18:03 anon.txt

ftp> get anon.txt                                      下载ftp/pub/anon.txt的命令

ftp> !ls                                                       查看是否下载成功,有就代表下载成功
anaconda-ks.cfg  anon.txt  install.log    install.log.syslog                                                           

ftp> put install.log                                    上传/root/install.log
227 Entering Passive Mode (192,168,1,10,117,22).
550 Permission denied.                              显示上传失败


 本地用户的登录方式和上传下载

[root@fanxiaohui2 ~]# ftp 192.168.1.10

Name (192.168.1.10:root): fanxiaohui      本地用户登录的用户名

Password:                                                本地用户登录的密码123456

Logionsuccessful.                                     说明登录成功

ftp> ls                                                        查看本地用户家目录的内容
-rw-r--r--    1 0        0           56655 Aug 04 12:51 fanxiaohui.txt

ftp> get fanxiaohui.txt                 下载ftp服务器的文件为fanxiaohui.txt
ftp> !ls                                                       查看是否下载成功,有就代表下载成功
anaconda-ks.cfg  anon.txt  fanxiaohui.txt install.log    install.log.syslog        

ftp> put install.log                                    上传/root/install.log

ftp> ls                                                        查看ftp的内容,如果有就代表上传成功
-rw-r--r--    1 501      501         12526 Aug 04 12:59 install.log
-rw-r--r--    1 0        0           56655 Aug 04 12:51 fanxiaohui.txt

  FTP的总结

1.登录FTP后命令的总结

    get    下载
    put    上传
    mget    下载多个,支持通配符
    mput    上传多个,支持通配符
    !cmd    执行外面命令
    lcd     切换外面路径

2.默认FTP登录后的总结

    匿名用户与本地用户都可以登录
    匿名用户登录到/var/ftp,只能下载不能上传
    本地用户登录到本地用户的家目录,可以上传和下载