FTP 的数据链路原理
FTP 是相当古老的传输协议之一,他最主要的功能是在服务器与客户端之间进行档案的传输。 FTP 其实是以 TCP 封包的模式进行服务器与客户端计算机之间的联机,当联机建立后,使用者可以在客户端端连上 FTP 服务器来进行档案的下载与上传,此外,也可以直接管理用户在 FTP 服务器上面的档案呢,相当的方便!而这个古老的协议是使用明码传输,且过去有相当多的安全危机历史。为了更安全的使用 FTP 协议,我们主要介绍较为安全但功能较少的 vsftpd 这个软件吶。
FTP 功能简介
FTP 服务器的功能除了单纯的进行档案的传输与管理之外,依据服务器软件的设定架构,他还可以提供几个主要的功能,底下我们约略的来谈一谈:
· 不同等级的用户身份:
FTP 服务器在预设的情况下,依据使用者登入的情况而分为三种不同的身份,分别是 (1)实体账号,realuser;(2)访客, guest;(3)匿名登录者, anonymous 这三种。这三种身份的用户在系统上面的权限差异很大喔!例如实体用户取得系统的权限比较完整,所以可以进行比较多的动作;至于匿名登录者,大概我们就仅提供他下载一下资源而已,并不许匿名者使用太多主机的资源啊!当然,这三种人物能够使用的『在线指令』自然也就不相同啰! ^_^
· 命令记录与登录文件记录:
FTP 可以利用系统的 syslogd 这个daemon 来进行数据的纪录,而记录的数据报括了用户曾经下达过的命令与用户传输数据(传输时间、档案大小等等)的纪录呢!所以你可以很轻松的在/var/log/ 里面找到各项登录信息喔!
· 限制或解除用户家目录所在(change root, 简称 chroot):
为了避免用户在您的 Linux系统当中随意逛大街 (意指离开用户自己的家目录而进入到Linux 系统的其他目录去),所以将使用者的工作范围『局限』在用户的家目录底下,嗯!实在是个不错的好主意!FTP 可以限制用户仅能在自己的家目录当中活动喔!如此一来,由于使用者无法离开自己的家目录,而且登入 FTP 后,显示的『根目录』就是自己家目录的内容,这种环境称之为 change root ,简称chroot ,改变根目录的意思啦!
这有什么好处呢?当一个恶意的使用者以 FTP 登入您的系统当中,如果没有chroot 的环境下,他可以到 /etc, /usr/local, /home 等其他重要目录底下去察看档案数据,尤其是很重要的 /etc/ 底下的配置文件,如/etc/passwd 等等。如果您没有做好一些档案权限的管理与保护,那他就有办法取得系统的某些重要信息,用来『入侵』您的系统呢!所以在 chroot的环境下,当然就比较安全一些咯!
FTP 的运作流程与使用到的端口
FTP 的传输使用的是较为可靠的 TCP 封包协议,在前几章的网络基础当中我们谈过, TCP 这种封包格式在建立联机前会先进行三向交握的。不过 FTP 服务器是比较麻烦一些,因为 FTP 服务器使用了两个联机,分别是命令信道与数据流通道 (ftp-data) 。这两个联机都需要经过三向交握,因为是 TCP 封包嘛!那么这两个联机通道的关系是如何呢?底下我们先以 FTP预设的主动式 (active) 联机来作个简略的说明啰:
简单的联机就如上图所示,至于联机的步骤是这样的:
1. 建立命令通道的联机
如上图一所示,客户端会随机取一个大于 1024 以上的埠口 (portAA) 来与 FTP 服务器端的 port21 达成联机,这个过程当然需要三向交握了!达成联机后客户端便可以透过这个联机来对 FTP 服务器下达指令,包括查询档名、下载、上传等等指令都是利用这个通道来下达的;
2. 通知 FTP 服务器端使用 active 且告知连接的埠号
FTP 服务器的 21 埠号主要用在命令的下达,但是当牵涉到数据流时,就不是使用这个联机了。客户端在需要数据的情况下,会告知服务器端要用什么方式来联机,如果是主动式 (active) 联机时,客户端会先随机启用一个埠口 (图一当中的 portBB) ,且透过命令通道告知 FTP 服务器这两个信息,并等待 FTP 服务器的联机;
3. FTP服务器『主动』向客户端联机
FTP 服务器由命令通道了解客户端的需求后,会主动的由 20 这个埠号向客户端的 portBB 联机,这个联机当然也会经过三向交握啦!此时FTP 的客户端与服务器端共会建立两条联机,分别用在命令的下达与数据的传递。而预设 FTP 服务器端使用的主动联机埠号就是 port 20 啰!
如此一来则成功的建立起『命令』与『数据传输』两个信道!不过,要注意的是,『数据传输信道』是在有数据传输的行为时才会建立的通道喔!并不是一开始连接到 FTP 服务器就立刻建立的通道呢!留意一下啰!
以上是vsftpd的功能和原理,下面我给大家做一个小小的实验
实验环境
一:Linux6.4一台(192.168.10.199)
测试二:win7(物理机,IP:192.168.10.113)
环境建设起来了,我们想一想要做什么呢!平时企业中用的最多的就是vsftpd虚拟用户。如果要是用本地用户的话,那管理员的工作量有多大!我们可以想想一下,最好的方法就是用vsftpd的强大功能虚拟用户。
下面我来给大家演示:
Linux一:
物理机
接下来我们在Linux上安装vsftpd
这里我为了加快进程就安装好了
我们查看一下vsftpd产生哪些配置文件
第一个是日记文件
第二个是虚拟用户认证配置文件
第三个是限制
第四个是黑白名单
第五个是vsftpd的配置文件(核心)
下面我开始配置虚拟用户,看我操作。
Ⅰ:我在/etc/vsftpd/下创建了一个名字为vuser.txt的文本
里面添加了三个用户(奇数为用户,偶数为密码)
Ⅱ:建立访问者的口令库文件,然后修改其权限(如果系统提示找不到db_load命令,则需先安装yum –y install db4 (pam*是否需安装没经过测试)
Ⅲ:进入/etc/pam.d/中创建vsftpd.vuser
在其中添加如下信息:
auth required /lib64/security/pam_userdb.sodb=/etc/vsftpd/vuser (32位系统是/lib/目录)
account required/lib64/security/pam_userdb.so db=/etc/vsftpd/vuser(32位系统是/lib/目录)
Ⅳ:创建虚拟用户映射的系统账号
Useradd –d /home/vsftpd –s /sbin/nologinvuser (创建系统账号,但不能登录系统)
Chmod 700 /home/vsftpdⅤ:修改主配置文件(/etc/vsftpd/vsftpd.conf)
在里面添加如下几行信息
Guest_enable=yes 开启虚拟用户
User_config_dir=/etc/vsftpd/vsftpd_vuser_conf 虚拟用户配置文件存放目录
Guest_username=vuser 虚拟用户映射到系统账号
Pam_service_name=vsftpd.vuser PAM认证文件
Ⅵ:进入/etc/vsftpd/vsftpd_vuser_conf目录,创建与虚拟用户名相同名称的文件(虚拟用户名即vuser.txt中的用户名名),比如创建test1。这个目录是手工创建出来的,默认没有的。
Ⅶ: 在test1中填写如下信息
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/usr/local/amp/apache/htdocs/test1(此路径根据虚拟用户要访问的目录对应修改)全部
弄好之后不要忘记重新启动服务器
测试:我在物理机上!
先来互拼一下,看看网络到底通不通.(如果不通关闭防火墙iptables -F)
此时我们就开始测试了。
如果一开始访问不了的话,我们把防火墙和selinux全部关掉在试我们发现此时是可以访问了,但是不要用户和密码,那就说明我们的主配置文件内的匿名用户还开启中。我们去把他关掉在试试看。还有没有同样的错误。看,我们修改了主配置内的匿名,不允许登录了,测试成功了。
总结:客户端根据创建的虚拟用户连接服务器,虚拟用户映射到系统账号vuser登录ftp,然后FTP根据配置文件vsftpd.conf的设置(user_config_dir=/etc/vsftpd/vsftpd_vuser_conf)找到虚拟用户配置文件的存放目录,然后根据虚拟用户的配置文件指定的目录路径(local_root=/usr/local/amp/apache/htdocs/demo)访问到指定的目录。(注:虚拟用户访问到的文件根目录属主需要改成vuser)
本文出自 “小雨Linux” 博客,谢绝转载!
原文地址:http://xiaoyulinux.blog.51cto.com/10434564/1696669