详解“FTP文件传输服务”配置实例

        详解“FTP文件传输服务”配置实例

目录

  • 简介

  • ftp工作原理

  • 常见的FTP服务

  • Vsftpd服务器的安装

  • Vsftpd.conf配置文件详解

  • 配置FTP服务器实例

    • 实例:配置匿名

    • 实例:配置本地用户登录

    • 实例:配置虚拟用户登录(MySQL认证)

    • 实例:控制用户登录

    • 实例:设置欢迎信息

    详解:日志管理

FTP服务器配置与管理

简介

FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。

互联网上提供文件存储和访问服务的计算机,他们依照的是FTP协议提供服务!支持FTP协议的服务器就是FTP服务器!FTP协议提供存储和传输服务的一套协议!

下载"(Download)"上传"(Upload)。”下载”文件就是从远程主机拷贝文件至自己的计算机上;”上传”文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。

ftp工作原理

ftp采用客户端/服务端的工作模式(C/S结构),通过TCP协议建立客户端和服务器之间的连接,但与其他大多数应用协议不同,FTP协议在客户端和服务端之间建立了两条通信链路,分别是控制链路和数据链路,其中,控制链路负责FTP会话过程中FTP命令的发送和接收,数据链路则负责数据的传输

FTP会话包含了两个通道,控制通道和数据通道,FTP的工作有两种方式,一种是主动模式,一种是被动模式,以FTPServer为参照物,主动模式,服务器主动连接客户端传输,被动模式,等待客户端的的连接 
(无论是主动模式还是被动模式,首先的控制通道都是先建立起来的,只是在数据传输模式上的区别)

主动模式

工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图:

QQ截图20161018064432.png

被动模式

PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:

QQ截图20161018064925.png

工作端口和模式

20号端口:数据传输端口 ftp-data 
21号端口:指令传输端口

数据传输原理: FTP的传输有两种方式:ASCII二进制

ASCII传输方式

假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。 
但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝。

二进制传输模式

在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。 
如在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会损坏数据。(ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果传输二进制文件,所有的位都是重要的。)

常见的FTP服务

Windows下:Serv-U FTP Server 
Linux下有代表性的FTP服务器软件是Wu-FTPProFTP 及vsftpdWu-FTP(Washington University FTP)是由美国华盛顿大学开发的、以效率和稳定性为参考量的FTP软件。它的功能强大,配置较复杂,由于开发时间较早,应用十分广泛,也因此成为黑客们主要的攻击目标。Wu-FTP的早期各级版本不断出现安全漏洞,系统管理员不得不因安全因素而经常对其进行升级。ProFTP针对Wu-FTP的弱项而开发,除了在安全性方面进行了改进外,还具备设置简单的特点,并提供了一些Wu-FTP没有的功能,大大简化了架设和管理FTP服务器的工作。vsftpd 则凭借在安全性方面的出色表现,被很多大型网站广为采用。

Vsftpd服务器的安装

软件包

vsftpd-2.2.2-11.el6_4.1.x86_64.rpm                       //服务端软件包   
ftp-0.17-54.el6.x86_64.rpm                              //客户端软件包
lftp-4.0.9-1.el6.x86_64.rpm                             //类似ftp的客户端软件包,具有增强功能

1、安装vsftpd软件

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

2、相关配置文件

[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
/etc/vsftpd/vsftpd.conf                                 //主配置文件,核心配置文件
/etc
/vsftpd/ftpusers                                    //黑名单,这个里面的用户不允许访问FTP服务器
/etc
/vsftpd/user_list                                   //白名单,允许访问FTP服务器的用户列表

3、启动服务

服务启动与关闭
[root@localhost vsftpd]# chkconfig vsftpd on
[root@localhost vsftpd]# service vsftpd start
Starting vsftpd for vsftpd:                                [  OK  ]
[root@localhost vsftpd]# netstat -antup | grep ftp
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      2579/vsftpd        
tcp        0      0 10.1.252.97:21              10.1.250.64:54777           ESTABLISHED 2582/vsftpd

QQ图片20161018064942.png

Vsftpd.conf配置文件详解

[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES                    #匿名用户登陆 允许
local_enable=YES                            #全局设置,是否容许写入(无论是匿名本地用户,若要启用上传权限的话,就要开启他)
write_enable=YES                            #支持本地用户的写权限
local_umask=022                         #本地用户上传上来的文件权限
anon_umask=022                          #匿名用户上传上来文件的权限    
anon_root=(none)                            #匿名用户主目录
anon_max_rate=(0)                     #匿名用户速度限制
anon_umask=(077)                  #匿名用户上传文件时有掩码(若想让匿名用户上传的文件能直接被匿名下载,就这设置这里为073)
#no_anon_password=YES           #匿名用户login时不询问口令,此项配置文件无
#anon_world_readable_only=YES  #控制匿名用户对文件的下载权限
#anon_upload_enable=YES             #匿名用户上传是否可以,默认拒绝
#anon_mkdir_write_enable=YES        #匿名用户是否可以建立目录的权限,默认拒绝
#anon_other_write_enable= YES   #控制匿名用户对文件和文件夹的删除和重命名,此项配置文件里面无
dirmessage_enable=YES                   #显示目录下的.message文件内容,文件是隐藏的
xferlog_enable=YES                          #传输日志记录,默认位置/etc/var/log/xferlog_enable
connect_from_port_20=YES            #是否监控数据传输端口20,使用的20号端口来连接FTP
#chown_uploads=YES                  #所有匿名上传的文件的所属用户将会被更改成chown_username
#hown_username=find                     #匿名上传文件所属用户名
#xferlog_file=/var/log/xferlog      #配合xferlog_enable=YES使用,指定日志路径
xferlog_std_format=YES                  #使用标准的日志格式
#idle_session_timeout=600               #空闲超时时间
#data_connection_timeout=120        #数据传输超市时间
#nopriv_user=ftpsecure                  #当服务器运行于底层的使用用户名,使用什么身份的用户运行
#async_abor_enable=YES              #允许使用\"async ABOR\"命令,一般不用,容易出问题 ,可以直接忽略此项,不记
#ascii_upload_enable=YES                #是否可用ASCII 模式上传。默认值为NO
#ascii_download_enable=YES          #是否可用ASCII 模式下载。默认值为NO
#ftpd_banner=Welcome FTP Sev    #用户登陆显示的欢迎信息,如果设置了banner_file则此设置无效
#deny_email_enable=YES              #如果匿名用户需要密码,那么使用banned_email_file里面的电子邮件地址的用户不能登录
#banned_email_file=/etc/vsftpd/banned_emails        #配合deny_email_enable,禁止使用匿名用户登陆时作为密码的电子邮件地址
#chroot_local_user=YES                  #囚牢在自己的家目录
#chroot_list_enable=YES                 #如果启动这项功能,则所有列在chroot_list_file中的使用者不能更改根目录            
#chroot_list_file=/etc/vsftpd/chroot_list       #定义不能更改用户主目录的文件
#ls_recurse_enable=YES                  #是否能使用ls -R命令以防止浪费大量的服务器资源
listen=YES                                          #独立模式监听服务
#listen_ipv6=YES                                #监听IPV6
pam_service_name=vsftpd             # pam认证服务配置文件位置及其名称
userlist_enable=YES                         #是否支持userlist白名单
userlist_deny=YES                           #白名单转化为黑名单
tcp_wrappers=YES                            #开启tcp_wrappers支持
#listen_port=21                             #使用21号端口
max_clients=100                             #最大同时连接客户端数,0不限制
max_per_ip=5                                    #同一个IP最大连接客户端数,0不限制
local_max_rate=500000                   #本地用户最大传输速率
anon_max¬_rate=200000                    #匿名用户最大传输速率
local_root=/local                               #更改本地用的根目录
listen_address=192.168.1.63         #监听的IP地址
download_enable=yes                 #是否允许下载
#pasv_enable=YES                            #允许使用pasv模式
#port_enable=YES                            #允许使用port模式

配置FTP服务器实例

通过修改不同的配置文件选项,达到不同的实验效果

匿名FTP的基本配置

使用匿名FTP,用户无需输入用户名密码即可登录FTP服务器,vsftpd安装后默认开启了匿名ftp的功能,用户无需额外配置即可使用匿名登录ftp服务器

QQ图片20161018064954.png这个时候用户可以匿名方式登录ftp服务器,查看并下载匿名账户主目录下的各级目录和文件,但是不能上传文件或者创建目录

[root@localhost ~]# lftp 10.1.252.97
lftp 10.1.252.97:~> ls              
drwxr-xr-x    2 0        0            4096 May 11 06:17 pub
lftp 10.1.252.97:/> cd pub/
lftp 10.1.252.97:/pub> put /etc/issue
put: Access failed: 550 Permission denied. (issue)  //拒绝上传
lftp 10.1.252.97:/pub> get 1.txt        //可以下载
lftp 10.1.252.97:/pub>

匿名ftp的其他设置

出于安全方面的考虑,vsftpd在默认情况下不允许用户通过匿名FTP上传文件,创建目录等更改操作,但是可以修改vsftpd.conf配置文件的选项,可以赋予匿名ftp更多的权限 
实例1、允许匿名ftp上传文件 
1、修改vsfpd.conf

write_enable=YES
anon_upload_enable=YES

2、更改/var/ftp/pub目录的权限,为ftp用户添加写权限,并重新加载配置文件

[root@localhost pub]# chmod o+w /var/ftp/pub/
[root@localhost pub]# service vsftpd reload
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd for vsftpd:                                [  OK  ]

3、测试

lftp 10.1.252.97:/pub> put /etc/issue
79 bytes transferred            //成功上传
lftp 10.1.252.97:/pub> ls
-rw-r--r--    1 0        0               0 Jul 25 01:13 1.txt
-rw-------    1 14       50             79 Jul 25 01:19 issue

实例2、允许匿名ftp创建目录 
1、修改vsftpd.conf文件

write_enable=YES
anon_mkdir_write_enable=YES

2、更改/var/ftp/pub目录的权限,为ftp用户添加写权限,并重新加载配置文件

[root@localhost pub]# chmod o+w /var/ftp/pub/
[root@localhost pub]# service vsftpd reload
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd for vsftpd:                                [  OK  ]

3、测试

lftp 10.1.252.97:/pub> mkdir zabbix
mkdir ok, `zabbix' created
lftp 10.1.252.97:/pub> ls       //创建成功
-rw-r--r--    1 0        0               0 Jul 25 01:13 1.txt
-rw-------    1 14       50             79 Jul 25 01:19 issue
drwx------    2 14       50           4096 Jul 25 01:23 zabbix

配置本地用户登录

本地用户登录就是指使用Linux操作系统中的用户账号和密码登录ftp服务器,vsftp安装后默只支持匿名ftp登录,用户如果试图使用Linux操作系统中的账号登录服务器,将会被vsftpd拒绝 
1、创建本地用户

[root@localhost pub]# useradd zhanghe
[root@localhost pub]# passwd zhanghe
Changing password for user zhanghe.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.

2、修改vsftpd.conf文件

local_enable=YES

3、修改目录权限

[root@localhost html]# chmod o+w /var/www/html/

4、登录账户测试

QQ图片20161018065005.png

配置虚拟用户登录(MySQL认证)

QQ截图20161018071102.png

1、安装MySQL并创建对应用户和表

[root@localhost ~]# yum install mysql-server -y   #安装MySQL数据库
[root@localhost ~]# service mysqld start              #启动数据库
[root@localhost ~]# mysql_secure_installation     #初始化MySQL配置

创建用户并授权,创建对应数据库和表并插入两行数据

[root@localhost ~]# mysql -uroot -p
Enter password:
mysql> GRANT ALL ON vsftpd.* TO vsftpd@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)    #授予用户权限

mysql> CREATE DATABASE vsftpd;          #创建数据库
Query OK, 1 row affected (0.00 sec)

mysql> use vsftpd;                      #进入指定默认数据库
Database changed
mysql> CREATE TABLE vsftpd.users (uid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE KEY,name VARCHAR(100) NOT NULL PRIMARY KEY,password CHAR(48) NOT NULL);                    #创建表
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO users (name,password) VALUES ('tom',PASSWORD('mageedu')),('jerry',PASSWORD('mageedu')),('lucy',PASSWORD('mageedu'));         #插入3行,用户为tom,jerry,lucy
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> FLUSH PRIVILEGES;              #刷新权限
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

2、配置vsftpd基于MySQL表的虚拟用户

首先要完成基于MySQL表的认证,需要通过pam_mysql模块实现,我们要先安装pam_mysql

pam_mysql模块 
CentOS 6:epel 
CentOS 7:编译安装

[root@localhost ~]# yum -y install pam_mysql

准备要映射成为的系统账号:

[root@localhost ~]# mkdir -pv /ftproot/{pub,upload}
[root@localhost ~]# useradd -d /ftproot vuser
[root@localhost ~]# setfacl -m u:vuser:rwx /ftproot/upload

准备基于mysql认证的pam配置文件:/etc/pam.d/vsftpd.mysql

[root@localhost ~]# vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so host=10.1.252.36 user=vsftpd passwd=123456 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so host=10.1.252.36 user=vsftpd passwd=123456 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

配置vsftpd启用虚拟用户,并使用指定的pam service:vsftpd.conf

//并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql
userlist_enable=YES
tcp_wrappers=YES

guest_enable=YES
guest_username=vuser

配置每虚拟用户拥有不同的权限:vsftpd.conf

user_config_dir=/etc/vsftpd/vusers_conf

为每个用户单独提供配置文件

[root@localhost ~]# mkdir /etc/vsftpd/vusers_conf
[root@localhost ~]# cd /etc/vsftpd/vusers_conf/
[root@localhost vusers_conf]# touch tom
[root@localhost vusers_conf]# vim tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

测试

[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 (vsFTPd 2.2.2)
Name (10.1.252.97:root): tom
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 (10,1,252,97,44,23).
150 Here comes the directory listing.
drwxr-xr-x    2 500      500          4096 Jul 25 01:47 51cto
drwx------    2 501      501          4096 Jul 25 02:17 iii
drwxr-xr-x    2 500      500          4096 Jul 25 01:45 zabbix
226 Directory send OK.
ftp>

控制用户登录

1、编辑vsftpd.conf文件

userlist_enable=YES
userlist_file=/etc/vsftpd/ftpuser_list
[root@localhost vsftpd]# vim user_list
或者:vim /etc/vsftpd/ftpuser_list
halt
mail
news
uucp
operator
games
nobody
tom  //添加禁止登录的用户

2、登录测试

[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 (vsFTPd 2.2.2)
Name (10.1.252.97:root): tom
530 Permission denied.
Login failed.
ftp> ls
530 Please login with USER and PASS.
Passive mode refused.
ftp>

设置欢迎信息

用户登录欢迎信息

1、修改vsftpd.conf,并重载服务

ftpd_banner=Welcome to blah mageedu@ftp service.

[root@localhost vsftpd]# service vsftpd reload

2、测试

[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 Welcome to blah mageedu@ftp service.
Name (10.1.252.97:root): tom

登录信息写入文件

1、修改vsftpd.conf文件

#ftpd_banner=Welcome to blah mageedu@ftp service.
banner_file=/etc/vsftpd/banner.txt

2、添加欢迎信息文件

[root@localhost vsftpd]# cat banner.txt 
*************************************************
*                       *
*   Welocome to Mageedu FTP server      *
*                       *
*************************************************

3、测试

[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220-*************************************************
220-*                       *
220-*   Welocome to Mageedu FTP server      *
220-*                       *
220-*************************************************
220
Name (10.1.252.97:root):

目录欢迎信息

1、编译vsftpd.conf文件

dirmessage_enable=YES

2、在文件目录下创建欢迎信息文件并重载服务

[root@localhost vsftpd]# cat /var/www/html/.message 
欢迎进入ftp根目录
[root@localhost html]# service vsftpd reload

3、测试

Name (10.1.252.97:root): tom
331 Please specify the password.
Password:
230-欢迎进入ftp根目录
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

日志管理

[root@localhost ~]# cat /var/log/xferlog 
Mon Jul 25 09:13:36 2016 1 10.1.252.96 0 /pub/1.txt b _ o a lftp@ ftp 0 * c
//提示时间:从10.1.252.96访问:访问的文件:b是二进制传输方式:o是服务器到客户端:a表示匿名
Mon Jul 25 09:19:49 2016 1 10.1.252.96 79 /pub/issue b _ i a lftp@ ftp 0 * c
//提示时间:从10.1.252.96访问:访问的文件:b是二进制传输方式:i是客户端到服务端:a表示匿名
Mon Jul 25 09:46:01 2016 1 10.1.250.64 49451 /var/www/html/Linux_Services_and_Security.txt b _ i r zhanghe ftp 0 * c
提示时间:从10.1.252.64访问:访问的文件:b是二进制传输方式:i是客户端到服务端:r表示真实用户:服务名ftp:认证方式0表示无:*无法获取用户ID:c表示传输已完成
[root@localhost ~]#

原创文章,作者:M20_he,如若转载,请注明出处:http://www.178linux.com/52605

(0)
上一篇 2016-10-18 15:20
下一篇 2016-10-18 15:40

相关推荐

  • CIDR,子网掩码以及划分子网超网

    对于中小企业,假如有两千台机器,给他分个B类地址,6万多个,太浪费了,分个C类地址,一个C类地址254个,又不够,又得多申请几个,所以A,B,C类IP地址划分太过僵硬,很不灵活,因此又提出无类域间路(CIDR)由划分IP地址的方法。 无类域间路由(CIDR) 传统划分IP地址的方法都是8位划分的,要不就是前8位网络ID,后24位主机ID;或前16位网络ID,…

    2017-09-16
  • 22期第十二周课堂练习

    1、请描述一次完整的http请求处理过程; (1)建立和处理连接:接收请求或者拒绝请求; (2)接收请求:接收来自于网络上的主机请求报文中对某特定的资源的一次请求的过程; (3)处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息 (4)访问资源:获取请求报文中请求的资源 (5)构建响应报文; (6)发送响应报文; (7)记录日志; 2、h…

    Linux干货 2016-12-26
  • H3C 设备监测命令大全 (v3)

    H3C 设备监测命令大全  display aaa unsent-h323-call-record  display acl      display alarm   urgent   display…

    Linux干货 2016-06-01
  • linux的内建命令和外部命令

    摘要:    Linux命令有内部命令(内建命令)和外部命令之分,内部命令和外部命令功能基本相同,但是其工作机制相差很大。本文就内建命令和外部命令做一下介绍。 一、内部命令(内建命令)    内部命令,实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shel…

    Linux干货 2016-10-18
  • N25第二周作业

    1、Linux上的文件管理类命令都有哪些其常用的使用方法及其相关示例演示。 cp(copy) 复制,mv(move)移动或者更名,mkdir(创建目录,-p可以同时创建父目录),rm(删除目录,-r 可以递归操作,rmdir(删除空目录)删除文件或者目录,建议建立一个临时回收站,否则误删或者短时间内还需要的文件),touch,file,stat, …

    Linux干货 2016-12-25
  • web服务介绍(三)

    状态码分类:1xx:100-101  额外信息提示2xx:200-206  表示成功类响应3xx:300-305  重定向4xx:400-415  错误类响应码,由于客户端发送错误,如客户端请求一个根本不存在的资源5xx:500-505  错误类信息,服务器端错误,服务器本身一些问题导致请求无法成功 常用状态…

    Linux干货 2017-04-22