1、要事先安装开发环境用到的包
Desktop Platform Development Development tools
[root@linux ~]# yum -y install mysql-server mysql-devel pam_mysql
[root@linux ~]# service mysqld start
启动mysql建立存放用户信息的数据库
<a href="http://s3.51cto.com/wyfs02/M00/23/A9/wKioL1M9iJGTi6eIAAEeXyB3UsY402.jpg" target="_blank"></a>
2、授权管理此数据库用户
mysql> grant select on share_ftp.* to linux@localhost identified by 'vsftp';
mysql> grant select on share_ftp.* to [email protected] identified by 'vsftp';
mysql> flush privileges;
3、创建存放用户信息的表
mysql>create table users ( id int AUTO_INCREMENT NOT NULL, name char(20) binary NOT NULL,password char(48) binary NOT NULL, primary key(id));
插入两个用户帐号信息
mysql>insert into users(name,password)values('ftpuser2',password('ftpuser2'));
mysql>insert into users(name,password)values('ftpuser1',password('ftpuser1'));
<a href="http://s3.51cto.com/wyfs02/M01/23/A9/wKioL1M9iS7jY5i-AAGH4V-ZdrM018.jpg" target="_blank"></a>
4、建立pam认证所需文件
#vi /etc/pam.d/vsftpd.mysql
这是一个事先不存在的文件,需要时创建即可
添加如下两行
1
2
<code>auth required </code><code>/lib64/security/pam_mysql</code><code>.so user=linux </code><code>passwd</code><code>=linux host=localhost db=share_ftp table=</code><code>users</code> <code>usercolumn=name passwdcolumn=password crypt=2</code>
<code>account required </code><code>/lib64/security/pam_mysql</code><code>.so user=linux </code><code>passwd</code><code>=linux host=localhost db=share_ftp table=</code><code>users</code> <code>usercolumn=name passwdcolumn=password crypt=2</code>
注:
关于此文件的具体说明,请查看:vim /usr/share/doc/pam_mysql-0.7/README
需要安装pam_msyql形式的rpm的包,对上面两个参数支持
注意:由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。
例:
登录到mysql后
<a href="http://s3.51cto.com/wyfs02/M02/23/A9/wKioL1M9icWAKKrgAATwpM7k9DA567.jpg" target="_blank"></a>
<code>#useradd -s /sbin/nologin -d /var/ftproot vuser</code>
<code>#chmod go+rx /var/ftproot</code>
在此处添加vuser用户是为了数据库中添加的ftpuser1和ftpuser2指定默认登录后的目录。(用于限定不同虚拟用户的权限)
修改FTP的配置文件,在其中添加上guest_enable=yes,guest_username=vuser(之前通过useradd添加的那个用户名),pam_service_name=vsftpd.mysql(默认从/etc/pam.d/开始查找)
<a href="http://s3.51cto.com/wyfs02/M00/23/A9/wKioL1M9ilaArdacAAOTZ_rtloY514.jpg" target="_blank"></a>
5、启动服务进行测试
<code>#service vsftpd start</code>
查看vuser用户的目录
<a href="http://s3.51cto.com/wyfs02/M02/23/A9/wKioL1M9iyGQlHurAACtQNIJCtQ511.jpg" target="_blank"></a>
当使用ftpuser1@localhost登录后
<a href="http://s3.51cto.com/wyfs02/M00/23/AA/wKioL1M9i0qy-aPjAAEnGwQw9Rk258.jpg" target="_blank"></a>
ftpuser2看到的内容也是与ftpuer1相同。
而通过本地系统添加的用户是无法登录的,如图
<a href="http://s3.51cto.com/wyfs02/M01/23/AA/wKioL1M9i3_AKDVJAAHuwYuzqzY045.jpg" target="_blank"></a>
6、下面将对不同的虚拟用户做限定,ftpuser1是可以上传,下载,删除,ftpuser2只能上传。
在配置文件(/etc/vsftpd/vsftpd.conf)中添加
user_config_dir=/etc/vsftp/vusers_config
而在/etc/vsftp/vusers_config目录中添加两个与数据库中添加的两个用户相同的文件。
注:关于vsftpd.conf文件可用的更多参数请man vsftpd.conf
<a href="http://s3.51cto.com/wyfs02/M00/23/A9/wKiom1M9i_vgpemXAAHlhL8ONDY860.jpg" target="_blank"></a>
说明:由于在主配置文件中,是对所有的用户都生效,在这里,使用这种方法,完全可以做到基于同类用户赋予不同限制。
==========================================完===========================================
ps:
1、这个实验仅用于说明,完全可以将用户账户存放于数据库中统一管理。
2、基于pam的库实现与mysql的连接。
本文转自 jinlinger 51CTO博客,原文链接:http://blog.51cto.com/essun/1390189,如需转载请自行联系原作者