对于FTP服务器,登陆的用户有3类:匿名用户、系统用户和虚拟用户。对于匿名用户和系统用户身份的认证是通过/etc/passwd /etc/shadow来认证的。系统用户是可以直接登陆系统的用户,用户的账号和密码在网络中传输,是明文的,对于系统的安全来说是一个极大的漏洞。而实现虚拟用户的认证在很大程度上加强了安全性。虚拟用户可以有很多个,为了方便管理,MySQL数据库就首当其冲了
我们知道在系统用户认证的过程中对权限的控制通过pam_unix.so和/etc/pam.d/system-auth这两个pam模块。同样对于虚拟用户而言,vsftp和mysql的连接也需要用到pam模块即pam_mysql.so ,将登陆vsftpd的账号放在Mysql的表当中。
本文要点:
1、基于mysql的虚拟用户
2、为每个虚拟用户定制权限
3、系统用户和虚拟用户同时可以访问
4、FTP服务器的访问控制
<服务器IP:172.16.20.1 测试机IP172.16.100.150>
一、基于mysql的虚拟用户
1、安装pam_mysql-0.7RC1
安装好开发环境和Mysql(源码编译),过程就不重复了,mysql的编译过程参考 下载 pam-mysql的模块
2、准备数据库及相关表
建立名为vsftpd的数据库来存放相关虚拟用户的帐号,创建2个虚拟用户magedu,marion
密码分别为12345 RedHat
# id magedu //保证要创建的虚拟用户不是系统用户id: magedu: No such user
# id marion
id: marion: No such usermysql> create database vsftpd; mysql> use vsftpd; mysql> create table users ( -> id int not null auto_increment primary key, -> name char(15) not null unique key, -> password char(48) not null -> ); mysql> desc users; +----------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(15) | NO | UNI | NULL | |
| password | char(48) | NO | | NULL | |
+----------+----------+------+-----+---------+----------------+//添加测试的虚拟用户,其密码采取加密存放的方式 mysql> insert into users (name,password) values ('magedu',password('123456')),('marion',password('redhat')); mysql> grant select on vsftpd.* to vsftpd@localhost identified by '123456'; mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by '123456'; mysql> flush privileges; mysql> select * from users;
+----+--------+-------------------------------------------+
| id | name | password |
+----+--------+-------------------------------------------+
| 1 | magedu | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 2 | marion | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
+----+--------+-------------------------------------------+