人来疯技术文档再现江湖之pureftpd使用大全

初学vb
人来疯技术文档再现江湖之pureftpd使用大全

人来疯技术文档之pureftpd使用大全
人来疯 root
人来疯论坛 [url]http://www.d-1701.com/bbs[/url]
MSN:[email]xu1701@hotmail.com[/email]
                                                                 
版权信息:未经许可不得转载,转载本文章请与人来疯论坛坛主root联系!
[color=Red]人来疯论坛已于北京时间05.12.15日正式关闭,大家可以通过MSN联系我!
06年将考虑采用合作的形式办论坛,希望能找到提供服务器及域名的朋友![/color]
                                              联系方法:使用msn
环境:
RedHat  RHEL3U6
说明:
如果不做说明,一般安装命令均使用ROOT权限,用 # 表示;一般命令用$表示。

特别说明:无

以下文章介绍Liunx 环境下 Pureftpd安装及使用情况

一、前言
Pureftpd是一款在多种类Unix上使用并符合GPL协议的原代码开放的软件,顾名思义,它就是一款纯粹的Ftp程序,目前的版本是1.0.21,文档版本号已经开发到1.0.22,这证明作者正在努力开发新版本,我们一起期待吧。
二、Puerftpd安装步骤
1、获取并安装Pureftpd版本
大家可以到 [url]http://download.pureftpd.org/pub/pure-ftpd/releases/[/url]下载pureftpd的原代码,下载后进行安装,如下:
# cd /home/xuchen
# wget [url]http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.21.tar.gz[/url] .
# tar xzvf pure-ftpd-1.0.21.tar.gz
# cd pure-ftpd-1.0.21
# ./configure --prefix=/usr/local/pureftpd  --with-everything  --with-rfc2640/
--with-mysql=/usr/local/mysql --with-language=simplified-chinese;make;make check;make install

--prefix是安装的目标目录
--with-eyerything是安装所有功能,因为是测试。
--with-rfc2640,此参数UTF-8,gb2312等异构系统的语言集转换
注意:如果是用Tar包安装的mysql,可能在编译时会遇到
configure: error: Your MySQL client libraries aren't properly installed
问题,解决的办法是
把/usr/local/mysql/lib/mysql/下的文件全部copy到/usr/lib中

# mkdir /usr/local/pureftpd/etc 安装系统时没建立这个文件夹??
# cd configuration-file
# chmod u+x pure-config.pl
# cp pure-config.pl /usr/local/pureftpd/bin
# cp pure-ftpd.conf /usr/local/pureftpd/etc
# cd ..
# cp pureftpd* /usr/local/pureftpd/etc/
到这里,所有安装已完成,就该测试功能了,我们用修改配置文件的方法来完成功能测试。

2、配置Pureftpd
启动pureftpd的方法是
# /usr/local/pureftpd/bin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.conf
这个在每次测试后都要执行,就不一一写上了。
(1)        匿名用户登陆
# vi /usr/local/pureftpd/etc/pure-ftpd.conf
如果要在默认的配置文件中只支持匿名登录,你只要稍微修改一下就可以了:
ChrootEveryone yes //限制所有用户在其主目录中
AnonymousOnly yes //是否只让匿名登录
NoAnonymous no //不允许匿名连接,仅允许认证用户使用
AnonymousCanCreateDirs yes //允许匿名用户创建新目录
MaxLoad  4  //如果系统被 loaded 超过下面的值,匿名用户会被禁止下载
AnonymousRatio   1 10 //匿名用户的上传/下载的比率
AnonymousBandwidth  8  //匿名用户的最大带宽(KB/s)
AllowAnonymousFXP  yes  //对匿名用户和非匿名用户允许进行匿名 FXP 传输
AnonymousCantUpload  no //不接受匿名用户上传新文件( no = 允许上传)

#(”.”)开头的文件能不能被读/写
按以上设置就可以进行匿名Ftp连接了,但如果出现了“421 无法建立安全匿名FTP”错误,请检查你的系统帐号,有可能你在系统建立时把FTP这个帐户给优化了,如果是这样,那么运行
# useradd ftp -g ftp -d /var/ftp -s /sbin/nologin
如果发现帐户是存在的,那么请检查帐户的主目录是否存在,如果不存在,也会提示上述错误。
经测试,按上述配置文件配置后,重新启动服务器,匿名用户可以上传文件,但无法下载,也无法删除文件。实现了安全的匿名上传ftp功能。
当你下载文件时看到,没有被管理员核准下载,这个是怎么做到的呢?其实很简单,一个参数搞定
AntiWarez   yes //意思是不接受所有者为 "ftp" 的文件的下载,我们把它设置为 “no”会怎么样呢?结果很显然,我们可以下载文件了,但由于AnonymousRatio 参数的存在,我们需要先上传后下载,很有意思,好了,匿名用户登陆就介绍到这里了。

[[i] 本帖最后由 初学vb 于 2006-11-27 10:58 编辑 [/i]]

初学vb
(2)系统真实用户方法
# vi /usr/local/pureftpd/etc/pure-ftpd.conf
如果要在默认的配置文件中只支持系统真实用户登录,你只要稍微修改一下就可以了:
ChrootEveryone yes
NoAnonymous  yes
UnixAuthentication yes //用/etc/passwd 中的用户认证
只需以上三行就可以实现系统真实用户登陆Ftp了,系统真实用户会登陆到自己的主系统中,可下载,可上传,可删除,没有任何限制,类似于平常我们用的sftp,就是由于有chroot的限制,所以无法去其他文件夹而已。在实际应用中,这种用法并不多见,我也就不费篇幅介绍了。

初学vb
(3)        puredb虚拟用户支持
自从 0.99.2 版本开始, pure-ftpd 就开始支持虚拟用户。为了使 pure-ftpd 支持虚拟用户,需要在编译的时候加入选项 --with-puredb,或是和我们测试一样,用--with-everything,当然这个是随各用户使用而定。虚拟用户方式十分类似 /etc/passwd ,将用户的相关信息,如口令、姓名、 uid 、目录等,存入文件。但是该文件只适用于 FTP 。这意味着,可以为 FTP 设置虚拟用户,而不需要在系统中添加系统用户。同时,可以为这些用户单独设置配额、 ratio 、带宽等限制。很多虚拟用户可以共享同一个系统用户的属性,因此建议为这些虚拟用户单独创建一个系统用户,从而方便管理。我们选择新建系统用户(经测试,如果用linux系统自带的Ftp用户,在用虚拟用户登陆时会出现不被信任的提示,大家也可以做做实验,看是不是这样)。建立方法如下:
# groupadd ftpgroup
# useradd -g ftpgroup -d /dev/null -s /sbin/nologin ftpuser
系统帐号建立好后,我们就开始着手准备虚拟用户了。

虚拟用户建立方法
可以使用 ”pure-pw” 来创建虚拟用户。虚拟用户的信息以每个用户一行的方式存放在相应的文件中,除了帐号、口令、 uid 、 gid 和 home 目录之外,其它的可以是空值。
pure-pw useradd的语法规范如下:
pure-pw useradd <login> [-f <passwd file>] -u <uid> [-g <gid>]
      -D/-d <home directory> [-c <gecos>]
      [-t <download bandwidth>] [-T <upload bandwidth>]
      [-n <max number of files>] [-N <max Mbytes>]
      [-q <upload ratio>] [-Q <download ratio>]
      [-r <allow client host>[/<mask>][,<allow client host>[/<mask>]]...]
      [-R <deny client host>[/<mask>][,<deny client host>[/<mask>]]...]
      [-i <allow local host>[/<mask>][,<allow client host>[/<mask>]]...]
      [-I <deny local host>[/<mask>][,<deny local host>[/<mask>]]...]
      [-y <max number of concurrent sessions>]
      [-z <hhmm>-<hhmm>] [-m]
假设我们要创建 test 这样一个虚拟用户,则可以使用如下命令:
# pure-pw useradd test -u ftp -d /var/ftp/test
其中, -u 将虚拟用户 test 同系统用户 ftp 关联在一起。 -d 参数使 test 只能访问其 home 目录。而如果想让他访问整个文件系统,可以用 -D 选项。
执行完上述命令后,会提示输入密码,我们输入123456即可。
然后需要更改建立/var/ftp/test目录,并修改它的属性。
注意:在配置文件中有选项自动建立主目录
CreateHomeDir               yes //我们可以设置为yes,但是有一点需要大家注意,就是它只支持二层目录的建立而不支持三层以上目录的建立,举个例子,如果我们创建虚拟用户是用如下语句:
# pure-pw useradd test -u ftp -d /home/ftp 命令,而这时系统只有/home目录而没有/home/ftp目录,那么在test用户第一次登陆时会创建/home/ftp目录,而如果我们改变以上命令如下:
# pure-pw useradd test -u ftp -d /home/ftp/test,而这时系统只有/home目录或/home/ftp目录,而没有/home/ftp/test目录,那么我们登陆时会得到没有主目录的提示。

其他参数含义:
-z 选项运用用户在一天当中指定的时间段连接服务器。如 -z 0900-1800 ,则该用户只能在上午 9 点到晚上 6 点之间连接服务器。
-r 选项或 -R 选项,可以限制用户从指定 IP 和掩码连入服务器
-y ,用户同一时间的并发连接数。 ’’ 或者 0 意味着不限制
-f ,默认虚拟用户的信息会被存放在 ./etc/pureftpd.passwd 文件中,通过该选项可以改变该文件的位置。
用户的口令会根据系统对加密方式的支持情况,选择一个最安全的方式进行加密。

同 pure-pw adduser 不同的是,使用 pure-pw usermod 不是创建一个用户,而是更改已经存在用户的某些属性。
重置某些属性的语法如下:
pure-pw usermod <user> -n '' :禁用文件配额
pure-pw usermod <user> -N '' :禁用文件大小配额
pure-pw usermod <user> -q '' -Q '' :禁用 ratio
pure-pw usermod <user> -t '' :禁用下载带宽限制
pure-pw usermod <user> -T '' :禁用上传带宽限制
pure-pw usermod <user> <-i,-I,-r or -R> '' :禁用 IP 过滤
pure-pw usermod <user> -z '' :禁用时间段约束
pure-pw usermod <user> -y '' :禁用并发数限制

删除一个用户的命令语法是:
pure-pw userdel <login> [-f <passwd file>] [-m]
这时,用户的信息会被从指定的 passwd 文件中删除,但是用户的 home 目录会被保留,需要手工删除。

更改一个用户口令的语法是:
pure-pw passwd <login> [-f <passwd file>] [-m]

./etc/pureftpd.passwd 文件中记录的信息不方便用户的阅读,因此 pure-ftpd 提供了显示用户信息的命令。其语法是:
pure-pw show <login> [-f <passwd file>]

可以通过上面提到的命令,或者以手工方式对 ./etc/pureftpd.passwd 文件进行修改,从而创建、修改和删除一个虚拟用户信息。但是,只有提交这些更改时, pure-ftpd 访问才能生效。提交更改,意味着系统会根据./etc/pureftpd.passwd (或者指定的其它文件)来创建一个 pure-ftpd 可读的二进制格式的文件
./etc/pureftpd.pdb 。这是通过下面的命令完成的:
pure-pw mkdb
可以通过 ./etc/pureftpd.passwd 文件自动创建 ./etc/pureftpd.pbd 文件。但是,如果需要指定特定的文件,可以通过下面的方式来实现:
pure-pw mkdb /etc/accounts/myaccounts.pdb -f /etc/accounts/myaccounts.txt
这时,没有必要去重启 pure-ftpd 服务,对虚拟用户进行的更改可以更新。同时,也可以通过 -m 选项,在对 ./etc/pureftpd.passwd 文件进行修改的时候自动进行提交。

可以通过如下命令,将系统用户转换为虚拟用户:
pure-pwconvert
如果以 root 用户运行该命令,系统用户的口令一并被转入虚拟用户配置文件。如:
pure-pwconvert >> ../etc/pureftpd.passwd

环境变量
默认的情况下,如果指定了环境变量 PURE_PASSWDFILE ,则虚拟用户的 passwd 文件位置由该变量的值指定。否则,默认是 ./etc/pureftpd.passwd 。同样,PURE_DBFILE 环境变量用来指定 pdb 文件的位置。默认是 ./etc/pureftpd.pdb 。

更改配置文件
PureDB   /usr/local/pureftpd/etc/pureftpd.pdb  //Puredb路径
CreateHomeDir  yes  //创建用户主目录

通过以上建立的用户,可上传,可下载,可删除,是高权限用户。可以通过对目录的限制来达到对用户权限的限制。

[[i] 本帖最后由 初学vb 于 2006-11-27 08:59 编辑 [/i]]

初学vb
以上都是经过我本人测试多遍得出结果,如果大家有任何疑问,都可以测试后发表,请大家要牢记:实验出真知。

下面的内容就是和数据库有关了。

初学vb
(4)Pureftp和mysql联合使用
数据库我用的是5.0.20a,不过建议使用4.0的数据库,少了很多编码的麻烦。
# mysql -p //登陆mysql服务器
> CREATE DATABASE pureftpd;
> grant all on pureftpd.* to pureftp@localhost identified by '********';
> use pureftpd
> CREATE TABLE `users` (
  `id` int(32) unsigned NOT NULL auto_increment,
  `User` varchar(16) NOT NULL default '',
  `Password` varchar(64) NOT NULL default '',
  `Uid` varchar(11) NOT NULL default '-1',
  `Gid` varchar(11) NOT NULL default '-1',
  `Dir` varchar(128) NOT NULL default '',
  `QuotaSize` smallint(5) NOT NULL default '0',
  `QuotaFiles` int(11) NOT NULL default '0',
  `ULBandwidth` smallint(5) NOT NULL default '0',
  `DLBandwidth` smallint(5) NOT NULL default '0',
  `ULRatio` smallint(6) NOT NULL default '0',
  `DLRatio` smallint(6) NOT NULL default '0',
  `comment` tinytext NOT NULL,
  `ipaccess` varchar(15) NOT NULL default '*',
  `status` enum('0','1') NOT NULL default '0',
  `create_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `modify_date` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`id`,`User`),
  UNIQUE KEY `User` (`User`)
) TYPE=MyISAM AUTO_INCREMENT=5 ; //建立pureftpd数据库

> INSERT INTO `users` VALUES (1, 'test', encrypt('test'), '2000', '2000', '/var/ftp/test', 0, 0, 0, 0, 0, 0, '', '*', '1', '2006-11-27 10:10:00', '2006-11-27 10:10:00'); //建立ftp用户

这样我们就建立好了pureftpd数据库,下面我们修改/usr/local/pureftpd/etc/pureftpd-mysql.conf 文件.
MYSQLServer     localhost
MYSQLPort       3306
MYSQLSocket     /tmp/mysql.sock
MYSQLUser       pureftp
MYSQLPassword   ******** //这里填你自己的密码
MYSQLDatabase   pureftpd
MYSQLCrypt      crypt //密码加密方式,我们选crypt,还有几种方法,原理都是一样的,大家可以参考。
查找以下字符,并把前面的#号去掉
MySQLGetQTAFS
MySQLGetQTASZ
MySQLGetBandwidthUL
MySQLGetBandwidthDL
保存退出

# vi /usr/local/pureftpd/etc/pure-ftpd.conf
就改一条
MySQLConfigFile              /usr/local/pureftpd/etc/pureftpd-mysql.conf //设置mysql文件
其他按你要求自己修改。

OK,建立主目录/var/ftp/test,它要有everyone的读写权限才行,所以我用的是chmod 777 /var/ftp/test,启动后进行测试,可上传,可下载,可删除。如果不想删除和上传,可以把权限设置为555,那么就只能下载了。

初学vb
(5)Pureftpd和PostgreSQL联合使用
    首先,我们应该清楚PostgreSQL 是什么?PostgreSQL 是下一代 DBMS 的研究原型 POSTGRES 数据库管理系统的增强版。PostgreSQL 在保持 POSTGRES 的强大的数据模型和丰富的数据类型的基础上,用一个扩展了的 SQL 子集取代了原先的 PostQuel 查询语言。PostgreSQL 是自由的并且所有源代码都可以获得。
PostgreSQL 的开发由参加 PostgreSQL 开发邮件列表的一个开发人员小组进行。目前的协调人是 Marc G. Fournier (scrappy@postgreSQL.org )。这个队伍现在负责 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

重新启动pureftpd程序后测试,和用mysql数据库认证时的权限相同。

初学vb
正在写OPENLDAP方式,不过由于明天路考,心里七上八下的,无法全心投入进去,明天上午等我考完再把文章贴出来吧,openldap是pureftpd使用大全里关于应用的最后一节了,希望大家在看完后有什么要提问的尽管说啊。

初学vb
顺利通过路考,这次很严,通过率只有40%,另外再说说openldap,我几乎没怎么使用过它,所以正在研究,我希望我的东西不只能让大家学到pureftp,还有其他相关的东西的概念也要掌握的,所以请大家给我一些时间让我好好学习学习。

[[i] 本帖最后由 初学vb 于 2006-11-29 16:02 编辑 [/i]]

初学vb
以下是Openldap安装,具体的应用我已明白,但测试一直有问题,大家一起来补全吧!

OpenLDAP是一个非常强劲的网络资源访问工具,使用 Berkeley DB (一个层次型数据库,注意:与RDBMS不同) 存储数据。

安装OpenLDAP
先安装berkeley DB,目前最新版本为4.5.20,下载地址是:
[url]http://www.oracle.com/technology/software/products/berkeley-db/index.html[/url]
# tar xzvf db-4.5.20.tar.gz
# cd db-4.5.20/build_unix
# ./dist/configure
# make;make install
该软件默认是安装在/usr/local/BerkeleyDB.4.5目录下。安装完成后,要把
/usr/local/BerkeleyDB.4.5/lib的库路径加到/etc/ld.so.conf文件内,添加完成后执行一次ldconfig,使用配置文件生效。这样编译openldap时才能找到相应的库文件。这样资料库就安装完成了,接下来可以安装openldap了。ld.so.conf是什么东西?它就是系统动态链接库的配置文件。此文件内,存放着可被Linux共享的动态链接库所在目录的名字(系统目录/lib,/usr/lib除外),各个目录名间以空白字符(空格,换行等)或冒号或逗号分隔。一般的Linux发行版中,此文件均含一个共享目录/usr/X11R6/lib,为X window窗口系统的动态链接库所在的目录。 ldconfig是它的管理命令,具体操作方法可查询man手册,这里就不细讲了。
下载地址是:[url]http://www.openldap.org/software/download/[/url]
目前释放出的最新版本为2.3.30,稳定版本是2.3.27,由于不是生产服务器,我们用2.3.30。
# wget [url]ftp://ftp.u-aizu.ac.jp/pub/net/openldap/openldap-release/openldap-2.3.30.tgz[/url]
# tar xzvf openldap-2.3.30.tgz
# cd openldap-2.3.30
# env CPPFLAGS="-I/usr/local/BerkeleyDB.4.5/include" /
LDFLAGS="-L/usr/local/BerkeleyDB.4.5/lib" /
./configure --prefix=/usr/local/openldap --enable-ldbm
注意以上配置语句,要设置资料库的include和lib路径,否则在配置到资料库相关内容时会提示Berkeley DB版本不兼容,并中断配置。如果没有--enable-ldbm选项,在make test时会提示ldbm找不到。为了减少出错,还是加上为好。
# make depens
# make
# make test //在make test阶段要花费较长时间进行测试,共有44项,成不成就看这步的了。
# make install
这样,我们就已经把openldap安装到/usr/local/openldap目录下。建议以源码安装的软件都放到独立的目录下,不要放到软件默认的目录。好处是方便管理和控制,所有文件在统一的目录下,卸载软件只要删除整个目录就可以了。

初学vb
以上是安装过程,没什么问题,主要是配置过程,谁有这方面的经验请赐教。

CyrixIII
我可以提供服务器空间,可以联系我,呵呵Email [email]xiaolvren339@21cn.net[/email]

changhe
学习中

hongfengyue
不错。谢谢!

cyberdna
openldap的架构、配置、维护工作量太大,企业应用中还要考虑容错、均衡等,实在让人放心不下。
何不采用NDS、MS-AD等商业LDAP服务,再次点ADAM也比openldap实用。
openldap只是LDAP的一种实现形式而已。

初学vb
楼上说得没错,以目录服务本身来说,可能windows更占优势一点,在这里用openldap来举例只是为了实现一个pureftpd的功能而已,再一个就是让后来的人能开拓一下思路,如果能起到抛砖引玉的效果我就更高兴了。

初学vb
经过多天研究,终于取得了一些进展,但测试用的服务器被收回了,刚借了一台,正在搭建环境,还有就是我想说一下现在的网站资料不是抄就是完全不测试,或者还有一些人写文章关键部分根本就不告诉你,这样的东西终究害人害己,心太浮,我觉得既然你要在网上写文章那就好好写,抄一些README的东西还认为自己的东西是大牛的人该醒醒了,不用多说,用数据说话,大家随便可以找找pureftp的关于ldap的东西在网上,不管来头多大,是否精华没有一篇是没问题的,好了罗嗦半天了,继续我的测试了。

初学vb
测试成功,要补全这个文档了,呵呵,惊喜得发现已经又是原创了,努力!!

zhy1899
兄弟,我用都是webpureftp(默认登陆目录为/ftproot/用户)
我用webpureftp建立帐号后,但是并没有在/ftproot里面建立相应的帐号信息, 在MYSQL里面建立了, 我现在用MYSQL里面的帐号登陆,老是提示登陆不上,这个是登陆的信息:
Jan 15 21:53:49 as4 pure-ftpd[3879]: (?@192.168.0.2) [WARNING] Authentication failed for user [12]
Jan 15 21:53:53 as4 pure-ftpd[3879]: (?@192.168.0.2) [INFO] Logout.
Jan 15 21:53:59 as4 pure-ftpd[3880]: (?@192.168.0.2) [INFO] New connection from 192.168.0.2
Jan 15 21:53:59 as4 pure-ftpd[3881]: (?@192.168.0.2) [INFO] New connection from 192.168.0.2
Jan 15 22:01:01 as4 crond(pam_unix)[3890]: session opened for user root by (uid=0)
Jan 15 22:01:01 as4 crond(pam_unix)[3890]: session closed for user root
Jan 15 22:04:29 as4 pure-ftpd[3898]: (?@192.168.0.2) [INFO] New connection from 192.168.0.2
Jan 15 22:04:33 as4 pure-ftpd[3899]: (?@192.168.0.2) [INFO] New connection from 192.168.0.2
Jan 15 22:04:33 as4 pure-ftpd[3899]: (?@192.168.0.2) [ERROR] The SQL server seems to be down [Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)]
Jan 15 22:04:33 as4 pure-ftpd[3899]: (?@192.168.0.2) [WARNING] Authentication failed for user [12]
Jan 15 22:04:39 as4 pure-ftpd[3899]: (?@192.168.0.2) [INFO] Logout.
an 15 22:10:04 as4 pure-ftpd[3901]: (?@192.168.0.2) [WARNING] Authentication failed for user [12]
Jan 15 22:10:07 as4 pure-ftpd[3901]: (?@192.168.0.2) [INFO] Logout.
Jan 15 22:15:40 as4 pure-ftpd[3917]: (?@192.168.0.2) [INFO] New connection from 192.168.0.2
Jan 15 22:15:46 as4 pure-ftpd[3918]: (?@192.168.0.2) [INFO] New connection from 192.168.0.2
Jan 15 22:15:46 as4 pure-ftpd[3918]: (?@192.168.0.2) [WARNING] Authentication failed for user [12]
Jan 15 22:15:51 as4 pure-ftpd[3918]: (?@192.168.0.2) [INFO] Logout.

[size=3]这个是我的目录权限,都是我自己建立的[/size]
[color=Red]total 12
drwxr-xr-x  2 ftp  ftp  4096 Jan 15 21:20 12
drwxr-xr-x  2 root root 4096 Jan 15 22:18 33
drwxr-xr-x  2 ftp  ftp  4096 Jan 15 21:02 zhy1899[/color]


[color=Red][size=6]已经解决[/size][/color]

[[i] 本帖最后由 zhy1899 于 2007-2-1 11:41 编辑 [/i]]

初学vb
[ERROR] The SQL server seems to be down [Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)]

你需要解决这个问题啊。呵呵

初学vb
LDAP模块补全!!参考见下

(6)Ldap模块
OpenLDAP是一个非常强劲的网络资源访问工具,使用 Berkeley DB (一个层次型数据库,注意:与RDBMS不同) 存储数据。

安装OpenLDAP
先安装berkeley DB,目前最新版本为4.5.20,下载地址是:
[url]http://www.oracle.com/technology/software/products/berkeley-db/index.html[/url]
# wget [url]http://download.oracle.com/berkeley-db/db-4.5.20.tar.gz[/url]
# tar xzvf db-4.5.20.tar.gz
# cd db-4.5.20/build_unix
# ../dist/configure
# make;make install
该软件默认是安装在/usr/local/BerkeleyDB.4.5目录下。安装完成后,要把
/usr/local/BerkeleyDB.4.5/lib的库路径加到/etc/ld.so.conf文件内,添加完成后执行一次ldconfig,使用配置文件生效。这样编译openldap时才能找到相应的库文件。这样资料库就安装完成了,接下来可以安装openldap了。ld.so.conf是什么东西?它就是系统动态链接库的配置文件。此文件内,存放着可被Linux共享的动态链接库所在目录的名字(系统目录/lib,/usr/lib除外),各个目录名间以空白字符(空格,换行等)或冒号或逗号分隔。一般的Linux发行版中,此文件均含一个共享目录/usr/X11R6/lib,为X window窗口系统的动态链接库所在的目录。 ldconfig是它的管理命令,具体操作方法可查询man手册,这里就不细讲了。
下载地址是:[url]http://www.openldap.org/software/download/[/url]
目前释放出的最新版本为2.3.32,稳定版本也是2.3.32。
# wget [url]ftp://ftp.u-aizu.ac.jp/pub/net/openldap/openldap-release/openldap-2.3.32.tgz[/url]
# tar xzvf openldap-2.3.32.tgz
# cd openldap-2.3.32
# env CPPFLAGS="-I/usr/local/BerkeleyDB.4.5/include" /
LDFLAGS="-L/usr/local/BerkeleyDB.4.5/lib" /
./configure --prefix=/usr/local/openldap /
--enable-ldbm --enable-bdb --enable-ldap --enable-crypt --enable-shared
注意以上配置语句,要设置资料库的include和lib路径,否则在配置到资料库相关内容时会提示Berkeley DB版本不兼容,并中断配置。如果没有--enable-ldbm选项,在make test时会提示ldbm找不到。为了减少出错,还是加上为好。
# make depend
# make
# make test //在make test阶段要花费较长时间进行测试,共有44项,成不成就看这步的了。
# make install
这样,我们就已经把openldap安装到/usr/local/openldap目录下。建议以源码安装的软件都放到独立的目录下,不要放到软件默认的目录。好处是方便管理和控制,所有文件在统一的目录下,卸载软件只要删除整个目录就可以了。

安装完相关软件后就可以着手配置了。Berkeley DB资料库没什么好配置的。主要是配置openldap 服务。配置文件在软件的安装目录的etc/openldap下,有四个文件,主要的是slapd.conf and ldap.conf,其它两个是backup文件。首先,我们先来配置slapd.conf文件
# cp /usr/local/pureftpd/etc/pureftpd.schema /usr/local/openldap/etc/openldap/schema //把schema文件拷贝到openldap文件夹中,拷贝之前修正一个错误,在FTPStatus项里多写了一个SYNTAX,去掉它,去掉后文件如下

attributetype ( 1.3.6.1.4.1.6981.11.3.7 NAME 'FTPStatus'
        DESC 'Account status: enabled or disabled'
        EQUALITY booleanMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE )

# cp /usr/local/pureftpd/etc/pureftpd-ldap.conf /usr/local/openldap/etc/openldap/
# vi /usr/local/pureftpd/etc/pure-ftpd.conf
将如下行修改
NoAnonymous                 yes
LDAPConfigFile              /usr/local/openldap/etc/openldap/pureftpd-ldap.conf
AnonymousCantUpload         yes

# vi /usr/local/openldap/etc/openldap/pureftpd-ldap.conf
LDAPServer localhost
LDAPPort   389
LDAPBaseDN dc=netat,dc=com
LDAPBindDN cn=root,dc=netat,dc=com
LDAPBindPW ***** //写你给openldap 的 root设置的密码,在这里是明文


# vi /usr/local/openldap/etc/openldap/slapd.conf
include                  /usr/local/openldap/etc/openldap/schema/core.schema
include         /usr/local/openldap/etc/openldap/schema/pureftpd.schema
include         /usr/local/openldap/etc/openldap/schema/cosine.schema
include         /usr/local/openldap/etc/openldap/schema/nis.schema
include         /usr/local/openldap/etc/openldap/schema/corba.schema
include         /usr/local/openldap/etc/openldap/schema/dyngroup.schema
include         /usr/local/openldap/etc/openldap/schema/inetorgperson.schema
include         /usr/local/openldap/etc/openldap/schema/java.schema
include         /usr/local/openldap/etc/openldap/schema/misc.schema
include         /usr/local/openldap/etc/openldap/schema/openldap.schema
include         /usr/local/openldap/etc/openldap/schema/ppolicy.schema

database        bdb
suffix          "dc=netat,dc=com"
rootdn          "cn=root,dc=netat,dc=com"
rootpw          {CRYPT}ba9K/ETp.ox9E
suffix也可以用o=netat.com,c=cn 说明你的公司域名和所在的国家或地区,有很多种形式
rootdn的格式安装后默认为cn=Manager,这里改为root完全是自己的喜好,这样符合Unix/Linux中root具有最高权限的传统。
目前rootpw的加密方式有如下几种
rootpw          secret //明文密码
# rootpw        {CRYPT}B7fF/KIqexnDs
# rootpw        {MD5}iWPLuV9TDL/GdW1ZRcX3vA==
# rootpw        {SMD5}tMQdIbEBsjG9JJTiDgk5A7wnu/o=
# rootpw        {SHA}GQoNhXp4y6KsQMbOZBVaaoSzqsU=

怎么知道密码的加密方法呢?需要的命令是slappasswd,使用下面命令得到加密后的口令,拷贝到配置文件中:
slappasswd -h {加密方法}
到这里,slapd.conf文件修改完成,保存退出。

配置ldif文件
几个很重要的概念,以后会用到:
---------------------------------------------
dn :一条记录的位置
dc :一条记录所属区域
ou :一条记录所属组织
cn/uid:一条记录的名字/ID

我们先要建立DN
# vi base-dn.ldif
dn: dc=netat,dc=com
objectclass: dcobject
objectclass: organization
o: netat.com
dc: netat
每行后买面一定不能有空格,否则会出现莫名其妙的问题。

然后我们启动openldap:
启动前我们先要修改一下.bash_profile文件,这样是为了以后方便启动openldap
# vi /root/.bash_profile
修改的部分见下
# User specific environment and startup programs
SLAPD_HOME=/usr/local/openldap
PATH=$PATH:$HOME/bin:$SLAPD_HOME/libexec:$SLAPD_HOME/sbin:$SLAPD_HOME/bin
Source一下,让修改生效
# source /root/.bash_profile
键入 slapd 启动openldap服务
# slapd
用netstat命令检查一下会发现多了一个389端口,这个就是openldap的服务端口。
测试ldap server是否正常工作:
运行下面的命令检查是否有相应的输出
# ldapsearch -x -b 'dc=netat,dc=com' '(objectclass=*)'
如果有错误,请检查安装过程是否有错误导致。

添加我们刚才建立的base-dn.ldif文件:
# ldapadd -x -D "cn=root,dc=netat,dc=com" -W -f base-dn.ldif
Enter LDAP Password:
adding new entry "dc=netat,dc=com" --看到这些就是成功了。
还有一些命令我们操作可能会用到,补充在这里:
删除记录用
# ldapdelete -x -D "cn=root,dc=netat,dc=com" -W "dc=netat,dc=com"
搜索记录用
ldapsearch -x -b 'dc=netat,dc=com'

然后我们建立RDN:
dn: cn=joe,dc=netat,dc=com
objectclass: person
objectClass: posixAccount
cn: joe
sn: joe
uid: joe
uidNumber: 5000
gidNumber: 5000
homeDirectory: /var/ftp
userPassword: {CRYPT}WEkBFPT.d2ong
看到adding new entry "cn=joe,dc=netat,dc=com"的提示就是添加成功了。

启动pureftpd,用我们建立的joe登陆测试,如果启动时有如下错误
libldap-2.3.so.0: cannot open shared object file: No such file or directory
那么请修改.bash_profile, 加如下字段,并source以便应用。
LD_LIBRARY_PATH=/usr/local/lib:/usr/local/BerkeleyDB.4.5/lib:/usr/local/openldap/lib
export PATH LD_LIBRARY_PATH
然后再重新启动pureftpd,登陆成功既是配置成功。