为什么要使用虚拟用户:

匿名帐户可以很好的保证FTP服务器的安全性,但是,对匿名用户的权限管理不够灵活.如果想对访问FTP的帐户给予更多的权限,就可以用本地帐户来 实现.但是,本地帐户默认情况下是可以登陆Linux系统的,这样对Linux系统来说是一个安全隐患.那么怎么能在灵活的赋予FTP用户权限的前提下, 保证FTP服务器乃至整个Linux系统的安全呢?使用虚拟用户就是一种解决办法.

FTP虚拟用户的工作原理:

虚拟用户,顾名思义,并不是一个合法的Linux系统帐户,但是他可以用来登陆该系统上运行的FTP服务器.

当用户在连接上FTP服务器后,会被要求输入用户名和密码.FTP服务器在拿到这个用户名和密码后,会调用相应的PAM认证模块对,和系统中的 FTP认证文件进行相比较.如果该用户名和密码与FTP认证文件中的某条记录相符,就通过认证,然后该帐户就被映射成一个Linux下的本地帐户,然后根 据使用该本地帐户对FTP资源进行访问.否则则断开该连接请求.

配置FTP虚拟用户整个过程可以分这几个步骤:

1.准备一个虚拟用户的口令库文件.该文件中保存的用户名和密码是用户连接FTP服务器时,需要输入的用户名和密码.文件可以自己创建,位置无关紧要,文件格式为:奇数行为用户名,偶数行为密码.

例如:

#touch login.txt          //创建一个名为login.txt的虚拟用户口令库文件

# vi login.txt              //编辑该口令库文件

mike                      //虚拟用户mike

123                       //虚拟用户mike的密码

john                      //虚拟用户john

321                       //虚拟用户john的密码

保存退出.

2.用刚才建立的虚拟用户口令库文件生成FTP服务器的认证文件.该认证文件是一个被加密后的密文.PAM在调用相应的认证模块后,会对从FTP服务器发来的用户名和密码进行加密,然后在跟该文件进行对比,发现相符条目后,登陆用户才会被允许登陆.

db_load -T -t hash -f login.txt /etc/vsftpd/vsftpd_login.db

               //在运行该命令前,别忘记安装libdb-utils软件包,该包包含有db_load命令等.关于该命令的使用不在本文讨论范围内.其中-f参数后跟的为刚才创建的虚拟用户口令库文件.最后的路径为生成的FTP认证文件的存放位置.

为了进一步保证安全,可以将该FTP认证文件的权限设置为600.

3.建立虚拟用户所需要的PAM配置文件.由于FTP服务器在接受到用户的用户名和口令后会调用PAM认证,所以我们还要创建虚拟用户的PAM配置文件.

我们将该文件保存在/etc/pam.d目录下,文件名暂时取为:vsftpd.这里要注意一点就是,该文件名要与FTP服务主配置文件(/etc/vsftpd/vsftpd.conf)中的pam_service_name=vsftpd选项的选项值相同.

创建好该文件后,将下面的内容加入到该文件中:

auth  required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

改好后,保存退出.注意3个红色文件的文件名.该3个文件为1个文件,只不过在使用中写法不同.

这里需要注意,把/etc/pam.d/vsftpd文件的原内容全部注释掉,添加这两行内容,则本地用户不可登录,只有虚拟用户可以登录,若不注释掉原内容,则虚拟用户和本地用户都可以登录。

4.由于用户在通过PAM的认证后要被映射成一个本地用户,所以我们还要建立一个本地用户供虚拟用户使用.

我们只需要对该本地用户赋予FTP主目录的适当访问权限就行.即使FTP服务器遭到***,这个本地用户也没有访问其他目录的权限,相对比较安全一些.

useradd -d /home/ftpsite virtual        //用户名为virtual,主目录为FTP的根

chmod 700 /home/ftpsite                 //将其权限设置为700,可以根据实际情形进行修改

5.在FTP的主配置文件中,启用FTP虚拟用户.增加如下选项即可:

guest_enable=YES

guest_username=virtual             //将虚拟用户映射成本地的哪个用户.这里用的是virtual,刚才建立的那个用户.

pam_service_name=/etc/vsftpd/vsftpd    //切记要查看该项的值

配置到这里就完成了,别忘记重启FTP服务进行测试.

6.为不同的虚拟用户分配权限

默认情况下,虚拟用户拥有相同的权限,就是virtual的权限,我们可以根据实际需求对不同的虚拟用户分配权限.

首先在FTP的主配置文件中加一个选项:

user_config_dir=/etc/vsftpd_user_conf             //文件名和路径都可以自己定义

然后创建该目录.

mkdir /etc/vsftpd_user_conf

下面就可以在该目录下编辑不同虚拟用户的权限配置文件了,比如要对mike编辑其权限.

touch mike                  //建立mike的权限文件.文件名要与虚拟用户名相同

可以根据实际需求为该文件添加下面的选项和值:

anon_world_readable_only=NO               //表示用户可以浏览FTP目录和下载文件

anon_upload_enable=YES                    //表示用户可以上传文件

anon_mkdir_write_enable=YES               //表示用户有创建和删除目录的权限

anon_other_write_enable=YES               //表示用户具有文件改名和删除文件的权限

下面我们通过两个案例来测试一下虚拟用户的配置:

案例1:

配置使用虚拟用户的ftp服务器

说明:

共两个虚拟用户:vuser1,vuser2

vuser1:家目录为/home/virtual/vuser1,可以上传下载、创建目录、修改目录,删除文件。

vuser2:家目录为/home/virtual/vuser2,只能上传。

服务器配置:

9.1.2 虚拟用户FTP_系统/运维

9.1.2 虚拟用户FTP_系统/运维_02

修改主配置文件:

9.1.2 虚拟用户FTP_系统/运维_03

9.1.2 虚拟用户FTP_系统/运维_04

9.1.2 虚拟用户FTP_系统/运维_05

客户端测试:

9.1.2 虚拟用户FTP_Linux_06

9.1.2 虚拟用户FTP_Linux_07

9.1.2 虚拟用户FTP_系统/运维_08

案例2:

匿名用户、本地用户、虚拟用户均可访问ftp服务器

修改/etc/pam.d/vsftpd文件:

9.1.2 虚拟用户FTP_系统/运维_09

修改主配置文件/etc/vsftpd/vsftpd.conf

9.1.2 虚拟用户FTP_Linux_10

9.1.2 虚拟用户FTP_Linux_11

9.1.2 虚拟用户FTP_系统/运维_12

客户端测试:

9.1.2 虚拟用户FTP_Linux_13

9.1.2 虚拟用户FTP_Linux_14

9.1.2 虚拟用户FTP_Linux_15



资料来源:

https://blog.csdn.net/mm624531604/article/details/8960531