vsftp 安装与配置
1、vsftp安装
可以用rpm安装,也可以用yum安装
1、rpm安装,centos6.4的ISO镜像文件中包含了vsftp的安装包。
# rpm -ivh vsftpd-2.2.2-11.el6_3.1.x86_64.rpm
2、用yum安装。
# yum -y install vsftpd

2、创建虚拟用户的宿主用户并设置相应的权限
1、创建虚拟用户的宿主用户
# useradd -d /test/ftp -s /sbin/nologin ftpuser
2、将 /test/ftp 的所有者设定ftpusr用户
# mkdir -p /test/ftp
# chown –R ftpuser.ftpuser /test/ftp
3、虚拟用户对应文件夹权限设置:
虚拟用户的对应文件夹建立在/test/ftp 文件夹下,例如:test1用户对应的文件夹为/test/ftp/test1则参考如下方式设置权限
# mkdir /test/ftp/test1
# chown -R ftpuser.ftpuser /test/ftp/test1
# chmod -R 500 /test/ftp/test1 ----只允许下载
# chmod -R 700 /test/ftp/test1 ----允许上传和下载。

3、建立虚拟用户口令库文件
1、 创建虚拟用户口令库文件
# touch /etc/vsftpd/login.txt
2、 编辑login.txt文件 (偶数行为用户名,奇数行为密码,当添加新的虚拟用户时,只需在文件尾输入两行信息即可---用户名和密码即可),例如:
test1 ----------虚拟用户名
123456 ----------虚拟用户密码
test2 ----------虚拟用户名
abcdef ----------虚拟用户密码

4、生成vsftp的认证文件:
由于保存虚拟帐号和密码的文本文件(即上面创建的login.txt)无法被系统帐号直接调用,因此需要使用db_load命令生成db口令数据库文件
# db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db ----执行完成后会在/etc/vsftpd文件夹内生成login.db口令库文件。
# chmod 600 /etc/vsftpd/login.db

5、建立虚拟用户所需的PAM配置文件:
为了使服务器能够使用数据库文件,对客户端进行身份验证,需要调用系统的PAM模块.PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。
编辑/etc/pam.d/vsftpd文件,用#号注释掉所有行,然后添加如下内容:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/login
注意:db=/etc/vsftpd/login 格式是这样的,去掉.db后缀 ,如果是64为系统,需将/lib 改成/lib64

6、编辑vsftp的主配置文件---/etc/vsftpd/vsftpd.conf 文件,添加虚拟帐号的共同设置并添加user_config_dir字段,定义虚拟帐号的配置文件目录并创建单独的虚拟用户配置文件。
编辑vsftp的主配置文件/etc/vsftpd/vsftpd.conf 文件。主要配置内容:
anonymous_enable=NO 修改配置--- 禁用匿名用户登录
write_enable=YES 默认开启----允许使用任何可以修改文件系统的FTP的指令
local_enable=YES 默认开启---启用本地用户登录设置
chroot_local_user=YES 自建配置 ---将所有本地用户限制在家目录中
pam_service_name=vsftpd:默认开启---配置vsftpd使用的PAM模块为vsftpd
user_config_dir=/etc/vsftpd/config 自建配置,该文件夹内主要是各虚拟用户的同名配置文件,如test1用户对于的配置文件名为test1设置虚拟帐号的主目录为/ config
max_clients=300:(自建配置) ---设置FTP服务器最大接入客户端数为300个
max_per_ip=10: (自建配置)---设置每个IP地址最大连接数为10个
listen=YES 启动监听
注意:主配置文件是虚拟账号共享的配置,所以主配置文件的设置对于虚拟账号是生效的

7、添加虚拟帐号的共同设置并添加user_config_dir字段,定义虚拟用户帐号的配置文件目录并创建单独的虚拟用户配置文件。
# mkdir /etc/vsftpd/config 创建虚拟用户账号的配置文件夹。
# touch /etc/vsftpd/config/test1 创建虚拟用户test1的配置文件
# echo "guest_enable=yes" >> /etc/vsftpd/config/test1 开启虚拟帐号登录
#echo "guest_username=ftpuser " >>/etc/vsftpd/config/test1 设置虚拟用户对应的系统帐号为ftpusr
# echo "local_root=/test/ftp/test1" >> /etc/vsftpd/config/test1 设定虚拟用户登录的主目录
# echo "download_enable=yes" >> /etc/vsftpd/config/test1 设定是否允许下载
# echo "anon_upload_enable=yes" >> /etc/vsftpd/config/test1 设定上传功能
# echo "anon_other_write_enable=YES" >> /etc/vsftpd/config/test1 设定删除、写入、更名权限
# echo "anon_mkdir_write_enable=yes" >>/etc/vsftpd/config/test1 设定创建文件夹权限
#echo "anon_world_readable_only=no " >>/etc/vsftpd/config/test1 不允许匿名用户浏览整个服务器的文件系统
# echo "anon_max_rate=100000" >>/etc/vsftpd/config/test1 限定传输速度为100KB/s
8、添加新用户,如添加gotest :
1、 编辑/etc/vsftpd/login.txt 文件,添加gotest用户名和密码
2、 执行db_load命令,重新生成login.db口令库文件
# db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
3、 在/etc/vsftpd/config文件夹中增加用户gotest的同名文件gotest,并编辑gotest文件。参考test1文件的内容。
# touch /etc/vsftpd/config/gotest
4、 创建用户gotest的对应主目录/test/ftp/gotest ,并设置相应的权限
# mkdir /test/ftp/gotest
# chown –R ftpuser.ftpuser /test/ftp/gotest
# chmod –R 500 /test/ftp/gotest

9、自动创建用户脚本,通过下面脚本可以自动创建用户
#!/bin/bash
echo -n "name:"
read name
echo -n "password:"
read pass
mkdir /test/ftp/$name
chown ftpusr.ftpusr /test/ftp/$name
echo $name >>/etc/vsftpd/login.txt
echo $pass >>/etc/vsftpd/login.txt
db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
chmod 600 /etc/vsftpd/login.db
touch /etc/vsftpd/config/$name
echo guest_enable=yes >>/etc/vsftpd/config/$name
echo guest_username=ftpusr >>/etc/vsftpd/config/$name
echo local_root=/test/ftp/$name >>/etc/vsftpd/config/$name
echo download_enable=YES >>/etc/vsftpd/config/$name
echo anon_upload_enable=yes >> /etc/vsftpd/config/$name
echo anon_other_write_enable=YES >>/etc/vsftpd/config/$name
echo anon_mkdir_write_enable=YES >>/etc/vsftpd/config/$name
echo anon_world_readable_only=no >>/etc/vsftpd/config/$name