Jabberd2:安装和管理指南

来自Jabber/XMPP中文翻译计划
跳转到: 导航, 搜索


本文的英文原文来自 http://www.jabberdoc.org/jabberd_guide

Jabberd2安装和管理指南

目录

绪论

本文包括 Jabberd 2 服务器 (Jabberd) 的安装和管理指南 , 流行的基于Jabber协议的开源即时消息系统的最新版本. Jabber的目标是为客户端和客户端之间同步和异步的通讯提供一个XML协议, 尽管Jabber主要用于即时消息 (IM).

Jabberd 服务器是Jabberd协议原始的开源服务器实现, 并且留下了大部分流行的软件,无论是布署在公司或作为一个公开的 IM 服务. Jeremie Miller在1998年开始了Jabber项目,提供给所有的IM服务一个自由和开放的选择. Jabberd服务器继续成为Jabber项目的核心, 并且Jabberd 2相对于于使用更广泛的Jabberd 1.4服务器来说是成功者. Jabberd 2 是基于一个新体系结构的完整的新代码, 额外的功能,并更好地遵守了Jabber协议.

一个常见的消息协议的建立, 现在大家知道的XMPP (可扩展的消息和出席信息协议), 允许在Jabberd服务器之外新建更多的Jabber服务器实现. 这许多的开源项目中, 包含WP Jabberejabberd, 以及许多软件来自商业机构如 i3connect, Jabcast, Tipic 和 Jabber, Inc.

目的和范围

本文的作者打算提供一个完整的关于 jabberd 2 安装, 管理和开发的指南:

  • 系统准备
  • 服务器准备
  • 服务器配置
  • 体系结构概述

目标受众是那些希望在Unix或其某个变种安装和/或维护一个jabberd 2服务器的人. 因此, 本文仅覆盖了Unix操作系统上的Jabberd安装.

需要的背景知识

作者做了很多努力来制作这个手把手的指南; 然而, 还是假定读者对Unix 或 Linux 操作系统比较熟悉:

  • 能使用Linux命令行控制台
  • 熟悉文件系统,你的服务器将装在那里
  • 熟悉一个文本编辑器, 如 vi, Nano 或 NEdit
  • 基本的编辑 XML 文件的能力

假定读者基本熟练使用一个Jabber客户端. 另外, 假定读者熟悉硬件和软件, 例如防火墙, 路由器或调制解调器, 如果使用了这类硬件,jabber服务器将用来连接到互联网. 这些次要程序和设备的配置超出了本指南的范围.

如何使用本文档

本指南根据用户的使用来组织章节:

  • 安装和配置 Jabberd 2 (2到4章)
  • 一般的配置和管理任务 (5到6章)
  • Jabberd 2配置文件概要 (7到12章)
  • Jabber 2体系结构 (13章)
  • Jabberd 快速指南 (附录A)
  • Jabberd 2 常见问题(FAQ)

快速指南是为有经验的用户尽快运行而设计的. 详细的 Jabberd 2 安装指导开始于第二章,准备安装Jabberd2. 第5和第6章分别列出了常见的配置管理任务, 剩下的章节提供了详细的配置信息.

本文使用的约定

本文主要是作为一个安装指南提供的, 因此, 使用了特定的约定来使安装对用户来说更容易. 以下出现的约定贯穿本指南的安装章节:

表 1.4. 本指南使用的文档约定

约定 名称 描述
P 参数 一个配置文件中关于你的特定安装的信息, 等等.
C 检查点 一个点,停止并检查你的安装
N 注意 强调信息
I 重要 重要的强调或警告
F 必需的文件 完成这一步或下列步骤所需要的软件或特定文件
O 可选步骤 这一步在大部分基本安装中不是必需的步骤
E 外部系统 这一步可能需要在外部系统配置,如路由器

这些里面最有用的约定是参数"Parameters." 第2章开始于一个关于你的安装的信息(参数)的列表,在你的安装步骤中将需要用到它们. 你可以在开始安装Jabberd之前收集所有这些信息, 然后你可以在每一步显示了P的地方参考.

这个安装指南用编号来组织这些步骤,下级步骤. 鼓励用户把本指南当成一个检查列表来使用. 当一个步骤的所有下级步骤完成, 接着上级步骤本身也完成了. 注意一个 "可选步骤"的所有子 (下级步骤) 也是可选的. 注意 "可选步骤" 设计用来满足关于在哪个条件和/或下可选步骤应被执行的需求.

标为"外部系统"的步骤提供信息给用户,表示安装可能需要执行于一个jabberd之外的系统. 这些系统包括路由器, 防火墙, DNS服务器, 等等. "外部系统" 提示主要是信息提示而不是详尽的. 剩下的约定是不言自明的.

注意本指南列出的每个命令引用的一个命令都是进入了一个命令行提示或命令行提示shell, 例如 X-term 或 E-term. 也要注意在本文里, 术语 "Jabberd" 指的是 Jabberd 2 服务器, 除非特别声明. 术语 "Jabber" 指基于Jabber的系统或系统们, 而 "XMPP" 指Jabber系统运行的协议.

本文使用结构化的文本建立. 结构化的文本使用标准文本格式化约定, 例如 underscores, 来展示格式化的文本. 已经做了很多努力来让文本和HTML格式接近. 一个例外是,在文本版本中使用的 bang 字符 ("!") ,在HTML版本中是用来避免不想要的格式的. "Bangs" 出现在文本版本的一些行的开始, 而这些可能被忽略. 它们不显示在 HTML 版本中.

更多阅读

访问Jabber软件基金会 获得关于jabberd 2, jabber客户端, 和Jabber协议的最新新闻. Jabber Faq 回答关于Jabber的基本问题. 鼓励读者访问关于jabber管理的提问 Jadmin归档, 或订阅 Jadmin邮件列表得到最新的jabberd管理信息. Jabberd 2开发信息可以在Jabberd归档找到,或订阅Jabberd邮件列表.

也有许多好的关于Jabber的书. 注意以下的书关于jabberd 1.4的只是写于2003年:

法律术语

Jabberd安装和管理指南的版权(2003)由Will Kamishlian and Robert Norris所有。

这项工作是根据创作共用许可署名,类似非商业性使用方式共享许可。要查看本许可协议,请访问 http://creativecommons.org/licenses/by-nc-sa/1.0/ 或发信到 Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

来源

Robert Norris, 主要的Jabberd 2开发者, 以及Jabberd List的发起人,为本文提供了技术信息.

准备安装Jabberd2

本章让你和你的系统准备好安装Jabberd 2:

本章的表 2.1. 列出了Jabberd 2安装需要的信息. 在这个点上收集这个信息是可选的; 然而, 现在完成这个表格将使安装更容易.

收集必需的信息

下表列出的信息是安装过程中需要的. 以下是每个参数提供的信息:

  • 参数Parameter
  • 必需的Required
  • 章节Section
  • 描述Description
  • 你的信息Your Information

"Parameter" 是信息的名称部分. 贯穿整个指南, 特定的参数指向 P 约定. "Required 要么是 "Y" (yes), "N" (no), 要么是 可选的名称. 可选的名称指向这个参数需要的选项. 一些条目有建议的内容给"Your Information." 这些条目要么显示受限的选择要么显示缺省值. 这里给出了缺省值, 它们被用于本指南的例子.

对于最小安装, 完成所有必需的参数. 对于什么条件下需要可选的参数的更多信息, 详见参考章. "Description" 是一个简短描述. 再一次的, 详见参考章.

I Important: Table Contains Passwords

下表包含了密码. 如果你在下表写下了你的密码, 把本文(或页)存在一个安全的地方.

表 2.1. Jabberd2安装必需的信息

参数 必需的 章节 描述 你的信息
Jabberd User and Group Y 2.2 Linux(或其他OS)用户和组,将用于运行Jabberd user: jabber group: jabber
PID Directory Y 2.3 Jabberd存储PID文件的目录 /usr/local/var/jabberd/pid
Log Directory N 2.3 用于Jabberd logs的目录. 如果在配置文件中不指定, 日志缺省存在syslog. /usr/local/var/jabberd/log
Authentication Package Y 2.4.3 3.3, Jabberd验证管理使用的第三方包 MySQL, PostgreSQL, Berkeley DB, OpenLDAP or PAM
Data Storage Package Y 2.4.4 4.3 用于存储Jabberd数据的第三方包 MySQL, PostgreSQL or Berkeley DB
Data Directory Berkeley DB 4.1.1, 4.2.1, 用于存储Berkeley DB数据文件的目录 /usr/local/var/jabberd/db
MySQL User and Password MySQL 3.5.2.2, 4.1.2, 4.2.2, Jabberd用于连接MySQL的MySQL用户名和密码 user: jabberd2 password: secret
PostgreSQL User and Password PostgreSQL 3.5.3.1, 1 3, 4.2.3, Jabberd用于连接PostgreSQL的PostgreSQL用户名和密码 user: jabberd2 password: secret
OpenLDAP Connection Settings OpenLDAP 2.5 用于你的OpenLDAP服务器连接设置: 指定LDAP服务器(或IP)的FQDN,端口,和LDAP使用的版本(要么v2要么v3)
OpenLDAP User and Password OpenLDAP 4.2.5 连接到你的OpenLDAP服务器的用户名和密码. 只有你的OpenLDAP服务器不允许匿名绑定(访问)时才需要
OpenLDAP Query Settings OpenLDAP 4.2.5 Base DN (识别名) 和 User ID 属性用于为OpenLDAP服务器建立查询. Base DN 可以要么是服务器的root DN 要么是一个可以在它那找到 User ID's 的 RDN (相对的识别名).
Hostname Y 4.4 你的安装了Jabberd服务器的主机名. 对于可从互联网访问的服务器, 看起来类似 somedomain.com
SSL Key Location N 5.3.1, 5.3.2 OpenSSL证书文件的位置. 对于SSL加密通讯是必需的 /usr/local/etc/jabberd/server.pem
Router User and Password N 5.4 用于别的组件连接到Jabberd Router组件的用户名和密码 user: jabberd2 password: secret

新建Jabber用户和组

你应该新建一个jabber用户和组来运行服务器:

P 参数: Jabber User and Group

新建一个用于运行Jabberd(作为超级用户)的用户和组:

          su
          groupadd jabber
          useradd -g jabber jabber

I 重要: 检查你的用户和组命令

以上命令只是一个例子. 在你的系统中增加一个用户和组的命令和参数可能不同. 如果对这些命令有任何疑问请参考手册.

为PID's和Logs新建目录

你应该为Jabberd新建一个目录来存储它的PID和log文件, 并让之前新建的用户拥有这些目录的所有权.

P 参数: PID Directory

为PID文件(作为超级用户)新建一个目录:

          su
          mkdir -p /usr/local/var/jabberd/pid/
          chown -R jabber:jabber /usr/local/var/jabberd/pid/

以上目录是Jabberd PID 文件的缺省的位置.

你也可以选择为logs新建一个目录.

O 可选的: Log Directory

如果你想要, 为logs新建一个独立的目录, 并把所有权赋予你的jabber用户:

          mkdir -p /usr/local/var/jabberd/log/
          chown -R jabber:jabber /usr/local/var/jabberd/log

N 注意: Log文件缺省为Syslog

注意Jabberd缺省地把消息写到syslog. 为了强制Jabberd把它的logs写到上述目录, 必须编辑组件的XML文件以指定上述新建的目录.

安装先决条件

Jabberd2有四个先决条件:

技术上来讲, Jabberd 2的安装可以不需要OpenSSL或Libidn; 然而, 强烈推荐在安装Jabberd之前安装这些包. Jabberd 2也要求数据存储包用于应用和验证; 然而, 一个单独的包, 例如 MySQL, 也可能同时满足数据存储和验证的要求.

OpenSSL

OpenSSL为Jabber提供客户端到服务器以及服务器之间的通讯的加密. XMPP协议要求Jabber服务器支持TLS (传输安全层). TLS是SSL的继任者.

N 注意: 最小OpenSSL版本

Jabberd 2依赖OpenSSL版本0.9.6b或更高.

I 重要: OpenSSL升级问题

如果你升级了OpenSSL, 你可能需要重新编译安装目前依赖于老版本OpenSSL的软件. 提出这个警告是因为很多工具依赖于OpenSSL, 而且OpenSSL升级之后这些工具可能停止运作. 建议谨慎地更新OpenSSL, 升级OpenSSL的详细指引超出了本文范围.

更多信息请看OpenSSL网站. OpenSSL下载在OpenSSL Source页. 为Jabberd 2安装OpenSSL的指引在本指南的附录里. 参见为Jabberd安装OpenSSL.

Libidn

Libidn为Jabberd 2提供必要的字符处理功能. 在Jabberd 2稳定版3之前, libidn已经被包含在Jabberd 2分发版里; 然而, 版权冲突使得libidn必须提前独立安装.

N 注意最小libidn版本

Jabberd 2依赖于libidn版本0.3.0或更高.

详见Libidn网站. Libidn下载在Libidn Source页. 安装libidn指引在本指南的附录. 参见为Jabberd安装Libidn.

数据存储包

Jabberd 2对数据库集成的支持比以前更好了, 而且Jabberd 2能使用三种自由数据库之一来提供数据存储:

MySQL是推荐以及缺省的数据存储. 文件也可以用来存储Jabberd 2数据; 然而, 这是不推荐的.

N 注意: MySQL和Unicode支持

MySQL版本4.1和更高版本支持Unicode (UCS-2和UTF8) 字符编码. 如果你的安装需要支持多字母编码, 并且希望使用MySQL, 选择4.1或更高版本.

如果你已安装了这些数据库中的一个, 你可以配置它为Jabberd工作. 反之, 你应该选择这些数据库中之一并在继续安装Jabberd之前安装它. MySQL是推荐的数据库; 然而, Berkeley DB 需要的安装和管理工作更少. 从而, 对于用户比较少的安装来说,Berkeley DB 也是理想的选择.

I 重要: MySQL需要开发库和头文件

注意Jabberd需要的不止是最小的MySQL安装. 除了基本的MySQL安装, Jabberd要求开发库和头文件也要安装. 要么执行一个MySQL Downloads页列出的最大安装, 要么独立的安装服务器, 客户端程序, 库和头文件, 以及动态客户端库. 为了安装附加的库,可能需要卸载当前的 MySQL安装.

本文的附录包括了为Jabberd 2安装MySQL或Berkeley DB的指引. 参见为Jabberd安装Berkeley DB为Jabberd安装MySQL.

验证包

Jabberd 2能使用五种第三方数据包之一来处理用户验证:

注意三种支持的一个应用数据包也被用于管理验证信息. 所以, 安装MySQL, Berkeley DB 或 PostgreSQL 之一同时满足了Jabberd数据包的要求. 可以用一个文件存储验证数据; 然而, 这是不推荐的. 推荐的和缺省的包是MySQL.

如果你已经安装了以上五种验证数据包之一, 你可以配置它用于Jabberd 2. 如果没有, 你应该安装以上五个包中的一个或多个.

本文的附录包括了为Jabberd 2安装MySQL或Berkeley DB的指引. 参见为Jabberd安装Berkeley DB为Jabberd安装MySQL.

安装Jabberd 2

本章描述如何编译和安装Jabberd 2.

下载Jabberd 2

F 必需的文件

Jabber Studio下载文件 jabberd-2.0sn.tar.gz , 这里 "n" 是Jabberd 2的最新稳定版本号.

下载上述文件到一个 /home 下的目录,用于编译这些安装文件. 撰写本文的时候, Jabberd 2 稳定发布版3 是最新的版本并且用于下面的例子.

提取Jabberd安装文件

进入到你下载上述文件的目录然后通过命令行提取Jabberd 2文件:

      tar -zxvf  jabberd-2.0s3.tar.gz

配置Jabberd编译

|| 待做: 准备重写配置指引使得它们更清晰. 也许放一些特别的配置到 FAQ ||

进入上面建立的文件夹:

      cd jabberd-2.0s3

O 可选的: 查看配置选项

在配置Jabberd之前, 你可以查看所有配置选项,运营以下命令:

          ./configure --help

这将提供一个设置配置选项的清单和语法. 例如, 你可以安装Jabberd到一个特定的目录,通过使用 --prefix=PREFIX 选项. 通过提供一个 PREFIX 路径, 所有的Jabberd文件将被安装在这个目录下. 如果你正在测试一个新的Jabberd安装,这可能很有用. 另一个有用的选项是 --enable-debug. 这个选项允许Jabberd提供详细的调试信息; 然而, 在生产系统上它应该慎用.

I 重要: 配置选项已经在稳定版本3中改变了

Jabberd 2稳定版本3为配置脚本改变了一些参数. 以下信息属于Jabberd 2稳定版本3和更高版本.

I 重要: 对于OpenSSL和Libidn使用明确的选项

推荐Jabberd 2把OpenSSL和Libidn配置成明确的选项. 这些包从技术上是可选的. 所以, 配置可以不用它们而编译Jabberd 2,如果当配置运行的时候它们的库和头文件没找到.

P 参数: 应用程序数据包和验证数据包

验证包和数据包应该以 --enable- 选项指定. 选项为 --enable-mysql, --enable-pgsql, --enable-db, --enable-pam or --enable-ldap. 尽管 --enable-mysql 是缺省的, 如果使用了MySQL,还是推荐指定它. 例如, 这个命令将被用于允许MySQL成为验证和存储包,但不支持调试:

          ./configure --enable-mysql --enable-ssl --enable-idn

以下命令将用于配置Jabberd使用Berkeley DB,同时用于存储和验证并允许调试:

      ./configure --enable-db --enable-debug --enable-ssl --enable-idn

如果Jabberd的先决条件之一被安装在一个非标准的位置, 你将需要在运行配置的时候指定这个位置. 指定替代的头文件路径可以使用 --with-extra-include-path 选项,指定替代的库文件路径可使用 -with-extra-library-path 选项. 多路径, 分别位于不同克隆, 可以指定. 例如, 如果OpenSSL和MySQL被安装在 /usr/local, 你可以用以下指令配置:

      ./configure --enable-pgsql --enable-ssl --enable-idn \
      --with extra-include-path=/usr/local/include:/usr/local/include/mysql \
      --with-extra-library-path=/usr/local/lib:/usr/local/lib/mysql

I 重要: 不正确的参数会被忽略

Jabberd忽略不正确的配置参数. 因而, 一个不正确的配置参数可能仍会成功配置, 即使错误的Jabberd配置. 如果有疑问运行 ./configure --help .

I 重要: Redhat 9配置

在Redhat 9编译Jabberd 2要求特定的配置,因为Redhat 9自带了自己的Kerberos版本. 详见 FAQ 中关于 Redhat 9 的部分.

如果你希望使用缺省配置,简单地运行配置命令:

      ./configure

这将配置Jabberd使用MySQL和安装到 /usr/local 目录. 如果你接收到错误, 你可能希望检查 FAQ,你将发现许多系统特定的工作环境.

编译Jabberd

编译Jabberd,运行以下命令:

      make

安装Jabberd

切换到超级用户:

      su

运行make install:

      make install

缺省文件位置

你的Jabberd 2安装完成了. 以下是一个缺省安装的文件位置列表:

      /usr/local/etc/jabberd     Jabberd Configuration Files
      /usr/local/bin       Jabberd Binaries (jabberd, c2s, resolver, router, s2s, sm)

设置配置文件的所有权

Jabberd配置文件包含密码; 所以, 你应该对这些文件设置所有权和许可,这样他们只能被你的jabber用户读和被root用户写. 使用你的配置文件的位置和你的jabberd用户, 设置这些文件的所有权:

      chown -R root:jabber /usr/local/etc/jabberd/*

然后, 给这些文件设置许可,这样别人不能读写它们:

      chmod -R 640 /usr/local/etc/jabberd/*

现在, 只有你的jabber用户和和超级用户能读和编辑你的配置文件.

O 可选的: 为配置文件建立符号连接

如果你使用缺省的位置安装Jabberd, 你可能希望在 /etc 目录为配置文件新建一个符号连接(作为超级用户). 这将使你更容易找到和修改它们:

          ln -s /usr/local/etc/jabberd/ /etc/jabberd

Jabberd 2现在安装完了. 继续下一章配置你的安装.

基本配置

本章为大多数基本配置和你的Jabberd 2的测试提供一个快速的路线图. Jabberd 2的基本安装包含这三个步骤:

  1. 设置主机名(sm.xml和c2s.xml)
  2. 对于存储和验证包的规定和配置
  3. 测试服务器

Jabberd 2是通过它的6个XML文件来配置的. 对于缺省的安装, 这些配置文件在 /usr/local/etc/jabberd/, 而且它们可以从 /etc/jabberd 访问,如果你为这个目录建立了符号连接的话. 注意如果你在前面第二章收集了必需的信息,本章更容易完成.

在sm.xml和c2s.xml设置主机名

基本配置的第一步包括在sm.xml 和 c2s.xml设置主机名.

P 参数: Hostname

你的服务器主机名(网络ID) 必须同时在 c2s.xml 和 sm.xml 里设置,这样这个 ID 为你的服务器提供一个可解析的引用. 在 c2s.xml 里,这个 ID 位于头标记为 Local network configuration 的位置(大约第63行), 在 sm.xml 里这个 ID 位于 Session manager configuration (第一行). 编辑 sm.xml 和 c2s.xml ,这样这个 ID 引用你的服务器.

在 sm.xml :

      <!-- Session manager configuration -->
      <sm>
        <!-- Our ID on the network. Users will have this as the domain part of
             their JID. If you want your server to be accessible from other
             Jabber servers, this ID must be resolvable by DNS.s
             (default: localhost) -->
        <id>somemachine.somedomain.com</id>

在 c2s.xml :

      <!-- Local network configuration -->
      <local>
        <!-- Who we identify ourselves as. This should correspond to the
             ID (host) that the session manager thinks it is. You can
             specify more than one to support virtual hosts, as long as you
             have additional session manager instances on the network to
             handle those hosts. The realm attribute specifies the auth/reg
             or SASL authentication realm for the host. If the attribute is
             not specified, the realm will be selected by the SASL
             mechanism, or will be the same as the ID itself. Be aware that
             users are assigned to a realm, not a host, so two hosts in the
             same realm will have the same users.
             If no realm is specified, it will be set to be the same as the
             ID. -->
        <id>somemachine.somedomain.com</id>

如在 c2s.xml 文件看到的, 这个主机名将被加到你的用户名后面以建立Jabber ID's, 而且为了Jabberd能通过互联网访问,它必须可通过DNS解析,.

N 注意

你可以仅使用一个域名(somedomain.com) 给你的Jabberd 2网络ID,如果你的DNS之前被配置成解析那个ID到你的服务器. 关于为Jabberd 2设置 DNS SRV 记录的信息,参见5.7章.

对存储和验证包的提供和配置

要让Jabberd 2和你选择的外部存储和验证包一起工作,包括这些步骤:

  1. 提供和Jabberd 2协作的外部包
  2. 为你选择的存储包配置 sm.xml
  3. 为你选择的验证包配置 c2s.xml

大多数 Jabberd 2 安装包依赖于单个包, 例如 MySQL, 来同时提供存储和验证服务. 如果你的安装包依赖于单个的包, 你将需要为Jabberd 2配置这个包,并且在 sm.xml 和 c2s.xml里都加入类似的连接信息.

P 参数: 数据存储和验证包

跟随本指南,为你选择的存储和验证包完成有关的条款. (用于存储的 Berkeley DB, MySQL 或 PostgreSQL. 用于验证的 Berkeley DB, MySQL, PostgreSQL, PAM 或 OpenLDAP.)

跳到你选择的外部存储包开始:

然后你将被引导继续提供(如果需要) 和配置你的验证包. 一旦你的外部包准备好了, 并且Jabberd被配置好使用它们, 你将进入服务器测试.

以pdf格式查看

提供和配置BerkeleyDB

Berkeley DB 提供最简单的方法来让你的Jabberd 2服务器快速启动运行. Jabberd 2需要的最低版本是 4.1.24 或更高.

提供BerkeleyDB

如果你把Berkeley DB用来存储或验证,请完成本节. 让你的系统提供Berkeley DB是很简单的. Berkeley DB只需要一个目录存储数据文件, 而jabber用户或组拥有这个目录的所有权.

P 参数: 数据目录

新建一个目录并为Berkeley DB设置权限 (使用之前已经建立的用户和组). (以超级用户身份):
           mkdir -p /usr/local/var/jabberd/db
           chown -R jabber:jabber /usr/local/var/jabberd

现在Berkeley DB已经准备好用于Jabberd了.

配置存储使用BerkeleyDB(sm.xml)

如果你使用Berkeley DB来存储,请完成本节. Jabberd 2要求的最低配置是使用Berkeley DB作为后端存储. 简单地设定使用的驱动并指定数据库的位置.

sm.xml 里的 Storage database configuration (存储数据库配置)段落, 编辑 driver 使用 db (Berkeley DB):

      <!-- Storage database configuration -->
        <storage>
          <!-- By default, we use the MySQL driver for all storage -->
          <driver>db</driver>

P 参数: 数据目录

sm.xml 里的 Berkeley DB driver configuration 段落, 为你的数据库设定路径 (在上面 4.3.1. 建立的):
          <!-- Berkeley DB driver configuration -->
          <db>
            <!-- Directory to store database files under -->
            <path>/usr/local/var/jabberd/db</path>
 
            <!-- Synchronize the database to disk after each write. If you
                 disable this, database accesses may be faster, but data may
                 be lost if jabberd crashes. -->
            <sync/>
          </db>

现在Jabberd 2贝配置成使用Berkeley DB存储了.

如果你希望使用别的Berkeley DB之外的包作为验证包, 跳到你选择的验证包:

否则, 继续到 4.3.3. 直接往下完成你的Jabberd 2配置.

配置验证使用BerkeleyDB(c2s.xml)

如果你使用Berkeley DB来验证,请完成本节. Jabberd 2对于Berkeley DB验证配置的要求同上,除了包含在 c2s.xml 的信息.

c2s.xmlAuthentication/registration database configuration (验证/注册 数据库配置)段落, 编辑 module 使用 db (Berkeley DB):

      <!-- Authentication/registration database configuration -->
      <authreg>
        <!-- Backend module to use -->
        <module>db</module>

P 参数: 数据目录

c2s.xmlBerkeley DB module configuration 段落, 为你的数据库设定路径 (在上面 4.3.1. 建立的):
          <!-- Berkeley DB module configuration -->
          <db>
            <!-- Directory to store database files under -->
            <path>/usr/local/var/jabberd/db</path>
 
            <!-- Synchronize the database to disk after each write. If you
                 disable this, database accesses may be faster, but data may
                 be lost if jabberd crashes. -->
            <sync/>
          </db>

你的Jabberd 2的存储和验证配置现在完成了. 在转移到其他配置任务(例如 第五章 的配置SSL)之前,跳到 测试服务器 去开始测试你的服务器.

以PDF格式查看

提供和配置MySQL

MySQL 是用于存储和验证的缺省的Jabberd 2包.

提供MySQL

如果你使用MySQL存储 和/或 验证请完成本节. 为了给Jabberd配置MySQL, 你必须运行Jabberd 2分发包里带的安装脚本. 脚本运行之后, 你应该新建衣蛾用户并赋予数据库权限.

首先, 运行MySQL安装脚本. 这个脚本位于Jabberd源码目录下的/tools子目录. 切换到tools目录并启动MySQL控制台(MySQL服务应该已经在运行中). 然后, 从MySQL控制台运行 db-setup.mysql 脚本:

   mysql -u root -p
   mysql>\. db-setup.mysql

现在一个用于Jabberd的数据库已经存在于MySQL数据目录, 新建一个MySQL用户给Jabberd用来连接MySQL服务器.

P 参数: MySQL用户名和密码

从MySQL控制台, 运行以下SQL指令, 用你选择的Jabberd MySQL用户的密码替换 secret:
 GRANT select,insert,delete,update ON jabberd2.* 
      to jabberd2@localhost IDENTIFIED by 'secret';

注意密码 secret 是Jabberd配置文件中用于MySQL的缺省密码.

MySQL现在准备好用于Jabberd了.

N 注意: 缺省的MySQL Socket

Jabberd 2稳定版3 连接MySQL服务器的socket位于 ‘’/tmp/mysql.sock‘’ . 从源码安装MySQL时的缺省socket是 ‘’/var/lib/mysql/mysql.sock‘’ . 如果 ‘’/tmp/mysql.sock‘’ 不存在,你需要新建一个软连接:
      ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

如果你不确定你的MySQL服务器的socket在哪, 参考你的MySQL配置文件(通常位于 /etc/my.cnf/etc/mysql/my.cnf ).

配置存储使用MySQL(sm.xml)

如果你使用MySQL存储,请完成本节. 大多数使用MySQL存储的安装只需要设置驱动, 用户和密码.

sm.xml 里标为 Storage database configuration 的段落下, 确保 driver 是用 mysql . (缺省这driver应该被设为mysql.):

 <!-- Storage database configuration -->
        <storage>
          <!-- By default, we use the MySQL driver for all storage -->
          <driver>mysql</driver>

P 参数: MySQL用户名和密码

sm.xml 里标为 MySQL driver configuration 的段落下, 把 secret 替换成你的MySQL密码. 如果你不使用缺省用户(jabberd2)则还要修改用户名 :
 <!-- MySQL driver configuration -->
      <mysql>
        <!-- Database server host and port -->
        <host>localhost</host>
        <port>3306</port>
 
        <!-- Database name -->
        <dbname>jabberd2</dbname>
 
        <!-- Database username and password -->
        <user>jabberd2</user>
        <pass>secret</pass>
 
        <!-- Transaction support. If this is commented out, transactions
             will be disabled. This might make database accesses faster,
             but data may be lost if jabberd crashes.
 
             This will need to be disabled if you are using a MySQL
             earlier than v3.23.xx, as transaction support did not appear
             until this version. -->
        <transactions/>

注意只有你的MySQL服务器运行在另一个主机上你才应该修改host设置. 只有你的MySQL服务器运行在一个非标准端口(3306是MySQL安装后的缺省端口)你才应该修改port设置. transaction support 段落则是不言自明的了.

现在Jabberd 2已经配置成使用MySQL来存储了.

如果你希望使用一个不同于MySQL的验证包, 跳到你选择的验证包:

否则, 继续到 4.4.3. 直接往下完成你的Jabberd 2配置.

配置验证使用MySQL(c2s.xml)

如果你使用MySQL来验证,请完成本节. Jabberd 2对于MySQL验证配置的要求同上,除了包含在 c2s.xml 的信息.

c2s.xmlAuthentication/registration database configuration (验证/注册 数据库配置)段落, 确保 driver 使用 mysql (驱动缺省应该就是mysql):

      <!-- Authentication/registration database configuration -->
      <authreg>
        <!-- Backend module to use -->
        <module>mysql</module>

P 参数: MySQL用户名和密码

c2s.xmlMySQL module configuration 段落, 把 secret 替换成你的MySQL密码. 如果你不使用缺省用户(jabberd2)则还要修改用户名 :
      <!-- MySQL module configuration -->
      <mysql>
        <!-- Database server host and port -->
        <host>localhost</host>
        <port>3306</port>
 
        <!-- Database name -->
        <dbname>jabberd2</dbname>
 
        <!-- Database username and password -->
        <user>jabberd2</user>
        <pass>secret</pass>
      </mysql>

注意只有你的MySQL服务器运行在另一个主机上你才应该修改host设置. 只有你的MySQL服务器运行在一个非标准端口(3306是MySQL安装后的缺省端口)你才应该修改port设置.

你的Jabberd 2的存储和验证配置现在完成了. 在转移到其他配置任务(例如 第五章 的配置SSL)之前,跳到 测试服务器 去开始测试你的服务器.

以PDF格式查看

提供和配置PostgreSQL

PostgreSQL 和MySQL一样,提供一个非常易于管理的后端用于存储和验证. 和MySQL不同的是, PostgreSQL提供了更好的 unicode支持.

提供PostgreSQL

如果你使用PostgreSQL存储 和/或 验证请完成本节. 为了给Jabberd配置PostgreSQL, 你必须新建一个数据库,新建一个PostgreSQL用户并运行Jabberd 2分发包里带的PostgreSQL脚本.

为Jabberd新建数据库. (PostgreSQL服务器应该已经在运行):

      createdb -U postgres jabberd2

以上命令讲新建一个数据库,你可以在那个数据库运行接哦本来安装Jabberd PostgreSQL数据库.

N 注意: Unicode支持

如果你希望为你的PostgreSQL数据库激活Unicode支持, 把以上命令修改如下:
      createdb -U postgres -E UNICODE jabberd2

P 参数: PostgreSQL用户名和密码

新建你的Jabberd数据库用户, 输入以下命令:
      createuser -P -U postgres jabberd2

这个命令将初始化一个交互用户创建脚本. 当看到提示, 输入将来用于连接到你的PostgreSQL数据库的Jabberd的密码:

      Enter password for user "jabberd2":
      Enter it again:
      Shall the new user be allowed to create databases? (y/n) n
      Shall the new user be allowed to create more new users? (y/n) n
      CREATE USER

CREATE USER 信息表示命令执行成功.

在你的jabberd用户创建之后, 你已经准备好运行PostgreSQL安装脚本了. 这个脚本位于 '\[Jabberd Source Files\]\/tools'. 切换到 tools 目录并以jabberd2用户身份启动PostgreSQL控制台:

      psql -U jabberd2 jabberd2

然后, 从PostgreSQL控制台运行 db-setup.pgsql 脚本:

      jabberd2=>\i db-setup.pgsql

PostgreSQL现在准备好用于Jabberd了.

配置存储使用PostgreSQL(sm.xml)

如果你使用PostgreSQL存储,请完成本节. 大多数使用PostgreSQL存储的安装只需要设置驱动, 用户和密码.

sm.xml 里标为 Storage database configuration 的段落下, 确保 driver 是用 pgsql (PostgreSQL):

      <!-- Storage database configuration -->
        <storage>
          <!-- By default, we use the MySQL driver for all storage -->
          <driver>pgsql</driver>

P 参数: PostgreSQL用户名和密码

sm.xml 里标为 PostgreSQL driver configuration 的段落下, 把 secret 替换成你的PostgreSQL密码. 如果你不使用缺省用户(jabberd2)则还要修改用户名 :
      <!-- PostgreSQL driver configuration -->
      <pgsql>
        <!-- Database server host and port -->
        <host>localhost</host>
        <port>5432</port>
 
        <!-- Database name -->
        <dbname>jabberd2</dbname>
 
        <!-- Database username and password -->
        <user>jabberd2</user>
        <pass>secret</pass>
 
        <!-- Transaction support. If this is commented out, transactions
             will be disabled. This might make database accesses faster,
             but data may be lost if jabberd crashes. -->
        <transactions/>
      </pgsql>

注意只有你的PostgreSQL服务器运行在另一个主机上你才应该修改host设置. 只有你的PostgreSQL服务器运行在一个非标准端口(5432是PostgreSQL安装后的缺省端口)你才应该修改port设置. transaction support 段落则是不言自明的了.

现在Jabberd 2已经配置成使用PostgreSQL来存储了.

如果你希望使用一个不同于PostgreSQL的验证包, 跳到你选择的验证包:

否则, 继续到 4.5.3. 直接往下完成你的Jabberd 2配置.

配置验证使用PostgreSQL(c2s.xml)

如果你使用PostgreSQL来验证,请完成本节. Jabberd 2对于PostgreSQL验证配置的要求同上,除了包含在 c2s.xml 的信息.

c2s.xmlAuthentication/registration database configuration (验证/注册 数据库配置)段落, 确保 driver 使用pgsql (PostgreSQL):

     <!-- Authentication/registration database configuration -->
      <authreg>
        <!-- Backend module to use -->
        <module>pgsql</module>

P 参数: PostgreSQL用户名和密码

c2s.xmlPostgreSQL module configuration 段落, 把 secret 替换成你的PostgreSQL密码. 如果你不使用缺省用户(jabberd2)则还要修改用户名 :
      <!-- PostgreSQL module configuration -->
      <pgsql>
        <!-- Database server host and port -->
        <host>localhost</host>
        <port>5432</port>
 
        <!-- Database name -->
        <dbname>jabberd2</dbname>
 
        <!-- Database username and password -->
        <user>jabberd2</user>
        <pass>secret</pass>
      </pgsql>

注意只有你的PostgreSQL服务器运行在另一个主机上你才应该修改host设置. 只有你的PostgreSQL服务器运行在一个非标准端口(5432是PostgreSQL安装后的缺省端口)你才应该修改port设置.

你的Jabberd 2的存储和验证配置现在完成了. 在转移到其他配置任务(例如 第五章 的配置SSL)之前,跳到 测试服务器 去开始测试你的服务器.

以PDF格式查看

提供和配置PAM

PAM(Linux的可插拔验证模块)为Jabberd 2提供内建的验证支持.

提供PAM

如果你使用PAM验证请完成本节. 通过PAM验证需要一个有效的PAM配置文件 jabberd . 对于多数系统, 这个配置文件应该位于 /etc/pam.d .创建 Jabberd PAM配置文件超出了本指南的范围; 无论如何, 创建这个配置文件有个捷径. 拷贝 system-auth 配置文件到 jabberd (以root身份):

      cp /etc/pam.d/system-auth /etc/pam.d/jabberd

这将新建一个PAM配置文件给Jabberd2使用.

I 重要: PAM验证需要访问PAM数据库

通过PAM做Jabberd验证需要Jabberd2有权访问PAM数据库. 对多数系统, 该数据库就是 /etc/shadow 文件. 因此, Jabberd2必须以root身份运行, 或jabberd用户必须被授予对此文件的读权限. 以root身份运行Jabberd2服务是不推荐的.

N 注意: Winbind可用于集成NT验证到PAM

来自Samba项目的Winbind包可被用于支持通过Windows NT做Jabber验证. 当Winbind成功安装并配置之后, 配置Jabberd使用PAM来验证. 然后新建jabberd PAM配置文件如下:
      auth       required     pam_winbind.so
      password   required     pam_winbind.so
      account    required     pam_winbind.so
      session    required     pam_winbind.so

PAM现在准备好用于Jabberd了. 接下来开始配置通过PAM做Jabberd 2验证.

配置验证使用PAM(c2s.xml)

如果你使用PAM来验证,请完成本节. Jabberd 2需要一点配置来使用PAM.

c2s.xmlAuthentication/registration database configuration (验证/注册 数据库配置)段落, 编辑 module 使用pam:

      <!-- Authentication/registration database configuration -->
      <authreg>
        <!-- Backend module to use -->
        <module>pam</module>

用户不能创建他们自己的帐号当使用PAM验证时. 所以, 应该禁止公开帐号注册, 同时激活 auto-create ,这样会话管理器可以在用户第一次登录时自动创建帐号.

c2s.xml 里的 Authentication/registration database configuration 段落里查找 Registration configuration 子段落. 如下注释掉 enable 标签将禁止公开注册:

      <!-- Registration configuration -->
      <register>
        <!-- Account registration is enabled by default (provided the
             auth/reg module in use supports it). Comment this out to
             disable. -->
        <!-- <enable/> -->

sm.xml 里标为 User options 的段落 (靠近文件底部), 如下取消注释 auto-create 标签,这样会话管理器将在用户初次登录时创建一个信的Jabberd2帐号:

      <!-- User options -->
      <user>
        <!-- By default, users must explicitly created before they can start
             a session. The creation process is usually triggered by a c2s
             component in response to a client registering a new user.
 
             Enableing this option will make it so that a user create will be
             triggered the first time a non-existant user attempts to start
             a session. This is useful if you already have users in an
             external authentication database (eg LDAP) and you don't want
             them to have to register. -->
        <auto-create/>

你的Jabberd 2的存储和验证配置现在完成了(前提是你得提供和配置好存储包). 在转移到其他配置任务(例如 第五章 的配置SSL)之前,跳到 测试服务器 去开始测试你的服务器.

以PDF格式查看

提供和配置OpenLDAP

OpenLDAP提供分布式跨平台跨地区的验证支持. Jabberd 2要求的最低版本是OpenLDAP 2.1.0.

提供OpenLDAP

如果你使用OpenLDAP验证请完成本节. 你安装的OpenLDAP应该不需要为Jabberd 2特别配置; 无论如何, 在撰写本文的此刻(Jabberd 2稳定版3), 关于使用Jabberd连接OpenLDAP v3服务器有一个重要的问题. 目前Jabberd 2使用v2的语法. 缺省的, OpenLDAP v3服务器要求使用v3语法.

有一个办法来解决这个问题. 添加以下声明到你的 slapd.conf 文件, 并重启你的 slapd 守护进程:

      allow bind_v2

配置验证使用OpenLDAP(c2s.xml)

如果你使用OpenLDAP来验证,请完成本节. OpenLDAP配置更详细,因为配置需要主机,连接以及查询设置.

c2s.xmlAuthentication/registration database configuration (验证/注册 数据库配置)段落, 编辑 driver 使用ldap(OpenLDAP):

      <!-- Authentication/registration database configuration -->
      <authreg>
        <!-- Backend module to use -->
        <module>ldap<module>

P 参数: LDAP连接设置

c2s.xmlLDAP module configuration 的第一个部分处理连接你的OpenLDAP服务器所需要的设置. host 必须要么是这个OpenLDAP服务器的可以被服务器解析的主机名要么是它的IP地址. 端口389是OpenLDAP服务器的缺省端口, 所以大部分情况下, port 应该放在那不动. v3 标签指明你的OpenLDAP服务器是否v3版本. 如果是,取消这个标签的注释. 如果使用OpenLDAP v2服务器则保留注释 v3 标签. 最后, 如果你的服务器支持加密(参见下面的备注),则取消注释 starttlsssl 标签:
      <!-- LDAP module configuration -->
      <ldap>
        <!-- LDAP server host and port (default: 389) -->
        <host>ldap.example.com</host>
        <port>389</port>
 
        <!-- Use LDAP v3 if possible. If disabled, v2 will be used.
             Encryption options are only available if v3 is enabled. -->
        <!--
        <v3/>
        -->
 
        <!-- Encryption. If enabled, this will create an encrypted channel
             to the LDAP server using the LDAP STARTTLS mechanism. -->
        <!--
        <starttls/>
        -->
 
        <!-- Encryption. If enabled, this will create an encrypted channel
             to the server using the old-style "ldaps://" mechanism. It is
             recommended that you use <starttls/> instead of this. -->
        <!--
        <ssl/>
        -->

I 重要: 密码是明文传送的

目前本本的Jabberd 2 (stable 3)通过OpenLDAP验证时需要使用明文密码. 所以, 允许加密是绝对重要的. 如上所述, 加密选项只在连接OpenLDAP v3服务器时有效.

N 注意: 加密选项

作者已经成功的使用Jabberd 2和STARTTLS连接到一个OpenLDAP服务器的最新版本. STARTTLS运行于标准端口(389), 所以允许STARTTLS需要做的就是取消注释 v3starttls 标签. 另一方面, 作者未能成功的使用SSL加密连接Jabberd 2和OpenLDAP. 要设置SSL, 你应该指定OpenLDAP SSL 主机名(如果不同于 非SSL 主机名). 通常类似于 ldaps.example.com . 更重要的是, 你应该指定SSL端口. OpenLDAP的标准SSL端口(LDAPS)是636. 最后, 你应该取消注释 ssl 标签.

P 参数: OpenLDAP用户名和密码

OpenLDAP配置的下一部分处理查询OpenLDAP服务器的用户名和密码. 只有你的OpenLDAP服务器不允许为必需的搜索匿名绑定(验证)的时候才需要一个用户名和密码. 如果你的OpenLDAP服务器的连接要求验证取消注释这个段落. 注意 binddn 是用户的完整RDN(相对可分辨名称). 可能类似于 cn=admin,ou=people,dc=example,dc=com :
      <!-- DN to bind as for searches. If unspecified, the searches
           will be done anonymously. -->
      <!--
      <binddn>cn=Directory Manager</binddn>
      <bindpw>secret</bindpw>
      -->

P 参数: LDAP查询设置

最后, 必须为OpenLDAP查询设置用户ID和基础DN. 用户ID由 uidattr 标签指定. 这个ID应该是你的用户在特定基础DN(可分辨的名称)的唯一性标识的属性. 换句话说, 当查询指定的基础DN时, 这个特定的 uidattr 应该是唯一性地标识每个用户. basedn 属性指定查询运行的基础. 这可能是该OpenLDAP服务器的顶级DN, 例如 dc=example,dc=com 或着它可能是一个专门存放用户条目的RDN, 例如 ou=people,ou=sales,dc=example,dc=com . 使用一个低级的RDN好像可以加速OpenLDAP查询. 最后, 如果你的配置要求多个域, 你可以在 basedn 标签使用 realm 属性,为每个域指定一个基础DN. 注意如果你没有使用多个域, 就只需要指定一个单独的 basedn 而不需要 realm 属性:
      <!-- LDAP attribute that holds the user ID (default: uid) -->
      <uidattr>uid</uidattr>
 
      <!-- base DN of the tree. You should specify a DN for each
           authentication realm declared in the <local/> section above,
           by using the realm attribute. -->
      <basedn realm='company'>o=Company.com</basedn>
      <basedn>o=Example Corp.</basedn>
    </ldap>

以下是一个笔者工作中的OpenLDAP配置的展示:

      <!-- LDAP module configuration -->
      <ldap>
        <!-- LDAP server host and port (default: 389) -->
        <host>ldap.mydomain.org</host>
        <port>389</port>
 
        <!-- Use LDAP v3 if possible. If disabled, v2 will be used.
             Encryption options are only available if v3 is enabled. -->
 
        <v3/>
 
        <!-- Encryption. If enabled, this will create an encrypted channel
             to the LDAP server using the LDAP STARTTLS mechanism. -->
 
        <starttls/>
 
        <!-- Encryption. If enabled, this will create an encrypted channel
             to the server using the old-style "ldaps://" mechanism. It is
             recommended that you use <starttls/> instead of this. -->
        <!--
        <ssl/>
        -->
 
        <!-- DN to bind as for searches. If unspecified, the searches
             will be done anonymously. -->
 
        <!--
        <binddn>cn=admin,dc=mydomain,dc=org</binddn>
        <bindpw>snip</bindpw>
        -->          
 
        <!-- LDAP attribute that holds the user ID (default: uid) -->
        <uidattr>uid</uidattr>
 
        <!-- base DN of the tree. You should specify a DN for each
             authentication realm declared in the <local/> section above,
             by using the realm attribute. -->
 
        <basedn>ou=people,ou=design,dc=mydomain,dc=org</basedn>
      </ldap>


当使用OpenLDAP验证时用户不能创建他们自己的帐号. 所以, 应该禁止公开帐号注册, 同时激活 auto-create ,这样会话管理器可以在用户第一次登录时自动创建帐号.

c2s.xml 里的 Authentication/registration database configuration 段落里查找 Registration configuration 子段落. 如下注释掉 enable 标签将禁止公开注册:

      <!-- Registration configuration -->
      <register>
        <!-- Account registration is enabled by default (provided the
             auth/reg module in use supports it). Comment this out to
             disable. -->
        <!-- <enable/> -->

sm.xml 里标为 User options 的段落 (靠近文件底部), 如下取消注释 auto-create 标签,这样会话管理器将在用户初次登录时创建一个信的Jabberd2帐号:

      <!-- User options -->
      <user>
        <!-- By default, users must explicitly created before they can start
             a session. The creation process is usually triggered by a c2s
             component in response to a client registering a new user.
 
             Enableing this option will make it so that a user create will be
             triggered the first time a non-existant user attempts to start
             a session. This is useful if you already have users in an
             external authentication database (eg LDAP) and you don't want
             them to have to register. -->
        <auto-create/>

你的Jabberd 2的存储和验证配置现在完成了(前提是你得提供和配置好存储包). 在转移到其他配置任务(例如 第五章 的配置SSL)之前,跳到 测试服务器 去开始测试你的服务器.

以PDF格式查看

测试服务器

设置好主机名, 提供了外部包, 并配置Jabberd使用外部包之后, 你的服务器已经准备好测试了.

C 检查点: 启动你的服务器

你应该可以使用Jabberd 2启动脚本(以你的jabber用户身份)启动并测试你的Jabberd 2服务器,:
        su
        su jabber
        cd /usr/local/bin
        ./jabberd

N 注意: 疑难解答

如果Jabberd无法启动, 确保任何之前的实例已经停止. 这些实例包括所有Jabberd运行时组件( jabberd , router , resolver , sm , s2sc2s ). 注意你的jabber用户(如果按第二章的说明创建了的话.) 可能没有缺省路径; 所以, 你应该 cd/usr/local/bin 目录并如上运行 jabberd . 检查你选择的数据包服务器是否正常运行(除了Berkeley DB, 它不需要启动). 检查你的 syslog 查看错误信息. 如果你的服务器启动失败, 你可以用debug选项启动Jabberd 2(注意这需要在编译Jabberd 2时带上debug选项 — 参见3.3章):
        /usr/local/bin/jabberd -D

I 重要: Jabberd 2不应该用超级用户运行

和所有守护进程一样, Jabberd 2不应该以超级用户身份运行. 以超级用户身份运行Jabberd 2不仅对系统有破坏的风险, 而且可能导致创建文件许可的问题.

N 注意: 公开注册

Jabberd2缺省允许新用户公开注册. 因此, 测试你的服务器时, 你能通过使用新用户名登录来新建一个用户.

C 检查点: 从同网络的一台机器连接

一旦你检查你的服务器已经正常启动, 尝试从一个同网络的机器连接. 在一个Jabber客户端, 输入一个JID(Jabber ID),使用你在4.1章 sm.xml 设置的ID, 并尝试连接到你的服务器.

C 检查点: 从远程网络的客户端连接

如果你可以从同网络连接到你的服务器, 那么使用一个Jabber客户端从一个远程网络连接它. 这将测试那个 id 是否正确设以及机器名是否正确的进行DNS解析.

你的Jabberd 2服务器现在准备好使用了. 继续到 常规配置任务 了解更详细的配置选项, 例如允许SSL连接等.

以PDF格式查看

常规配置任务

在进入详细的Jabberd配置之前, 这里尝试为大部分常规的Jabberd配置任务提供一个指南:

注意有两个选项用于连接Jabberd 1.4外部服务到你的Jabberd 2安装. Jabberd 2可以连接到服务例如会议和网关, 运行一个Jabberd 1.4进程. 另外, 一个名为JCR的组件封装器已经发布了, 这个封装器允许一个Jabber 1.4组件(用C写的)被编译后以Jabberd 2服务运行. 本文撰写期间, JCR只和MU Conferencing测试通过了.

为互联网访问配置防火墙

尽管防火墙配置超出了本文范围, 管理员应该注意TCP端口需要被允许通过互联网访问:

  • 端口 5222 — 非SSL客户端通讯
  • 端口 5223 — SSL客户端通讯
  • 端口 5269 — 服务器间通讯

如果你的Jabberd 2安装是用于互联网访问,根据你的配置,以上TCP端口应该被允许.

配置Jabberd 2使用SSL连接

Jabberd 2不仅为Jabberd客户端和服务器之间提供STARTTLS和SSL连接, 而且在Jabberd服务组件( sm , resolver , s2sc2s )和Jabberd router 之间也提供. 这两个功能(Jabber客户端到Jabberd以及Jabberd组件到router)可以共用一个SSL证书, 也可以使用独立的密钥. 如何为Jabberd 2创建你自己的自签名证书,参见附录 生成自签名的SSL证书.

N 注意: 自签名证书是不被信任的

注意自签名证书不会自动被Jabber客户端信任,因为没有信任链来验证授权. 然而, 新建一个自签名证书不仅让你的Jabber用户可以通过一个安全通道连接(客户端可能会显示一个警告), 而且这样一个证书将为5个Jabberd组件( router , sm , resolver , s2sc2s )之间提供安全通讯.

N 注意: 添加证书到PSI Jabber客户端

我已经写了一个脚本接收和添加自签名证书到PSI客户端证书仓库. 它在 tools目录这里 并且已经生效.

分配一个用于Jabber客户端的证书

用于Jabber客户端的SSL密钥的配置位于 c2s.xml . 注意 c2s.xml 包含用于Jabber客户端的SSL密钥的位置和用于 c2srouter 通讯的SSL密钥的位置.

P 参数: SSL密钥位置

在标为 Local network configuration 的位置取消注释 pemfile (你的SSL密钥), 并把它改成你的SSL密钥的路径. 注意如果你的PEM文件在缺省位置 /usr/local/etc/jabberd/server.pem , 你只需要取消注释以下这个段落:
        <!-- File containing a SSL certificate and private key for client
             connections. If this is commented out, clients will not be
             offered the STARTTLS stream extension -->
 
        <pemfile>/usr/local/etc/jabberd/server.pem</pemfile>

以上修改将在5222端口激活STARTTLS. 旧的Jabber客户端使用5223端口来进行SSL通讯. 如果你希望在5223端口支持SSL, 取消注释 ssl-port 标签:

        <ssl-port>5223</ssl-port>

你的服务器现在准备好STARTTLS/SSL连接了. 你只需要重启C2S组件就可以使SSL的配置变更生效了.

N 注意: 禁止非STARTTLS通讯

强制要求STARTTLS通讯, 取消注释 require-starttls 标签,如下:
        <!-- Require STARTTLS. If this is enabled, clients must do STARTTLS
             before they can authenticate. Until the stream is encrypted,
             all packets will be dropped. -->
 
        <require-starttls/>

分配一个用于Jabberd组件的证书

5个Jabberd组件都要各自配置 组件到路由器 的加密通讯. 因此, 这5个配置文件都必须修改并提供Jabberd组件之间的安全通讯:

        router.xml
        sm.xml
        resolver.xml
        s2s.xml
        c2s.xml

P 参数: SSL密钥位置

在以上每一个文件中, 取消注释 pemfile 标签用于路由器通讯. 在 router.xml 文件, pemfile 被定义在标为 Local network configuration 的段落. 在以上剩下的四个配置文件的每个文件里面, pemfile 定义于标为 Router connection configuration 的段落. 取消注释这个段落并修改它指向你的SSL密钥的位置. 例如, 你讲修改 c2s.xml 如下,如果你的SSL密钥使用缺省路径:
        <!-- Router connection configuration -->
        <router>
          <!-- IP/port the router is waiting for connections on -->
          <ip>127.0.0.1</ip>      <!-- default: 127.0.0.1 -->
          <port>5347</port>       <!-- default: 5347 -->
 
          <!-- Username/password to authenticate as -->
          <user>jabberd</user>    <!-- default: jabberd -->
          <pass>secret</pass>     <!-- default: secret -->
 
          <!-- File containing a SSL certificate and private key to use when
               setting up an encrypted channel with the router. If this is
               commented out, or the file can't be read, no attempt will be
               made to establish an encrypted channel with the router. -->
 
          <pemfile>/usr/local/etc/jabberd/server.pem</pemfile>

重启你的Jabberd服务使配置变更生效.

修改Router密码

Jabberd配置文件包含了组件连接到路由器的密码,因为组件和路由器之间的通讯是通过TCP/IP上的XML实现的. 这些密码帮助确保只有你安装的组件可以和路由器通讯. 配置文件, router-users.xml , 包含了允许连接到路由器的ID和密码. 缺省的ID是 jabberd 密码是 secret .

另外, 每个组件(除了 router )在它的配置文件里都有一个用户ID和密码. 这个ID和密码配合给各自的组件用来连接 router . 因此, 对一个可以连接到路由器的组件来说, 该组件的配置文件里必须有一个用户名和密码组合, 并且那个组合必须和 router-users.xml 的ID和密码组合匹配.

为了给Jabberd安装你的提高安全性, 你应该修改密码. 这包括修改 router-users.xml 以及 sm.xml , resolver.xml , s2s.xmlc2s.xml .

P 参数: Router用户名和密码

为了修改路由器验证用的密码, 首先修改 router-users.xml 如下(用新密码替换掉 newpass ):
      <users>
        <user>
          <name>jabberd</name>
          <secret>newpass</secret>
        </user>
      </users>

然后, 修改 sm.xml , resolver.xml , s2s.xmlc2s.xml 中的密码 . 在每个文件中的 router 段落有一些标签是给路由器用户的. 修改密码如下(用新密码替换掉 newpass ):

      <!-- Router connection configuration -->
      <router>
        <!-- IP/port the router is waiting for connections on -->
        <ip>127.0.0.1</ip>      <!-- default: 127.0.0.1 -->
        <port>5347</port>       <!-- default: 5347 -->
 
        <!-- Username/password to authenticate as -->
        <user>jabberd</user>    <!-- default: jabberd -->
        <pass>newpass</pass>     <!-- default: secret -->

重启你的Jabberd服务器使变更生效.

N 注意: 允许多密码

注意如果你需要,可以为每一个组件分配一个用户和ID.

N 注意: 如果用户变更那么 router.xml 必须修改

注意以上只描述了如何修改路由器密码. 如果 router-users.xml 中的用户名修改了, 那么 router.xml 中的 acl 段落也必须修改:
      <!-- Access control information -->
      <aci>
        <!-- The usernames listed here will get access to all restricted
             functions, regardless of restrictions further down -->
        <acl type='all'>
          <user>jabberd</user>
        </acl>

创建管理员用户

管理员用户的设置位于 sm.xml 文件的 aci 段落 . 缺省的管理员用户为 admin@localhost . 为了让管理员用户能远程操作, 把 jid 改成一个你自己拥有的用户如下:

      <acl type='all'>  
        <jid>admin@lsomedomain.com</jid>
      </acl>

你也可能需要从Jabber客户端手工来创建这个用户. 登录后, 该管理员用户将接收到用户创建的提示, 并且他也将能查询到所有在线用户, 接收帮助请求, 发送 MOTD (当日消息), 等等.

注意以上用户被授权访问所有管理功能. 你可以通过指定 acl 类型来给用户赋予一些特定的管理权限. 参见 sm.xml 文件里的例子.

重启你的 Jabberd 服务使得修改生效.

禁止公开注册

缺省情况下, Jabberd 允许所有用户公开注册, 也就是说能连上你的服务器的任何用户可以在你的服务器上创建他们自己的 Jabberd 用户. 为了阻止公开注册, 编辑 c2s.xml 配置文件.

Authentication/registration database configuration 段落, 寻找 Registration configuration 子段落. 注释掉 enable 标签将禁止公开注册:

      <!-- Authentication/registration database configuration -->
      <authreg>
        <!-- Backend module to use -->
        <module>mysql</module>
 
        <!-- Registration configuration -->
        <register>
          <!-- Account registration is enabled by default (provided the
               auth/reg module in use supports it). Comment this out to
               disable. -->
          <!--
          <enable/>
          -->

如果配置使用了 PAMOpenLDAP ,那么应该禁止公开注册, 因为 Jabberd 2 不支持通过 PAM 或 OpenLDAP 进行公开注册.

允许用户修改密码

在 Jabberd 2 里用户修改密码缺省是被禁止的. 为了允许你的用户修改他们自己的密码, 在 c2s.xml 文件中取消注释 authreg 段落里的 password 标签:

      <!-- Authentication/registration database configuration -->
      <authreg>
        <!-- Backend module to use -->
        <module>mysql</module>
 
        <!-- Registration configuration -->
        <register>
          <!-- Account registration is enabled by default (provided the
               auth/reg module in use supports it). Comment this out to
               disable. -->
          <enable/>
 
          <!-- Human-readable instructions to be returned to client when
               registration is requested. -->
          <instructions>Enter a username and password to register with this server.</instructions>
 
          <!-- Password change only. When registration is disabled, it may
               still be useful to allow clients to change their password. If
               you want this, uncomment this when you disable registration. -->
          <password/>

注意当使用 PAM 或 OpenLDAP 验证的时候这个配置将不能生效,因为这些包不允许通过 Jabberd 修改密码. 重启你的 Jabberd 服务以使修改的配置生效.

设置DNS SRV记录

Jabberd 2, 以及其他Jabber客户端和服务器, 能够使用 DNS SRV 记录用户主机名解析. DNS SRV 记录允许服务 — 通过端口 — 委托给其他主机. 所以, 如果你希望你的Jabber服务器运行在一个非主要域主机的机器上, 你可能会愿意设置 DNS SRV 记录来委托Jabber客户端和服务器服务到另一个或多个主机.

N 注意: SRV 记录只对 非主要 主机是必要的

注意,只有你的Jabberd服务运行在一个和主要域主机不同的机器上并且你不希望在你的Jabber ID 里包含该主机(机器)的名称的时候,DNS SRV 记录才是必要的. 例如, 如果一个 DNS 查询 somedomain.com 解析到 host1.somedomain.com, 而你的 Jabberd 服务器运行在 host1, 那么 SRV 记录就不必要了.

Jabberd使用SRV记录

对于一个 Jabberd 安装,可以创建三个SRV记录:

        _jabber._tcp.<domain>   ->    <host>.<domain>:5269
        _xmpp-server._tcp.<domain>    ->    <host>.<domain>:5269 
        _xmpp-client._tcp.<domain>    ->    <host>.<domain>:5222

第一和第二个记录指定用于服务器间(s2s)通讯的主机和端口. 之所以有两个记录,是因为新的XMPP协议, 对于SRV记录, 已经取代了旧的Jabber标准. 第三个记录指定用于不加密的客户端(c2s)通讯的主机和端口.

Bind 里创建SRV记录

以下例子是在 BIND 服务器创建一组SRV记录:

        _jabber._tcp.some_domain.com. 86400 IN SRV 5 0 5269 host.some_domain.com.
        _xmpp-server._tcp.some_domain.com. 86400 IN SRV 5 0 5269 host.some_domain.com.
        _xmpp-client._tcp.some_domain.com. 86400 IN SRV 5 0 5222 host.some_domain.com.

some_domain.com 替换成你的域名,把主机的名字换成你的主机名, 并且不要忘记在域名后面的那个 "." .

TinyDNS 里创建SRV记录

TinyDNS没有SRV记录格式; 然而, 你可以使用 Rob Mayoff 的 TinyDNS Record Maker 来创建 TinyDNS SRV 记录. 这些 TinyDNS SRV 记录被创建用于主机 host.some_domain.com ,使用优先级为 10 以及 权重为 '0':

            :_jabber._tcp.some_domain.com:33:\000\012\000\000\024\225\004host\013some_domain\003com\000 
            :_xmpp-client._tcp.some_domain.com:33:\000\012\000\000\024\146\004host\013some_domain\003com\000 
            :_xmpp-server._tcp.some_domain.com:33:\000\012\000\000\024\225\004host\013some_domain\003com\000

使用 TinyDNS Record Maker 创建一组记录加入到 TinyDNS 数据文件中.

测试SRV记录

一旦你的DNS服务器正确地更新之后, 你应该使用Dig测试列出的那些srv. 例如, 为了测试条目 _jabber._tcp.some_domain.com, 使用DNS服务器 my.dns_server.com, 你可以键入以下命令:

        dig @my.dns_server.com _jabber._tcp.some_domain.com any +short

从你的DNS SRV记录查询得到的结果应该如下:

        10 0 5269 host.some_domain.com.

使用Jabberd 1.4连接外部服务

本章描述如何使用一个现有的 Jabberd 1.4 服务器连接外部Jabberd 1.4服务, 例如网关和代理, 到Jabberd 2. 参见下一章,使用 JCR 组件连接外部服务. 参见 附录11 初步了解Jabberd 2如何使用Jabberd 1.4x进程来运行一个代理.

这里假定读者已经很熟悉 Jabberd 1.4. , 也就是一个正在使用中的 Jabberd 1.4 安装. Jabberd 1.4 的安装和配置超出了本文的范围; 不过, 对此已经有很多好的资源存在, 包括 Jadmin ArchiveJabberd 1.4x管理指南 .

把Jabberd连接到一个外部服务和把Jabberd 1.4连接到服务很相似; 不过从Jabberd 2连接到一个Jabberd 1.4服务有很多重要的不同:

另外,如果组件不支持查询( disco ), sm.xml 里面应该有服务的名字空间. 例如, MU Conference 支持查询, 所以不需要在 sm.xml 配置它的条目以使该服务能够被浏览. 另一方面, JUD (Jabber用户目录)不支持查询; 所以, 需要在 sm.xml 里配置它的条目以使 JUD 可以被用户浏览到. 参见 sm.xml 例子.

下面的子段落描述了如何配置一个David Sutton为Jabberd 1.4 写的 MU Conference , 包括一个运行中的 MU Conference 的配置文件. 去 MU Conference 获得下载以及更多关于这个组件的信息. MU Conference 为Jabberd提供了一个多用户聊天室服务.

XDB段落

运行一个Jabberd 1.4的网关或代理时, 主Jabberd进程处理XDB和logging函数. 运行Jabberd 2组件时不是这样. 反之, 组件应该运行在它自己的进程里, 并且组件应该自己处理它本身的XDB和logging函数. 也就是说外部组件应该运行在一个自包含的进程中. 但是, 如果你有一个用于连接Jabberd 1.4服务器的外部组件, 你应该添加一个 XDB 段落到该服务的配置文件:

        <xdb id="xdb">
          <host>conference.somedomain.com</host>
 
          <load>
            <xdb_file>/usr/local/jabber/xdb_file/xdb_file.so</xdb_file>
          </load>
 
          <xdb_file xmlns="jabber:config:xdb_file">
            <spool>/usr/local/var/spool/jabber</spool>
          </xdb_file>
        </xdb>

以上 XDB 段落指定了 hostname, 装载的XDB模块, 以及写spool的文件位置.

Log段落

如上所示, 组件配置文件也必须包含一个日志段落. 你可以为你连接的组件添加一个段落到配置文件,如下:

        <log id="muclog">
          <file>/usr/local/var/jabberd/log/muc.log</file>
          <host/>
          <logtype/>
          <format>%d: [%t] (%h): %s</format>
        </log>

在这个例子里是一个 MU Conference 网关, 我已经在上面指定日志为 muc.log. 每个服务应该有一个独立的日志文件.

Router的IP地址和端口

连接的组件应该指定 router 监听的IP地址和端口. router 的缺省端口是 5347 , 所以相关配置文件的 id 段落的开头应该类似这样:

        <service id="muclinker">
          <uplink/>
          <connect>
            <ip>192.168.0.2</ip> <!-- IP Address of Router here -->
            <port>5347</port>

共享密码

Jabberd 2 服务器为每个组件连接使用一个密码. 这个密码类似Jabberd 1.4里的共享密码. 继续上述例子, 你应该为你使用的外部组件创建一个密码. (在 Jabberd 2里, 所有外部组件共享和 router 相同的密码) 这个密码, 或者 secret , 必须在你的连接组件的配置文件中指定:

        <service id="muclinker">
          <uplink/>
          <connect>
            <ip>192.168.0.2</ip> <!-- IP Address of Router here -->
            <port>5347</port>
            <secret>ComponentPass</secret>
          </connect>
        </service>

这个 secret 也必须在你的 router.xml 文件中指定. 该 secret 应该在标为 'local network configuration' 的位置:

        <!-- Local network configuration -->
        <local>
          <!-- IP address to bind to (default: 0.0.0.0) -->
          <ip>0.0.0.0</ip>
          <!-- Port to bind to (default: 5347) -->
          <port>5347</port>
          <!-- File containing the user table. This is where the router gets
               its component and secret information from for component
               authentication.-->
          <users>/usr/local/etc/jabberd/router-users.xml</users>
          <!-- Shared secret used to identify legacy components (that is,
               "jabber:component:accept" components that authenticate using
               the "handshake" method). If this is commented out, support for
               legacy components will be disabled. -->
          <secret>ComponentPass</secret>

Router别名

router.xml 文件也必须包含用于连接的组件的别名, 而且 router.xml 文件提供了一个连接到MSN代理的例子. 为你连接的组件添加一个别名. 继续上面的例子, 这个别名将在 'router.xml' 文件中设置:

        <!-- Name aliases.
 
             Packets destined for the domain specified in the "name" attribute
             will be routed to the component that has currently bound the name
             in the "target" attribute (assuming it is online).
 
             This is usually only required for some kinds of legacy
             components (particularly jabberd 1.4 "uplink" components) -->
        <aliases>
          <!-- Example for a msn transport running from a jabberd 1.4 uplink -->
          <!--
          <alias name='msn.domain.com' target='msn-linker'/>
          -->
          <alias name='conference.somedomain.com' target='muclinker'/>
        </aliases>

注意别名参考了组件的DNS解析名, 并且 target 参考了连接组件的XML文件中的 service id (参见 5.5.4).

例子:muc.xml

下面是一个运行中的 muc.xml 文件,用于 MU Conferencing:

        <jabber>
 
          <service id="muclinker">
            <uplink/>
            <connect>
              <ip>192.168.0.2</ip> <!-- IP Address of Router here -->
              <port>5347</port>
              <secret>ComponentPass</secret>
            </connect>
          </service>
 
          <service id="conference.somedomain.com">
 
            <load>
               <conference>/usr/local/jabber/mu-conference/src/mu-conference.so</conference>
            </load>
 
            <conference xmlns="jabber:config:conference">
              <public/>
 
              <vCard>
          <FN>Public Chatrooms</FN>
          <DESC>This service is for public chatrooms.</DESC>
              </vCard>
 
              <history>50</history>
 
              <logdir>/usr/local/var/jabberd/log/muc/</logdir>
 
              <sadmin>
          <user>admin@somedomain.com</user>
              </sadmin>
 
              <notice>
          <join>has become available</join>
          <leave>has left</leave>
          <rename>is now known as</rename>
              </notice>
 
            </conference>
 
          </service>
 
          <log id="muclog">
            <file>/usr/local/var/jabberd/log/muc.log</file>
            <host/>
            <logtype/>
            <format>%d: [%t] (%h): %s</format>
          </log>
 
          <xdb id="xdb">
            <host>conference.somedomain.com</host>
 
            <load>
              <xdb_file>/usr/local/jabber/xdb_file/xdb_file.so</xdb_file>
            </load>
 
            <xdb_file xmlns="jabber:config:xdb_file">
              <spool>/usr/local/var/spool/jabber</spool>
            </xdb_file>
          </xdb>
 
        </jabber>

C 检查点: 测试你的外部组件

一旦你的外部组件安装好了, 你应该启动这个组件,在一个Jabberd 1.4进程中运行它,使用类似下面的命令:
          /usr/local/jabber/jabberd/jabberd -c /etc/jabber/muc.xml

-c 参数为Jabberd 1.4指定一个配置文件. 在重启你的Jabberd 2服务器之后, 你的新的(外部)服务应该已经运行了. 在这个 MU Conference 的例子中, 你应该能通过一个兼容客户端来配置多用户聊天室了, 或通过包含在tarball里的脚本也可以配置.

使用JCR作为Jabberd 2组件

因为Jabberd 2服务器比较新, 只有很少的组件是特别为Jabberd 2服务器开发的. 然而, Paul Curtis 写了一个组件封装器 Jabber Component Runtime ,可作为Jabberd 2服务的外部组件来运行. Jabber Runtime Component (JCR) 允许用C语言写的Jabberd 1.4组件运行于独立进程来连接到Jabberd 2. 在撰写本文的时候, 只有 MU Conference 和 Yahoo! transport 通过了 JCR 封装测试.JCR如何与Jabberd 2整合,参见 附录11 .

JCR封装器会生成一个二进制文件来运行代理或服务. 实际上, 这个二进制文件提供的所有服务就是一个独立的用于代理或服务的Jabberd 1.4x进程. JCR包的INSTALL文件提供了使用说明, 而且也可以在 MU Conference 网站找到好用的说明.

以下是一个例子,为MU Conference服务创建一个JCR的二进制文件的步骤:

撰写本文的时候, JCR 0.2.4 和 MU Conference 0.6.0 是最新版本并用于本示例.

下载JCR和MU Conference

JCR主页 下载最新的JCR包, 从 MU Conference主页 下载最新的MU Conference包,放到工作目录. 然后解压JCR包:

        tar -xzvf jcr-0.2.4.tar.gz

JCR依赖于 glib-2.0 . 在编译JCR库之前,你应该检查你的系统里是否已经装了它.

编译JCR库

进入JCR目录之后编译JCR库:

        cd jcr-0.2.4
        make

我和其他人注意到编译过程出现了一些以 TERROR_ 开头的错误. 这些错误不影响正常使用JCR.

编译组件

移动服务包(在这里是 mu-conference-0.6.0.tar.gz ), 到JCR目录(在这里是 jcr-0.2.4 ), 然后把服务包解压到那里:

        mv ../mu-conference-0.6.0.tar.gz ./
        tar -xzvf mu-conference-0.6.0.tar.gz

拷贝JCR库文件( main.cjcomp.mk ) 到服务的 src 目录:

        cp src/main.c mu-conference-0.6.0/src/
        cp src/jcomp.mk mu-conference-0.6.0/src/

然后 cd 到服务的 src 目录并编译JCR组件:

        cd mu-conference-0.6.0/src/
        make -f jcomp.mk

编译过程应该会产生一个名为 mu-conference 的二进制文件(在 mu-conference/src/ 目录). 这个二进制文件为Jabberd 2提供MU Conference服务. 拷贝这个二进制文件到一个bin目录, 例如 /usr/local/bin .

配置组件

JCR包的 src 目录包含一个示例配置文件( muc_conf.xml ) 用于MU Conference. 拷贝这个文件到你的Jabberd 2配置文件所在的目录, 例如 /etc/jabberd/usr/local/etc/jabberd .

为你自己的安装编辑 muc_conf.xml . 在 muc_conf.xml 里, 设置用于 spool , logdir (有两个log目录) 和 pidfile 的目录. 它们应该被设置到你的jabber用户有足够权限的目录. (注意 spool 参照spool 目录 .) 把 host 设置成一个你的客户端可以解析的名称. 把 ip 设置成你的Jabberd服务器的IP地址或主机名. 设置 secret 要符合你的 router.xml 文件中用来标识外部组件的 secret (位于 local 段落). 你也可以设置一个管理员JID( sadmin ).

编辑你的 router.xml 文件来为这个服务提供一个别名. 在 Name aliases 段落,添加一个alias标识这个服务:

        <alias name='conference.somedomain.com' target='linker'/>

mu_conf.xml 文件中 conference.somedomain.com 作为 host , linker 作为 name .

启动组件

重启你的Jabberd 2服务器使得修改生效, 然后启动 mu-conference 执行文件:

        su jabber
        /usr/local/bin/mu-conference -c /etc/jabberd/muc-conf.xml

你的Jabber用户现在应该能浏览到 Public Chatrooms 服务, 而且他们应该能创建和使用群聊天室. mu-conference 执行文件启动的时候不会从终端断开. 你可能要使用 Daemon Tools 来让 mu-conference 开机启动.

安装一个使用Users-Agent的JUD

Ryan Eatmon已经更新了他的 Users-Agent JUD (Jabber用户目录)包来兼容Jabberd 2, 并且获得来自John Hamill的一些有价值的帮助之后, 我能让它和我的Jabberd 2安装一起跑了. Users-Agent是一个基于Perl的JUD,使用MySQL做数据存储. Jabber.org目前使用Users-Agent作为JUD.

N 注意: JUD和vCard数据不是一回事

JUD提供给用户一个可搜索的数据库,他们可以从这找到联系人. JUD不是一个vCard数据的数据库. vCard数据是独立于JUD数据库的, 所以你不应该期望安装好的JUD包含现有的vCard数据. 反之, 用户必须通过注册来给JUD提供数据.

N 注意: Fljud提供了LDAP和JUD的集成

如果你正使用OpenLDAP作为验证系统, 你可能想看看 Fljud 产品. Fljud集成了JUD和LDAP数据.

我已经记录了获取和运行Users-Agent的步骤; 然而, 我很有兴趣知道别人是怎么干的. 一个运行中的Users-Agent包包括三个元素:

  • users-agent (Perl脚本)
  • config.xml (配置文件)
  • JUD (MySQL数据库)

users-agent 脚本是运行程序,它提供JUD服务. users-agent 脚本依赖于 config.xml 文件的配置. config.xml 文件必须和 users-agent 运行文件处于同一个目录 — 或者运行时使用 -c 选项指定 config-xml 的位置. users-agent 把所有数据存储在一个 MySQL数据库 JUD 里面. 这个包带了一个脚本 createDB ,用来安装 JUD 数据库.

Users-Agent的安装包括7个步骤, 细节如下:

  1. 安装必需的Perl模块
  2. 下载并安装Users-Agent
  3. 创建JUD数据库
  4. 设置JUD数据库授权
  5. 配置config.xml
  6. 测试users-agent
  7. 设置Users-Agent伴随Jabberd 2启动

这些步骤可能看起来很复杂; 然而, 安装是相当直接的, 并且我已经尝试提供尽可能多的细节.

安装必需的Perl模块

Users-Agent依赖于以下三个Perl模块:

        Net::Jabber v1.30
        XML::Stream v1.18
        DBI

更多关于这些模块的信息, 参见 CPAN 网站. 安装它们(包括任何依赖)的最简单的办法是使用Perl的 CPAN.pm 安装工具. 要安装这些Perl模块, 运行以下指令(以超级用户身份)进入 cpan shell:

        perl -MCPAN -e shell

如果这是你第一次使用 cpan shell, 你将进入一个交互安装脚本. 一旦完成, 你就可以安装上述的包了(此时仍在 cpan shell环境):

        cpan> install Net::Jabber
 
        cpan> install XML::Stream
 
        cpan> install DBI

这些安装完成之后, 你才可以安装Users-Agent. 如果你需要安装其他Perl模块, 你可以使用这个命令( perl -MCPAN -e shell )进入 cpan shell .

下载并安装Users-Agent

选择一个目录来安装Users-Agent. 在以下例子中, User-Agent安装在 /etc/jabberd .

从你选择的目录, 从 Jabberstudio.org 下载最新版本的 Users-Agent 包 . 下面例子的版本是 Users-Agent 1.1.

解压Users-Agent包, 然后切换到刚建的目录:

        tar -zxvf users-agent-1.1.tar.gz
        cd users-agent-1.1

Users-Agent装好了.

创建JUD数据库

Users-Agent包自带了一个 createDB 脚本用来创建 MySQL JUD 数据库. 这个脚本需要对现有的 MySQL 数据库的临时访问权以连接到MySQL并安装 JUD 数据库. 最简单的办法就是临时把你的 MySQL root 密码清空,命令如下:

        mysqladmin -u root -p password ""

另一个办法是, 你可以编辑 createDB 脚本的第13行和第17行,那里有你的 MySQL root 密码 (在引号之间输入密码). 然而, 如果你不禁用你的MySQL root密码, 你必须在运行 createDB 之前 export DBI_DRIVER 环境变量 . DBI_DRIVER 变量应该被设成 dbi:mysql:test:localhost , 这里 test 指的是一个运行中的MySQL数据库.

一旦你禁用你的MySQL root密码(或编辑了 createDB 并设置了 DBI_DRIVER 变量), 运行这个脚本来创建你的 JUD 数据库:

        ./createDB

在你创建数据库之后, 你应该重置你的MySQL root密码:

        mysqladmin -u root password "oldrootpassword"

然后, 你可以进入mysql console检查这个数据库:

        mysql -u root -p
 
        mysql> show databases;
        +----------+
        | Database |
        +----------+
        | JUD      |
        | jabberd2 |
        | mysql    |
        | test     |
        +----------+
        4 rows in set (0.00 sec)

现在 JUD 数据库装好了.

设置JUD数据库授权

创建 JUD 数据库之后, 需要对它进行授权. 如果你使用MySQL来为Jabberd 2做验证或存储, 你已经有一个MySQL用户可以用于 JUD 数据库. 如果是这种情况, 进入MySQL控制台并运行这个SQL指令来授权MySQL用户jabberd2允许访问 JUD 数据库(如果你不是使用缺省的MySQL用户那么替换掉 jabberd2 ):

        mysql -u root -p
 
        mysql> use JUD;
        mysql> GRANT ALL PRIVILEGES ON *.* TO 'jabberd2'@'localhost' WITH GRANT OPTION;

如果你的Jabberd 2正在使用MySQL但是不记得你的MySQL用户名, 打开 sm.xmlc2s.xml 并扫描以下段落 MySQL driver configuration , 那里可以找到连接Jabberd 2的 user 和密码( pass ) .

如果你没有使用MySQL来验证或者存储, 你应该运行一个稍微不同的SQL指令来创建一个新的MySQL用户以及密码,users-agent 将用它来连接MySQL(把 secret_password 替换成你打算用来连接MySQL的用户的密码):

        mysql -u root -p
 
        mysql> use JUD;
        mysql> GRANT ALL PRIVILEGES ON *.* TO 'jabberd2'@'localhost'
            -> IDENTIFIED BY 'secret_password' WITH GRANT OPTION;

完成授权之后, 你可以用你的jabberd2用户启动MySQL控制台来进行测试. 你的 jabberd2 需要一个MySQL密码(如上创建一个密码或在 sm.xml 找到密码) to start the console:

        mysql -u jabberd2 -p
 
        mysql> use JUD;
        mysql> select * from jud;

你应该接收到类似这样的输出: Empty set (0.01 sec) . 你的 JUD 数据库现在准备好让 users-agent 使用了.

配置config.xml

Users-Agent依赖于 config.xml 用于配置. 在一个文本编辑器打开 config.xml . 为了让Users-Agent运行, 我编辑了以下6个标签的值:

        <hostname>
        <port>
        <secret>
        <name>
        <username>
        <password>
  1. 编辑 hostname 值,为你的Jabberd 2服务器提供主机名. 它应该和 sm.xml 文件中的 id 相同.
  2. 编辑 port to 提供Jabberd 2 router监听的端口号. 缺省是 5347 .
  3. 编辑 secret 来提供Jabberd 2 router用来连接外部组件的共享 secret . 你正在使用的这个共享 secret 可以在 router.xml 文件顶部附近找到. 在标为 Local Network configuration 的段落查找 secret 标签.
  4. 编辑 name 来提供 Users-Agent 使用的主机名. 这个主机名类似 users.somedomain.com , users.jabber.somedomain.com , jud.somedomain.com , 等等. 如果你的客户端要从互联网访问它,那么这个主机名必须是可以被DNS解析的.
  5. 编辑 username 来提供MySQL用户(参见 5.10.4.). 对于缺省安装来说, 这个 username 就是 jabberd2 .
  6. 编辑 password 来提供MySQL用户的密码(参见 5.10.4.). 再一次的,这个 password 可以在 sm.xmlc2s.xml 里找到如果你已经在Jabberd 2里使用了MySQL.

现在 users-agent 配置好了可以用了.

测试users-agent

现在你应该启动并测试 users-agent . 确保你的Jabberd 2和MySQL服务器正在运行. 然后, 启动 users-agent :

        su jabber      
        ./users-agent

Users-Agent应该无错误的启动, 并且它不会退出. Users-Agent不会把自己推到后台运行, 所以它应该保持运行在终端里.

从你的Jabberd客户端登录到你的服务器. 随着 users-agent 的运行, 你应该能看到一个可用的服务 Users-Agent . 你的客户端如何显示它依赖于客户端的类型. 这个 Users-Agent 服务应该提供 RegisterSearch 选项.

你的 JUD 数据库是空的, 所以你需要注册一些用户来测试它. 从你的Jabber客户端, 选择 Register (在Jabebrd客户端这通常是右键点击选项). 你应该看到这个服务的注册选项,包括一个表单让你输入个人信息.

I 重要: 客户端的选择会影响代理的使用

测试期间, 我不是总能通过测试客户端来获得Users-Agent. 在Linux下, PSI看起来反应良好; 然而, 用户初次尝试注册的时候PSI不显示注册表单. 用户必须注册一次然后再次注册来添加任何数据. 在Windows下, JAJC和Exodus表现良好; 然而, JAJC, 右击 Users-Agent 时不提供 registersearch 选项. 在JAJC选择 Discovery (info) 无法提供信息. Exodus是我测试过的所有客户端(PSI, Gabber, Gnome-Gabber, Kopete, Exodus, JAJC 和 Neos)中表现最好的.

现在, 你应该能准确搜索Users-Agent. 从你的客户端, 返回这个服务并选择 Search . 你应该看到一个搜索表单.

I 重要: Users-Agent支持局部匹配

Users-Agent 支持局部匹配搜索. 不需要也不使用通配符.

你应该能够通过搜索注册表单中的任何字段的头一个字母搜索到刚才注册的用户.

设置Users-Agent伴随Jabberd 2启动

当你的Users-Agent配置好运行之后, 你可能希望把它添加到你的"app_rc.html脚本来伴随Jabberd 2启动和停止, 或者你可以选择使用 Daemon Tools 来监控它.

I 重要: 如果User-Agent无法连接Router就会挂掉

如果 users-agent 不能连接到 router 组件就会挂掉. 这意味着如果你的Jabberd 2服务器停止或挂掉, users-agent 将会挂掉并且需要重启. 你可能希望使用 Daemon Tools 来确保 users-agent 总是在它无法连接 router 时重启启动.

集成vCard数据到Users-Agent(仅限私有服务器)

我已经为Users-Agent写了一个补丁来让Jabberd 2 vCard数据成为Users-Agent的数据源. 应用它之后, Users-Agent使用Jabberd vCard表来搜索和注册. 也就是说, 用户更新他们自己的vCards会被反应到Users-Agent JUD搜索结果里. 用户可以使用常规方法更新他们的vCard数据, 他们也可以通过Users-Agent注册流程来更新Users-Agent字段 (first name, last name, nickname 和 email).

I 重要: JUD和vCard数据不应该(SHOULD NOT)被集成到公共服务器中

这个补丁仅仅用于私有服务器. 在公共服务器, 用户对vCards如何展示个人信息拥有完全的控制. 一个用户可以通过验证那个用户来允许另一个用户显示个人vCard数据,也可以手工注册到JUD.

这个补丁仅用于私有的Jabberd 2服务器, 这些可以用于公司或教育机构. 对它们来说, 经常需要让每个用户很方便的搜索到全部用户列表. 注意, 无论如何, 即时本补丁应用之后, 每个用户也必须创建一个vCard条目才能在Users-Agent JUD里可见.

I 重要: 补丁未进行高负载的测试

这个补丁还未进行经过压力测试.

为了应用本补丁, 首先让Users-Agent跑起来,参见 5.10. 然后, 下载 users-agent.vcard.patch 到你的 users-agent 文件安装的目录. 使用以下指令应用这个补丁:

      patch -p0 < users-agent.vcard.patch

编辑 config.xmldbname 设为你的Jabberd 2 MySQL数据库(通常是 jabberd2 ). 如果必要也编辑 usernamepassword . 重启 users-agent , 现在它应该连接到Jabberd 2 vCard数据了.

以PDF格式查看

常规管理任务

本章尝试为日复一日的Jabberd管理任务,包括用户管理,提供一个指南.

详细的配置信息在下一章.

启动和停止Jabberd 2

本节描述如何启动和停止Jabberd 2执行文件. 以RC脚本来运行Jabberd 2,参见 附录7 或使用Daemontools来运行Jabberd 2,参见 附录8 .

启动Jabberd 2

jabberd 启动脚本启动Jabberd 2服务. 这个脚本被安装在Jabberd 2二进制文件的同一个目录下(缺省为 /usr/local/jabberd ). 要启动这个服务器, 切换到 jabber 用户然后运行启动脚本:

        su jabber
        /usr/local/bin/jabberd

这个脚本包含了五个Jabberd 2执行文件的启动. 这个脚本为每个Jabberd 2执行文件指定了相关的配置文件(缺省位于 /usr/local/etc/jabberd ).

停止Jabberd 2

目前Jabberd 2没有停止脚本; 所以必须手工杀死5个Jabberd 2进程来停止服务器. 为了停止服务器, 要杀死以下进程(以root或jabber用户身份都可以):

        router
        resolver
        sm
        c2s
        s2s

停止以上进程中的一个可能导致另一个挂掉; 然而, 重要的是在尝试重启之前必须确保所有Jabberd 2进程已经杀死. 单个运行的进程可能会导致服务器无法重启.

从Jabberd 1.4迁移

Robert Norris, Jabberd的主要开发者, 已经创建了一个Perl脚本把Jabberd 1.4数据迁移到MySQL或PostgreSQL. 特别要注意, 这个脚本只迁移验证信息和好友列表. migrate.pl 脚本目前可以从jabberstudio.org的CVS获得; 不过, 下一个版本的Jabberd 2会带上它.

基本上, 这个脚本像一个服务一样工作,连接到一个现有的Jabberd 1.4安装, 然后导出到一个现有的Jabberd 2数据库. 它有很多依赖(在脚本里列出来了):

  • XML::Stream 1.17 或更高版本 (来自 JabberStudio)
  • Net::Jabber 1.29 或更高版本 (来自 JabberStudio)
  • Digest::SHA1
  • DBI
  • DBD::Pg 或 DBD::mysql

migrate.pl 文件包含完整的使用说明.

添加用户

在本文写就的时刻, 没有脚本用来添加用户; 然而, 用户可以很容易的加入到一个MySQL或PostgreSQL数据库. 本章描述如何添加一个用户到一个MySQL数据库. 天极一个用户到PostgreSQL, 也是类似的. 本章假设已经禁止了公开注册(参见 5.5章).

N 注意

Jabberd 2不支持从Berkeley DB验证存储来添加或删除用户的机制.

允许Auto-Create

sm.xmluser 段落包含了一个标签 auto-create , 允许这个标签可以使得一个用户在初次登录时被存储包自动创建(如果这个用户不存在于数据库中的话). 当这个标签被允许, 用户可以被手工添加到验证( authreg ) 数据库, 并且每个用户初次登录的时候, Jabberd将为那个用户创建好友列表, 模板, 等等. 特别注意的是, 当一个新的用户初次登录的时候, auto-create 标签会导致 user-create 链被调用.

缺省Auto-create是禁用的. 为了激活它, 在 sm.xml 文件的 user 段落取消注释 auto-create 标签. 这个标签靠近 sm.xml 文件的结尾.

从MySQL控制台创建用户

现在 auto-create 激活了, 你可以从MySQL控制台创建一个用户.

以Jabberd用户登录到MySQL控制台:

        mysql -u jabberd2 -p

从MySQL控制台, 切换到 jabberd2 数据库:

        mysql> use jabberd2

从MySQL控制台, 插入一行到 authreg 表. 这一行应该包含 username , realmpassword 的值:

        mysql> insert into authreg (username, realm, password)
            -> values ('myusername', 'somedomain.com', 'mypassword');

somedomain.com 修改成符合你的配置的值. 大部分情况下, realm将会和Jabber服务器的ID相同. 把 myusernamemypassword 修改成你的新用户的名称和密码.

你的新用户现在可以用Jabber客户端登录了.

删除用户

MySQL控制台也可以用来从一个MySQL验证数据库( authreg )删除用户. 输入这个命令来删除用户:

      mysql> delete from authreg where username='the_user_name';

注意从 authreg 表删除用户将不会删除其他的用户数据, 例如好友列表; 然而, 一旦该用户被从 authreg 删除, 这个用户将不再能登录到这个Jabberd服务器.

发送MOTD和消息给所有在线用户

发送MOTD's(当日消息)和消息给所有在线用户,必须从拥有广播权限的管理员账户来发. 如何授权参见 5.4章. 一旦用户拥有广播的权限, 这些消息就可以从Jabber客户端来发送. 为你创建的管理员用户增加以下联系人:

      somedomain.com/announce
 
      somedomain.com/announce/online

发送一个消息到 somedomain.com/announce 将会发送一个Jabber MOTD到这个域的所有用户. 离线用户将在下次登录的时候接收到消息. 发送一个消息到 somedomain.com/announce/online 将只向在线用户发送消息. 注意如果你的Jabber客户端不提供显式支持MOTD's, 你可以上述的JID添加一个联系人, 然后使用那个联系人发送MOTD's.

以PDF格式查看

Router.xml配置

router.xml 文件提供 router 组件的配置, 它是Jabberd服务器的中枢. router组件接受从其他组件的连接, 然后在它们之间传递XML包. router.xml 文件包含了以下主要章节:

  • ID,PID和日志
  • 网络
  • 输入输出控制
  • 别名
  • 功能访问控制

读者们可能都知道, Jabberd XML文件是自文档化的. 本章和子章节的配置段落仅尝试提供这些文件的结构概览以及一些文档本身未提到的小技巧.

ID,PID和日志

router.xml 最前面的三个子段落处理基本的后勤项目. 对于几乎所有的安装来说, id 段落应该保留缺省值( router ). pid 段落指定 router 组件在哪里写入它的进程ID. 如果你不需要从Jabberd外部读取进程ID, 你可以屏蔽掉这个段落. 例如, 如果你使用D.J. Bernstein的DaemonTools来运行Jabberd, 你可以注释掉 pid 段落.

Jabberd日志缺省记录到 syslog . 如果你倾向于让 router 把日志写到它自己的日志文件, 把 log type 改为 file , 并指定日志所在位置.

网络

local 子段落处理 router 的网络和连接设置. ipport 标签指定网络设置.

N 注意: 0.0.0.0 代表所有可用的IP

注意在所有这些Jabberd XML文件中, IP地址 0.0.0.0 表示这个组件应该监听所有可用的IP地址. 0.0.0.0 是IP地址的缺省设置, 并且对大部分安装来说保留这个缺省值是不会错的.

users 标签指定包含用户ID和密码的文件,这些用户可以访问 router . 该文件的描述参见下一章.

secret 标签指定一个共享的安全码用于外部服务. 外部服务通过共享安全码来进行验证, 反之则通过 router-users.xml 文件中的用户列表来验证. secret 和Jabberd 1.4连接配置文件中的共享安全码是一样的作用. 参见 5.85.9 中如何设置外部服务.

pemfile 位置指定证书文件和私钥的位置用于客户端通讯. 注意在这个例子里, 客户端值的是相对于 router 的客户端, 而不是最终用户的Jabber客户端. 换句话说, 这里的 pemfile 是用于其他Jabberd组件和 router 本身之间的安全通讯. 要了解更多在Jabberd中设置SSL的信息,参见 5.2附录:生成自签名SSL密钥 . 注释掉本段落会导致禁用Jabberd组件之间的SSL通讯.

输入输出控制

i/o 段落控制以下的输入/输出选项:

  • 连接限制
  • 频率限制
  • IP访问控制

注意这些段落的缺省设置应该对大部分安装是可用的.

连接限制

Jabberd通过 max_fds (最大文件句柄数)对连接数设置了一个限制. Jabberd对每一个连接使用一个文件句柄. 所以, 对router设置文件句柄的最大数量会影响Jabberd服务器的并发连接数限制. 如 router.xml 文件所说, router 本身可能使用最多4条连接(和其他Jabberd组件); 所以, 这里设置的最大文件句柄数量实际上比可能的并发连接数量稍微多一点点.

频率限制

limits 段落规定单个连接的吞吐量. 本段落相当于Jabberd 1.4中的一个简化的karma设置. 缺省的 bytesconnects 都是0. 就是说, 这些限制缺省都是禁用的. 在重载的时候服务器管理员可能希望设置这个限制来组织用户过量使用服务器资源. router.xml 文件包含一个例子告诉我们如何对连接设置频率限制.

IP访问控制

access 子段落指定IP地址应该被允许或禁止访问 router . 被禁止访问 router 的IP地址无法让它们的包被处理所以无法使用Jabberd服务器的功能.

|| 问题: 以上描述是真实和准确的吗? ||

order 子段落指定规则被检查的顺序(先检查allow规则再检查deny规则还是先检查deny规则再检查allow规则). 设置IP限制,要么使用 access 子段落 的 order 下的allow要么使用deny标签. 忽略deny和allow规则那么所有连接都可以接受 — 这也是缺省设置.

别名

aliases 段落提供被连接的外部服务的支持, 例如MU Conference和JUD. 这些外部服务通过被连接的配置直接连接到 router . 每个 alias 为组件指定一个可解析的名字并且 target 指定 service id , 和被连接的外部组件的XML文件里的一样. 更多关于被连接的外部服务的信息参见 6.5 .

功能访问控制

aci 段落指定 router-users.xml 里的每个用户的访问类型. 缺省的, jabberd 用户被授予全权因为其他Jabberd组件都以 Jabberd 用户来连接到 router . 本段特别要注意例子中的一个用户类型 'acl type = 'log. 这个用户可以接收到所有经过router的包, 也就是说, 所有Jabberd服务器处理的包.

尽管Jabberd没有一个机制来记录所有的包, 这样的机制可以很容易的通过给一个用户指定 'acl = 'log 权限,再创建一个组件以这个用户的身份连接到router来提供. 这样一个组件将能记录所有的Jabberd包.

以PDF格式查看

Router-users.xml配置

router-users.xml 文件的唯一的用途是提供一个用户和密码对的列表给 router 来验证. 缺省的用户( jabberd ) 是给其他Jabberd组件 ( sm , resolver , s2sc2s ) 连接验证用的.

router-users.xml 文集看可能不应该有它自己的段落, 除了强烈鼓励所有的Jabberd管理员在生产服务器上修改缺省密码 . 使用缺省密码( secret ) 会让你的Jabberd安装容易被黑客攻击.

一旦 router-users.xml 的缺省密码修改后, 响应的密码也必须在以下文件中修改:

      sm.xml
      resolver.xml
      s2s.xml
      c2s.xml

这些密码位于上述文件中的 Router connection configuration 标签附近.

以PDF格式查看

Sm.xml配置

sm.xml 文件配置Jabberd 2的 session manager 组件. session manager 在router和外部可用的组件 (s2s 和 c2s) 之间扮演一个层的角色. sm.xml 文件配置以下功能:

以下是 sm.xml 文件的概览.

Jabberd身份

sm.xml 最前面的两个段落指定网络ID和写PID文件的位置. id 段落非常重要,因为这个ID加在用户名后面就构成了一个 JID (Jabber身份). 对于大部分安装来说, id 就是主机名 — 类似 somedomain.com . 如果服务器要和其他Jabber服务器通讯个,那么这个ID必须可以被DN解析; 当然, 对于封闭的或内部的Jabebrd系统,它不需要可解析. IP地址也可被用作 'id'; 然而, 因为IP地址不可以通过DNS解析, 一个使用IP地址作为ID的系统不能够和别的Jabber服务器通讯.

pid 段落指定PID文件的位置. 如果不需要PID文件,可以注释掉这一行.

和Router通讯

router 段落控制和 router 组件之间的通讯. 缺省的 ipport 对大部分安装应该够了, 不过要主义如果 session manager 运行在一个独立的服务器上, 这里应该指定一个外部IP地址.

userpass 子段落指定用于连接 router 的用户名. 它们必须和 8 中所描述的 router-users.xml 匹配 . 对于生产系统基本的安全要求应该是修改缺省密码.

pemfile 段落指定和 router 通讯用的证书和私钥. 关于在Jabberd上设置SSL的更多信息,参见 5.2附录:生成自签名SSL密钥 . 注释这一段表示在 session managerrouter 之间禁用 SSL 通讯.

retry 段落指定 session manager 如果在启动时无法建立连接或在运行时失去连接应该如何重连到 router . 缺省的设置当无法连接时不会让 session manager 无限地重连. 如果 router 挂掉或被停止,那么这些缺省设置基本上会导致 session manager 也挂掉.

日志

Jabberd日志缺省写到 syslog . 如果你想让 session manager 写到它自己的日志文件, 把 log type 改为 file , 并指定日志的位置.

数据库连接和配置

session manager 处理数据库连接的设置请参考本指南的 应用数据包 (区别于 验证数据包 ). 你只需要编辑你选择的 应用数据包 (MySQL, PostgreSQL 或 Berkeley DB)相对应的子段落. 对于和 session manager 运行在同一台服务器的数据库包,你应该只需要编辑连接数据库的密码(这对Berkeley DB无效). 如果数据库运行在独立机器那么要修改 host . 注意不应该在生产环境中使用缺省密码(secret).

管理功能的访问控制

acl 段落控制哪个用户拥有管理权限. 这些功能包括广播,消息和搜索. 注意本段落指定的管理员用户不会被自动创建到验证(authreg)数据库. 所以, 你必须单独注册一个用户. 6.5 描述了如何使用管理帐户发送消息给所有用户.

管理功能目前Jabber客户端只有最小支持; 不过, Windows版 JAJC] 客户端支持浏览在线用户和向在线用户发送消息的管理功能.

会话调用的模块

modules 段落控制特定事件调用的模块链. 事件定义基于接收或递送某种类型的包. 这些模块链应该只让有经验的Jabberd管理员来编辑. 特别要注意用户创建(user-create)和用户删除(user-delete)时所调用的链.

外部组件的静态浏览设置

discovery 段落包括用于即时消息(identity 子段落)的标准服务信息和用于外部组件(items 子段落)的静态浏览的设置. 如果你的服务器正在运高兴外部组件, 例如 JUD, MU Conferencing, MSN-T 或 Aimtrans, 如果该组件不支持 disco (浏览),那么你应该完成一个 item 子段落. 这个段落下面有一些例子教你如何为你的外部组件添加一个 item 来设置静态浏览.

用户选项

user 段落指定了模板,这个模板应该在创建用户时被加入到一个用户的数据存储中去, 这个段落也规定用户登录时如果还不存在,系统是否应该立刻创建它. 这个选项运习惯管理员添加用户到验证数据库(authreg) 然后那些用户除此登录时被自动创建.

以PDF格式查看

Resolver.xml配置

resolver.xml 文件配置 router 组件为 s2s (服务器到服务器) 组件处理主机名解析. resolver.xml 文件配置以下功能:

resolver 的配置主要是 resolverrouter 组件通讯.

PID文件

pid 段落指定PID文件的位置. 如果不需要PID文件这个段落可以注释掉.

和Router通讯

router 段落控制和 router 组件的通讯. 对大部分安装来说缺省的 ipport 应该够了, 不过要注意如果 resolver 是运行在单独的服务器上时, 这里要指定一个外部的IP地址.

userpass 子段落指定用于连接 router 的用户名. 它们必须和 8 中所描述的 router-users.xml 匹配 . 对于生产系统基本的安全要求应该是修改缺省密码.

pemfile 段落指定和 router 通讯用的证书和私钥. 关于在Jabberd上设置SSL的更多信息,参见 5.2附录:生成自签名SSL密钥 . 注释这一段表示在 resolverrouter 之间禁用 SSL 通讯.

retry 段落指定 resolver 如果在启动时无法建立连接或在运行时失去连接应该如何重连到 router . 缺省的设置当无法连接时不会让 resolver 无限地重连. 如果 router 挂掉或被停止,那么这些缺省设置基本上会导致 resolver 也挂掉.

日志

Jabberd日志缺省写到 syslog . 如果你想让 resolver 写到它自己的日志文件, 把 log type 改为 file , 并指定日志的位置.

以PDF格式查看

S2s.xml配置

s2s.xml 文件配置Jabberd 2的 服务器-服务器 组件. s2s.xml 文件为本组件和 router 组件通讯提供网络设置:

以下是 s2s.xml 文件配置的概述.

PID文件

pid 段落指定PID文件的位置. 如果不需要PID文件这个段落可以注释掉.

和Router通讯

router 段落控制和 router 组件的通讯. 对大部分安装来说缺省的 ipport 应该够了, 不过要注意如果 s2s 是运行在单独的服务器上时, 这里要指定一个外部的IP地址.

userpass 子段落指定用于连接 router 的用户名. 它们必须和 8 中所描述的 router-users.xml 匹配 . 对于生产系统基本的安全要求应该是修改缺省密码.

pemfile 段落指定和 router 通讯用的证书和私钥. 关于在Jabberd上设置SSL的更多信息,参见 5.2附录:生成自签名SSL密钥 . 注释这一段表示在 s2srouter 之间禁用 SSL 通讯.

retry 段落指定 s2s 如果在启动时无法建立连接或在运行时失去连接应该如何重连到 router . 缺省的设置当无法连接时不会让 s2s 无限地重连. 如果 router 挂掉或被停止,那么这些缺省设置基本上会导致 s2s 也挂掉.

日志

Jabberd日志缺省写到 syslog . 如果你想让 s2s 写到它自己的日志文件, 把 log type 改为 file , 并指定日志的位置.

网络配置

local 子段落指定网络配置让 s2s 能安全地使用回拨密钥. 0.0.0.0 是IP地址的缺省设置, 并且对大部分安装来说保留这个缺省值是不会错的( 0.0.0.0 的设置允许s2s监听所有可用IP地址). secret 设置指定 s2s 为其他Jabberd服务器生成回拨密钥的口令. 生产环境中这个 sercret 的缺省设置应该修改.

S2S连接检查

check 段落负责检查和其他Jabber服务器的连接. 缺省的, 这些检查是禁用的 (interval 设为 0). 为了激活检查功能, 设置一个 interval ,单位是秒, 然后设定队列过期的时间间隔, 非法路由过期 和/或 保持连接.

|| 问题: 什么情况下连接检查最有用? ||

以PDF格式查看

C2s.xml配置

c2s.xml 文件配置Jabberd的 客户端-服务器 组件. c2s 组件负责和Jabberd客户端之间的通讯, c2s.xml 主要和客户端通讯相关:

以下是 c2s.xml 文件的概览.

PID文件

pid 段落指定PID文件的位置. 如果不需要PID文件这个段落可以注释掉.

和Router通讯

router 段落控制和 router 组件的通讯. 对大部分安装来说缺省的 ipport 应该够了, 不过要注意如果 c2s 是运行在单独的服务器上时, 这里要指定一个外部的IP地址.

userpass 子段落指定用于连接 router 的用户名. 它们必须和 8 中所描述的 router-users.xml 匹配 . 对于生产系统基本的安全要求应该是修改缺省密码.

pemfile 段落指定和 router 通讯用的证书和私钥. 关于在Jabberd上设置SSL的更多信息,参见 5.2附录:生成自签名SSL密钥 . 注释这一段表示在 c2srouter 之间禁用 SSL 通讯.

retry 段落指定 c2s 如果在启动时无法建立连接或在运行时失去连接应该如何重连到 router . 缺省的设置当无法连接时不会让 c2s 无限地重连. 如果 router 挂掉或被停止,那么这些缺省设置基本上会导致 c2s 也挂掉.

日志

Jabberd日志缺省写到 syslog . 如果你想让 c2s 写到它自己的日志文件, 把 log type 改为 file , 并指定日志的位置.

网络配置

local 段落指定 c2s 的网络配置. 对大部分安装来说, id 应该和 sm.xml 中的指定的ID相同. 在多个jabber服务器依赖于同于一个验证数据库的时候要使用 realm 属性. 可能发生在很大的公司,需要用到多个Jabebr服务器通过LDAP验证. 缺省的IP地址和端口对大部分安装来说是够用的( 0.0.0.0 的设置允许c2s监听所有可用IP地址).

local 段落下的 pemfile 子段落指定和客户端通讯所用的证书和密钥. 关于在Jabberd上设置SSL的更多信息,参见 5.2附录:生成自签名SSL密钥 . 注释这一段表示在Jabberd和客户端之间禁用 SSL 通讯.

注意这个密钥对不需要和用于Jabberd组件内部通讯的密钥相同.

输入输出控制

i/o 段落控制以下的输入/输出选项:

  • 连接限制
  • 频率限制
  • IP访问控制

注意这些段落的缺省设置应该对大部分安装是可用的.

连接限制

Jabberd通过 max_fds (最大文件句柄数)对连接数设置了一个限制. Jabberd对每一个连接使用一个文件句柄. 所以, 对router设置文件句柄的最大数量会影响Jabberd服务器的并发连接数限制. 如 c2s.xml 文件所说, c2s 本身可能使用最多5条连接(和其他Jabberd组件); 所以, 这里设置的最大文件句柄数量实际上比可能的并发连接数量稍微多一点点.

频率限制

limits 段落规定单个连接的吞吐量. 本段落相当于Jabberd 1.4中的一个简化的karma设置. 缺省的 bytesconnects 都是0. 就是说, 这些限制缺省都是禁用的. 在重载的时候服务器管理员可能希望设置这个限制来组织用户过量使用服务器资源. c2s.xml 文件包含一个例子告诉我们如何对连接设置频率限制.

IP访问控制

access 子段落指定IP地址应该被允许或禁止访问 c2s . 被禁止访问 c2s 的IP地址无法让它们的包被处理所以无法使用Jabberd服务器的功能.

|| 问题: 以上描述是真实和准确的吗? ||

order 子段落指定规则被检查的顺序(先检查allow规则再检查deny规则还是先检查deny规则再检查allow规则). 设置IP限制,要么使用 access 子段落 的 order 下的allow要么使用deny标签. 忽略deny和allow规则那么所有连接都可以接受 — 这也是缺省设置.

客户端连接检查

check 段落负责检查和其他Jabber客户端的连接. 缺省的, 这些检查是禁用的 (interval 设为 0). 为了激活检查功能, 设置一个 interval ,单位是秒, 然后设定队列过期的时间间隔, 非法路由过期 和/或 保持连接.

客户端验证和注册

authreg 段落解决客户端验证和注册的问题:

  • 验证包
  • 公开注册
  • 密码修改
  • 验证机制
  • 验证包配置

这些子段落描述如下.

验证包

module 子段落指定所使用的验证数据包. Jabberd根据你编译时候参数的选择来设置这个 module , 所以你应该不需要编辑它,除非你要在安装Jabberd之后修改验证数据包.

公开注册

register 子段落下的 enable 控制是否允许新用户的公开注册. 公开注册缺省是允许的. 注释掉这个 enable 标签可以禁止公开注册.

密码修改

register 下的 password 段落规定是否允许用户修改他们自己的密码. 密码修改缺省是禁止的. 如 c2s.xml 所提到的, 如果禁用了公开注册,那么允许修改密码可能是有用的.

验证机制

mechanisms 子段落指定提供哪种验证加密方法给客户端. 如 c2s.xml 所述, 你应该注释掉任何不想提供的机制.

验证包配置

authreg 的最后一个子段落控制你的验证数据包的连接. 缺省的设置对大部分人来说够用了,除非你的验证数据包运行在一个独立的服务器上.

以PDF格式查看

Jabberd 2体系结构(草稿)

N 注意: 本章还在创作中

注意本章是很大程度上还在创作中. 所以, 以下信息应该被视为草稿, Jabberd 2体系结构的并且不是最终描述. 基本上, 我加入这章是因为我正在学习Jabberd 2.

|| 下一步打算: 为体系结构概述添加体系结构特性列表 -或- 只是新特性列表 ||


译者注:下文略。。。。。。原因之一是这章草稿似乎变成永久性的草稿了,原因之二是jabberd2后来被波兰人接手了,体系结构有一些改动,所以这章草稿也有点过时了,有可能会造成不必要的误导。

个人工具