Pureftpd和PostgreSQL联合使用
Pureftpd是一款在多种类Unix上使用并符合GPL协议的原代码开放的软件。那他和PostgreSQL联合使用是怎么样的看下文。
首先,我们应该清楚PostgreSQL 是什么?PostgreSQL 是下一代 DBMS 的研究原型 POSTGRES 数据库管理系统的增强版。PostgreSQL 在保持 POSTGRES 的强大的数据模型和丰富的数据类型的基础上,用一个扩展了的 SQL 子集取代了原先的 PostQuel 查询语言。PostgreSQL 是自由的并且所有源代码都可以获得。
PostgreSQL 的开发由参加 PostgreSQL 开发邮件列表的一个开发人员小组进行。目前的协调人是 Marc G. Fournier ([email protected] )。这个队伍现在负责 PostgreSQL 的所有开发。
PostgreSQL 1.01 的作者是 Andrew Yu 和 Jolly Chen。还有许多其他人为移植,测试,调试和增强代码做了大量贡献。PostgreSQL 的最初起源 Postgres,是在加州大学伯克利分校的 Michael Stonebraker 教授的指导下,由许多研究生,本科生和编程职员完成的。
这个软件最初在伯克利的名字是 Postgres。在 1995 年,当增加了 SQL 功能后,它的名字改成 Postgres95。在 1996年末,才改名为 PostgreSQL。目前最新的版本是8.1.5。
安装PostgreSQL
我们先从www.postgresql.org下在最新版本的PostgreSQL,postgresql-8.1.5.tar.gz,解压缩
# tar xzvf postgresql-8.1.5.tar.gz # cd postgresql-8.1.5
按照快速安装方法安装
# ./configure # gmake //一定要记得用 GNU make # make install # adduser postgres //同时也添加了postgres组 # mkdir /usr/local/pgsql/data # chown postgres /usr/local/pgsql/data # su - postgres
$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 & //启动数据库
$ /usr/local/pgsql/bin/createdb test //创建一个数据库test
$ /usr/local/pgsql/bin/psql test //用交互 psql 工具进入数据库test
$ 退出 psql ,用 \q 命令
设置环境变量 LD_LIBRARY_PATH
$ vi .bash_profile
加入
LD_LIBRARY_PATH=/usr/local/pgsql/lib
并在PATH=$PATH:$HOME/bin后面加入
:/usr/local/pgsql/bin
在 export 后加入LD_LIBRARY_PATH,并保存退出,执行
$ source .bash_profile
整体看起来应该是如下:
# .bash_profile # Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/usr/local/pgsql/bin
LD_LIBRARY_PATH=/usr/local/pgsql/lib
export PATH LD_LIBRARY_PATH
unset USERNAME
$ psql -l //查看现有数据库
$ psql //进入psql交互模式
=# CREATE USER pureftpd WITH PASSWORD ' pureftpd ';
=# CREATE DATABASE pureftpd WITH OWNER = pureftpd TEMPLATE = template0 ENCODING = 'EUC_CN';
=# \q
$ psql -l
List of databases
Name | Owner | Encoding
-----------+----------+----------
postgres | postgres | UTF8
pureftpd | pureftpd | EUC_CN
template0 | postgres | UTF8
template1 | postgres | UTF8
test | postgres | UTF8
(5 rows)
$ createlang plpgsql pureftpd
$ psql -U pureftpd
pureftpd=>
DROP TABLE users CASCADE;
DROP SEQUENCE users_id_seq CASCADE;
CREATE TABLE "users" (
id integer DEFAULT nextval('users_id_seq'::text) NOT NULL,
"User" character varying(16) NOT NULL default '',
status smallint default 0, //这个参数没用上
"Password" character varying(64) NOT NULL default '',
"Uid" character varying(11) DEFAULT -1 NOT NULL,
"Gid" character varying(11) DEFAULT -1 NOT NULL,
"Dir" character varying(128) NOT NULL,
"comment" text,
ipaccess character varying(15) DEFAULT '*' NOT NULL,
"ULBandwidth" smallint default 0,
"DLBandwidth" smallint default 0,
"QuotaSize" integer DEFAULT 0,
"QuotaFiles" integer DEFAULT 0,
ULRatio smallint default 0,
DLRatio smallint default 0,
create_date timestamp with time zone DEFAULT now() NOT NULL,
modify_date timestamp without time zone DEFAULT now() NOT NULL
);
CREATE SEQUENCE users_id_seq;
CREATE INDEX users_index ON users (id,"User");
ALTER TABLE ONLY users ADD CONSTRAINT users_pkey PRIMARY KEY (id);
ALTER TABLE ONLY users ADD CONSTRAINT users_id_key UNIQUE (id, "User");
pureftpd=> \d
List of relations
Schema | Name | Type | Owner
--------+--------------+----------+----------
public | users | table | pureftpd
public | users_id_seq | sequence | pureftpd
(2 rows)
pureftpd=> INSERT INTO users VALUES (1, 'test', 1, md5('test'), '2000', '2000', '/var/ftp/test', '', '*', 0, 0, 0, 0, 0, 0, '2006-11-27 14:30:00', '2006-11-27 14:30:00');
这样,数据库就建立完成了,然后我们配置pureftpd-pgsql.conf 文件
# vi /usr/local/pureftpd/etc/pureftpd-pgsql.conf
这个和我们前面看到的mysql的配置文件类似,修改也类似,我这里就不赘述了。
注意:在pureftpd-pgsql.conf中密码加密我用的是
PGSQLCrypt md5
我没有看到crypt或encrypt函数,如果大家有这方面知识的话,欢迎探讨。
另外一个非常重要,你需要修改
PGSQLGetRatioUL SELECT ULRatio FROM users WHERE User='\L'
PGSQLGetRatioDL SELECT DLRatio FROM users WHERE User='\L'
为
PGSQLGetRatioUL SELECT "ULRatio" FROM "users" WHERE "User"='\L'
PGSQLGetRatioDL SELECT "DLRatio" FROM "users" WHERE "User"='\L'
格式,否则是不能认证的。
修改pure-ftpd.conf 文件,和mysql一样,就改一条
PGSQLConfigFile /usr/local/pureftpd/etc/pureftpd-pgsql.conf