Linux FTP服务

FTP服务

一、FTP简介

FTP(File Transfer Protocol,文件传输协议)是Internet中应用广泛的服务之一,主要用提供在Internet上任意计算机之间相互传输文件的机制。

二、FTP概述

FTP(File Transfer Protocol,文件传输协议)是用来在不同类型的计算机之间传输文件的协议。而FTP服务器,是在网络中提供存储文件空间的计算机,应用FTP协议提供服务。用户可以连接到服务器来下载文件,也可以将文件上传到FTP服务器中。因此,FTP服务器方便了用户之间远程交换文件的需要,充分体现了网络资源共享的优越性。

FTP协议属于TCP/IP协议簇,它工作在OSI模式的第七层,TCP/IP模型的第四层,是一种面向连接的协议。FTP在对外提供服务时需要维护两个连接:一个是控制连接,负责监听21端口,用来传输控制命令;另一个是数据连接,在主动传输方式下监听20端口,用来传输数据。

三、FTP服务器的两种工作模式

FTP协议有两种工作模式,一种叫做主动模式(也就是PORT模式);另一种叫做被动模式(也就是PSAV)模式。主动模式FTP的客户端发送PORT命令到FTP服务器,被动模式FTP的客户端发送PSAV命令到FTP服务器,这两种方式的工作过程如下:

1、主动模式的工作过程

(1)客户端随机开启一个大于1024的端口X向FTP服务器的21端口发送连接请求。

(2)客户端开放X+1号端口进行监听。

(3)FTP服务器接受连接,并建立一个控制连接会话。

(4)当需要传递数据时,FTP服务器从20端口向客户端的X+1号端口发送连接请求,建立一条数据链路来传送数据。

(5)通过建立的数据连接传送数据。

(6)数据传输完成后,断开数据连接,客户端释放端口X+1。

(7)客户端X端口断开与服务器21端口间的控制连接,客户端释放X端口。

在主动模式下传送数据时,是由FTP服务器主动连接客户端,如果客户端在防火墙或NAT网关后面,由于防火墙无法预知客户端用于数据连接的端口,所以这时使用主动模式将无法与网络上的FTP服务器传送数据。在这种情况下就需要使用被动模式。

2、被动模式的工作过程

(1)客户端随机开启一个大于1024的端口X向FTP服务器的21端口发送连接请求。

(2)客户端开放X+1号端口进行监听。

(3)客户端向FTP服务器发送PASV命令,表明客户端此时处于被动模式。

(4)FTP服务器收到命令后,会开放一个大于1024的端口Y进行监听。

(5)FTP服务器向客户端发送PORT命令,表明服务器此时的数据端口是Y。

(6)客户端收到命令后,会通过X+1端口连接服务器的Y端口,建立数据连接。

(7)通过建立的数据连接传送数据。

(8)数据传输完成后,断开数据连接,客户端释放端口X+1,服务器释放端口Y。

(9)客户端X端口断开与服务器21端口间的控制连接,客户端释放X端口。

四、FTP数据的两种传输模式

(1)ASCLL传输方式:如果用户正在复制的文件是简单的ASCLL码文本,而远程服务器上运行的不是UNIX,当文件传输时FTP通常会自动调整文件的内容,以便于把文件解释成另外那台计算机存储文本文件的格式。

(2)二进制文件传输方式:如果用户正在传输的不是文本文件,可能是程序、数据、或者压缩文件,就要使用二进制传输。在二进制传输中,保存文件位序以便原始和复制的是逐位一一对应的。

五、FTP用户分类

基于FTP服务器安全性的考虑,可以采用分用户访问FTP服务器的方式。FTP的用户默认提供三类用户,不同的用户对应着不同的权限和操作方式。

(1)匿名用户:也就是Anonymous用户。即当客户端访问FTP资源时,可以在没有服务器的账户名及密码的情况下,使用匿名用户访问FTP服务器的共享资源。

(2)实体用户:指FTP服务器的本地账户。即当用户登入FTP服务器时,其默认的工作主目录就是以其账户命名的目录,也可变更其工作主目录。该用户不仅可以访问FTP共享资源,还可以访问系统下该用户的资源。

(3)虚拟用户:指FTP建立专有的用户。将帐号和密码保存在数据库中,采用非系统账户访问服务器资源。相比于FTP的实体用户,虚拟用户只能访问FTP共享资源,而没有操作系统其它资源的权利。

六、FTP服务实践

案例1:某公司新购一台服务器,服务器上已安装Linux操作系统,现要求将服务器配置成FTP服务器,主要为公司内的主机提供文件传送服务,而且将来可能需要实现合作伙伴通过互联网访问。具体要求如下:

(1)创建存放下载资源的目录/var/ftp/course

(2)要求匿名用户可以在此目录中下载(down.txt)、上传文件(up.txt),并可以对上传的文件进行改名。

(3)设置数据连接超时300秒,空闲会话超时800秒

(4)启用FTP Banner功能,内容为“welcome to FTP service.”

(5)匿名用户的上传和下载速度为10Kbit/s。

1、实验环境

角色 主机名 操作系统 网卡 IP地址 备注
FTP服务器 ftpserver CentOS7.4 vmnet1 192.168.92.11/24 虚拟机
FTP客户端 ftpclient CentOS7.4 vmnet1 192.168.92.101/24 虚拟机

2、环境准备

  • FTP服务器

[root@ftpserver ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.92.11
NETMASK=255.255.255.0
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens32
DEVICE=ens32
ONBOOT=yes
​
[root@ftpserver ~]# hostname
ftpserver.gc.com
​
[root@ftpserver ~]# getenforce
Disabled
​
[root@ftpserver ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
     
[root@ftpserver ~]# yum repolist all
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id                    repo name                        status
dvd                        local                            enabled: 3,894
repolist: 3,894
  • FTP客户端

[root@ftpclient ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.92.101
NETMASK=255.255.255.0
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens32
DEVICE=ens32
ONBOOT=yes
​
[root@ftpclient ~]# hostname
ftpclient.gc.com
​
[root@ftpclient ~]# getenforce
Disabled
​
[root@ftpclient ~]# systemctl status firewalld 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
     
[root@ftpclient ~]# yum repolist all
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id                     repo name                         status
dvd                        local                            enabled: 3,894
repolist: 3,894

3、服务配置

(1)配置文件解析

/etc/logrotate.d/vsftpd.                ###vsftpd的日志文件
/etc/pam.d/vsftpd                       ###PAM认证文件
/usr/lib/systemd/system/vsftpd.service  ###服务管理脚本
/etc/vsftpd                             ###vsftpd的配置文件存放的目录
/etc/vsftpd/ftpusers                    ###禁止使用vsftpd的用户列表文件
/etc/vsftpd/user_list                   ###禁止或允许使用vsftpd的用户列表文件
/etc/vsftpd/vsftpd.conf                 ###主配置文件
/etc/vsftpd/vsftpd_conf_migrate.sh      ###vsftpd操作的一些变量和设置
/usr/sbin/vsftpd                        ###vsftpd的主程序
/var/ftp                                ###匿名用户主目录
/var/ftp/pub                            ###匿名用户的下载目录

(2)安装软件包

[root@ftpserver ~]# yum install vsftpd -y

(3)准备目录和文件

[root@ftpserver ~]# mkdir /var/ftp/course
[root@ftpserver ~]# echo "down" > /var/ftp/course/down.txt
[root@ftpserver ~]# chmod -R o+w /var/ftp/course
[root@ftpserver ~]# ll /var/ftp/course -d
drwxr-xrwx 2 root root 22 May 15 13:52 /var/ftp/course

(4)修改配置文件

[root@ftpserver ~]# vim /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
idle_session_timeout=800
data_connection_timeout=300
ftpd_banner=Welcome to FTP service.
anon_max_rate=8192

(5)启动服务并设置开机自启动

[root@ftpserver ~]# systemctl start vsftpd
[root@ftpserver ~]# systemctl enable vsftpd

4、测试

(1)安装软件包

[root@ftpclient ~]# yum install ftp -y

(2)ftp登入测试

[root@ftpclient ~]# ftp 192.168.92.11
Connected to 192.168.92.11 (192.168.92.11).
220 Welcome to FTP service.
Name (192.168.92.101:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,92,11,77,66).
150 Here comes the directory listing.
drwxr-xrwx    2 0        0              22 May 15 14:01 course
drwxr-xr-x    2 0        0               6 Aug 03  2017 pub
226 Directory send OK.
ftp> cd course
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,92,11,242,175).
150 Here comes the directory listing.
-rw-r--rw-    1 0        0               5 May 15 14:03 down.txt
226 Directory send OK.
ftp> get down.txt
local: down.txt remote: down.txt
227 Entering Passive Mode (192,168,92,11,225,161).
150 Opening BINARY mode data connection for down.txt (5 bytes).
226 Transfer complete.
5 bytes received in 3.7e-05 secs (135.14 Kbytes/sec)
ftp> bye
221 Goodbye.
[root@ftpclient ~]# ll
total 8
-rw-------. 1 root root 1244 Apr 19 16:26 anaconda-ks.cfg
-rw-r--r--  1 root root    5 May 23 14:04 down.txt

3、上传

[root@ftpclient ~]# echo "up" > ./up.txt 
[root@ftpclient ~]# ll
total 12
-rw-------. 1 root root 1244 Apr 19 16:26 anaconda-ks.cfg
-rw-r--r--  1 root root    5 May 23 14:04 down.txt
-rw-r--r--  1 root root    3 May 23 14:06 up.txt
[root@ftpclient ~]# ftp 192.168.92.11
Connected to 192.168.92.11 (192.168.92.11).
220 Welcome to FTP service.
Name (192.168.92.101:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd course
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,92,11,153,193).
150 Here comes the directory listing.
-rw-r--rw-    1 0        0               5 May 15 14:03 down.txt
226 Directory send OK.
ftp> put up.txt
local: up.txt remote: up.txt
227 Entering Passive Mode (192,168,92,11,160,171).
150 Ok to send data.
226 Transfer complete.
3 bytes sent in 3.7e-05 secs (81.08 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (192,168,92,101,60,180).
150 Here comes the directory listing.
-rw-r--rw-    1 0        0               5 May 15 14:03 down.txt
-rw-------    1 14       50              3 May 15 14:07 up.txt
226 Directory send OK.

4、改名

ftp> rename up.txt up1.txt
350 Ready for RNTO.
250 Rename successful.
ftp> ls
227 Entering Passive Mode (192,168,92,101,65,206).
150 Here comes the directory listing.
-rw-r--rw-    1 0        0               5 May 15 14:03 down.txt
-rw-------    1 14       50              3 May 15 14:07 up1.txt
226 Directory send OK.
ftp> bye
221 Goodbye.

案例2:在案例1的基础上扩展。

(1)服务器上有两个本地账户user1和user2(如果没有账户,需要先创建账户,并在两个账户的家目录中分别以用户的身份创建user1.txt和user2.txt文件用于测试),user1账户在登录FTP服务器时,被限制在自己的工作目录中,user2账户在登录FTP服务器时,不限制。

(2)设置FTP服务器的最大并发连接数为1000。

(3)设置本地用户的上传和下载速度为50Kbit/s。

1、服务配置

(1)、创建用户

[root@serverftp ~]# useradd user1
[root@serverftp ~]# useradd user2
[root@serverftp ~]# echo 123456 | passwd --stdin user1
Changing password for user user1.
passwd: all authentication tokens updated successfully.
[root@serverftp ~]# echo 123456 | passwd --stdin user2
Changing password for user user2.
passwd: all authentication tokens updated successfully.

(2)、创建文件

[root@serverftp ~]# su - user1 -c "touch ~/user1.txt"
[root@serverftp ~]# su - user2 -c "touch ~/user2.txt"

2、修改配置文件

[root@ftpserver ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
idle_session_timeout=800
data_connection_timeout=300
ftpd_banner=Welcome to FTP service.
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
anon_max_rate=8192
max_clients=500
max_per_ip=2
local_max_rate=40960
​
[root@serverftp ~]# echo "user1" > /etc/vsftpd/chroot_list

3、重启服务

[root@serverftp ~]# systemctl restart vsftpd

4、测试

  • user1

[root@client ~]# ftp 192.168.92.101
Connected to 192.168.92.101 (192.168.92.101).
220 Welcome to FTP service.
Name (192.168.92.101:root): user1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> exit
221 Goodbye.
  • user2

[root@client ~]# ftp 192.168.92.101
Connected to 192.168.92.101 (192.168.35.101).
220 Welcome to FTP service.
Name (192.168.92.101:root): user2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/home/user2"
ftp> bye
221 Goodbye.

你可能感兴趣的:(Linux服务,linux,网络,服务器,运维)