FTP服务器工作原理的及配置详解

FTP服务器工作原理的及配置详解

FTP工作原理概述



FTP:file transfer protocol

它也是一个C/S架构的服务。server:监听在套接字21/tcp端口。按照套接字监听工作状态可以分为两类:

命令连接:发送文件管理类命令,始终处于连接状态,始终监听在21/tcp端口。

数据连接:主要是实现数据传输,这种连接是按需连接的,而且在传输结束会立刻中断。

对于数据连接还有两种不同的工作模式:

主动工作的模式:服务器根据监听在21端口接收到的命令,使用自己的20号端口,将数据传输给客户端请求的端口加1那个端口。(例如:client使用6432端口请求,了一个ls命令。这时服务器监听在21端口接收到了这个命令并给予相应的处理之后,通过自己的20端口把数据相应的发给客户端的6433端口)。如图:

但是这样问题就来了:如果客户端在自己的主机上施加了防火墙,那么服务器端的信息就无法送达了,其实我们还有另外一种工作模式。

被动工作的模式:这种工作模式是由服务器根据每个用户的请求对应开启一个大于1023的随机端口,这个端口与用户请求存在着关联关系(这个关联关系是服务器自身用于判断被客户端连接时是否放行的)。当这个端口开启之后,FTP服务器会通知client到这个开启的随机端口请求数据,为了防止前来请求的用户不是冒名顶替的坏蛋。服务器在此时会根据存在关联关系做出判断是否放行。(这种判断方式就是连接追踪)。由此,既保证了数据的有效传输,又保证了服务器的安全。

注意:服务器发送端口编号给客户端不是直接一个端口编号给客户端的。而是通过数字计算的两个数字比如(234,12)。这两个数字分别是端口号除以256所得的商数和余数。(234,12)实际就是端口59916

服务器常见程序:wu-ftpd | proftpd | vsftpd 等。

客户端常见程序:普通浏览器、filezilla 等

ftp服务单位响应码,和httpd的响应码是一样的三位数字:

1XX:信息类

2xx:成功类

3XX:提示需要,进一步补全需求

4XX:客户端错误。

5xx:服务器端错误。

VSFTP的主配置文件及几种登陆方式



我这里使用vsftp来搭建FTP服务,首先rpm -q vsftpd 查看是否安装了这个用具。另外需要安装的工具有ftp,和lftp.

    #yum install vsftpd -y 
    #yum install ftp -y
    #yum install lftp -y
    #rpm -ql vsftpd          //查看生成了那些配置配置文件

/var/ftp/pub              //这里是ftp文件的共享存放位置。

/etc/rc.d/init.d/vsftpd   //服务脚本

/etc/vsftpd/vsftpd.conf   //这是主配置文件

其中在登陆FTP的用户中可以分三类,在主配置文件中可以做出相应的配置。

#vim /etc/vsftpd/vsftpd.conf   //这个配置文件主要包括下面一些配置。

1.匿名用户配置:



匿名用户:这类用户是以映射为ftp用户的方式登陆的。

anonymous_enable=YES|NO  --->此项开启匿名用户登陆权限。在这个权限开启之后,对于匿名用户还有三类附加的常用权限,有些权限可能没有定义在文件中需要自己添加。

anon_upload_enable=NO|YES       允许匿名用户上传文件

anon_mkdir_write_enable=NO|YES  允许匿名用户创建目录

anon_other_write_enable=NO|YES  允许用户删除

注意:匿名用户的登陆是通过映射为FTP用户的方式。如果匿名用户想拥有以上某种执行权限,仅仅在配置文件中定义是不够的,还需要FTP在文件系统中有执行权限,及属主属组为ftp。

2.普通用户配置:这是OS系统上的用户,登陆时需要用户名和密码。



本地用户登陆格式:例如:lftp -u USERNAME,PASSWORD 172,16.249.11

注意:-u 指定用户逗号,后面紧跟密码,中间不允许空格。

local_enable=YES|NO   此项开启表示允许本地用户登陆使用

local_umask=022       本地用户创建文件的权限使用的UMASK

write_enable=YES|NO   允许本地上传操作

注意:匿名用户是默认只允许在ftp这个映射用户的家目录中执行操作,但是本地用户只要有权限默认是可以在文件系统中游荡的。那么这样就是很危险的,因此我们要对本地用户的活动范围进行限定。

禁锢用户于家目录的实现:

chroot_local_user=YES   启动禁止用户于家目录功能

chroot_list_enable=YES  启用一个列表用于存放被禁止的用户

chroot_list_file=/etc/vsftpd/chroot_list 想要禁止的用户写在这个指向的文件中

3.虚拟用户配置:这类用户不需要把自己额账号和密码放在,放在/etc/passwd 和/etc/shadow



虚拟用户不是文件系统中的用户,而是通过文件,或者关系型数据库存储的与OS无关的用户。这些所有的用户在登陆时是通过映射为我们系统上一个普通用户的方式登陆。尽管这些所有用户都是通过映射为系统上某一个用户的方式登陆系统,我们依然可以实现对不同虚拟用户的访问权限控制。那么究竟是如何玩实现的呢?最后会给出基于关系型数据库存储,及不同虚拟用户权限设置。这里先介绍一下这个主配置文件。

虚拟用户的配置是在文件中加入以下两行:

guest_enable=YES             //允许虚拟宾客访问

guest_username=vuser         //定义虚拟宾客映射的用户名

4.日志:



xferlog_enable=YES|NO         //是否启用传输日志

xferlog_std_format=NO         //是否使用标准格式。

xfer_file=/var/log/xferlog    //定义传输日志的存放位置

5.改变上传后文件的属主和数组:



chown_uploads=YES|NO          //开启修改属主属组的功能

chown_username=whoever        //whoever要修改为自己指定的人

6.用于pam的认证限制



pam_service_name=vsftpd 这个文件是定义的认证的文件位置

userlist_enable=YES|NO  这个配置参数表示启用用户列表。

userlist_deny=YES|NO 加上这句表示这是判断白黑名单的列表了,如果是yes这就是黑名单了。

这个用户列表在  /etc/vsftpd/userlist

listen=yes表示vsftpd使用套接字监听。

注意:这个文件原来是有很多用户名的,使用时全部清空就可以了。如果我们使userlist_deny=no 这里表示这个名单是白名单,这样之后匿名用户就不可以登陆。

7.连接限制



max_clients  最大并发连接数;

max_per_ip   每个IP可同时发起的并发请求数;

anon_max_rate:匿名用户的最大传输速率;

local_max_rate:本地用户的最大传输速率。

基于关系型数据库的虚拟用户访问控制



思路:我们这里实现的是基于关系型数据的存储虚拟用户,并实现对不通的虚拟用户进行不同的权限控制。1.首先我们需要建立一个数据库,并且在数据库中键入我们授权的虚拟用户,为了让ftp可以查看库中的用户和密码。给予访问的用户一个授权。2.要给ftp进程建立一个存储虚拟用户列表查找路径的文件,并且在主配置文件中定义这个文件的位置。3.创建一个虚拟用户的映射用户,并且给予授权家目录。4.对不同的虚拟用户进行权限限制。

配置前准备:因为我们基于关系型数据库存储,需要用到pam的认证,因此需要安装pam_mysql的插件。

安装mysql和pam_mysql

#yum -y install pam_mysql

注意:pam_mysql由epel源提供。

1.准备数据库及相关表

就是把我们用于ftp登陆的用户放在数据库中存储。

首先请确保mysql服务已经正常启动。而后,按需要建立存储虚拟用户的数据库即可,这里将其创建为vsftpd数据库。

mysql> create
database vsftpd;
mysql> grant select on vsftpd.* to [email protected] identified by ‘password‘;  //为了防止本地主机不能登陆,授权一个远程主机。
mysql> flush
privileges; 
mysql> use
vsftpd;
mysql> id int AUTO_INCREMENT NOT NULL,   
    -> name char(20) binar  NOT NULL,      
    -> password char(48) binary NOT NULL,   
    -> primary key(id)                                         
    -> );
mysql> insert
into users(name,password) values(‘ftpuser1‘,password(‘password‘));
mysql> insert
into users(name,password) values(‘ftpuser2‘,password(‘password‘));

2.建立虚拟用户列表查找路径的文件

#vi
/etc/pam.d/vsftpd.mysql

添加如下两行

authrequired /lib64/security/pam_mysql.souser=vsftpd passwd=password host=172.16.249.149 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
accountrequired /lib64/security/pam_mysql.so
user=vsftpd passwd=password host=172.16.249.149 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

注意:由于各主机不同,/lib64/security/pam_mysql.so模块可能存在差异,使用rpm -ql pam_mysql查看具体的模块路径。另外如果如果加密使用了password函数,crypy=2。

修改vsftpd的配置文件,/etc/vsftpd/vsftpd.conf  指向这个文件

pam_service_name=vsftpd.mysql

3.建立虚拟用户映射的系统用户及对应的目录

# useradd -s sbin/nologin -d /var/ftproot vuser
# chmod go+rx  /var/ftproot
vim /etc/vsftpd/vsftpd.conf
guest_enable=YES               允许虚拟用户访问
guest_username=vuser           定义映射的用户名是vuser

另外确认主配置文件已经启用了下列选项,没有的需要自己添加。

vim etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES

4.配置虚拟用户具有不同的访问权限

方法:在主配置文件中定义一个存放用户虚拟用户权限的目录,在这个目录中为每个虚拟用户的写一个定义权限的文件,名字为虚拟用户的用户名。

a.配置vsftpd为虚拟用户使用配置文件目录

# vim vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_config  //定义目录位置

b.创建所需要目录,并为虚拟用户提供配置文件

#mkdir /etc/vsftpd/vusers_config/
#cd /etc/vsftpd/vusers_config/
#touch ftpuer1 ftpuser2

c.配置虚拟用户的访问权限

虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。

 anon_upload_enable= {YES|NO}            允许上传?
 anon_mkdir_write_enable={YES|NO}        允许创建目录?
 anon_other_write_enable={YES|NO}        允许下载和删除?
 # service vsftpd start
 # chkconfig vsftpd on 
 # netstat -tnlp | grep :21

下面可以使用虚拟用户登录,验正配置结果了!

时间: 2024-08-20 09:26:21

FTP服务器工作原理的及配置详解的相关文章

NFS服务器原理和安装配置详解附案例演练

NFS服务器原理和安装配置详解附案例演练 1.什么是NFS服务器 NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器.不同的操作系统可以共享彼此的文件. NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利: 2.NFS挂载原理 NFS服务器的挂载结构图: 如上图示: 当我们在NFS服务器设置好一个共享目录/home/public后

使用LVS实现负载均衡原理及安装配置详解

转:http://www.cnblogs.com/liwei0526vip/p/6370103.html 使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学习 LVS 并对其进行了详细的总结记录. 一.负载均衡LVS基本介绍 LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director

使用 LVS 实现负载均衡原理及安装配置详解

使用 LVS 实现负载均衡原理及安装配置详解 来源:肖邦linux 发布时间:2017-02-19 阅读次数:106 0 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学习 LVS 并对其进行了详细的总结记录. 一.负载均衡LVS基本介绍 LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director Server上,然后它把用

基于Nginx搭建Web服务器及虚拟主机相关配置详解

随着计算机与Internet技术的高速发展,各种各样的Web站点也就成为面向用户的中坚力量.在各种网站服务器软件中.除了Apache外,还有一款轻量级的HTTP服务器软件--Nginx. 基于Apache搭建Web服务器可以参考博文:基于Apache搭建Web服务器详解 一.Nginx服务简介 Nginx由俄罗斯的lgor Sysoev开发,专为性能优化而开发,其最知名的优点就是它的稳定性和低系统资源消耗.以及对HTTP并发连接的高处立能力(单台物理服务器可支持30000~50000个并发请求)

使用LVS负载均衡搭建web群集的原理及安装配置详解

一.负载均衡LVS基本介绍 LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器.这是一个由章文嵩博士发起的一个开源项目,它的官方网站是 http://www.linuxvirtualserver.org. LVS是Linux内核标准的一部分.LVS是一个实现负载均衡集群的开源软件项目,通过 LVS 的负载均衡技术和 Linux操作系统可以实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性.可扩展性和可操作性.LVS架构从逻辑上可分为调度层.Se

Linux服务器access_log日志分析及配置详解(一)

nginx的log日志分为access log 和 error log 其中access log 记录了哪些用户,哪些页面以及用户浏览器.ip和其他的访问信息 error log 则是记录服务器错误日志 错误日志的形式如下: 1 2 201.158.69.116 - - [03/Jan/2013:21:17:20 -0600] fwf[-] tip[-] 127.0.0.1:9000 0.007 0.007 MX pythontab.com GET /html/test.html HTTP/1.

centos fastdfs 多服务器 多硬盘 多组 配置详解

说正文前,先感谢happy_fish100提供的fastdfs,轻量级的分布式文件服务器. 随着用户量的变大,图片,视频等的量会不断的增大,这个时候一个硬盘可能不够用了,就要加硬盘.硬盘加不了时,就要增加服务器了.同一组服务器,文件服务器的东西是一样,不同组的服务器,有不同的文件,不同的组之间,共同组建了文件服务器的所有内容. 下面说一下,安装配置的过程,这里配置的方法,根开发者提供的方法不一样,我没有用到fastdfs-nginx-module,通过配置nginx实现了fastdfs-ngin

Linux服务器access_log日志分析及配置详解(二)

默认nginx / Linux日志在哪个文件夹? 一般在 xxx.xxx.xxxx.com/home/admin 路径下面的error.log文件和access.log文件error_log logs/error.log; #错误日志access_log logs/access.log; #访问日志 1. access_log 访问日志 access_log为访问日志,记录所有对apache服务器进行请求的访问,它的位置和内容由CustomLog指令控制,LogFormat指令可以用来简化该日志

SpringMVC工作原理2(代码详解)

图1.流程图 1.当一个请求(request)过来,进入DispatcherServlet中,里面有个方法叫 doDispatch()方法 里面包含了核心流程 源码如下: 4.然后往下看getHandler():(DispatcherServlet.Java) mapperHandler是  HandlerExecutionChain (处理器调用链) 类. HandlerExecutionChain 包含了处理器对象以及和处理器相关的拦截器,有目标方法和Handler. HandlerMapp