- 论坛徽章:
- 0
|
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_PATH ORACLE_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 |
|