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 实现
2为ftp做钥匙,请求文件,证书
#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客户端工具进行,不能使用命令行模式和浏览器