实现让vsftpd支持虚拟用户和用mysql对用户进行管理

 如何让vsftpd支持虚拟用户

(1).建立虚拟FTP用户的帐号数据库文件

建立虚拟用户的账户名、密码列表

 奇数行为帐号名

 偶数行为上一行中帐号的密码

转化为Berkeley DB格式的数据文件

 db_load 转换工具

 需安装db4-utils软件包

(2).创建FTP根目录及虚拟用户映射的系统用户

此系统帐号就是ftp

虚拟用户, 还是当前系统对应的某个用户,所以要提供用于映射的用户

(3).建立支持虚拟用户的PAM认证文件

(4).vsftpd.conf文件中添加支持配置

   vsftpd支持虚拟用户

以上四个步骤基本可以搞定

(5).为个别虚拟用户建立独立的配置文件

(6).重新加载vsftpd配置

(7).使用虚拟FTP账户访问测试  

步骤如下:

(1)/etc/vsftpd/目录下建一个文档  

  
  
  
  
  1. [root@ns ~]# cd /etc/vsftpd/ 
  2.  
  3. [root@ns vsftpd]# vim vusers.txt 
  4.  
  5. tom              //奇数行为用户名 
  6.  
  7.   123              //偶数行为密码 
  8.  
  9.   jerry 
  10.  
  11. 456 
  12.  
  13. 保存退出 
  14.  
  15. 安装db4-tuils包 
  16.  
  17. [root@ns vsftpd]# yum list all db* 
  18.  
  19. [root@ns vsftpd]# yum -y install db4-utils 
  20.  
  21. 安装完毕以后就有了db_load命令 
  22.  
  23. [ 查看:[root@ns vsftpd]# rpm -ql db4-utils 
  24.  
  25. db_load的用法 
  26.  
  27. [root@ns vsftpd]# db_load -h 
  28.  
  29. db_load: option requires an argument -- h 
  30.  
  31. usage: db_load [-nTV] [-c name=value] [-f file] 
  32.  
  33.       [-h home] [-P password] [-t btree | hash | recno | queue] db_file 
  34.  
  35. usage: db_load -r lsn | fileid [-h home] [-P password] db_file ] 
  36.  
  37. [root@ns vsftpd]# db_load -T -t hash -f vusers.txt vusers.db 
  38.  
  39. //从vusers.txt中读取列表保存到vsusers.db中 
  40.  
  41. [root@ns vsftpd]# file vusers.db 
  42.  
  43. vusers.db: Berkeley DB (Hash, version 8, native byte-order) 
  44.  
  45. //查看vsusers.db 

(2) .创建FTP根目录及虚拟用户映射的系统用户

  
  
  
  
  1. [root@ns vsftpd]# useradd -d /var/vuser vuser 
  2.  
  3. [root@ns vsftpd]# ll -d /var/vuser 
  4.  
  5. drwx------ 3 vuser vuser 4096 Oct  9 22:54 /var/vuser 
  6.  
  7. //文件属性为700,别的用户不能访问到,因此要修改属性为755 
  8.  
  9. [root@ns vsftpd]# chmod 755 /var/vuser/ 

(3).建立支持虚拟用户的PAM认证文件

  
  
  
  
  1. [root@ns vsftpd]# vim /etc/pam.d/vusers 
  2.  
  3. 在里面添加: 
  4.  
  5. auth required pam_userdb.so db=/etc/vsftpd/vusers 
  6.  
  7. account required pam_userdb.so db=/etc/vsftpd/vusers 
  8.  
  9. 保存退出 

(4).编辑主配置文件vsftpd.conf,在文件中添加支持虚拟用户

[root@ns vsftpd]# vim vsftpd.conf

添加如下:

  
  
  
  
  1. 先关闭ssl以免影响ssl_enable=NO 
  2.  
  3. pam_service_name=vusers 
  4.  
  5. #For virtual users 
  6.  
  7. anon_umask=022 
  8.  
  9. guest_enable=YES 
  10.  
  11. guest_username=vuser 

保存退出,重启服务

  
  
  
  
  1. [root@ns vsftpd]# service vsftpd restart 

测试一下

  
  
  
  
  1. [root@ns vsftpd]# ftp 172.16.7.1 

(5).为个别虚拟用户建立独立的配置文件

文中以tomjerry为例

vsftpd.conf文件中添加用户配置目录支持

为用户tom,jerry建立独立的配置目录及文件

配置文件名和用户名同名

  
  
  
  
  1. [root@ns vsftpd]# mkdir vuser_dir 
  2.  
  3. [root@ns vsftpd]# vim vsftpd.conf 

修改配置文件,添加一行

  
  
  
  
  1. user_config_dir=/etc/vsftpd/vuser_dir 

保存退出  

  
  
  
  
  1. [root@ns vsftpd]# cd vuser_dir/ 
  2.  
  3. [root@ns vuser_dir]# touch tom jerry 
  4.  
  5. [root@ns vuser_dir]# vim tom 
  6.  
  7. //编辑tom的限制条件 
  8.  
  9. anon_upload_enable=YES 
  10.  
  11. #anon_mkdir_enable=YES 
  12.  
  13. anon_other_write_enable=YES 
  14.  
  15.   
  16.  
  17. [root@ns vuser_dir]# vim jerry 
  18.  
  19. //编辑jerry的限制条件 
  20.  
  21. anon_upload_enable=NO 
  22.  
  23. #anon_mkdir_enable=NO 
  24.  
  25. anon_other_write_enable=NO 
 

(6).重新加载vsftpd配置

  
  
  
  
  1. service vsftpd reload | service vsftpd restart 

(7).使用虚拟FTP账户访问测试

此处不再详细举例

(8).优化虚拟用户之编译安装pam模块

安装一个mysql模块可以更加方便快捷的对用户进行管理

下载 pam_mysql-0.7RC1.tar.gz 

  
  
  
  
  1. [root@ns ~]# tar xvf pam_mysql-0.7RC1.tar.gz 
  2.  
  3. //解压安装 
  4.  
  5. [root@ns ~]# cd pam_mysql-0.7RC1 
  6.  
  7. [root@ns pam_mysql-0.7RC1]# ./configure --with-mysql=/usr/local/mysql 
  8.  
  9. //使用此模块的前提是机器上面安装了mysql才可以 
  10.  
  11. 下面开始编译安装 
  12.  
  13. [root@ns pam_mysql-0.7RC1]# make && make install 
  14.  
  15. [root@ns pam_mysql-0.7RC1]# mysql -uroot -predhat 

只要有pam_mysql.so这个模块就可以用mysql做认证

  
  
  
  
  1. mysql> CREATE DATABASE vsftpd; 
  2.  
  3. //创建vsftpd数据库 
  4.  
  5. mysql> USE vsftpd; 
  6.  
  7. //切换数据库 
  8.  
  9. mysql> CREATE TABLE vusers (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Name VARCHAR(30) NOT NULL, Password CHAR(48) NOT NULL); 
  10.  
  11. //创建表 
  12.  
  13. mysql> DESC vusers; 

+----------+------------------+------+-----+---------+----------------+

| Field    | Type             | Null | Key | Default | Extra          |

+----------+------------------+------+-----+---------+----------------+

| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |

| Name     | varchar(30)      | NO   |     | NULL    |                |

| Password | char(48)         | NO   |     | NULL    |                |

+----------+------------------+------+-----+---------+----------------+

3 rows in set (0.05 sec)

//查看字段确保无误

  
  
  
  
  1. mysql>insert into vusers (Name,Password) VALUES ('yang',password('redhat')),('yadi',password('redhat')); 
  2.  
  3. //创建两个用户yang和yadi,密码都是redhat 
  4.  
  5. Database changed 
  6.  
  7. mysql> GRANT SELECT ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY '123456'
  8.  
  9. Query OK, 0 rows affected (0.04 sec) 
  10.  
  11.   
  12.  
  13. mysql> GRANT SELECT ON vsftpd.* TO 'vsftpd'@'127.0.0.1' IDENTIFIED BY '123456'
  14.  
  15. Query OK, 0 rows affected (0.00 sec) 
  16.  
  17.   
  18.  
  19. mysql> FLUSH PRIVILEGES; 
  20.  
  21. Query OK, 0 rows affected (0.00 sec) 
  22.  
  23. //给用户vsftpd查询等权限,这个根据实际情况。。。。 
  24.  
  25. //退出mysql 

  
  
  
  
  1. [root@ns ~]# vim /etc/pam.d/vusers.mysql 
  2.  
  3. 增加如下内容: 
  4.  
  5. auth    required       pam_mysql.so     user=vsftpd passwd=123456 host=localhost db=vsftpd table=vusers usercolumn=Name passw    dcolumn=Password crypt=2 
  6.  
  7.  account required       pam_mysql.so     user=vsftpd passwd=123456 host=localhost db=vsftpd table=vusers usercolumn=Name passw    dcolumn=Password crypt=2 
  8.  
  9. [root@ns ~]# vim /etc/vsftpd/vsftpd.conf 
  10.  
  11. 修改主配置文件,修改如下: 
  12.  
  13. pam_service_name=vuser.mysql 
  14.  
  15. [root@ns ~]# service vsftpd restart 
  16.  
  17. //重启服务 

用刚才在服务器中创建的用户名登录,此时实验结束

你可能感兴趣的:(vsftpd,虚拟用户,结合mysql实现对用户的管理)