FTP服务器工作原理及如何通过PAM认证实现虚拟用

本文分为两部分:
<一>:FTP服务理论篇

<二>:FTP服务架构篇
<一>:理论篇:
注:笔者还是在这里唠叨一句:理论很枯燥、很无趣,对以后要从事运维管理工作的人员来说,理论知识是必须掌握的,所以笔者希望博友能够认真阅读FTP的相关理论,这样在后续的服务构建篇当中,才会更容易理解并掌握每步操作的真实意义!

FTP服务器的相关概念:

FTP简称文件传输协议,全称(File Transfer Protocol),FTP服务在互联网上任意两台计算机之间提供文件传输服务。无论是客户端(Client)、服务器(Server)

还是Linux、Windows等操作系统,只要支持FTP协议,就可以使用FTP服务来提供文件传输等功能。如今FTP已被Ineternet 3/1广大用户所使用的重要互联网服务之一。

FTP(文件传输协议)是TCP/IP协议的一种具体应用,它工作在OSI(Open System Interconnection)七层模型的第七层(应用层),TCP/IP模型的第四层。

FTP服务使用TCP传输,所以在使用FTP服务时,FTP客户端和服务器之间要建立连接,这个连接也就是我们熟悉的“三次握手”,之所以建立三次连接,是为了证明客户端

和服务端之间的连接是可靠的、安全的、面向连接的,为数据的传输提供了可靠、安全的保障。

FTP服务器的功能:

FTP服务主要提供下载数据、上传数据,并且可以将远程的文件复制到本地计算机,以达到资源共享和传递信息的目的,FTP在传输文件时还支持断点续传功能。

FTP服务归根基地提供两个功能:

①可以在两台完全不同的计算机之间进行文件数据传输。(支持传送二进制文件,如:文件、程序、数据、视频、图片等各种类型的文件传输)

②可以提供许多文件数据同时共享。

FTP服务器的工作原理:

FTP标准在RFC959文档中说明,此协议定义了一个在远程计算机系统和本地计算机之间传输文件的标准。一般的讲,要进行文件的传输,

我们必须使用有效的用户名和密码来访问FTP服务器上的资源(默认匿名用户不要提供密码),在Internet互联网上FTP服务器提供了“guest user”来访问FTP服务。

1.控制连接

当客户端希望和FTP服务器通讯时,建立上传/下载文件数据传输时,服务器的TCP 21端口发送一个建立连接的请求:FTP服务器接受来自客户端的请求,

并通过TCP/IP完成连接请求,这样的连接称之为FTP控制连接

2.数据连接

当FTP控制连接建立完成后,客户端便可使用FTP服务进行传输文件(get、put...);

FTP服务器的登陆方式:

FTP服务登录模式:

匿名用户登录模式:只需要输入用户anonymous/ftp,并将自己的E-mail作为口令即可登录FTP服务器,又称为(anonymousFTP服务器)

本地账户登录模式:当进入FTP登录窗口是,需要输入正确的用户名(user)和密码(passwd)即可登录FTP服务器。

虚拟用户登录模式:将登录用户映射到指定的系统账号(/sbin/nologin)来访问FTP资源,这样就起到安全的效果。

FTP服务传输数据分为三种传输模式:
主动模式(PORT)、被动模式(PASSIVE)、单端口模式

主动模式

主动传输模式,有FTP服务器向客户端发送一个用于数据传输的连接,客户端的连接端口由服务器和客户端通过协商确定,

即FTP服务器用端口20与客户端的临时端口进行连接并传输数据,客户端用于接收状态。

被动模式

被动传输模式,由客户端发送PASV命令使服务器处于被动模式,FTP的数据连接和控制连接方向一致,由客户端向服务器端发送一个用于数据传输的连接,

客户端的连接端口是发起该数据请求时使用的端口。

单端口模式

单端口模式,由服务器端发起,使用该模式时,客户端的控制连接端口和数据连接端口一致,这种模式无法在短时间内连续输入数据并传送命令,

因此笔者不建议大家使用此模式。

FTP服务配置文件的结构:

Vsftpd服务器的文件结构如下:

# rpm -ql vsftpd ##查看在安装vftpd软件包时,所产生的配置文件。(这里只做常用的文件)

/usr/sbin/vsftpd ##Vsftpd主程序

/etc/rc.d/init.d/vsftpd ##用于启动终止脚本

/etc/vsftpd/vsftpd.conf ##Vsftpd主配置文件

/etc/pam.d/vsftpd ##PAM认证文件

/etc/vsftpd.ftpusers ##禁止使用Vsftpd的用户列表

/etc/vsftpd.user_list ##禁止或允许使用Vsftpd的用户列表

/var/ftp ##匿名用户的下载目录

/var/ftp/pub ##匿名用户默认访问目录

/etc/logrotate.d/vsftpd.log ##vsftpd的日志文件

介绍vsftpd配置文件参数的设置信息
注:在构建FTP服务器,我们会经常更改vsftpd.conf中各个参数来完成需求,所以我们要完全了解每个参数后面的真实意义,这样在配置器服务时,才会运用自如。

当vsftpd软件包安装完成后,默认的主配置文件/etc/vsftpd/vsftpd.conf

# vim /etc/vsftpd/vsftpd.conf

#anonymous_enable=YES ##允许匿名访问,即anonymous账号访问FTP服务

#local_enable=YES ##允许本地用户登录FTP服务器

#write_enable=YES ##本地用户可以读写

#local_umask=022 ##默认掩码为022,默认创建的文件权限为755

#anon_upload_enable=YES ##允许匿名用户上传文件,基于安全因素考虑,默认vsftpd是注释此项

#anon_mkdir_write_enable=YES ##是否允许匿名用户创建目录,基于安全因素考虑,默认vsftpd是注释此项

dirmessage_enable=YES ##如果目录存在.message隐藏文件时,当进入此目录时,会显示.message里面的内容

xferlog_enable=YES ##默认记录上传、下载的日志文件,是否开启此功能

#xferlog_file=/var/log/xferlog ##Vsftpd的日志存放位置

connect_from_port_20=YES ##从端口20连接,默认状态下,20端口为数据传输端口

#chown_uploads=YES

#chown_username=whoever ##此两选项必须同时出现,含义为,允许新上传文件的拥有者为whoever,默认这两行被注释到得。

xferlog_std_format=YES ##使用标准格式上传/下载

#data_connection_timeout=120 ##传输延时时间,当时间超过120秒后,会自动断开,默认是注释掉的。

#nopriv_user=ftpsecure ##使用特殊用户ftpsecure,这里可以把ftpsecure账户作为一般访问用户,所有连接FTP服务器的用户都具有ftpsecure用户名。

基于安全因素考虑,可以在/etc/passwd中将ftpsecure的用户shell设置为/sbin/nologin(禁止登陆操作系统)

#async_abor_enable=YES ##取消下载后客户端不挂起,一般不需要设置。

#ascii_upload_enable=YES

#ascii_download_enable=YES ##是否启用ASCII方式传送文件,一般我们不需要这个格式。

#ftpd_banner=Welcome to blah FTP service. ##登陆FTP服务器,所提示的信息,默认注释掉的。

#deny_email_enable=YES

#banned_email_file=/etc/vsftpd/banned_emails ##若是启用以上两个选项,则可以在/etc/vsftpd/banned_emails中建立黑名单啦。

#chroot_list_enable=YES

#chroot_list_file=/etc/vsftpd/chroot_list ##当登陆FTP服务器时,被列在chroot_list文件中的用户,不可以访问FTP根目录以外的目录。

#ls_recurse_enable=YES ##是否可以使用ls -R 命令,默认是注释掉的。

listen=YES ##当此项为YES时,vsftpd运行于stand-alone模式下,默认是开启的。

#listen_ipv6=YES ##是用IPv6,默认是注释掉的。

pam_service_name=vsftpd ##列出与vsftpd相关的pam文件。

userlist_enable=YES ##当此项设置为YES时,启用配置文件/etc/vsftpd.user_list.此时有两种情况:

①若没有userlist_deny=NO,则/etc/vsftpd.user_list中的用户不可以访问FTP服务器

②若有userlist_deny=NO,则仅接受/etc/vsftpd.user_list中的用户登陆请求,同时此用户也不可以存在/etc/vsftpd.ftpusers文件中。

tcp_wrappers=YES ##支持TCP Wrappers

补充:(未出现在vsftpd.conf配置文件中的常用参数)

guest_enable=YES

guest_username=ftp

guest用户名,即登陆不是匿名用户的用户,具有guest用户身份

local_root=/var/ftp

anon_root=/var/ftp

以上两个选项为本地用户和匿名用户默认访问的目录

#pasv_enable=YES

#port_enable=YES

以上两个选项是FTP服务器的工作模式,两者只能出现一个,而且另一个必须注释掉。

use_localtime=YES

是否使用本机时间,若设置NO时,仅使用格林尼治时间。由于北京时间和格林尼治时间有8小时时差,所以建议设置为YES

Idle_session_timeout=300

客户端若在300秒之内没有任何操作,则服务器自动断开。

max_clinet=0

最大连接数量(stand-alone模式下)

max_per_ip=0

每个客户端最大连接ftp服务器的连接数

local_max_rate=0

本地用户登陆FTP服务器最大传输速率,单位为字节/秒

anon_max_rate=0

匿名用户登陆FTP服务器最大传输速率,单位为字节/秒

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/55b1f07926998dc148bbf036777c72c0.html