本文对安装部分不做描述

使用xinetd 管理vsftpd(一定要安装xinetd)

像FTP这样的访问压力比较小的服务,使用xinetd方式是比较合适的,首先应该告诉vsftpd,从现在开始可以不用监听端口了,打开配置文件/etc/vsftpd/vsftpd.conf,找到 "listen=YES"  将"listen=YES"改为"listen=NO",表示不必监听端口,
接下来需要告诉xinetd和FTP服务器有关的信息。为此,在/etc/xinetd.d 目录下建立文件vsftpd,包含下面这些内容

service ftp
{
    socket_type    = stream
    wait        = no
    user        = root
    server        = /usr/sbin/vsftpd #server字段填写的是vsftpd服务器的启动脚本所在地路径。
    log_on_success    += DURATION
    disable        = no
}

现在重新启动xinetd,使其配置生效

/etc/xinetd.d/xinetd restart

查看22端口的情况,可以看到xinetd已经接管了这个端口
netstat -tulnp | grep 22 或者 lsof -i:22

设置匿名用户登录

vsftp 服务器默认配置为允许匿名用户登录,匿名用户叫做anonymous 这个用户在本地被映射为ftp 打开 /etc/vsftpd/vsftpd.conf,应该可以看到这些 

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES

另一个比较有用的选项是anno_max_rate,用于限制匿名用户的传输速率,在宽带资源并不非常充裕的情况下,可以考虑“委屈”一下 anonymous,这个选项后面的数值单位是bytes/秒,如果设置为0 将不受限制,例如将匿名用户传输的速率限制为20KB/s,那么可以这样设置

naon_max_rate=20000

然后记得重启FTP服务器,使其生效。

设置本地用户登录

在一个网店内部,FTP更多的情况下被配置为向授权用户开放。为此,用户应该在服务器上拥有自己的帐号。vsftpd 把这样的用户称之为“本地用户” (local users),这和其他FTP服务器所说的“真实用户(real users)” 是一回事。
要开启vsftpd 的这个功能,只要简单的取消配置文件中local_enable=YES前的注释符号#,如果在vsftpd.conf配置文件中找不到这一行,那就手动填上,当本地用户登录到FTP上,所处的目录就是在服务器上的主目录,没有理由限制用户在自己的目录中创建、删除或是修改数据,在配置文件中取消write_enable=YES前的注释符号#可以打开本地用户的上传权限(若没有,则手动添加)

# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES

重启生效

处于安全性的开考虑,有一些用户是不能被允许通过FTP登录的,例如root用户。vsftpd将一些系统用户整理在/etc/vsftpd/ftpusers 中,通过cat命令查看这个文件得到如下信息

[root@mail ~]# cat /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
这是一张黑名单,所有被列入其中的用户都不能通过FTP登录进来,当然,尽管FTP的本意是组织外部FTP用户接触本地的系统信息,但管理员也可以简单地把那些“看不顺眼”的账户放进去,这样就可以实现限制某些用户登录FTP的功能了

限制用户在本地目录中

登录到FTP的用户可以在服务器上到处浏览,查看普通的或是敏感的文件。这显然是任何一个管理员都不愿见到的事情。幸运的是,vsftpd提供了chroot(change root改变根目录)系统调用,使其他目录在使用者不可见,也不可访问

要开启这个选项,应该在/etc/vsftpd/vsftpd.conf找到chroot_root_user关键字,并修改成下面这样

chroot_local_user=YES

这样当用户试图进入一个系统目录是,vsftpd会提示失败,并委婉的拒绝这一请求

ftp> cd /etc/
550 Filed to change directory.

类似的,管理员还可以指定下面这个选项,通过一个配置文件制定有哪些用户应该受到限制

chroot_list_enable=YES

配置文件通过chroot_list_file选项指定,下面这条设置将配置完呢间指定为/etc/vsftpd/vsftpd.chroot_list

chroot_list_file=/etc/vsftpd/vsftpd.chroot_list

/etc/vsftpd/vsftpd.chroot_list的格式应该和/etc/vsftpd/ftpusers 一样,每行一个用户

使用虚拟用户、

虚拟用户基于这样一种能够实现方式:所有非匿名用户的均被视为访客(guest),并被映射为一个特定的用户:用guest_username选项指定。管理员可以为每一个用户设置主目录,并赋予相应的权限。虚拟用户非常适合那些需要为不同用户提供FTP空间的站点。WEB 主机托管常常采用这样的方法:用户在本地编辑好网页,然后通过FTP上传到服务器上——首先要通过虚拟用户身份验证。

例如:一项任务,并包括下面这些需求
    禁用匿名用户
    为用户jcsmith和culva添加FTP虚拟用户
    将他们的口令分别设置为jc123和cu123
    将jcsmith的FTP主目录设置为/home/ftp/jcsmith,赋予它只读权限
    将culva的FTP主目录设置为/home/ftp/culva,赋予它上传文件和建立目录的权限
创建虚拟用户的数据库文件
创建数据库文件需要DB这个工具,db工具通过读取一个特定格式的文本文件在创建数据库文件,这个用户应该为每个用户预留2行,第一行是用户名,第二行是口令,在本例中,在主目录下建立文件login_user(文件名宁可以任取),包含下面这些内容
jcsmith
jc123
culva
cu123

运行db_load 命令,通过~/login_user(由-f选项指定)创建数据库文件/etc/vsftpd_login.db(yum install db* -y)

db_load -T -t hash -f /home/lewis/login_user /etc/vsftpd_login.db  

-T选项知道db_load命令通过文本文件创建数据库,“-t hash”则指定了创建数据库的方式:这里使用了一种被称作“哈希表(Hash table)” 的数据结构,最后修改这个数据库问价你的权限,使其只对root用户可见

chmod 600 /etc/vsftpd_login.db

配置PAM验证

/etc/pam.d/vsftpd 是vsftpd默认使用的PAM验证文件,编辑这个文件,加入下面这两行

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

在/etc/pam.d/vsftpd 中原本就有的一些配置会干扰这里的设置。将其他所有的行都注释掉。
事实上,vsftpd使用的PAM文件是用配置文件(/etc/vsftpd/vsftpd.conf)中的pam_service_name=指定的。如果感到/etc/pam.d/vsftpd设置起来太麻烦。也可以使用自己喜欢的名字在/etc/pam.d/下新建一个文件,然后把pam_service_name指向它。下面这条配置将vsftpd的PAM验证文件设置为/etc/pam.d/my_vsftpd

pam_service_name=my_vsftpd

创建本地用户映射

下面设置将登录进来的jcsmith和culva映射为一个指定的非特权用户。编辑vsftpd的配置文件/etc/vsftpd/vsftpd.conf,修改(或者添加) guest_username=ftp
这样jcsmith和culva 在登录到FTP服务器后。就只有FTP用户的权限了,下面在配置文件中/etc/vsftpd/vsftpd.conf所有可能影响到的行

anonymous_enable=NO          ##不允许匿名用户登录
local_enable=YES             ##允许本地用户登录
chroot_local_user=YES        ##将用户限制在主目录中
pam_service_name=vsftpd      ##指定PAM验证文件(在/etc/pam.d/中)
guest_enable=yes             ##激活访客(guest)身份
guest_username=ftp           ##设置登录用户应该被映射成本地用户

其中local_enable=YES 和 guest_enable=YES 用于开启虚拟用户登录。前者告诉vsftpd允许本地用(在本例中是jcsmith和culva)登录到服务器;后者用于将所有的登录用户视为访客(guest)。访客最终被映射为guest_username所指定的bending用户(在本例中是FTP)

设置用户目录和权限

到目前为止已经可以用jcsmith和culva这两个账户登录FTP服务器了,但他们还只能拥有相同的目录(/home/ftp)和权限。下面来完成最后的两个任务
    将jcsmith的FTP主目录设置为/home/ftp/jcsmith,赋予它只读权限
    将culva的FTP主目录设置为/home/ftp/culva,赋予它上传文件和建立目录的权限
首先为这两个用户建立各自的主目录。在本例中,虚拟用户登录后自动被映射为本地的ftp用户,所以应该把这些目录的属主设置为ftp用户
mkdir /home/ftp/culva
chown ftp /home/ftp/culva/
mkdir /home/ftp/jcsmith
chwon ftp /home/ftp/jcsmith/
接下来为两个用户设置不同的目录和权限。vsftpd使用“user_config_dir=”这一选项来指定存放用户配置的目录。这里首先建立

mkdir /etc/vsftpd_user_conf

然后在/etc/vsftpd/vsftpd.conf中将user_config_dir选项指向它。现在配置文件中项管的行看起来像下面这样

anonymous_enable=NO          ##不允许匿名用户登录
local_enable=YES             ##允许本地用户登录
chroot_local_user=YES        ##将用户限制在主目录中
pam_service_name=vsftpd      ##指定PAM验证文件(在/etc/pam.d/中)
guest_enable=yes             ##激活访客(guest)身份
guest_username=ftp           ##设置登录用户应该被映射成本地用户
user_config_dir=/etc/vsftpd_user_conf ##存放用户配置文件的目录

最后在/etc/vsftpd_user_conf目录下降了jcsmith和culva这两个文本文件,分别存放和jcsmith和culva有关的配置。jcsmith的内容非常简单,只有一行

local_root=/home/ftp/jcsmith   ##这行指定了jcsmith在FTP服务器上的主目录

culva的配置文件如下

write_enable=YES    ##打开vsftpd的全局写权限
anon_upload_enable=YES  ##打开文件上传权限
anon_mkdir_write_enable=YES  ##打开建立目录的权限
local_root=/home/ftp/culva

至此就完成了FTP虚拟用户的设置,作为工作的最后一步,重启服务器总是必须的 service vsftpd restart