您可以通过这里到达那里,第 4 部分

作者:Marcel Gagné

大家好,欢迎回到系统管理员专栏的又一篇,这里是为 Linux 管理员准备的地方,他们明白解决“只工作不玩耍”难题的真正答案是让至少一部分工作变得有趣。还有什么比探索您的 Linux 系统的奇妙之处更有趣呢?我也是这么想的。上次,我谈到了一个系统,它有点像您网络的 411,我们的新老朋友 LDAP。有了它,您可以从这个广阔世界的 任何地方 访问您的公司联系信息。最后,我们有了一个简单的 LDAP 服务器以及输入新信息的方法。今天,我想进一步探讨这个话题。如果您错过了第一部分,可以在这里找到它。

我在那篇文章中没有涵盖的主题之一是“schema”(模式),这可能让一些人在使用 slapd.conf 文件时感到困惑。模式文件定义了数据以及数据在目录中的组织方式,包括属性的格式、语法等等。Red Hat 软件包安装(我在最初的测试中使用过)默认包含许多模式文件,而源代码安装仅包含 core.schema 文件。为了使我的示例能够按演示的方式工作,您需要至少包含三个额外的模式文件。这些文件都包含在源代码发行版中,您可以在 /usr/local/etc/openldap/schema 中找到它们。这是我的 slapd.conf 文件顶部部分的样子

  include         /usr/local/etc/openldap/schema/core.schema
  include         /usr/local/etc/openldap/schema/cosine.schema
  include         /usr/local/etc/openldap/schema/inetorgperson.schema
  include         /usr/local/etc/openldap/schema/nis.schema

为了记录,Red Hat 默认的 slapd.conf 文件也包含以下内容

   include         /etc/openldap/schema/redhat/rfc822-MailMember.schema
   include         /etc/openldap/schema/redhat/autofs.schema
   include         /etc/openldap/schema/redhat/kerberosobject.schema

其他一切都应该没问题。您可能认为不好的可能是使用 LDIF 文件输入数据的整个过程。如果您必须输入地址簿中当前的所有姓名,并且您有 500 个姓名,则您必须创建 500 个看起来像这样的 LDIF 条目。

   dn: cn=Harry the Fish,ou=staff,o=salmar
   cn: Harry the Fish
   sn: the Fish
   objectclass: top
   objectclass: person
   objectClass: organizationalPerson
   objectClass: inetOrgPerson
   mail: harryfish@salmar.com
   telephoneNumber: 555-8708
   givenname: Harry
   surname: the Fish

让我们看看一些替代方案,好吗?首先,您的电子邮件客户端上的某个地方很可能拥有此地址簿。假设您(或您办公室的人)正在运行 Outlook,并且您(或者更确切地说,他们)拥有大量的电子邮件地址,您可以将该地址簿导出到 CSV 文件(逗号分隔的 ASCII 文件),然后从该文件创建一个 LDIF 文件以进行导入。当然,缺少的步骤是如何 轻松地 将 CSV 文件转换为 LDIF 文件。

这是我编写的一个小的 Perl 脚本,旨在解决这个问题。

   #!/usr/bin/perl
   # importcsv.pl : Create LDIF file from CSV addressbook
   # Marcel Gagné, Oct 10, 2001
   open (LDIF_FILE,"+>/tmp/loadfile.ldif");
   ##  This is our temporary LDIF file.
   $csv_file = @ARGV[0];
   open (CSVFILE,"$csv_file");
   ##  Open the CSV file.
   while ($line = <CSVFILE>)
    {
       chomp $line;
        ($full_name, $email, $street, $city, $poscode)
            = split (",", $line, 5);
   ##  I only really care about the first two attributes for this example
       ($first_name, $last_name) = split (" ", $full_name, 2);
       printf LDIF_FILE ("%s","dn: cn=$full_name,ou=staff,o=salmar\n");
       printf LDIF_FILE ("%s","cn: $full_name\n");
       printf LDIF_FILE ("%s","sn: $last_name\n");
       printf LDIF_FILE ("%s","objectclass: top\n");
       printf LDIF_FILE ("%s","objectclass: person\n");
       printf LDIF_FILE ("%s","objectclass: organizationalPerson\n");
       printf LDIF_FILE ("%s","objectclass: inetOrgPerson\n");
       printf LDIF_FILE ("%s","mail: $email\n");
       printf LDIF_FILE ("%s","givenname: $first_name\n");
       printf LDIF_FILE ("%s","surname: $last_name\n\n");
    }
   close CSVFILE;
   exit (0);

将文件另存为 importcsv.pl,然后使脚本可执行并运行它。

   chmod +x importcsv.pl
   ./importcsv.pl myfile.csv

该脚本接受一个参数,即您的 CSV 文件的路径名。您可以修改它以接受第二个参数,这将是 LDIF 文件的路径名,但我选择在 /tmp 中使用默认名称(即 /tmp/loadfile.ldif)。

太棒了。我们现在可以使用以下命令导入所有数据(您会记得在上一列中看到过)。

   ldapadd -c -f loadfile.ldif -xv -D "cn=SalmarAdmin,o=salmar" -W

那些特别注意的人会注意到此命令中使用了额外的标志...实际上是两个。-W 告诉 ldapadd 命令在命令行中询问密码,但真正有趣的标志是 -c 选项。由于我们可能使用 Perl 脚本生成大量的 LDAP 条目,因此我们不希望 LDAP 命令在每次遇到错误时都崩溃。-c 告诉命令 继续,无论它可能遇到任何错误。

突然之间,我们拥有了一个 LDAP 数据库,其中填充了来自我们公司地址簿(或者,对于更受欢迎的您来说,个人地址簿)的所有数据。这对于初始加载来说是一个很棒的方法,但是当您想要随意向该目录添加数据时,您该怎么办?这种不断创建 LDIF 文件的做法可能会变得有点乏味。如果您检查您的 Linux 发行版 CD,您可能会找到一个名为 GQ 的小型基于 Gtk 的软件包,这个名字对于一个出色的工具来说相当不起眼,该工具提供 LDAP 目录浏览器、模式浏览器和导入/导出实用程序。最棒的是,它允许您使用友好、图形化的界面在 LDAP 目录中添加、删除或修改单个条目。您还可以从 Biot.com 的优秀人士那里获取最新版本的 GQ。他们的 URL 是 http://biot.com/gq

根据我的描述,构建 GQ 需要您安装 Gtk(版本 1.2 或更高版本)。除此之外,安装过程遵循标准方法。

   tar -xzvf gq-0.4.0.tar.gz
   cd gq-0.4.0
   ./configure
   make
   make install

当然,我知道你们都知道这些东西,但是没有什么比看到一个程序在您自己的系统上从头开始构建更令人满意的了。我说得对吗?我离题了...

只需在 shell 提示符下键入命令名称即可启动程序。

   gq &

如果您的主机上配置并运行了 LDAP 服务器,gq 将自动注意到它并将其作为默认服务器提供。请注意,程序窗口有三个选项卡:搜索、浏览和模式。在搜索选项卡中,您可以在 LDAP 目录中输入姓名或部分姓名来查找它。这里有三个字段。第一个是您的姓名搜索字段,第二个是您的 LDAP 服务器,第三个允许您指定搜索在目录中的哪个位置进行(即,在我的示例组织中为 o=salmar)。如果您将姓名字段留空,gq 将返回 LDAP 目录中的所有姓名。

我想谈论的另一个选项卡是浏览选项卡。从这里,您可以添加或修改条目。为了修改现有姓名,请单击目录树向下查找,直到找到您想要的条目。单击该条目,将在右侧打开一个框,您可以在其中修改或更新任何信息。您也可以在左侧列表中单击鼠标右键,然后指定删除(删除条目)或新建以创建全新的条目。下图表示我的测试系统上的这样一个对话框。

You Can Get There from Here, Part 4

再说一次,我的电子配额正在迅速用完,但我确实想向您展示最后一件事。单击“文件”,然后选择“首选项”(Control-P 也有效),您将看到许多配置选项,我将主要让您自己发现。我确实想指出“服务器”选项卡,该选项卡允许您添加其他服务器来管理(或查询)。单击“服务器”,然后单击“新建”并填写适当的信息。查看下图,了解其运行示例。

You Can Get There from Here, Part 4

好了,各位,我已经说了够多了。有了这里提供的信息,您应该能够开始轻松地更新和维护您的 LDAP 目录。

警告! 接下来是无偿自我推销...在我离开之前还有最后一件事。它来了!!我的书已正式出版。Linux 系统管理:用户指南 (ISBN 0-201-71934-7, Addison Wesley) 现在正在商店(以及您最喜欢的在线供应商)上架。嘿,如果您查看上面的链接,您甚至可以下载 免费 摘录。在我们下次在系统管理员专栏相遇之前,请记住,尽管您可能听说过什么,但您可以通过这里到达那里。

正在查找本系列过去的文章? 单击此处获取列表。

电子邮件:mggagne@salmar.com

加载 Disqus 评论