proftp+mysql认证实现
安装 redhat 或者solaris
注solaris要求自己有c编译器等工具我们这里不提供安装方法具体可以取下载gcc包安装
停止缺省的 wuftpd服务器
在 ntsysv 里将 wuftpd 前的 * 去了然后保存然后将 /etc/rcd/initd 目录下的 wuftpd 的启动脚本删除了Solaris可以去/etc/services和/etc/nf注销不过最好是不要安装那个东西它的安全问题很多!
安装 MYSQL
在 Redhat 的光盘上有的将 MYSQL 的程序和库都装上(如果安装 Redhat 时已经 选装了这步就不用了当然如果是solaris的话就没什么用了用源代码包自己编译吧)
rpm ivh mysqlirpm
rpm ivh mysqldevelirpm
rpm ivh mysqlserverirpm
也可以源代码安装
tar –zxvf mysqltargz
cd mysql
/configure –prefix=/usr/local/mysql
make
make install
cd /usr/local/mysql/bin
/ mysql_install_db #初始化
/safe_mysqld –uroot & #启动mysql
下载 proftpdtargz
不知道哪儿有下载?FAINT在搜索引擎上用 proftpdtargz 下载 在找 至少命中个可以下载的站点
准备开始安装 proftpd
为 proftpd 建立专用的用户;加一个ftpuser组 id为;加一个ftpuser用户用户id为组id为
在MYSQL下为 proftpd 建数据库和表
#mysql p
PASSWORD:****** (自己的口令自己知道)
然后用下列命令直接拷进去吧
CREATE DATABASE proftpftp;
USE proftp;
CREATE TABLE users (
userid VARCHAR() NOT NULL # 用户名
uid INT UNSIGNED # 用户ID
gid INT UNSIGNED # 组ID
passwd VARCHAR() NOT NULL # 密码
shell VARCHAR() # SHELL
homedir VARCHAR() # 用户目录
count INT UNSIGNED NOT NULL # 登录计数
) comment = 用户表;
#这个地方可能没法输入汉字可改成英文!
CREATE TABLE groups (
groupname VARCHAR() NOT NULL # 组名
gid INT NOT NULL # 组ID
members VARCHAR() # 组成员
) comment = 组表;
#把组表改为英文吧
设置权限
在 MYSQL 下 GRANT 一个可以存取这个表的用户(要 select update 权限)
grant selectupdatedeleteinsert on proftp*
to yourmysqlid@% identified by passwd;
tar zxvf proftpdtargz
cd proftpd
/configure withmodules=mod_sql:mod_sql_mysql
withincludes=/usr/include
withlibraries=/usr/lib/mysql
(这里的 MYSQL 是用 RPM 安装时的库路径你可以在根下用 locate 命令找到自己机 器上 MYSQL 库的路径)
如果是源代码安装的一定要注意了
/configure prefix=/usr/local/proftpd
withmodules=mod_sql:mod_sql_mysql
withincludes=/usr/local/mysql/include
withlibraries=/usr/local/mysql/lib/mysql
这个地方也要多多注意我就是这里出了错误的
make 并 make install
编辑 /usr/local/etc/nf
加上下面的话(须修改一下再加)
#先改其它参数文件本来就有注解的然后加上下面的
#用户不能访问比自己登录目录更高级别的目录
DefaultRoot ~
#数据库情况刚刚的GRANT时要是用了IP这里要写 proftp@xxxxxxxxxxxx
#用机器名也一样只有GRANT时用localhost时可以省略@ xxxxxxxxxxxx
SQLConnectInfo proftp 用户名 口令
#密码方式为明文可以为空
#(要是想用 MD 也可以手册上讲了好多种加密支持)
SQLAuthTypes Plaintext Empty
#是否不允其它认证方式
#(注意其它文章里的这个参数是讲错的小乐就上当过)
SQLAuthoritative on
#不用讲了吧
SQLDefaultGID
SQLDefaultUID
#用户认证
SQLDoAuth on
#组有效
SQLDoGroupAuth on
#下面的就不用讲了吧一眼就明白了 根据你数据表情况写
SQLUserTable users
SQLUsernameField userid
SQLUidField uid
SQLGidField gid
SQLPasswordField passwd
SQLShellField shell
SQLHomedirField homedir
SQLLoginCountField count
SQLGroupTable groups
SQLGroupGIDField gid
SQLGroupMembersField members
SQLGroupnameField groupname
SQLHomedirOnDemand on cp
/usr/local/mysql/lib/mysql/libmysqlclientso /usr/lib
(重要我是花了好久时间才弄明白的否则启动不了!!!)
测试
先在 MYSQL 里加用户组用户密码留空也可反正是测试 运行 /usr/local/proftpd/sbin/proftpd ftp localhost
用新加的用户一试哈哈是不是成了
题外话
要是想把 PROFTPD 放在 ntsysv 里边控制呵呵加下面的脚本吧
建立 /etc/rcd/initd/proftpd 内容是
#!/bin/sh
case $ in
start)
echo Starting professional ftp daemon: [OK]
/usr/local/proftpd/sbin/proftpd d
touch /var/lock/subsys/proftpd
;;
stop)
echo n Restarting professional ftp daemon: All Proftpd Process
rm f /var/lock/subsys/proftpd
killall proftpd
;;
*)
echo Usage: $ { start | stop }
;;
esac
exit
可以用 /etc/rcd/initd/proftpd stop 来杀所有 proftpd 守护进程用 /etc/rcd/initd/proftpd start 启动一个进程要是你不小心启运了两次就用一次 STOP 就可以了