前言:FTP服务器在网络中经常见,下面就来配置一个FTP服务器,相对于其他服务器来说,它还是很简单的。

实验环境:redhat5.8

一,安装vsftpd

yum -y install vsftpd
这时一个简单的拥有最基本功能的ftp服务就建立好了,下面来启它吧。
service vsftpd start

二,调整配置文件/etc/vsftpd/vsftpd.conf,实现不同的功能

anonymous_enable=YES              ##启用匿名用户
local_enable=YES                  ##启用本地用户
write_enable=YES                  ##启用可写
local_umask=022                   ##本地用户umask值
anon_mkdir_write_enable=YES       ##匿名用户建立目录
anon_upload_enable=YES            ##匿名用户可以上传
connect_from_port_20=YES          ##主动模式下启用的传输端口
xferlog_enable=YES                ##启用日志
xferlog_file=/var/log/xferlog     ##日志位置
listen=YES                        ##是否监听端口,这样vsftd以standalone运行
pam_service_name=vsftpd           ##用pam模块验证身份
userlist_enable=YES               ##是否启用userlist表,功能与下面设置有关
     userlist_deny=YES            ##代表写在表里的都不允许登陆
     userlist_deny=NO             ##代表只允许表里面的登陆
tcp_wrappers=YES                  ##支持tcp_wapper的过滤功能,与/etc/hosts.deny或allow有关

我们设置为匿名用户可以登陆可以下载但不能上传不能建立,本地用户可以上传下载,并把本地用户限制到自己的家目录中,配置文件如下:

anonymous_enable=YES
local_enable=YES
chroot_local_user=YES
write_enable=YES
local_umask=YES
connect_from_port_20=YES
listen=YES
userlist_enable=YES
userlist_deny=YES
pam_service_name=vsftpd
tcp_wrappers=YES

 

三,本地用户实现基于SSL的密码传输与数据传输

原来的配置文件新增如下:

ssl_enable=YES                ##启用ssl
allow_anon_ssl=NO                            ##匿名用户不启用ssl
force_local_data_ssl=YES                     ##强制本地用户数据通过ssl传输
force_local_logins_ssl=YES                   ##强制本地用户通过ssl登陆
ssl_tlsv1=YES                                ##启用的ssl版本
ssl_sslv2=NO                                 ##sslvs不安全
ssl_sslv3=YES
rsa_cert_file=/etc/vsftpd/vsftpd.cert        ##vsftd的证书位置
rsa_private_key_file=/etc/vsftpd/vsftpd.key  ##vsftpd的私钥位置
证书等建立见:http://laoguang.blog.51cto.com/6013350/1035608
测试:
[root@mail vsftpd]# ftp 192.168.0.117
Connected to 192.168.0.117.
220 (vsFTPd 2.0.5)
504 Unknown AUTH type.
504 Unknown AUTH type.
KERBEROS_V4 rejected as an authentication type
Name (192.168.0.117:root): ibuler
530 Non-anonymous sessions must use encryption.
Login failed.         
本地用户不允许直接登陆
下面用flashFXP测试
 

 


使用TSL等加密可以通过,你可以用抓包工具测试是否能抓到密码!
 
四,通过建立数据文件启用虚拟用户
  4.1建立虚拟FTP用户的账号数据文件
      vi /etc/vsftp/vuser 数据如下:
redhat       ##奇数行为账号
admin        ##偶数行为密码
hadoop
admin
nginx
admin

  4.2把它转换为hash编码,存储为db格式,需要用到db_load工具

yum -y install  db4_utils              ##此软件提供db_load
db_load -T -t hash -f vuser vuser.db
 4.3创建虚拟用户映射的用户及目录
useradd -d /var/ftp/vuser -s /sbin/nologin vuser;
chmod 755 /var/ftp/vuser;
 4.4建立虚拟用户的PAM认证文件
vi /etc/pam.d/vuser   ##内容如下
auth    required        pam_userdb.so db=/etc/vsftpd/vuser
account required        pam_userdb.so db=/etc/vsftpd/vuser
 4.5配置/etc/vsftpd/vsftpd.conf启用虚拟用户,添加如下
guest_enable=YES
guest_username=vuser
pam_service_name=vuser  ##注释原来的验证,启用虚拟用户验证,刚才建的那个
 4.6为每个用户建立独立的配置文件,在/etc/vsftpd/vsftpd.conf中添加用户配置目录的支持
/etc/vsftpd/vsftpd.conf 
user_config_dir=/etc/vsftpd/vuses_dir
mkdir /etc/vsftpd/vusers_dir
cd /etc/vsftpd/vusers_dir
touch hadoop

vi  redhat 内容如下
anon_upload_enable=YES
anon_mkdir_write_enable=YES
vi nginx
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
      这些配置文件分别定义了 haddop只有下载权限,redhat具有上传权限,但不具有删除权限,
      而ngin同时具有上传与删除等权限    
 4.7重启vsftpd测试
 
五,基于MySQL数据库实现虚拟用户
 5.1安装开发工具及开发库,mysql已成功部署
见:http://laoguang.blog.51cto.com/6013350/1039208
 5.2安装pam_mysql软件,让pam可以通过mysql验证
下载pam_mysql http://pan.baidu.com/share/link?shareid=117692&uk=2501966565
tar xvf pam_mysql-0.7RC1.tar.gz
make
make install
5.3为vsftpd建立数据库
mysql>create database vsftpd;
mysql>grant select on vsftpd.* to ‘vsftpd’@’localhost’ identified by ‘vsftpd’;
mysql>use vsftpd;
mysql>create table users (
     >id tinyint auto_increment not null,
     >name char(20) not null,
     >passwd char(50) not null,
     >primary key(id)
     >);
添加测试用户
mysql>insert into users (name,passwd) 
     >values
     >('baidu',password('123456'));
mysql>insert into users (name,passwd) 
     >values
     >('tencent',password('123456'));
5.4建立pam认证需要的文件
vi /etc/pam.d/vuser_mysql
auth required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2                 ##上为一行
account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2 ##这也为一行
5.5编辑/etc/vsftpd/vsftpd.conf 更改pam认证文件
vi /etc/vsftpd/vsftpd.conf
pam_service_name=vuser_mysql  
##也可以为这些虚拟用户建立独立的配置文件,控制他们上传等
到此vsftp总结结束