如何让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/目录下建一个文档
- [root@ns ~]# cd /etc/vsftpd/
- [root@ns vsftpd]# vim vusers.txt
- tom //奇数行为用户名
- 123 //偶数行为密码
- jerry
- 456
- 保存退出
- 安装db4-tuils包
- [root@ns vsftpd]# yum list all db*
- [root@ns vsftpd]# yum -y install db4-utils
- 安装完毕以后就有了db_load命令
- [ 查看:[root@ns vsftpd]# rpm -ql db4-utils
- db_load的用法
- [root@ns vsftpd]# db_load -h
- db_load: option requires an argument -- h
- usage: db_load [-nTV] [-c name=value] [-f file]
- [-h home] [-P password] [-t btree | hash | recno | queue] db_file
- usage: db_load -r lsn | fileid [-h home] [-P password] db_file ]
- [root@ns vsftpd]# db_load -T -t hash -f vusers.txt vusers.db
- //从vusers.txt中读取列表保存到vsusers.db中
- [root@ns vsftpd]# file vusers.db
- vusers.db: Berkeley DB (Hash, version 8, native byte-order)
- //查看vsusers.db
(2) .创建FTP根目录及虚拟用户映射的系统用户
- [root@ns vsftpd]# useradd -d /var/vuser vuser
- [root@ns vsftpd]# ll -d /var/vuser
- drwx------ 3 vuser vuser 4096 Oct 9 22:54 /var/vuser
- //文件属性为700,别的用户不能访问到,因此要修改属性为755
- [root@ns vsftpd]# chmod 755 /var/vuser/
(3).建立支持虚拟用户的PAM认证文件
- [root@ns vsftpd]# vim /etc/pam.d/vusers
- 在里面添加:
- auth required pam_userdb.so db=/etc/vsftpd/vusers
- account required pam_userdb.so db=/etc/vsftpd/vusers
- 保存退出
(4).编辑主配置文件vsftpd.conf,在文件中添加支持虚拟用户
[root@ns vsftpd]# vim vsftpd.conf
添加如下:
- 先关闭ssl以免影响ssl_enable=NO
- pam_service_name=vusers
- #For virtual users
- anon_umask=022
- guest_enable=YES
- guest_username=vuser
保存退出,重启服务
- [root@ns vsftpd]# service vsftpd restart
测试一下
- [root@ns vsftpd]# ftp 172.16.7.1
(5).为个别虚拟用户建立独立的配置文件
文中以tom和jerry为例
在vsftpd.conf文件中添加用户配置目录支持
为用户tom,jerry建立独立的配置目录及文件
配置文件名和用户名同名
- [root@ns vsftpd]# mkdir vuser_dir
- [root@ns vsftpd]# vim vsftpd.conf
修改配置文件,添加一行
- user_config_dir=/etc/vsftpd/vuser_dir
保存退出
- [root@ns vsftpd]# cd vuser_dir/
- [root@ns vuser_dir]# touch tom jerry
- [root@ns vuser_dir]# vim tom
- //编辑tom的限制条件
- anon_upload_enable=YES
- #anon_mkdir_enable=YES
- anon_other_write_enable=YES
- [root@ns vuser_dir]# vim jerry
- //编辑jerry的限制条件
- anon_upload_enable=NO
- #anon_mkdir_enable=NO
- anon_other_write_enable=NO
(6).重新加载vsftpd配置
- service vsftpd reload | service vsftpd restart
(7).使用虚拟FTP账户访问测试
此处不再详细举例
(8).优化虚拟用户之编译安装pam模块
安装一个mysql模块可以更加方便快捷的对用户进行管理
下载 pam_mysql-0.7RC1.tar.gz
- [root@ns ~]# tar xvf pam_mysql-0.7RC1.tar.gz
- //解压安装
- [root@ns ~]# cd pam_mysql-0.7RC1
- [root@ns pam_mysql-0.7RC1]# ./configure --with-mysql=/usr/local/mysql
- //使用此模块的前提是机器上面安装了mysql才可以
- 下面开始编译安装
- [root@ns pam_mysql-0.7RC1]# make && make install
- [root@ns pam_mysql-0.7RC1]# mysql -uroot -predhat
只要有pam_mysql.so这个模块就可以用mysql做认证
- mysql> CREATE DATABASE vsftpd;
- //创建vsftpd数据库
- mysql> USE vsftpd;
- //切换数据库
- mysql> CREATE TABLE vusers (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Name VARCHAR(30) NOT NULL, Password CHAR(48) NOT NULL);
- //创建表
- 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)
//查看字段确保无误
- mysql>insert into vusers (Name,Password) VALUES ('yang',password('redhat')),('yadi',password('redhat'));
- //创建两个用户yang和yadi,密码都是redhat
- Database changed
- mysql> GRANT SELECT ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY '123456';
- Query OK, 0 rows affected (0.04 sec)
- mysql> GRANT SELECT ON vsftpd.* TO 'vsftpd'@'127.0.0.1' IDENTIFIED BY '123456';
- Query OK, 0 rows affected (0.00 sec)
- mysql> FLUSH PRIVILEGES;
- Query OK, 0 rows affected (0.00 sec)
- //给用户vsftpd查询等权限,这个根据实际情况。。。。
- //退出mysql
- [root@ns ~]# vim /etc/pam.d/vusers.mysql
- 增加如下内容:
- auth required pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=vusers usercolumn=Name passw dcolumn=Password crypt=2
- account required pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=vusers usercolumn=Name passw dcolumn=Password crypt=2
- [root@ns ~]# vim /etc/vsftpd/vsftpd.conf
- 修改主配置文件,修改如下:
- pam_service_name=vuser.mysql
- [root@ns ~]# service vsftpd restart
- //重启服务
用刚才在服务器中创建的用户名登录,此时实验结束