1、系统环境和所需软件包

     Redhat Enterprise-5.8、vsftpd、mysql、pam-mysql-0.7RC1 

2、本文大致内容

①、vsftpd安装

②、vsftpd配置文件的介绍

③、vsftpd服务器的基本实现和一般控制设置

④、虚拟用户vsftpd服务器的搭建、测试等

3、FTP服务器介绍

 

 
  
  1. FTP服务器的连接分为两种: 
  2.  
  3.    控制连接:客户端向服务器端请求连接,而且一旦建立就不在断开,等到人为断开的时候此连接才会释放,此连接是
  4. 利用tcp的21号端口 
  5.  
  6.    数据连接:客户端和服务器之间进行数据传输的连接,是一种按需连接,一旦数据传输介绍,此连接就会断开,
  7. 此连接利用一种随机的端口。 
  8.  
  9. FTP服务器常用的命令 
  10.  
  11. get:下载文件 
  12.  
  13. mget:下载多个文件 
  14.  
  15. put:上传文件 
  16.  
  17. mput:上传多个文件 
  18.  
  19. lcd:切换本地目录 
  20.  
  21. cd、ls等等众多的命令。 

4、FTP服务器的安装

  在红帽上面利用红帽自身的rpm包安装即可实现一个简单的ftp服务器架设

  yum install vsftpd

1

此处一个简单的ftp服务器就建成了~~~~~~

图像 003

 

编辑vsftpd.conf配置文件

 

 
  
  1. anonymous_enable=YES  //是否开启匿名用户访问 
  2.  
  3. anonymous_enable=YES  //是否开启本地用户既系统用户访问 
  4.  
  5. write_enable=YES            //是否开启本地用户的写权限:上传文件的权限 
  6.  
  7. local_umask=022            //系统用户上传文件时候的umask默认值 
  8.  
  9. anon_upload_enable=YES //是否开启虚拟用户上传文件的权限 
  10.  
  11. anon_mkdir_write_enable=YES //是否开启虚拟用户新建文件件的权限 
  12.  
  13. chown_uploads=YES           //是否开启上传文件的属主修改  
  14. chown_username=whoever  //上传文件后所属主 
  15.  
  16. xferlog_file=/var/log/xferlog 
  17.  
  18. xferlog_std_format=YES      //日志记录,需要开启上面两项才可以生效 
  19.  
  20. idle_session_timeout=600   //连接超时时间 
  21.  
  22. data_connection_timeout=120 //数据传输超时时间 
  23.  
  24. ascii_upload_enable=YES  
  25. ascii_download_enable=YES   //是否开启ascii码的上传、下载 
  26.  
  27. chroot_list_enable=YES         //是否锁定用户登录后的目录,配置文件在/etc/vsftpd/chroot_list,
  28. 表内定义了锁定的用户列表 
  29.  
  30. chroot_list_file=/etc/vsftpd/chroot_list  //用户登录以后把用户锁在那个目录下的定义 
  31.  
  32. listen=YES                               //设置ftp服务是否为独立进程 
  33.  
  34. pam_service_name=vsftpd       //pam认证服务名称  
  35. userlist_enable=YES               // 用户列表限定 
  36.  
  37. 用法(定义黑白名单) 
  38.  
  39. 定义黑名单:userlist_enable=YES 、userlist_deny=YES 
  40.  
  41. 定义白名单:userlist_enable=YESuserlist_deny=NO  
  42. max_clients =                           // 单个IP最多发起几个请求的
  43. max_per_ip =    //最多允许几个IP链接FTP服务器 
  44.  
  45. 另外的两个vsftpd的配置文件: 
  46.  
  47. /etc/vsftpd/ftpusers------------内规定的用户都禁止登陆ftp服务 
  48.  
  49. /etc/vsftpd/user_list-----------规定了不能登陆ftp服务器的用户 

5、设置环境实现测试:

 

 
  
  1. 测试之前需要保证本机的SElinux是关闭的,否则会造成失败的! 
  2.  
  3. setenforce 0  立即关闭 SElinux
  4.  
  5. vim /etc/selinux/config  永久关闭 SElinux
  6.  
  7. 新建两个用户:chris和chrislee,然后把chris锁定在家目录内。修改vsftpd.conf 
  8.  
  9. vim /etc/vsftpd/vsftpd.conf 
  10.  
  11. chroot_list_enable=YES 
  12.  
  13. chroot_list_file=/etc/vsftpd/chroot_list 
  14.  
  15. 新建chroot_list 
  16.  
  17. vim /etc/vsftpd/chroot_list 
  18.  
  19. 增加chris 

然后重启服务器

service vsftpd restart

图像 005

另外注意:

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list--这两个配置可以直接被下面一句话所替代:chroot_local_user=YES,这样就可以限制所有的用户登录以后只能停留在自己的家目录里了

6、由于FTP服务的传输都是明文的,在网络上非常不安全,我们可以利用openssh来对ftp服务的传输进行加密,既是sftp服务。

①、建立CA、自签证书、

 

 
  
  1. 先生成CA和CA的自签证书 
  2.  
  3. cd /etc/pki/CA 
  4.  
  5. mkdir certs newcerts crl 
  6.  
  7. touch index.txt 
  8.  
  9. echo 01 > serial 
  10.  
  11. 创建CA的私钥 
  12.  
  13. (umask 007;openssl genrsa –out priviate/cakey.pem 2048); 
  14.  
  15. 生成自签证书 
  16.  
  17. openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365 //-days是指有效期

图像 011 

②、为vsftp服务进行CA认证

 

 
  
  1. mkdir /etc/vsftpd/ssl 
  2.  
  3. cd /etc/vsftpd/ssl 
  4.  
  5. 生成私钥和认证的公钥 
  6.  
  7. (umask 077;openssl genrsa -out vsftpd.key 2048); 
  8.  
  9. openssl req -new -key vsftpd.key -out vsftpd.csr 

图像 012

修改CA目录,修改的话必须在特定的目录下才能签署证书

vim /etc/pki/tls/openssl.cnf

图像 010

签署证书

openssl ca -in vsftpd.csr -out vsftpd.crt

③、然后ftp配置使用加密的认证方式

 

 
  
  1. vim /etc/vsftpd/vsftpd.conf 
  2.  
  3. ssl_enable=YES        //开启ssl功能 
  4.  
  5. ssl_tlsv1=YES          //开启支持tlsv1 
  6.  
  7. ssl_sslv2=YES 
  8.  
  9. ssl_sslv3=YES 
  10.  
  11. allow_anon_ssl=NO    //是否开启匿名用户利用ssl 
  12.  
  13. force_local_data_ssl=YES      //开启系统用户数据传输利用ssl 
  14.  
  15. force_local_logins_ssl=YES   //开启系统用户登录利用ssl 
  16.  
  17. rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt   //指定证书位置 
  18.  
  19. rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key //指定私钥位置 

④重启服务、验证

图像 013

利用Flashxp软件进行连接测试

图像 015

 

图像 014

 

 

 

 

 

 

ok~~到此我们的sftp服务器就已经建成了,相对来说比原来安全多了~~

7、vsftpd+pam+mysql,实现虚拟用户

环境必须安装相应的开发环境和开发库:Development Libraries和Development Tools

下面用到的软件安装方式采用yum安装,可以自动解决软件的依赖关系,由于实验是在在虚拟机上,所以采用DVD盘作为yum池,配置为下

 

 
  
  1. mount /dev/cdrom /media 
  2.  
  3. /etc/yum.repos.d/server.repo //yum服务配置如下 
  4.  
  5. # repos on instructor for cla***oom use 
  6.  
  7. # Main rhel5 server  
  8. [base]  
  9. name=Instructor Server Repository  
  10. baseurl=file:///media/Server  
  11. gpgcheck=0 
  12.  
  13. # This one is needed for xen packages  
  14. [VT]  
  15. name=Instructor VT Repository  
  16. baseurl=file:///media/VT  
  17. gpgcheck=0 
  18.  
  19. # This one is needed for clustering packages  
  20. [Cluster]  
  21. name=Instructor Cluster Repository  
  22. baseurl=file:///media/Cluster  
  23. gpgcheck=0 
  24.  
  25. # This one is needed for cluster storage (GFS, iSCSI target, etc...) packages  
  26. [ClusterStorage]  
  27. name=Instructor ClusterStorage Repository  
  28. baseurl=file:///media/ClusterStorage  
  29. gpgcheck=0 

①、安装数据库和开发环境

检查开发库和开发工具是否安装

图像 016

yum -y install mysql-server mysql-devel  //安装数据库服务器软件和devel,devel包是为了后面编译pam的时候必须的软件包。不安装的话就无法实现其功能了。

启动mysql服务器,然后测试,保证mysql服务器运行正常,service mysqld start,mysql连接进入查看,如下图

图像 017

②、手动编译、安装mysql基于pam的认证的驱动文件pam_mysql-0.7RC1.tar.gz。

 

 
  
  1. tar xf pam_mysql-0.7RC1.tar.gz 
  2.  
  3. cd pam_mysql-0.7RC1 
  4.  
  5. ./configure --with-mysql=/usr  //—with-mysql=指定mysql库所在的位置 
  6.  
  7. make 
  8.  
  9. make install 

③、进入数据库准备所需的数据库和表等

 

 
  
  1. mysql    //进入数据库 
  2.  
  3. mysql> create database vsftpd;  
  4. mysql>  use vsftpd;  
  5. mysql> create table users(  
  6.     -> id int AUTO_INCREMENT NOT NULL,  
  7.     -> name char(20) binary NOT NULL,  
  8.     -> password char(48) binary NOT NULL,  
  9.     -> primary key(id)  
  10.     -> ); 

图像 018

授权定义

 

 
  
  1. GRANT SELECT ON vsftpd.* to vsftpd@localhost identified by 'work'; 
  2.  
  3. GRANT SELECT ON vsftpd.* to vsftpd@127.0.0.1 identified by 'work'; 

 

图像 019

 

 

 

 

④、在数据库内增加两个虚拟用户,然后用其测试

 

 
  
  1. mysql> insert into users(name,password) values('chris','work');  
  2. mysql> insert into users(name,password) values('chrislee','work'); 

图像 020

⑤、配置vsftpd

建立pam认证所需的文件

 

 
  
  1. vi /etc/pam.d/vsftpd.mysql--这个文件默认是不存在的,需要新建 
  2.  
  3. 添加如下两行 
  4.  
  5. auth required /lib/security/pam_mysql.so user=vsftpd passwd=work host=localhost db=vsftpd 
  6. table=users usercolumn=name passwdcolumn=password crypt=0  
  7. account required /lib/security/pam_mysql.so user=vsftpd passwd=work host=localhost 
  8. db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0 

 

建立虚拟用户映射的系统用户及对应的目录

 

 
  
  1. #useradd -s /sbin/nologin -d /var/ftproot vuser  //新建虚拟用户  
  2. #chmod go+rx /var/ftproot   //为其他用户增加读和执行权限。 
  3.  
  4. 请确保/etc/vsftpd.conf中已经启用了以下选项 
  5.  
  6. anonymous_enable=YES  
  7. local_enable=YES  
  8. write_enable=YES  
  9. anon_upload_enable=NO  
  10. anon_mkdir_write_enable=NO  
  11. chroot_local_user=YES 
  12.  
  13. 而后添加以下选项  
  14. guest_enable=YES      //是否允许来宾账户访问  
  15. guest_username=vuser  //来宾账户访问映射为那个用户 
  16.  
  17. 并确保pam_service_name选项的值如下所示  
  18. pam_service_name=vsftpd.mysql 

然后配置完后重启服务器

图像 022

service vsftpd restart

测试登录

图像 023

 

 

图像 024

图像 025

备注:

配置vsftpd.conf为虚拟用户的默认权限为匿名用户的权限,若想单独定义每个用户的权限,则可以利用

 

 
  
  1. # vim vsftpd.conf  
  2. 添加如下选项  
  3. user_config_dir=/etc/vsftpd/vusers_dir 
  4.  
  5. 然后创建所需要目录,并为虚拟用户提供配置文件 
  6.  
  7. mkdir /etc/vsftpd/vusers_dir/ 
  8.  
  9. cd /etc/vsftpd/vusers_dir/ 
  10.  
  11. touch chris 
  12.  
  13. 虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让tom用户具有上传文件的权限,
  14. 可以修改/etc/vsftpd/vusers/tom文件,在里面添加如下选项即可。 
  15.  
  16. fg:vim chris增加配置 
  17.  
  18.     anon_upload_enable=YES  //是否开启数据上传 
  19.  
  20. 从而可以实现单独用户的权限控制,