3. NetMeeting 目录套件

3.1. 这是什么?

每个 NetMeeting 客户端都可以向 LDAP 服务器注册,并有一个目录窗口,列出注册到同一服务器的其他 NetMeeting 客户端。NetMeeting 目录套件是 OpenLDAP 服务器的扩展,为 NetMeeting 客户端提供目录服务。

3.2. 为什么需要它?

虽然 NetMeeting 可以通过指定 IP 地址或 DNS 名称直接连接到另一个 H.323 设备,但通常您会希望使用 LDAP 目录服务器。使用 LDAP 服务器可以让用户看到可用目标的目录列表,并且如果您需要解析别名,例如,如果您想从单个 IP 地址提供多个 H.323 目标,则这是必需的。从 Linux 直接连接到 NetMeeting 客户端不需要目录服务器;请为此使用 OpenH323。

NetMeeting 客户端在几个方面违反了 LDAP 协议,因此如果您尝试使用标准 LDAP 服务器,您会遇到问题。NetMeeting 目录套件纠正了这些问题,并允许将 OpenLDAP 服务器用于 NetMeeting 目录服务。

3.3. 工作原理

                 Block diagram of NetMeeting directory kit

___________________         _______    __________________        ______________
|    LDAP server  | request |      |   |   LDAP server  | request|            |
|                 | <-------| Perl |<--|                | <------| NetMeeting |
| on private port |         |script|   | on public port |        |  client    |
|  (i.e, 2345)    |-------> |      |-->|     389        |------->|            |
|                 | reply   --------   |                |  reply --------------
|                 |                    |                |      
-------------------                    ------------------

目录服务器由一个“主”LDAP 服务器(用于接收请求)、一个 Perl 脚本(用于正确解释 Microsoft NetMeeting 请求)以及一个“隐藏”LDAP 服务器组成,在查询“隐藏”LDAP 服务器后,以 NetMeeting 客户端可以理解的方式格式化结果。OpenLDAP 的“shell 后端”用于调用 Perl 脚本。还需要自定义模式。该脚本目前处理了上述所有问题,但超时条目除外,它不处理超时条目。

3.4. 在哪里获取软件

首先,您需要获取 OpenLDAP 软件。

Note

预构建的 OpenLDAP 软件(即 RPM)将无法工作,除非配置了对 shell 后端的支持。

您可以从位于 ftp://ftp.OpenLDAP.org/pub/OpenLDAP/openldap-release/ 的主站点或任何镜像站点下载 OpenLDAP。我已成功使用 OpenLDAP 2.0.7。

NetMeeting 目录套件可从 http://www.freesoft.org/software/NetMeeting/download 获取。

您需要 Perl 5,可从 https://perl5.cn 获取,但已包含在所有常见的 Linux 发行版中。您还需要来自 Perl CPAN 存档的 Net::LDAP 模块,可以从 Perl 直接下载和安装

[root@y2k baccala]# perl -MCPAN -e shell

cpan shell -- CPAN exploration and modules installation (v1.58)
ReadLine support enabled

cpan> install Net::LDAP

... much output omitted ...

  /usr/bin/make install -- OK

cpan>

如果您以前从未使用过 CPAN,系统会首先提示您一系列配置问题。配置 CPAN 后,Net::LDAP 模块将自动下载、编译和安装。

3.5. 安装

构建 OpenLDAP 将需要大约 60 MB 的可用磁盘空间。解压 OpenLDAP 并配置它。

Note

请务必指定 shell 后端功能“--enable-shell”

我还建议指定“--disable-debug”以防止 OpenLDAP 在断言失败时退出。

bash$ ./configure --enable-shell --disable-debug
      

现在使用以下命令构建并安装它

bash$ make

... much output omitted ...

bash# make install
      

它通常安装在/usr/local:

表 2. OpenLDAP 使用的目录

/usr/local/lib 共享库和静态库
/usr/local/bin 用于添加、删除和搜索 LDAP 服务器的客户端二进制文件
/usr/local/sbin 用于操作原始数据库文件的实用程序。正常操作不需要。
/usr/local/libexec 各种服务器程序,包括 slapd 二进制文件
/usr/local/etc/openldap 包含默认配置文件
/usr/local/etc/openldap/schema LDAP 服务器使用的不同模式。
/usr/local/var/... LDAP 数据库的位置(在子目录中)
/usr/local/man/... 文档

安装 OpenLDAP 后,接下来安装 NetMeeting 目录套件。解压ndk.tgz. 它包含以下文件

表 3. NetMeeting 目录套件文件

netmeeting.perl用于纠正 NetMeeting 协议违规的 Perl 脚本
netmeeting.schemaLDAP 服务器使用的自定义 NetMeeting 模式
core.schema.patchLDAP 服务器核心模式的补丁
slapd.conf主 LDAP 服务器的示例配置文件
slapd2.conf从 LDAP 服务器的示例配置文件
initialize用于一次性初始化从 LDAP 数据库的 Shell 脚本
slapd.rc /etc/rc.d/脚本
nmaddentry用于向 NetMeeting 目录添加条目的 Perl 脚本
nmdirectory用于查询 NetMeeting 目录的 Perl/Tk 脚本

复制netmeeting.perl/usr/local/libexec目录,netmeeting.schema/usr/local/etc/openldap/schema目录,并复制slapd.confslapd2.conf/usr/local/etc/openldap目录。

请务必使用core.schema.patch来修补 openldap 的核心模式,位于/usr/local/etc/openldap/schema目录

bash$ cd /usr/local/etc/openldap/schema
bash$ ls
corba.schema   inetorgperson.schema  misc.schema        nis.schema
core.schema    java.schema           nadf.schema        openldap.schema
cosine.schema  krb5-kdc.schema       netmeeting.schema
bash$ cp core.schema core.schema.bak
bash$ patch core.schema < ~/core.schema.patch
      

创建目录/usr/local/var/openldap-netmeeting以存储 LDAP 数据库,并使其世界可写。

特别是如果您使用示例中的目录,请编辑slapd.confslapd2.conf并验证其配置设置。

您将需要运行两个 slapd 副本。一个使用slapd.conf并且必须以 root 身份启动,因为它绑定到端口 389。slapd-u选项可以指定为使 slapd 在绑定端口后chown到一个非特权用户(明智的预防措施)。另一个 slapd 使用slapd2.conf,绑定到一个非特权端口,并且只需要足够的权限来写入数据库目录。

bash# /usr/local/libexec/slapd -f /usr/local/etc/openldap/slapd.conf -u nobody
bash$ /usr/local/libexec/slapd -h ldap://localhost:2345/ -f /usr/local/etc/openldap/slapd2.conf
      

现在您必须使用单个条目初始化从数据库。这只需执行一次,通过运行工具包中包含的initialize脚本。“rootdn”和“rootpw”条目在从配置文件中,允许初始化脚本访问,并且必须与脚本中的-D-w选项匹配。一旦您使用单个父条目初始化了数据库,您可以注释掉slapd2.conf中的“rootdn”和“rootpw”行,但这并非至关重要。

服务器现在应该已启动并运行。对于具有/etc/rc.d/风格初始化脚本(如 RedHat)的系统,提供了slapd.rc来自动化 slapd 的启动和停止。

3.6. 服务器安全

如上所示,我以非特权用户身份运行两个 slapd,最大限度地减少了由于服务器软件或 Perl 脚本中的错误而导致的安全漏洞的可能性。当然,这需要数据库目录是世界可写的,以便非特权从服务器可以更新它。这并不像乍一看那么明显的漏洞,因为 NetMeeting 客户端本身不使用任何身份验证。因此,即使数据库目录受到更好的保护,本地或远程主机上的任何人都可以使用 LDAP 客户端程序来删除或修改任何数据库条目。

3.7. Windows 2000 的 LDAP 问题

最近的 NetMeeting 版本最初尝试连接到端口 1002 上的 LDAP 目录服务器。如 TechNet 聊天 中所述

在 Windows 2000 之前,ILS 服务器会在端口 389 上侦听 NetMeeting 客户端。当在 Windows 2000 机器上设置 ILS 服务器时,它将默认使用端口 1002。

如果端口 1002 的连接被拒绝,NetMeeting 将回退到标准 LDAP 端口 389。但是,至少有一位用户报告说,防火墙阻止端口 1002,丢弃连接尝试,因此没有收到拒绝连接的回复,从而出现问题。在这种情况下,NetMeeting 大约需要一分钟才能超时并回退到端口 389。打开防火墙到端口 1002 允许拒绝通过,并触发了快速回退。

3.8. 与其他 LDAP 服务互操作

以上说明假设您的 LDAP 服务器仅用于 NetMeeting 目录服务。但是,如果您想将单个服务器同时用于 NetMeeting 目录服务和其他 LDAP 服务呢?只有一个服务器可以绑定到端口 389,但 OpenLDAP 允许在其配置文件中指定多个数据库部分,每个部分服务于 LDAP 命名空间的不同部分。NetMeeting 仅使用“objectClass=RTPerson”子树,因此只要您避开此子树,您就可以配置额外的数据库部分,以使用其他数据库服务于其他子树。您可能遇到的最大问题是自定义 NetMeeting 模式,它与标准模式略有冲突。由于 NetMeeting 模式比标准模式更宽松,我建议注释掉标准模式中冲突的部分。NetMeeting 客户端将无法使用标准模式。有关配置 LDAP 服务器的更多信息,请参阅 LDAP RFC 和 OpenLDAP 文档。