1.前言:
千辛万苦总算搞好了(没办法,谁叫我是初手),不敢独享,也希望能给那些在这个问题上如我当初般
彷徨的朋友一点帮助(当然,我现在也只是略知一二)我的邮箱keggs@sina.com,欢迎各位一齐讨论.
想搞这个的初衷是想搞个立即可以开通的个人竹叶服务,用户通过提交申请后,竹叶可以立即开通,
而且ftp可以立即上载,不需收工添加用户.且要通过www可以管理用户ftp帐户(php),开始是想通过
proftpd+mod_ldap实现,不过可能是我对ldap的无知,编译带mod_ldap模块的proftpd总是不成功.
(我在论坛提出过编译的问题),所以就另想办法了,于是有了这篇东西.
2.软件:
proftpd-1.2.1.tar.gz
mod_sql-3.2.4.tar.gz(不要这个也行,因为proftpd包里已经有了,这个包是单独的mod_sql.c和
mod_sql_mysql.c以及一些帮助文档).
mysql-3.23.41.tar.gz
3.安装mysql.
这里就不说了.记住安装目录(例如/usr/local/mysql).
安装好后,建立ftpusers数据库,然后建一个users表.命令如下.
CREATE TABLE users (
userid text NOT NULL, #用户名
password text NOT NULL, #用户密码
homedir text NOT NULL, #用户目录
count int(11) NOT NULL, #用户登录次数(初始填0)
shell text NOT NULL #用户shell
);
然后插入一条数据,例如:
INSERT INTO users VALUES( 'keggs', 'mypassword', '/home/keggs', '0', '/bin/bash');
4.安装proftpd
tar -xvzf proftpd-1.2.1.tar.gz
cd proftpd-1.2.1
./configure --prefix=/usr/local/proftpd \
--with-includes=/usr/local/mysql/include \
--with-libraries=/usr/local/mysql/lib/mysql \ (注意与上一行的区别,看出来了么?)
--with-modules=mod_sql:mod_sql_mysql
make
make install
(注意:includes和libraries的指向的区别,原来我的includes也是指向了/usr/local/mysql/include/mysql,
编译时出现找不到mysql.h的提示,这主要是mod_sql_mysql.c里面定义mysql.h它自己加了mysql目录.
你也可以更改mod_sql_mysql.c里面关于mysql.h的include命令)
5.修改proftpd.conf.
添加如下:
SQLConnectInfo ftpusers@studio.keggs.net root password #连接mysql的ftpusers数据库,根据你的情况修改.
SQLDoGroupAuth off #因为我们只建了users表,proftpd默认是要用groups表的,这里是关掉组认证
SQLAuthTypes Plaintext #密码以明文形式认证.
SQLDoAuth on #打开sql认证
SQLHomedirOnDemand on #如果用户目录不存在,则自动建了.
SQLUserTable users #定义存放用户信息的表
SQLUsernameField userid #定义用户名字段
SQLPasswordField password #定义密码
SQLHomedirField homedir #定义用户目录
SQLLoginCountField count #定义登录次数
SQLShellField shell #定义登录shell
SQLAuthoritative off #除了可以进行sql认证,系统用户等别的认证方式也可以.
6.编辑/etc/group,添加gid=65533的组ftpusers(SQLHomedirOnDemand on就是用这个组来建立用户目录)
7.ftp localhost试一试,可以查看/var/log/messages看错误信息.
8.这里再罗嗦两句,可能你在messages里会看到,连接数据库失败的信息,如果数据库名,用户名,密码都
没错,那么也许是你的mysql不允许除了localhost以外的连接,那么你需要在数据库host表里增加相应
的主机信息,这个问题我遇到过,如果你也遇到,不妨看看是不是这方面的原因.
9.现在你可以写个php来管理ftp帐户了,爽吧?!
fei,写完安装文档后由于一直比较忙,对于文中需要补充的地方一直没有说明,
今天看到你把我的文章贴到精华区,为了不误了广大同好,连夜赶了一篇补充,
希望不要见怪,最好把这个补充进去.
补充:关于proftpd非系统用户的uid和gid.
大家也许注意到了,在上篇安装文档里mysql里的用户表我没有建立指定用户uid和gid的值的字段,
那么proftpd自动建立的用户目录将属于哪个用户和组??正如你看到的,执行ls -l /用户目录,用户目录
属于uid=65533,gid=65533, 疑问:难道不能让用户目录属于用户自己么?答案当然是肯定的.
其实在proftpd里面有许多参数是没有设定,而使用系统默认值的,以下4个就是控制建立的用户目录
是不是属于用户自己
SQLMinUserGID #默认值999
SQLMinUserUID #默认值999
SQLDefaultGID #默认值65533
SQLDefaultUID #默认值65533
(如要自己设定以上几个值,注意SQLDefaultGID必需大于SQLMinUserGID
SQLDefaultUID必需大于SQLMinUserUID)
如果:用户gid>SQLMinUserGID 用户目录将属于用户gid
用户gid如果: 用户uid>SQLMinUserUID 用户目录将属于用户uid
用户uid(例如:在不设定以上4值的情况下,如果用户gid=1000,uid=1000,那么用户目录将属于1000,1000)
现在你可以给用户表增加名为uid和gid的两个字段,指定用户uid和gid了.
在proftpd.conf中增加如下:
SQLUidField uid
SQLGidField gid
好了就是以上这些,如果你有什么问题,欢迎和我讨论(没有讨论就没有进步了),电邮到keggs@sina.com