FTP服务的简介

FTP协议就是文件传输控制协议。它可以使文件通过网络从一台主机传送到同一网络

的另一台主机上,而不受计算机类型和操作系统类型的限制。无论是PC机、服务器、大型机,还是Windows操作系统、Linux操作系统,只要双方都支持FTP协议,就可以方便地传送文件。

FTP服务的具体工作过程如下:

① 当FTP客户端发出请求时,系统将动态分配一个端口(如1032)。
② 若FTP服务器在端口21侦听到该请求,则在FTP客户端的端口1032和FTP服务器的端口21之间建立起一个FTP会话连接。
③ 当需要传输数据时,FTP客户端再动态打开一个连接到FTP服务器的端口20的第2个端口(如1033),这样就可在这两个端口之间进行数据的传输。当数据传输完毕后,这两个端口会自动关闭。
④ 当FTP客户端断开与FTP服务器的连接时,客户端上动态分配的端口将自动释放掉。
 

关于匿名用户:

多数的FTP站点都提供了匿名访问,它使所有的用户都能通过一个通用的账户来访问

站点指定的公共区域。这个账户就是“anonymous”,它通常以E-mail地址作为口令。

主动模式和被动模式:

在主动模式中,FTP客户端随机开启一个大于1024的端口X向服务器的21号端口发起控制连接请求,然后开放X+1号端口进行监听;FTP服务器接受请求并建立控制连接会话。如果客户端在控制会话中发送数据连接请求,那么服务器在接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口X+1进行数据传输。

被动模式的控制连接和数据连接都是由FTP客户端发起的。首先FTP客户端随机开启一个大于1024的端口X向服务器的21端口发起连接,同时会开启X+1端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口Y进行监听,然后用PORT Y命令通知客户端,自己的数据端口是Y。客户端收到命令后,会通过X+1号端口连接服务器的端口Y,然后在两个端口之间进行数据传输。这样就能使防火墙知道用于数据连接的端口号,而使数据连接得以建立。

案例:

建立FTP服务器,并根据以下要求配置FTP服务器。

(1)挂载一块新硬盘,作为FTP存放文件用

  (2)建立公共目录/mnt/ftppart/public 所有用户都是只读的权限

(3)配置FTP匿名用户的主目录为/mnt/ftppart/publiC。匿名用户下载速度100KB/s
(4)建立FTP账户,登录家目录/mnt/ftppart/home  设置该账户的磁盘配额为10MB;下载带宽限制为1MB/s。
(5)设置FTP服务器同时登录到FTP服务器的最大链接数为20;每个IP最大链接数为2。
 

命令:

1添加一块新硬盘

2对硬盘进行分区,格式化,挂载

[root@localhost ~]# fdisk /dev/sdb            //对磁盘进行分区

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-1305, default 1): 

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305): 

Using default value 1305

Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes

255 heads, 63 sectors/track, 1305 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        1305    10482381   83  Linux

Command (m for help): w

[root@localhost ~]# partprobe /dev/sdb              //重新识别分区

[root@localhost ~]# mkfs -t ext3 /dev/sdb1           //格式化分区

[root@localhost ~]# mkdir  /mnt/ftppart             //创建挂载点

[root@localhost ~]# mount  /dev/sdb1  /mnt/ftppart/  //挂载

[root@localhost ~]# df -h                 //显示目前所有分区最大可用空间及使用情形

[root@localhost ~]# mkdir /mnt/cdrom                 //创建光盘挂载点

[root@localhost ~]# mount /dev/cdrom  /mnt/cdrom      //挂载光盘

[root@localhost ~]# cd /mnt/cdrom/Server/

[root@localhost Server]# rpm -ivh vsftpd-2.0.5-16.el5.i386.rpm   //安装vsftpd

[root@localhost ~]# service vsftpd start                     //启动vsftpd服务

[root@localhost Server]# cd /mnt/ftppart 

[root@localhost ftppart]# mkdir public                      //创建public目录                

[root@localhost ftppart]# cd public/

[root@localhost public]# touch a1  a2                 //创建a1  a2 文件做测试

[root@localhost ~]# useradd dd

[root@localhost ~]# useradd ss                    //添加两个账号

[root@localhost ~]# echo "123" |passwd --stdin dd    //为账号添加密码

[root@localhost ~]# echo "123" |passwd --stdin ss

[root@localhost ~]# ll /home

drwx------ 3 dd dd 4096 03-20 11:37 dd

drwx------ 3 ss ss 4096 03-20 11:37 ss

[root@localhost ~]# vim /etc/passwd                         //编辑文件,修改账号家目录

 

[root@localhost ~]# mkdir /mnt/ftppart/home            //创建用户家目录         

[root@localhost ~]# cd /mnt/ftppart/home      

[root@localhost home]# ll

[root@localhost home]# cd /home

[root@localhost home]# ll

drwx------ 3 dd dd 4096 03-20 11:37 dd

drwx------ 3 ss ss 4096 03-20 11:37 ss

[root@localhost home]# mv * /mnt/ftppart/home/   //移动账号原家目录到登陆ftp时的家目录

[root@localhost home]# cd /mnt/ftppart/home              

[root@localhost home]# ll

drwx------ 3 dd dd 4096 03-20 11:37 dd

drwx------ 3 ss ss 4096 03-20 11:37 ss

[root@localhost home]# useradd -D

GROUP=100

HOME=/home

INACTIVE=-1

EXPIRE=

SHELL=/bin/bash

SKEL=/etc/skel

CREATE_MAIL_SPOOL=yes

[root@localhost home]# useradd -D -b /mnt/ftppart/home   //修改创建账号时账号默认家目录

[root@localhost home]# useradd -D

GROUP=100

HOME=/mnt/ftppart/home

INACTIVE=-1

EXPIRE=

SHELL=/bin/bash

SKEL=/etc/skel

CREATE_MAIL_SPOOL=yes

[root@localhost home]useradd user2

[root@localhost home]# vim /etc/fstab  

/dev/sdb1   /mnt/ftppart    auto   defaults,usrquota   0  0  //系统启动时自动挂载此分区

[root@localhost ~]# mount -o remount /dev/sdb1           //重新挂载

[root@localhost ~]# cd /mnt/ftppart

[root@localhost ftppart]# ll

drwxr-xr-x 4 root root  4096 03-20 11:39 home

drwx------ 2 root root 16384 03-20 11:19 lost+found

drwxr-xr-x 2 root root  4096 03-20 11:33 public

[root@localhost ftppart]# quotacheck -augvc              //重新读取分区信息

[root@localhost ftppart]# ll

-rw------- 1 root root  7168 03-20 12:10 aquota.user

drwxr-xr-x 4 root root  4096 03-20 11:39 home

drwx------ 2 root root 16384 03-20 11:19 lost+found

drwxr-xr-x 2 root root  4096 03-20 11:33 public

[root@localhost ftppart]# edquota -u dd               //产生用户dd磁盘配额文件

 

 

 

[root@localhost ftppart]# edquota -p dd ss   //使ss磁盘配额情况和dd相同

[root@localhost ftppart]# edquota -p dd user2

[root@localhost ftppart]# quotaon /dev/sdb1

[root@localhost ftppart]# echo "quotaon /dev/sdb1"  >>/etc/rc.d/rc.local  

进行用户权限设置

[root@localhost ftppart]# vim /etc/vsftpd/vsftpd.conf    //编辑vsftp服务的配置文件

120 anon_root=/mnt/ftppart/public         //匿名用户登录到public文件,只有下载浏览权限

121 anon_max_rate=100000             //匿名用户下载速率最大值100K/s

122 local_max_rate=1000000            //有效账户下载速率最大值1M/s

123 max_clients=20                    //最大登录用户数量20

124 max_per_ip=2                     //同一台主机最大发起连接量2

[root@localhost ftppart]#quota  ss       //查看ss磁盘配额信息

 

 利用CA实现ftps加密访问:

ftp   安全   明文传递   ftps   ftp+ssl   协议   ssl 证书

ftps 步骤 

1创建CA  利用openca 实现

2ftp做钥匙,请求文件,证书

#cd /etc/pki         //pki公钥基础设置,发证机关一系列东西

#ll tls/             // tls传输层安全 和SSL作用一样

#vim  openssl.cnf   

 45 dir             = ../../CA              # Where everything is kept

 46 certs           = $dir/certs            # Where the issued certs are kept

 47 crl_dir         = $dir/crl              # Where the issued crl are kept

 48 database        = $dir/index.txt   文件     # database index file.

 49 #unique_subject = no                    # Set to 'no' to allow creation o    f

 50                                         # several ctificates with same su    bject.

 51 new_certs_dir   = $dir/newcerts         # default place for new certs.

 52 

 53 certificate     = $dir/cacert.pem       # The CA certificate

 54 serial          = $dir/serial     文件      # The current serial number

改动 

45  dir        改为绝对路径  /etc/pki/CA   //CA自己信息放置目录CA自己私钥放置处      

46 certs        证书位置   (手工创建)

47 crl_dir       证书吊销列表 (手工创建)

48database      数据库索引文件  (手工创建 touch

51new_certs_dir  给客户群发放的证书存放的位置(手工创建)

54serial         发放第一份证书序列号  (手工创建,并给它一个值)

88 countryName             = match

89 stateOrProvinceName     = match

90 organizationName        = match

/88,90 s/match/optional

#cd CA 

#mkdir  crl  certs  newcerts

#touch index.txt  serial 

#echo "01">serial  

Certificate    机构自己证书位置           手工创建    自己发给自己的 不需要做请求

Privte_key   机构自己私钥放置位置         手工创建

3创建CA的私钥

# operssl      genrsa         1024   >private/cakey.pem

            产生非对称加密算法

#chmod  600  private/cakey.pem

4设置CA证书

#openssl  req  -new  -key   private/cakey.pem  -x509    -out    cacert.pem   -days 90

                                              证书格式  导出   证书名字

名字hostname合法名称 比如 rootca.net.org

默认情况下这个CA只能针对本机构发放证书

CA搭建完成

5来到ftp

#mkdir  /etc/vsftpd/certs

#cd     /etc/vsftpd/certs/

#openssl  genrsa   1024  >vsftpd.key    产生钥匙

#openssl  req  -new  -key  vsftpd.key  -out  vsftpd.csr  请求文件

利用请求文件产生证书,CA颁发

#openssl  ca  -in   vsftpd.csr     -out     vsftpd.cert                   

                     请求位置     输出

#ll

#chmod  600  *    //改变所有的权限

ftp+证书               可以使用man  5  vsftpd.conf帮助查看配置信息  

只是保护账号,选择需要的添加

#vim  /etc/vsftpd/vsftpd.conf   

force_local_logins_ssl=YES               //添加的信息

force_local_data_ssl=YES

ssl_enable=YES

ssl_tlsvl=YES

ssl_sslv2=YES

ssl_sslv3=YES

#service vsftpd  restart 

测试使用ftp客户端工具进行,不能使用命令行模式和浏览器