LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > Linux配置 >

vsftp+pam+mysql整合虚拟帐号登录

时间:2012-08-13 10:37来源:未知 编辑:admin 点击:
基本原理: vsftp的有三种用户类型,分别是匿名用户、系统用户、虚拟用户 某种意义上来说,匿名用户也是系统用户,只系统用户的一个映射。而公开的ftp(比如虚拟主机),都不会使

基本原理:

vsftp的有三种用户类型,分别是匿名用户、系统用户、虚拟用户
某种意义上来说,匿名用户也是系统用户,只系统用户的一个映射。而公开的ftp(比如虚拟主机),都不会使用系统用户作为ftp的帐号,而更多的采用了虚拟用户,这样能保证系统的安全性
使用虚拟帐号,也就需要一个存放虚拟帐号的容器,可以是一个文本列表,也可以是活动目录,而更多的是使用数据库来存放
在vsftp中,无论系统用户还是虚拟用户,都是使用pam作为用户验证手段的,而在pam中默认是不支持mysql模块的,所以要手动编译安装mysql模块

整体思路:

以pam为用户认证的中间层调用和验证mysql中的虚拟用户数据。在vsftp中开启虚拟用户认证,认证方法调用pam中的mysql认证和授权模块,将虚拟用户存放于mysql中。

1. 安装vsftp和mysql

[root@localhost ~]#yum -y install vsftpd mysql-server mysql-devel pam-devel
在PAM中默认是没有mysql认证模块的,所以要下载源码自己手动安装
tar -xf pam_mysql-0.7RC1.tar.gz -C /usr/src/
cd /usr/src/pam_mysql-0.7RC1
./configure --with-mysql=/usr/bin/mysql_config
make && make install

2. 创建数据库

service mysqld start
mysql -uroot -p
首先先创建vsftp的数据库
mysql> CREATE DATABASE vsftpd;

然后创建一个用户表
mysql> use vsftpd
mysql> create table users (
id int AUTO_INCREMENT NOT NULL,
name char(20) NOT NULL UNIQUE KEY,
passwd char(48) NOT NULL,
primary key(id));

添加vsftpd的数据库帐号
mysql> insert into users(name,passwd) values('lustlost',password('123456')); 

然后创建vsftpd的数据库账户,为了安全,只授予查询权限
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';

3. 修改vsftp配置文件

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
[root@localhost ~]# grep -v "^#" /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES 
local_enable=YES 
write_enable=YES 
local_umask=022 
anon_upload_enable=YES 
anon_mkdir_write_enable=YES 
dirmessage_enable=YES 
xferlog_enable=YES 
connect_from_port_20=YES 
xferlog_std_format=YES 
chroot_local_user=YES 
listen=YES
pam_service_name=vsftpd.mysql #主要修改这一行,指定使用vsftpd.mysql这个pam配置文件调用pam认证 
guest_enable=YES #开启来宾账户 
guest_username= mysqlftp #映射来宾账户,这个账户将会被映射为mysql数据库中的账户 
user_config_dir=/etc/vsftpd/vsftpd_user_conf #创建mysql每个虚拟用户的配置目录

编辑pam配置文件,参考我的配置

[root@localhost ~]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.mysql #复制原来的vsftp认证方法,在此基础上添加mysql认证

编辑PAM认证配置文件

[root@localhost ~]# vim /etc/pam.d/vsftpd.mysql
    #%PAM-1.0 
    session         optional        pam_keyinit.so    force revoke 
    #第一步认证首先使用数据库认证,如果通过不再检查下面其它认证,直接登陆,通不过就使用下面的认证
    auth            sufficient      /usr/lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdpasswdcolumn=passwd crypt=2 
    #数据库认证通不过,就采用vsftp默认的其余认证方法
    auth            required        pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed  
    auth            required        pam_shells.so
    auth            include         password-auth 
    #授权和认证也是一样的 
    account         sufficient      /usr/lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdpasswdcolumn=passwd crypt=2  
    account         include         password-auth 
    session         required        pam_loginuid.so 
    session         include         password-auth
以上的PAM配置既可以使用mysql数据库中的用户认证,也可以使用系统用户认证,如果只希望使用mysql数据库中的用户认证的话,可以讲系统认证的配置相关行删除

4. 添加mysql用户认证的虚拟用户

[root@localhost ~]# useradd mysqlftp -d /var/ftp/pub/mysqlftp

修改mysql虚拟账户的权限

[root@localhost ~]# chown mysqlftp:mysqlftp -R /var/ftp/pub/mysqlftp

创建mysql虚拟账户配置文件夹

[root@localhost ~]# mkdir /etc/vsftpd/vsftpd_user_conf

在此文件夹下配置每个mysql虚拟账户的配置文件

[root@localhost vsftpd_user_conf]# touch lustlost

local_root=/var/ftp/pub/mysqlftp/lustlost #其余配置可以自己按需求写,这里只限制了mysql虚拟用户的个人文件夹

在lustlost目录中创建一个文件验证结果

[root@localhost vsftpd_user_conf]# touch /var/ftp/pub/mysqlftp/lustlost/l.txt

也可以使用quota实现用户的磁盘配额,也结合php,apache,可以实现虚拟主机的搭建。

转载请保留固定链接: https://linuxeye.com/configuration/742.html

------分隔线----------------------------
标签:mysqlvsftpPAM虚拟帐号
栏目列表
推荐内容