文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>用pam_mysql做vsftp身份认证 by 小方

用pam_mysql做vsftp身份认证 by 小方

时间:2009-04-15  来源:rha030

文件: 用pam_mysql做vsftp身份认证_v2.pdf
大小: 378KB
下载: 下载


用pam_mysql做vsftp身份认证


声明

author: Fang Yunlin

MSN: [email protected]

GTalk: [email protected]

E-mail: [email protected]

Site: http://www.afang.org/


本人实验文档,非权威指南,仅供参考。

提倡良好的学术氛围,转载请注明原出处。


15 Apr, 2009

第2次修改


环境

OS: Red Hat Enterprise Linux 5 update 3

Network: 192.168.122.101 / 24


步骤


首先要说下,pam_mysql在fedora上直接yum下来就可以了。

但是目前还没有加入RHEL5.3,需要自行编译。

这里是官方网站。

http://pam-mysql.sourceforge.net/


准备编译环境并编译pam_mysql.so


wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz

yum install mysql-devel pam-devel gcc gcc-c++

tar zxvf pam_mysql-0.7RC1.tar.gz

cd pam_mysql-0.7RC1

ln -s /usr/include/openssl/md5.h /usr/include/

如果不做这个软链接,则configure的时候找不到md5.h头文件。


./configure –with-openssl

如果不加—with-openssl参数,则不能正常支持md5密码校验方式。


编译完的pam_mysql.so放在 /usr/lib/security下。

ln -s /usr/lib/security/pam_mysql.so /lib/security/

/lib/security才是pam的默认路径。


创建数据库信息

[root@localhost pam_mysql-0.7RC1]# mysql -u root -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 3

Server version: 5.0.45 Source distribution


Type 'help;' or '\h' for help. Type '\c' to clear the buffer.


mysql> CREATE DATABASE vsftp;

Query OK, 1 row affected (0.00 sec)


mysql> GRANT ALL PRIVILEGES ON vsftp.* TO vsftp@"%" IDENTIFIED BY 'redhat';

Query OK, 0 rows affected (0.00 sec)


mysql> use vsftp;

Database changed

mysql> CREATE TABLE account (

-> `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

-> `user` VARCHAR(128) NOT NULL UNIQUE,

-> `passwd` VARCHAR(128) NOT NULL

-> );

Query OK, 0 rows affected (0.02 sec)

上面命令创建帐号表。


mysql> CREATE TABLE log (

-> `msg` VARCHAR(128),

-> `user` VARCHAR(128),

-> `pid` INT,

-> `host` VARCHAR(128),

-> `rhost` VARCHAR(128),

-> `time` TIMESTAMP

-> );

Query OK, 0 rows affected (0.00 sec)

上面命令创建记录表,记录用户访问记录。


mysql> CREATE TRIGGER trigger_format_passwd

-> BEFORE INSERT

-> ON account

-> FOR EACH ROW

-> SET NEW.passwd = md5(NEW.passwd);

Query OK, 0 rows affected (0.00 sec)


mysql> CREATE TRIGGER trigger_format_passwd_update

-> BEFORE UPDATE

-> ON account

-> FOR EACH ROW

-> SET NEW.passwd = md5(NEW.passwd);

Query OK, 0 rows affected (0.00 sec)

上面两条命令创建触发器,自动把更新的密码用md5加密方式加密。


mysql> quit

Bye

[root@localhost pam_mysql-0.7RC1]#

创建pam认证规则

内容如下

[root@localhost pam_mysql-0.7RC1]# cat /etc/pam.d/vsftpd_mysql

auth required pam_mysql.so user=vsftp passwd=redhat host=192.168.122.101 db=vsftp table=account usercolumn=user passwdcolumn=passwd crypt=md5 sqllog=true logtable=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time

account required pam_mysql.so user=vsftp passwd=redhat host=192.168.122.101 db=vsftp table=account usercolumn=user passwdcolumn=passwd crypt=md5 sqllog=true logtable=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time

[root@localhost pam_mysql-0.7RC1]#


user

连接mysql的用户

passwd

连接mysql的用户密码

host

mysql服务器地址,格式可以是

ip

ip:port

unix socket,比如/tmp/mysql.sock

db

存放vsftp验证信息的数据库

table

用户信息表

usercolumn

用户信息表用户名列

passwdcolumn

用户信息表密码列

crypt

加密方式,一共支持

1 / plain 明文密码。

2 / Y crypt加密方式,在mysql查询语句中对应encrypt函数。

3 / mysql passwd加密方式,在mysql查询语句中对应password函数。

4 / md5 md5加密方式,在mysql查询语句中对应md5函数。

5 / sha1 sha1加密方式,在mysql查询语句中对应sha1函数。

如果RHEL5上要使用3方式进行加密,务必把/etc/my.cnf里面的old_passwords=1改成old_passwords=0,否则mysql会使用老的加密算法,导致和pam_mysql.so密码验证不成功。

logtable

日志表

logmsgcolumn

日志表消息列,记录日志消息主体。

logusercolumn

日志表用户列,记录访问ftp的用户。

logpidcolumn

日志表pid列,记录调用pam_mysql.so的进程的pid。

loghostcolumn

日志表host列,记录ftp服务器ip。

logrhostcolumn

日志表rhost列,记录ftp客户端ip。

logtimecolumn

日志表时间列,记录用户访问的时间。



上面配置我不做过多解释。大家请看pam_mysql的README,有很详尽的解释。


修改vsftpd配置文件,指定由上述pam配置文件来进行用户身份验证

/etc/vsftpd/vsftpd.conf配置如下

anonymous_enable=YES

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=YES


pam_service_name=vsftpd_mysql

guest_enable=YES

guest_username=ftp

user_config_dir=/etc/vsftpd/userconfig


userlist_enable=YES

tcp_wrappers=YES


测试

启动ftp服务

[root@localhost vsftpd]# service vsftpd start

Starting vsftpd for vsftpd: [ OK ]

[root@localhost vsftpd]# chkconfig --level 35 vsftpd on

[root@localhost vsftpd]#


添加测试用户

[root@localhost vsftpd]# mkdir userconfig

[root@localhost vsftpd]# vim userconfig/department01

[root@localhost vsftpd]# cat userconfig/department01

local_root=/var/ftp


[root@localhost vsftpd]# mysql -u vsftp -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 12

Server version: 5.0.45 Source distribution


Type 'help;' or '\h' for help. Type '\c' to clear the buffer.


mysql> use vsftp;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A


Database changed

mysql> INSERT INTO account (user, passwd) VALUES ("department01", "redhat");

Query OK, 1 row affected (0.00 sec)


mysql> select * from account;

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

| id | user | passwd |

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

| 1 | department01 | e2798af12a7a0f4f70b4d69efbc25f4d |

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

1 row in set (0.01 sec)


mysql> quit

Bye

[root@localhost vsftpd]#


测试登录

[root@localhost vsftpd]# ftp 192.168.122.101

Connected to 192.168.122.101.

220 (vsFTPd 2.0.5)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (192.168.122.101:root): department01

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> ls

227 Entering Passive Mode (192,168,122,101,240,33)

150 Here comes the directory listing.

drwxr-xr-x 2 0 0 4096 Dec 13 2007 pub

226 Directory send OK.

ftp>


查看日志

[root@localhost vsftpd]# mysql -u vsftp -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 17

Server version: 5.0.45 Source distribution


Type 'help;' or '\h' for help. Type '\c' to clear the buffer.


mysql> use vsftp;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A


Database changed

mysql> select * from log;

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

| msg | user | pid | host | rhost | time |

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

| AUTHENTICATION FALURE (FIRST_PASS) | redhat | 24364 | 127.0.0.1 | localhost.localdomain | 2009-04-15 10:27:45 |

| AUTHENTICATION FAILURE | redhat | 24364 | 127.0.0.1 | localhost.localdomain | 2009-04-15 10:27:45 |

| AUTHENTICATION FALURE (FIRST_PASS) | department01 | 24385 | 127.0.0.1 | 192.168.122.101 | 2009-04-15 10:33:38 |

| AUTHENTICATION SUCCESS | department01 | 24385 | 127.0.0.1 | 192.168.122.101 | 2009-04-15 10:33:38 |

| QUERYING SUCCESS | department01 | 24385 | 127.0.0.1 | 192.168.122.101 | 2009-04-15 10:33:38 |

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

5 rows in set (0.00 sec)


mysql>



实验目的达成。



后记

其实有一个问题已经存在很久了——你如果用baidu搜索一些技术关键词,基本是前基业都是同一样的内容,连错都错一样。而且这些网站其实很少有原创的内容,他们为了增加流量,达取他们不可告人的目的(比如赚取广告费),就拼命的摘抄别人的文章,大多数还不注明出处。


我觉得这样很不好。现在很多社区的朋友为了大家辛苦为大家撰写文章,大家要感谢他们,而一些学术道德沦丧败坏的人却为了一己之私,用没有意义的抄袭行为破坏着Linux中文学术环境(用google英文搜索技术关键字,往往能搜到更有用的信息,很少有重复的信息)。


我不觉得我自私,我很乐意和大家分享我的学习心得。不然我也不会把我的学习笔记放出来。只是这个和尊重作者没有直接联系,我提倡大家,尤其是有blog的朋友,为了营造一个良好的技术学习环境,自己和国内社区朋友,尽量少做动机不纯的摘抄,摘抄注明远处出,多尊重学术道德,多感谢广大为大家撰写文章的朋友。

相关阅读 更多 +
排行榜 更多 +
跳跃大联盟

跳跃大联盟

休闲益智 下载
瓜米

瓜米

游戏工具 下载
克隆人联盟

克隆人联盟

动作格斗 下载