ftp 采用明文的数据传输方式,如果使用本地账户登录ftp服务器,若该用户的用户名和密码被别人抓包抓到,其他人就可以使用该账号登录ftp服务器,产生不安全的情况。

可以使用虚拟账号,在ftp服务器上将该虚拟账号映射为本地账号,这样即使账号在网络上被截获,也只是在系统上不存在的账号,无法登录系统。

1.新建挂载点,挂载光盘

[root@localhost ~]# mkdir /mnt/cdrom

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom

2.安装vsftpd

[root@localhost ~]# rpm -ivh /mnt/cdrom/Server/vsftpd-2.0.5-16.el5.i386.rpm

3.产生文本文件,用于存放虚拟账号和密码

[root@localhost ~]# vim /etc/vsftpd/vuser.txt

test1 ##虚拟账号test1

123 ##虚拟账号test1的密码

test2 ##虚拟账号test2

456 ##虚拟账号test2的密码

ftp 虚拟账号(pam)_账号

4.安装db_load 工具,使刚刚产生的账号和密码文件变为数据库文件,该工具位于软件包db4_util中。

[root@localhost Server]# rpm -ivh /mnt/cdrom/Server/db4-utils-4.3.29-10.el5.i386.rpm

5。使用db_load --help使用帮助。将uni账号文件变为数据库文件

[root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db

6.当用户登录ftp服务器时,默认到/etc/passwd下进行账户验证,在/etc/vsftpd/vsftpd.conf中有一条语句:pam_service_name=vsftpd ,说明可是使用pam进行验证,验证文件叫vsftpd。

该文件为接口文件,告诉pam,验证时要调用哪些模块,以及模块的参数。

打开接口文件vsftpd

[root@localhost vsftpd]# vim /etc/pam.d/vsftpd

该文件需要使用模块/lib/security/pam_userdb.so

查看该模块的手册:

[root@localhost txts]# man /usr/share/doc/pam-0.99.6.2/txts/README.pam_userdb

可以看到pam_userdb模块是用来验证存放在数据库中的用户名和密码的。

ftp 虚拟账号(pam)_登录系统_02

db=/path/database ##用来说明数据库文件的位置

7.再次打开/etc/pam.d/vsftpd文件

auth required pam_userdb.so db=/etc/vsftpd/vuser

account required pam_userdb.so db=/etc/vsftpd/vuser

ftp 虚拟账号(pam)_ftp服务器_03

虚拟账号验证成功后,需要将虚拟账号和本地账号进行映射

8.新建本地账户user1

[root@localhost txts]# useradd user1

[root@localhost txts]# passwd user1

9.查看vsftpd.conf手册

查找guest关键字,guest_enable :所有的非匿名用户登录后将作为guest用户,guest用户映射成为guest_username定义的用户名。

ftp 虚拟账号(pam)_用户名_04

10.在vsftpd.conf中添加如下语句:

guest_enable=YES

guest_username=user1

ftp 虚拟账号(pam)_ftp服务器_05

11.重启ftp服务

[root@localhost txts]# service vsftpd restart

关闭 vsftpd: [确定]

为 vsftpd 启动 vsftpd: [确定]

12.测试:

ftp 虚拟账号(pam)_登录系统_06

13.给user1 的家目录添加r权限

[root@localhost home]# ll -d user1/

drwx------ 3 user1 user1 4096 09-16 16:58 user1/

[root@localhost home]# chmod o+r user1/

ftp 虚拟账号(pam)_用户名_07

14.再次访问

ftp 虚拟账号(pam)_账号_08

ftp 虚拟账号(pam)_ftp服务器_09

15.设置用户的最大速率

anon_max_rate=100 匿名用户的最大速率为100B/s

local_max_rate=10000 本地用户的最大速率为10M/s

max_clients=2 客户端的最大数量为2

max_per_ip=1 每个ip可以开启的连接数量

16.磁盘配额:

将test1 和test2 账户上传的总文件大小不能超过15MB

创建新分区

ftp 虚拟账号(pam)_账号_10

使用partprobe命令使linux内核重新读取分区表:

[root@localhost ~]# partprobe /dev/sda

ftp 虚拟账号(pam)_的_11

格式化该分区

[root@localhost ~]# mkfs -t ext3 /dev/sda5

新建挂载点,将该分区永久性挂载到挂载点上

[root@localhost ~]# mkdir /mnt/partion

[root@localhost ~]# vim /etc/fstab

ftp 虚拟账号(pam)_账号_12

mount -a

ftp 虚拟账号(pam)_登录系统_13

执行quotacheck -augvc 后,在/mnt/5文件夹内产生文件:aquota.user,所有用户的配额文件。

编辑user1的配额文件

[root@localhost ~]# edquota -u user1

ftp 虚拟账号(pam)_账号_14

quotaon /dev/sda5 使配额生效

[root@localhost ~]# quotaon /dev/sda5

在开机脚本文件/etc/rc.d/rc.local中添加命令:quotaon /dev/sda5使开机时配额自动生效

由于user1 的家目录在“/”下,不在/dev/sda5分区上,也就是/mnt/partion上。将user1 的家目录复制到/mnt/partion /home下,修改/etc/passwd 中user1 的家目录位置为/mnt/partion/home/user1.由于虚拟账号test1 和test2 登录到系统中后变为guest账户,所有要修改vsftpd.conf文件,使匿名用户具有上传权限。再修改/mnt/partion/home/user1的权限,使other用户据哟上传权限。

[root@localhost home]# mkdir /mnt/partion/home

[root@localhost home]# mv * /mnt/partion/home/

[root@localhost partion]# chmod -R o+rw home

[root@localhost partion]# vim /etc/passwd

user1:x:501:502::/mnt/partion/home/user1:/bin/bash

ftp 虚拟账号(pam)_的_15

[root@localhost partion]# vim /etc/vsftpd/vsftpd.conf

ftp 虚拟账号(pam)_登录系统_16

上传文件

ftp 虚拟账号(pam)_账号_17

文件大小只有15M

ftp 虚拟账号(pam)_账号_18

再次上传,上传失败

ftp 虚拟账号(pam)_ftp服务器_19

配额生效