Vsftpd虚拟用户

 

 

FTP 的数据链路原理

FTP 是相当古老的传输协议之一,他最主要的功能是在服务器与客户端之间进行档案的传输。 FTP 其实是以 TCP 封包的模式进行服务器与客户端计算机之间的联机,当联机建立后,使用者可以在客户端端连上 FTP 服务器来进行档案的下载与上传,此外,也可以直接管理用户在 FTP 服务器上面的档案呢,相当的方便! 而这个古老的协议是使用明码传输,且过去有相当多的安全危机历史。为了更安全的使用 FTP 协议, 我们主要介绍较为安全但功能较少的 vsftpd 这个软件吶。

FTP 功能简介

FTP 服务器的功能除了单纯的进行档案的传输与管理之外,依据服务器软件的设定架构, 他还可以提供几个主要的功能,底下我们约略的来谈一谈:

· 不同等级的用户身份:

FTP 服务器在预设的情况下,依据使用者登入的情况而分为三种不同的身份,分别是 (1)实体账号,real user(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) 联机来作个简略的说明啰:

参考-Vsftpd虚拟用户_第1张图片图一、FTP 服务器的主动式联机示意图


简单的联机就如上图所示,至于联机的步骤是这样的:

1. 建立命令通道的联机
如上图一所示,客户端会随机取一个大于 1024 以上的埠口 (port AA) 来与 FTP 服务器端的 port 21 达成联机, 这个过程当然需要三向交握了!达成联机后客户端便可以透过这个联机来对 FTP 服务器下达指令, 包括查询档名、下载、上传等等指令都是利用这个通道来下达的;

 

2. 通知 FTP 服务器端使用 active 且告知连接的埠号
FTP 服务器的 21 埠号主要用在命令的下达,但是当牵涉到数据流时,就不是使用这个联机了。 客户端在需要数据的情况下,会告知服务器端要用什么方式来联机,如果是主动式 (active) 联机时, 客户端会先随机启用一个埠口 (图一当中的 port BB) ,且透过命令通道告知 FTP 服务器这两个信息,并等待 FTP 服务器的联机;

 

3. FTP 服务器『主动』向客户端联机
FTP 服务器由命令通道了解客户端的需求后,会主动的由 20 这个埠号向客户端的 port BB 联机, 这个联机当然也会经过三向交握啦!此时 FTP 的客户端与服务器端共会建立两条联机,分别用在命令的下达与数据的传递。 而预设 FTP 服务器端使用的主动联机埠号就是 port 20 啰!

如此一来则成功的建立起『命令』与『数据传输』两个信道!不过,要注意的是, 『数据传输信道』是在有数据传输的行为时才会建立的通道喔!并不是一开始连接到 FTP 服务器就立刻建立的通道呢!留意一下啰!

 

 

以上是vsftpd的功能和原理,下面我给大家做一个小小的实验

 

 

实验环境

一:Linux6.4一台(192.168.10.199

测试二:win7(物理机,IP192.168.10.113

 

环境建设起来了,我们想一想要做什么呢!平时企业中用的最多的就是vsftpd虚拟用户。如果要是用本地用户的话,那管理员的工作量有多大!我们可以想想一下,最好的方法就是用vsftpd的强大功能虚拟用户。

下面我来给大家演示:

Linux

 参考-Vsftpd虚拟用户_第2张图片

物理机

 参考-Vsftpd虚拟用户_第3张图片

 

接下来我们在Linux上安装vsftpd

wKioL1dqJhfh7nJtAAAG9aBasFg493.png 

这里我为了加快进程就安装好了

我们查看一下vsftpd产生哪些配置文件

 参考-Vsftpd虚拟用户_第4张图片

第一个是日记文件

第二个是虚拟用户认证配置文件

第三个是限制

第四个是黑白名单

第五个是vsftpd的配置文件(核心)

 

下面我开始配置虚拟用户,看我操作。

Ⅰ:我在/etc/vsftpd/下创建了一个名字为vuser.txt的文本

wKioL1dqJlfg4KrrAAAEMdO9FlY578.png 

里面添加了三个用户(奇数为用户,偶数为密码)

参考-Vsftpd虚拟用户_第5张图片 

Ⅱ:建立访问者的口令库文件,然后修改其权限

 wKiom1dqJpWx0B-wAAAGLtt4tFY827.png

(如果系统提示找不到db_load命令,则需先安装yum –y install db4 (pam*是否需安装没经过测试)

:进入/etc/pam.d/中创建vsftpd.vuser

在其中添加如下信息:

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser (32位系统是/lib/目录)

account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser(32位系统是/lib/目录)

Ⅳ:创建虚拟用户映射的系统账号

Useradd d /home/vsftpd s /sbin/nologin vuser (创建系统账号,但不能登录系统)

Chmod 700 /home/vsftpd

wKioL1dqJrOxMF4uAAAGJ0rfunQ548.png 

Ⅴ:修改主配置文件(/etc/vsftpd/vsftpd.conf)

在里面添加如下几行信息

Guest_enable=yes  开启虚拟用户

User_config_dir=/etc/vsftpd/vsftpd_vuser_conf   虚拟用户配置文件存放目录

Guest_username=vuser虚拟用户映射到系统账号

Pam_service_name=vsftpd.vuser PAM认证文件

参考-Vsftpd虚拟用户_第6张图片 

Ⅵ:进入/etc/vsftpd/vsftpd_vuser_conf目录,创建与虚拟用户名相同名称的文件(虚拟用户名即vuser.txt中的用户名名),比如创建test1。

wKiom1dqJxuCSe-yAAAJmSKoC3g520.png 

这个目录是手工创建出来的,默认没有的。

Ⅶ: 在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 (此路径根据虚拟用户要访问的目录对应修改)

参考-Vsftpd虚拟用户_第7张图片 

全部弄好之后不要忘记重新启动服务器

测试:我在物理机上!

先来互拼一下,看看网络到底通不通.(如果不通关闭防火墙iptables -F)

参考-Vsftpd虚拟用户_第8张图片 

此时我们就开始测试了。

如果一开始访问不了的话,我们把防火墙和selinux全部关掉在试

参考-Vsftpd虚拟用户_第9张图片 

我们发现此时是可以访问了,但是不要用户和密码,那就说明我们的主配置文件内的匿名用户还开启中。我们去把他关掉在试试看。还有没有同样的错误。

参考-Vsftpd虚拟用户_第10张图片 

看,我们修改了主配置内的匿名,不允许登录了,测试成功了。

总结:客户端根据创建的虚拟用户连接服务器,虚拟用户映射到系统账号vuser登录ftp,然后FTP根据配置文件vsftpd.conf的设置(user_config_dir=/etc/vsftpd/vsftpd_vuser_conf)找到虚拟用户配置文件的存放目录,然后根据虚拟用户的配置文件指定的目录路径(local_root=/usr/local/amp/apache/htdocs/demo)访问到指定的目录。(注:虚拟用户访问到的文件根目录属主需要改成vuser