Chinaunix

标题: vsftp1.2+mysql4.1+pam_mysql0.5在RedHat AS4(32bit)下好像是有bug [打印本页]

作者: lingniao    时间: 2005-11-17 12:11
标题: vsftp1.2+mysql4.1+pam_mysql0.5在RedHat AS4(32bit)下好像是有bug
小弟最近在研究在AS4在用VSftp和MySQL通过PAM-MySQL做虚拟用户,结果怎么登陆都不成功。
vsftpd.conf
guest_enble=yes
guest_username_vsftpguest
pam_service_name=vsftpvu
MySQL数据库配置我用vsftpguest本地登陆验证过了,肯定不会有问题.

/etc/PAM.d/vsftptvu
auth required pam_mysql.so user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
  account required pam_mysql.so user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
关健问题就出在PAM_MySQL上,如果用PAM_MySQL0.5中的pam_mysql.so,测试时会在/var/log/messege里显示
  PAM_MySQL:MySQL err Client does not support authentication protocal requested by server;considr upgrading MySQL client
而如果用PAM_MySQL0.6则根本就没有任何的显示. PAM_MySQL0.7更是MAKE不了。

看来我只能改用pureftp才能解决问题,郁闷ing............................
高手指教!!!

[ 本帖最后由 lingniao 于 2005-11-17 12:13 编辑 ]
作者: wolfg    时间: 2005-11-17 21:30
PAM_MySQL0.7 MAKE不了,报什么错?你是怎么做的,能否说说?

crypt=2,用这种认证方式时,你的表里的password是怎么生成的。

仔细看看源代码里的INSTALL和README文件
作者: lingniao    时间: 2005-11-18 14:51
mysql -p
  mysql>create database vsftpvu;
  mysql>use vsftpdvu;
  mysql>create table users(name char(16) binary,passwd char(16) binary);
  mysql>insert into users (name,passwd) values ('xiaotong',password('qqmywife'));
  mysql>insert into users (name,passwd) values ('xiaowang',password('ttmywife'));
  mysql>quit
 然后,授权vsftpguest可以读vsftpvu数据库的users表。执行以下命令:
   mysql -u root mysql -p
  mysql>grant select on vsftpvu.users to vsftpguest@localhost identified by 'i52serial0';
  mysql>quit

  然后我用vsftpguest本地登陆,
      mysql -pi52serial0 vsftpdvu
  mysql>select * from users;
  成功,列出xiaotong、xiaowang和加密后的密码

我参考的文章是http://www.21ds.net/article/_32/2004-08/09/356_1.html
且做了少许改动。vsftpdguest改成vsftpguest,vsftpdvu改成vsftpvu,
我认为文章中少了一句话在/etc/vsftpd/vsftp.conf/中,于是我加入pam_service_name=vsftpvu,并把原来的pam_service_name注释掉。
作者: wolfg    时间: 2005-11-18 15:12
请仔细看源代码里的README文件。
使用crypt=2时, pam-mysql加密密码的password函数和你在sql语句用户的password函数算法是不一样的
作者: lingniao    时间: 2005-11-19 19:25
标题: 回复 4楼 wolfg 的帖子
[root@ASserver pam_mysql-0.7pre3]# make
/bin/sh ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/security -I/usr/include    -g -O2 -I/usr/local/mysql/include/mysql    -c pam_mysql.c
gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/security -I/usr/include -g -O2 -I/usr/local/mysql/include/mysql -c pam_mysql.c  -fPIC -DPIC -o .libs/pam_mysql.o
In file included from pam_mysql.c:124:
/usr/include/md5.h:27: syntax error before "UINT4"
/usr/include/md5.h:30: syntax error before '}' token
/usr/include/md5.h:38: syntax error before "PROTO_LIST"
/usr/include/md5.h:39: syntax error before "PROTO_LIST"
/usr/include/md5.h:41: syntax error before "PROTO_LIST"
/usr/include/md5.h:43: syntax error before "PROTO_LIST"
make: *** [pam_mysql.lo] Error 1
这是MAKE 0.7pre3时的错误信息
还有我认为pam-mysql和mysql里所用的password函数应该是一样的才对,不然开发者还让我们怎么用这个模块呢?
作者: wolfg    时间: 2005-11-21 11:00
试试这样编译
  1. # ./configure --with-openssl
  2. # make install
复制代码

原帖由 lingniao 于 2005-11-19 19:25 发表
我认为pam-mysql和mysql里所用的password函数应该是一样的才对,不然开发者还让我们怎么用这个模块呢?

试试就知道了
作者: lingniao    时间: 2005-11-21 20:33
厉害啊,老大,真的是这样!!!,高手,佩服佩服。。。。。。。
作者: lingniao    时间: 2005-11-21 21:30
不过呢,偶现在又有新的问题,我在make 编译vsftpd-2.0.3的时候,如果改动builddeps.h中undef  VSF_BUILD_SSL为define VSF_BUILD_SSL,那么就会出错
/usr/local/vsftpd-2.0.3#make
gcc -c ssl.c -O2 -Wall -W -Wshadow -idirafter dummyinc
In file included from /usr/include/openssl/ssl.h:179,
from ssl.c:26:
/usr/include/openssl/kssl.h:72:18: krb5.h: No such file or directory
In file included from /usr/include/openssl/ssl.h:179,
from ssl.c:26:
/usr/include/openssl/kssl.h:134: syntax error before "krb5_enctype"
/usr/include/openssl/kssl.h:136: syntax error before '*' token
/usr/include/openssl/kssl.h:137: syntax error before '}' token
/usr/include/openssl/kssl.h:149: syntax error before "kssl_ctx_setstring"
/usr/include/openssl/kssl.h:149: syntax error before '*' token
/usr/include/openssl/kssl.h:150: syntax error before '*' token
/usr/include/openssl/kssl.h:151: syntax error before '*' token
/usr/include/openssl/kssl.h:151: syntax error before '*' token
/usr/include/openssl/kssl.h:152: syntax error before '*' token
/usr/include/openssl/kssl.h:153: syntax error before "kssl_ctx_setprinc"
/usr/include/openssl/kssl.h:153: syntax error before '*' token
/usr/include/openssl/kssl.h:155: syntax error before "kssl_cget_tkt"
/usr/include/openssl/kssl.h:155: syntax error before '*' token
/usr/include/openssl/kssl.h:157: syntax error before "kssl_sget_tkt"
/usr/include/openssl/kssl.h:157: syntax error before '*' token
/usr/include/openssl/kssl.h:159: syntax error before "kssl_ctx_setkey"
/usr/include/openssl/kssl.h:159: syntax error before '*' token
/usr/include/openssl/kssl.h:161: syntax error before "context"
/usr/include/openssl/kssl.h:162: syntax error before "kssl_build_principal_2"
/usr/include/openssl/kssl.h:162: syntax error before "context"
/usr/include/openssl/kssl.h:165: syntax error before "kssl_validate_times"
/usr/include/openssl/kssl.h:165: syntax error before "atime"
/usr/include/openssl/kssl.h:167: syntax error before "kssl_check_authent"
/usr/include/openssl/kssl.h:167: syntax error before '*' token
/usr/include/openssl/kssl.h:169: syntax error before "enctype"
In file included from ssl.c:26:
/usr/include/openssl/ssl.h:909: syntax error before "KSSL_CTX"
/usr/include/openssl/ssl.h:931: syntax error before '}' token
ssl.c: In function `ssl_init':
ssl.c:46: warning: declaration of `options' shadows a global declaration
/usr/include/openssl/ssl.h:925: warning: shadowed declaration is here
make: *** [ssl.o] Error 1
请问这该如何是好???
作者: wolfg    时间: 2005-11-22 09:34
用rpm命令检查有没有安装这个包 krb5-devel
rpm -qa |grep -i krb5-devel

没有的话,安装这个包后再试
作者: lingniao    时间: 2005-11-23 20:22
标题: 回复 9楼 wolfg 的帖子
部分rpm -ql krb5-devel的显示如下 ,我在想是不是这个软件包的目录和vsftpd要示的有点区别?
[root@ASserver root]# rpm -ql krb5-devel
/etc/profile.d/krb5.csh
/etc/profile.d/krb5.sh
/usr/kerberos
/usr/kerberos/bin
/usr/kerberos/bin/krb5-config
/usr/kerberos/bin/sclient
/usr/kerberos/include
/usr/kerberos/include/asn.1
/usr/kerberos/include/com_err.h
/usr/kerberos/include/gssapi
/usr/kerberos/include/gssapi/gssapi.h
/usr/kerberos/include/gssapi/gssapi_generic.h
/usr/kerberos/include/gssapi/gssapi_krb5.h
/usr/kerberos/include/kerberosIV
/usr/kerberos/include/kerberosIV/des.h
/usr/kerberos/include/kerberosIV/kadm.h
/usr/kerberos/include/kerberosIV/krb.h
/usr/kerberos/include/kerberosIV/krb_err.h
/usr/kerberos/include/kerberosIV/mit-copyright.h
/usr/kerberos/include/krb5.h
/usr/kerberos/include/libpty.h
/usr/kerberos/include/mit-sipb-copyright.h
/usr/kerberos/include/port-sockets.h
/usr/kerberos/include/profile.h
/usr/kerberos/lib/libcom_err.a
/usr/kerberos/lib/libcom_err.so
/usr/kerberos/lib/libdes425.a
/usr/kerberos/lib/libdes425.so
/usr/kerberos/lib/libdyn.a
/usr/kerberos/lib/libdyn.so
/usr/kerberos/lib/libgssapi_krb5.a
作者: wolfg    时间: 2005-11-24 09:57
我的RH as 4上得到的结果和你的不一样
krb5-devel的年点文件在/usr/include下

try
ln -s /usr/kerberos/include/krb5.h /usr/include/krb5.h
作者: lingniao    时间: 2005-11-26 14:43
标题: 回复 11楼 wolfg 的帖子
还是不行,我在想可能是我安装系统的系统开发包什么的没有装全。不管他了,我系统已经重装,再试ing...
还有就是我今天才想起来,我以前的系统是AS3,2.4的内核。现在是AS4,2。6的内核了。看看怎么样。

[ 本帖最后由 lingniao 于 2005-11-26 14:45 编辑 ]
作者: goodboy1881    时间: 2005-11-29 10:07
create table users(name char(16) binary,passwd char(16) binary);

你如果出现用 crypt=2 验证不能通过的情况,那么问题就是出现在这里。
你创建这个table的时候passwd只用了16个char,实际上 password算出来的数字有40个char,所以一定会出现验证不能通过的问题.
我就奇怪了为什么网上的文章都写是16个char呢,应该是41 或者40才对啊。
不信你自己验证一下。

  1. SELECT ENCRYPT('mypass'), PASSWORD('mypass'), MD5('mypass');
复制代码

[ 本帖最后由 wolfg 于 2005-11-29 10:15 编辑 ]
作者: lingniao    时间: 2005-12-01 22:45
标题: 回复 13楼 goodboy1881 的帖子
很神奇,如果insert的时候不用passwd()函数,采用明文存储,而pam验证文件仍crypt=2时,居然神奇般的通过了。
char(40)还是一样,进不去。
这是为啥呢,我真是被搞晕了!!!!!!
作者: wolfg    时间: 2005-12-01 22:58
原帖由 lingniao 于 2005-12-1 22:45 发表
很神奇,如果insert的时候不用passwd()函数,采用明文存储,而pam验证文件仍crypt=2时,居然神奇般的通过了。
char(40)还是一样,进不去。
这是为啥呢,我真是被搞晕了!!!!!!


应该是char(41),你可以用这个sql语句看一下password函数生成密码的长度
select password('123');

不妨设大一点,比如char(64)或者char(48)

至于,crypt=2时明码可以登录,我觉得不大可能,我可以也试验一下看看。

[ 本帖最后由 wolfg 于 2005-12-17 21:29 编辑 ]
作者: lingniao    时间: 2005-12-01 23:39
标题: 回复 15楼 wolfg 的帖子
是我错了,我把crypt写成了cryt.
可是,要是crypt=2,还是进不去(我把passwd字段大小设成多少都不起作用),只能用crypt=0,或者不写,或者错写:)
而且我还做了试验:
create table cool(id char(64)binary);
insert into cool(id)values(password('1234567890'));
select * from cool;
显示
+------------------+
| id               |
+------------------+
| 19b68057189b027f |
+------------------+
1 row in set (0.00 sec)
明明就是16个字符嘛!!!
我晕..............................................

[ 本帖最后由 lingniao 于 2005-12-2 00:04 编辑 ]
作者: wolfg    时间: 2005-12-02 20:14
你的mysql和pam_mysql的版本是多少?

你看我试验的结果:
mysql> select password('1234567890');
+-------------------------------------------+
| password('1234567890')                    |
+-------------------------------------------+
| *6B5EDDE567F4F29018862811195DBD14B8ADDD2A |
+-------------------------------------------+
1 row in set (0.14 sec)

作者: lingniao    时间: 2005-12-03 16:48
标题: 回复 17楼 wolfg 的帖子
[root@RHEL4 ~]# rpm -qa|grep mysql
mysql-4.1.7-4.RHEL4.1
mod_auth_mysql-2.6.1-2.1
php-mysql-4.3.9-3.1
mysql-bench-4.1.7-4.RHEL4.1
libdbi-dbd-mysql-0.6.5-10.RHEL4.1
mysqlclient10-3.23.58-4.RHEL4.1
mysql-devel-4.1.7-4.RHEL4.1
mysql-server-4.1.7-4.RHEL4.1

pam_mysql还是用你的方法编译的0.7pre

mysql> select password('1234567890');
+------------------------+
| password('1234567890') |
+------------------------+
| 19b68057189b027f       |
+------------------------+
1 row in set (0.00 sec)

吐血!!!!!!!!!!!!!!!!!!!!!!!1

[ 本帖最后由 lingniao 于 2005-12-3 17:05 编辑 ]
作者: wolfg    时间: 2005-12-05 09:28
http://dev.mysql.com/doc/refman/4.1/en/password-hashing.html
看看mysql的manual里的说明
作者: zhxd    时间: 2008-10-16 10:07
虽然这个贴子有三年的悠久历名了,但不知道现在回复这个贴子,版主(管理员)会不会封我的ID(以前在其他论坛被封过)?

小生刚从win转到linux,在网上找到那篇“无错版vsftpd+mysql+pam_mysql配置虚拟用户方法”的教程。
出现的问题也是lingniao一样的。
在baidu,google上找了几天也没找到适合我的处理方法。
我也把krb5.h做了链接,在./configure后也加了--with-openssl,都不行。

不知道论坛里的哪位朋友整理了真正“无错版的vsftpd+mysql+pam_mysql配置虚拟用户方法”的教程。
还希望能共享给小生学习一下。
在此先谢过了。

[ 本帖最后由 zhxd 于 2008-10-16 10:16 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2