免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2721 | 回复: 1
打印 上一主题 下一主题

[FTP] REDHAT AS 4+PROFTPD 1.2+mod_sql_sdb-0.0.1 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-26 14:00 |只看该作者 |倒序浏览
REDHAT LINUX AS 4 UPDATE 3,内核版本2.6.9-34(这点比较重要,我忘了安装哪个了,需要GCC的版本在3.4.3以上)
libsdb-0.0.1.tar.gz
mod_sql_sdb-0.0.1.tar.tar
安装ORACLE客户端,我使用的是精简版,建议安装完全的客户端,重要的是sdb-0.6.2.tar.gz安装文档中的“Tested with Oracle 8.1.7 for Linux. Libraries live in $ORACLE_HOME/lib and headers in $ORACLE_HOME/rdbms/demo”这句话,有两层含义:一是需要ORACLE的LIB目录下的那些库链接文件,而是SDB是在ORACLE8下面测试的,我用的是ORACLE9,所以部分文件名要拷贝一份为8,哪个文件我会有说明
proftpd-1.2.10.tar.gz
必须是1.2版本的,我问过proftpd开发人员为何1.3不能使用,对方答复就是sdb的更新没有赶上他们。
sdb-0.6.2.tar.gz


一、安装操作系统
    具体安装不再细述,按我的习惯,开发工具全选,其它的就无所谓了,反正我也不用图形,所有服务都是下载最新的源代码编译安装,重要的是安装REDHAT3是不行的,因为SDB的编译需要GCC版本较高,而升级GCC是比较恐怖的一件事情,所以我直接选择了REDHAT LINUX AS 4 UPDATE 3版本
二、安装ORACLE客户端
    不再细说,网上有的事,不过好像默认安装后   $ORACLE_HOME/rdbms/demo/目录里面没有或缺少ociapr.h/ocidem.h/ocidfn.h/oratypes.h这几个库文件,我是从ORACLE安装盘里面找出来的,建议把这几个文件所在目录下所有头文件都拷贝过来,反正也不大
    设置环境变量,编辑/etc/profile,增加:
export ORACLE_HOME=/opt/oracle/product/9.2.0
LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATHORACLE_HOME/lib
export NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16CGB231280'
    估计只有ORACLE_HOME有用,但这是我配置ORACLE简化版的标准环境变量,就不再深究了,多了也没坏处,当然改完了别完了退出重新登录,否则环境变量可不一定生效。
    找到ORACLE-HOME/lib下面的libwtc9.so,libwtc9.a两个文件,拷贝为libwtc8.so,libwtc8.a
    注意设好tnsname.ora文件,因为下面调用的连库就是这个文件
三、安装sdb-0.6.2.tar.gz和libsdb-0.0.1.tar.gz
    安装sdb-0.6.2.tar.gz就按照文档,./configure --with-oracle;make;make install
    能顺利安装的前提是ORACLE中两个lib文件改名以及头文件全的前提下,否则安装时会报错
    安装libsdb-0.0.1.tar.gz解包后先编辑Makefile文件,修改:
DB_URL = lago:uid=ltest:pwd=ltest:db=ltest:port=7412:host=localhost  前面加#,变为
#DB_URL = lago:uid=ltest:pwd=ltest:db=ltest:port=7412:host=localhost
#SDB_URL = oracle:uid=system/manager@ulric,改为
SDB_URL = oracle:uid=proftpd/proftpd@ora9,这些都是我的配置,意思是用用户proftpd密码proftpd登录ora9数据库,ora9是在oracle客户端的tnsnames.ora里面设置的
ORACLE_HOME改为ORACLE_HOME = /opt/oracle/product/9.2.0,这些也是我的配置,请根据自己ORACLE安装的情况修改  
把除了ORACLE的HAVE_LIBCLNTSH、LIBCLNTSH行全部注释掉,没用,省得编译的时候麻烦
    最终的Makefile内容见后面的附。
    make;make install,按照文档操作即可
四、在ORACLE上建立表以及测试数据
    建立FTP用户表:
create table ftpuser (
        username varchar(30) unique not null,
        password varchar(30) not null,
        userid integer,
        groupid integer,
        homedir varchar(255),
        shell varchar(255)
);
    建立一个用户:
insert into ftpuser values ('testuser','testpw',5500,5500,'/tmp','/bin/sh');
    建立组表
CREATE TABLE `groups` (
`groupname` varchar(16) unique  NOT NULL,
`gid` smallint(6) NOT NULL,
`members` varchar(16) NOT NULL,
) ;
INSERT INTO `groups` VALUES ('ftpgroup', 5500, 'ftpuser');
五、安装proftpd-1.2.10.tar.gz
    解开proftpd-1.2.10.tar.gz
    解开mod_sql_sdb-0.0.1.tar.tar,把mod_sql_sdb.c拷贝到proftpd-1.2.10/contrib文件夹里面
    CFLAGS="`sdb-config --cflags`" LDFLAGS="`sdb-config --libs`" ./configure --prefix=/usr/local/proftpd --with-modules=mod_sql:mod_sql_sdb
    make
    make install
    后两个是为了让ftp能以服务的形式使用
    编辑vi /usr/local/proftpd/etc/proftpd.conf
    修改Group nogroup为Group nobody
    增加:
SQLConnectInfo    oracle:uid=proftpd/proftpd@ora9
SQLUserInfo       ftpuser username password userid groupid homedir shell
SQLMinID          1000
SQLMinUserGID     1000
SQLDefaultUID     1000
SQLAuthTypes      Plaintext
SQLAuthenticate   users
SQLLogFile     /var/log/proftpd_sql.log
ExtendedLog    /var/log/proftpd_xtend.log ALL
SystemLog      /var/log/proftpd_sys.log
    详细配置建附。
    启动:/usr/local/proftpd/sbin/proftpd -d5 -n  调试模式
    不知道为何,将proftpd-1.2.10/contrib/dist/rpm/proftpd.init.d拷贝到/etc/init.d/proftp,执行service proftpd restart报错:Starting proftpd: execvp: No such file or directory,只好用传统的/usr/local/proftpd/sbin/proftpd启动服务
六、其它
    为了保证LINUX系统的组和用户的ID和实际一致,最好把ID统一一下,如:组都用5500,用户ID都用5500,并且相应的在LINUX系统内建立组ID和用户ID对应的组和用户,这样新建的目录不会出现只有ID没有名称的现象,从管理角度来讲,用户分组管理比较合适,这样可以在PROFTPD的配置文件里面限制某个组或者某个用户,我连上数据库后就没再继续做测试,因为我得重点是实现密码的MD5验证,需要在编译前修改一下验证密码的SQL语句,等有时间再弄弄。


附:libsdb-0.0.1的Makefile
VERSION = 0.0.1

CC = gcc
PREFIX = /usr/local
BINDIR = $(PREFIX)/bin
MANDIR = $(PREFIX)/man
#SDB_URL = lago:uid=ltest:pwd=ltest:db=ltest:port=7412:host=localhost
#SDB_URL = odbc:dsn=postgresql
#SDB_URL = postgres:host=localhost:db=ulric
#SDB_URL = sqlite:db=/home/ulric/Cron/sdbadm/ulric
SDB_URL = oracle:uid=system/manager@ulric
#SDB_URL = mysql:host=localhost:db=ulric:uid=ulric:pwd=ulric
#SDB_URL = oracle:uid=system:pwd=manager
ORACLE_HOME = /opt/oracle/product/9.2.0

# Uncomment these in pairs, adjust paths as necessary.
# Mysql, Lago, Sqlite, Postgresql, Oracle and ODBC are tested and working.
#HAVE_LIBLAGO = -DHAVE_LIBLAGO
#LIBLAGO = -llago
# Mysql
#HAVE_LIBMYSQLCLIENT = -DHAVE_LIBMYSQLCLIENT
#LIBMYSQLCLIENT = -L/usr/local/lib/mysql -lmysqlclient
# Sqlite
#HAVE_LIBSQLITE = -DHAVE_LIBSQLITE
#LIBSQLITE = -lsqlite -lgdbm
# Mimer
#HAVE_LIBMIMER = -DHAVE_LIBMIMER
#LIBMIMER = -lmimer
# Postgresql
#HAVE_LIBPQ = -DHAVE_LIBPQ -I/usr/local/pgsql/include
#LIBPQ = -L/usr/local/pgsql/lib -lpq
# Oracle
HAVE_LIBCLNTSH = -DHAVE_LIBCLNTSH -I${ORACLE_HOME}/rdbms/demo \
        -DORACLE_HOME=\"$(ORACLE_HOME)\"
LIBCLNTSH = -L${ORACLE_HOME}/lib -lclntsh -lwtc8
# UnixODBC
#HAVE_LIBODBC = -DHAVE_LIBODBC
#LIBODBC = -lodbc

DBDEFS = $(HAVE_LIBLAGO) $(HAVE_LIBMYSQLCLIENT) $(HAVE_LIBSQLITE) \
        $(HAVE_LIBMIMER) $(HAVE_LIBPQ) $(HAVE_LIBCLNTSH) $(HAVE_LIBODBC)

CFLAGS = -O2 -g -Wall -Wstrict-prototypes $(DBDEFS) \
        -DSDB_URL=\"$(SDB_URL)\"

DOCS = ChangeLog COPYING.LIB README INSTALL
DBSRC = lago.c mysql.c sqlite.c mimer.c postgres.c oracle.c odbc.c sdb.c
DBOBJ = lago.o mysql.o sqlite.o mimer.o postgres.o oracle.o odbc.o sdb.o
DBLIB = $(LIBLAGO) $(LIBMYSQLCLIENT) $(LIBSQLITE) \
        $(LIBMIMER) $(LIBPQ) $(LIBCLNTSH) $(LIBODBC)

all: sdb_client

sdb_client: sdb_client.o common.o $(DBOBJ)
        $(CC) -o sdb_client sdb_client.o common.o $(DBOBJ) $(DBLIB)

#       strip sdb_client

$(DBOBJ): sdb.h common.h

sdb_client.o common.o: sdb.h common.h Makefile

dist:
        rm -rf libsdb-$(VERSION)
        mkdir libsdb-$(VERSION)
        cp Makefile $(DOCS) sdb_client.c common.c common.h sdb.h \
                $(DBSRC) libsdb-$(VERSION)
        tar cf - libsdb-$(VERSION) | gzip > libsdb-$(VERSION).tar.gz
        rm -rf libsdb-$(VERSION)

clean:
        rm -f sdb_client
        rm -f *.o

install: sdb_client
        cp sdb_client $(BINDIR)
        chmod 0755 $(BINDIR)/sdb_client

uninstall:
        rm -f $(BINDIR)/sdb_client

附:PROFTPD.CONF配置
ServerName                      "roFTPD Default Installation"
ServerType                      standalone
DefaultServer                   on
Port                            21
Umask                           022
MaxInstances                    30
User                            nobody
Group                           nobody
AllowOverwrite          on
RequireValidShell               off
ServerIdent                     on "CHSI'S FTP"
TimeoutIdle                     60
AllowOverwrite                  on
AllowRetrieveRestart            on
AllowStoreRestart               on
AllowForeignAddress             on
UseReverseDNS                   off
IdentLookups                    off
DefaultRoot                     ~
TimesGMT                        off
MaxInstances                    1000
MaxLoginAttempts                10
RootLogin                       off

SQLHomedirOnDemand on

SQLConnectInfo    oracle:uid=proftpd/proftpd@ora9
SQLUserInfo       ftpuser username password userid groupid homedir shell
SQLMinID          1000
SQLMinUserGID     5500
SQLDefaultUID     5500
SQLAuthTypes      Plaintext
SQLAuthenticate   users
SQLLogFile     /var/log/proftpd_sql.log
ExtendedLog    /var/log/proftpd_xtend.log ALL
SystemLog      /var/log/proftpd_sys.log

论坛徽章:
0
2 [报告]
发表于 2006-12-26 14:02 |只看该作者
我发的上一个帖子已经沉底了http://bbs.chinaunix.net/viewthr ... p;highlight=proftpd,看来连接ORACLE的人不多,这次找的模块是免费的,就是更新没赶上PROFTPD。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP