




















开放源码 Samba 将 Unix 或 Linux 系统转变成了用于 Microsoft Windows 网络客户机的文件和打印服务器。您可以配置 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)来为 Samba PDC(主域控制器)提供用户认证。
本教程详细讲述了将 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)目录用于存储 Samba 用户帐户信息(通常存储在 smbpasswd 文件中)所需的步骤。这里概述的过程是基于Samba 和 OpenLDAP 的当前稳定发行版的,在撰写本文时它们分别是 2.2.4 和 2.0.23。如果您正在从头构建系统,除非您有不这样做的特殊需求或理由,那么建议您总是使用 Samba 和 OpenLDAP 的最新版本。对于 Samba 尤其是如此,因为目前正在进行大量关于程序的 LDAP 和 Windows 域集成的开发。Samba 当前的 CVS HEAD 分支(它是最新的开发树,最终将成为 Samba 3.0)将使得与 LDAP 的集成更为轻松,因为管理员将不必象现在这样担心两种用户帐户(UNIX smbpasswd 帐户和 Windows 域帐户)的同步;Samba 3.0 将取消对现有 smbpasswd 帐户的需求。
学完本教程后,您应该对下列内容有清晰的理解:
本教程不详细讲述配置 Samba 担任 PDC(主域控制器,Primary Domain Controller)的机制。可以在 IBM eServer 开发者园地上另一篇题为Using Samba as a PDC 的教程上获得这些信息。
本教程假定以下条件:
在传统的 Samba 安装中,用户帐户和密码信息存储在 /usr/local/samba/private/smbpasswd 中(或者,根据配置,有时存储在/etc/smbpasswd 中)。因为 LM/NT 密码散列和 smbpasswd 散列之间的不兼容性,所以用户必须首先存在于服务器的 /etc/passwd 文件中,然后将该用户手工添加到 smbpasswd 文件中。对于少量用户这很好,但随着用户群逐渐增大,这种方法的不利方面也随之显现。例如:
smbpasswd 文件复制到多个 Samba 服务器的管理员只得使用外部工具(如 rsync 和 ssh),或者编写定制的、内部脚本。smbpasswd 文件的结构缺少用来存储属性的字段,这些属性包括主目录、密码到期时间/日期以及其它密码详细信息(例如,能/不能更改)和用户/组 RID(相对标识符,Relative Identifier)。使用 LDAP 目录服务会减轻这些限制,以及其它限制,并允许将集中资源用于所有用户管理。
有两件事是 Samba/LDAP 安装无法“开包”即可完成的:
/etc/passwd 的需求。暂定于 2002 年夏末发布的 Samba 3.0 发行版将解决这两个问题。
如果有一种精神可以实实在在地体现开放源码软件运动的特色,那就是“选择”的观念。我们可以选择不同的分发版,因而又可以选择捆绑软件和多种文件系统布局。我们可以选择不同的软件包管理器和软件分发版 ― 是源代码还是预编译的二进制文件?尽管就其本身而言,所有这些选择的自由都是神圣而光荣的,但它也使提供如何构建复杂的结构(就象一台 LDAP 服务器,它担任 300 台工作站的 Samba PDC ― 其中一半工作站使用漫游概要 ― 一样复杂)的详细指示信息变得很难。
为了进行简化,并集中精力处理后面的任务,正如先前提到的那样,本文是基于Red Hat R7.3 的。 为什么使用 Red Hat?因为它容易获得,而且 Linux 管理员们相对比较了解 Red Hat 的文件系统布局和 init 脚本约定,而且手头又恰好有 Red Hat 分发版。 最后声明一下 ― 无论您使用 Red Hat、SuSE、Gentoo 还是 Slackware,基本过程都是相似的。但是,为了按照本教程的主题进行下去,我们必须从某处出发,该起点是一个正确的 Red Hat 安装、一些 RPM 包和一些 Perl 脚本。
如果您打算遵循本教程中提供的指示信息,则需要下载或预安装下列软件包:
/etc/passwd, /etc/group、NIS 详细信息等)迁移多种帐户信息。关于 Samba 到 LDAP 的迁移脚本有必要警告一句:一组对于某个安装有效的脚本未必对另一个安装有效。开放源码应用程序在不同的修订版之间变化很大,Linux 分发版以使用自己独特的文件系统布局而“声名狼藉”,每个管理员都喜欢以自己的方式做事。所有这些累积起来,造成了前面提到的无规律状态。本教程使用来自 IDEALX 的脚本,因为它们看起来相对精练一些。如果您没有获得此处详细描述的脚本,则请尝试另一套脚本。无论您用哪一套脚本,都请确保在非生产系统上测试您选择的脚本。第一步是下载最新的 Samba 源代码 tar 包(或者从 SAMBA_2_2 CVS 树检出最新版本;可在 Samba 网站上找到 CVS 下载说明)。之所以需要源代码,是因为必须将 Samba 配置成使用 LDAP 目录进行用户认证,这一配置必须在编译程序组件之前完成。您可能会找到为 LDAP 预构建的 RPM 包,但这种包少之又少(IDEALX.org 过去常常构建基于 LDAP 的 Samba RPM,但我上次发现他们已经将该包从他们的站点上删除了)。
将源代码复制到方便的位置(例如,/usr/local/src),然后用下列命令对它解压缩:
tom@phaedrus src $ tar xvzf samba-latest.tar.gz
现在,用“cd”命令进入 samba/source 目录,然后输入 ./configure --help 来查看配置选项列表。出于本教程的目的,此处列出构建 Samba 的方法:
tom@phaedrus source $ ./configure \ --with-smbmount \ --with-automount \ --with-configdir=/etc/samba \ --with-ldapsam \
上述配置的关键是 --with-ldapsam 选项;就是该选项通知 Samba 将 LDAP SAM 而不是 smbpasswd 用于用户认证。--with-smbmount是仅用于 Linux 的选项,您可以完全按照自己的个人喜好来改换 Samba 配置文件的位置。
当配置过程完成时,输入 make && make install。现在,如果不出现任何错误,Samba 就已准备就绪了。
注意:可以将 Samba 配置成使用加密密码或明文密码。大多数管理员会选择前者。但是,加密密码与 PAM(可插入的认 证模块,Pluggable Authentication Modules)是互斥的。如果您构建 Samba 时使用了 --with-pam 选项,并且尝试同时使用加密密码和 LDAP 目录,那么最终结果是您会碰到一些令人头疼的、前后不一致的行为。在这一点上请相信我。
如果您是铁杆 RPM 迷,或者只是想确保 RPM 数据库的完整性,以下是如何从 Samba SRPM(源 RPM)构建三个必需的 RPM 的方法。
rpm -ivh samba-2.2.X-X.src.rpm。/usr/src/redhat/SPECS/samba.spec 文件并添加您想要的选项。使用上一页的示例:--with-smbmount --with-pam --with-ldapsam。cd /usr/src/redhat/SPECS/ && rpm -ba samba.spec。这个操作将创建三个 RPM 文件,samba-common-X.X.X-X、samba-client-X.X.X-X 和 samba-X.X.X-X。处理 RPM 时的一个警告:如果您正在从 Red Hat 以外的来源(例如,从 Samba 站点下载的 RPM)安装 RPM,请总是卸载任何现有的 Samba 包。我多次看到许多人最终在他们的系统上得到两个不同的 Samba 副本,因为他们所安装的第三方 RPM 放置二进制文件的位置与 Red Hat 不同(也就是,新安装并未覆盖先前的安装)。这个警告同样适用于任何从源代码安装 RPM 的人 ― 首先卸载任何现有的 RPM!
从 Red Hat 系统卸载 Samba RPM:
[root@pdc root]# rpm -qa | grep samba samba-common-2.2.3a-3 samba-2.2.3a-3 samba-client-2.2.3a-3 [root@pdc root]# rpm -e samba
安装 OpenLDAP 很容易;如果您进行了标准的服务器安装,就已经完成了三分之二的 OpenLDAP 安装工作。
以下是您的“路线图”……在 Red Hat 7.2 和 7.3 上执行缺省的服务器安装,则会安装 openldap-version.rpm 和 openldap-clients-version.rpm,但却忽略安装 openldap-servers-version.rpm。因此,您应该做的第一件事就是进行检查,以确保撰写本文以来,Red Hat 的人们没有更改他们的安装策略:
[root@pdc root]# rpm -qa | greg samba
浏览上述操作产生的输出。您应该已经安装了三个 RPM:一个常用组件(只是 openldap)、一个客户机组件和一个服务器组件。您可能必须从安装 CD 找到服务器 RPM 并安装它。没有服务器 RPM,您将丢失一些关键配置文件、模式目录以及实际的 LDAP 守护进程。
对于安装而言,最后一些问题是安装由 IDEALX 维护的一组脚本。尽管并非绝对必需(您可以总是使用 OpenLDAP 提供的实用程序手工插入记录),但在配置和填充服务器时,它们确实使工作变得轻松。实际上除此以外有许多许多与 LDAP 和 Samba 进行相互操作的脚本和程序,因此,如果您不喜欢 IDEALX 所提供的版本,请在 Google 上进行搜索并找到您喜欢的脚本。
可以从这里获得 RPM 格式和 TGZ 格式的 IDEALX 脚本。将它们下载到硬盘并解压缩到选定的目录。出于本教程的用途,我们将脚本放置在/usr/local/sbin 中。
现在,所有必需的软件都已就位,我们可以开始配置。
安装了服务器软件之后,下一步是将 OpenLDAP 配置成 Samba 的用户认证源。本章讨论下列内容:创建必需的 LDAP 配置文件、添加特定于 Samba 的模式、用一些基本项填充 LDAP 目录和配置 LDAP 以使用 PAM(可插入的认证模块)进行用户认证。
有许多规划 LDAP 树的方法。出于本教程的目的,我们创建了如下的 DN(专有名称,Distinguished Name)树:
注:不使用影子密码(shadow password)的 UNIX 系统不需要 shadowAccount 对象;在此类情况下,posixAccount 对象布局(也是来自于 nis.schema)就足够了。
第一步是将 samba.schema 复制到 /etc/openldap/schema。
如果从源代码编译 Samba,则该文件位于 [base-src-dir,通常是,/usr/local/src/samba]/example/LDAP/] 目录。如果将修改过的 RPM 用于安装,则该文件可能(布局因分发版而异)在 /usr/share/doc/samba-version/examples/LDAP/ 下。
提示:一些较早的 Samba 包(2.2.x 之前)在 samba.schema 中列出了一种属性类型 displayName。这一项复制了 inetorgperson.schema 中的相同项。在此类情况下,通过在关联块的每行前面放置一个井号(#)来编辑 samba.schema 并注释掉 displayName 属性类型。
slapd.conf下一步是创建或编辑 /etc/openldap/slapd.conf;一些 OpenLDAP 安装创建一个基本 slapd.conf 文件以用作出发点,另一些则不是这样。
下一页将讨论下列清单中相关项的说明。
# /etc/openldap/slapd.conf
# last modified, 4/20/02 by TMS
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/redhat/rfc822-MailMember.schema
include /etc/openldap/schema/redhat/autofs.schema
include /etc/openldap/schema/redhat/kerberosobject.schema
include /etc/openldap/schema/samba.schema
pidfile //var/run/slapd.pid
argsfile //var/run/slapd.args
#Sample Access Control
# Allow read access of root DSE
# Allow self write access
# Allow authenticated users read access
# Allow anonymous users to authenticate
access to dn="" by * read
access to *
by self write
by users read
by anonymous auth
# if no access controls are present, the default is:
# Allow read by all
# rootdn can always write
###############################################
############# ldbm database definitions#############
###############################################
database ldbm
suffix "dc=syroidmanor,dc=com"
rootdn "cn=Manager,dc=syroidmanor,dc=com"
rootpw secret
# The database directory MUST exist prior to running slapd AND
# should only be accessibleby the slapd/tools. Mode 700 recommended.
directory /var/lib/ldap
# Indices to maintain
index primaryGroupID eq
index rid eq
index uid eq
index uidNumber eq
index gidNumber eq
index cn pres,sub,eq
index objectClass eq
index default sub
# ends
slapd.conf注:下面的讨论是关于上一页中显示的 slapd.conf 的:
slapd.conf,而不是 某些人猜想中的 sldap.conf。slapd.conf 的用途是控制/配置 OpenLDAP 服务器守护程序。include 语句告知 LDAP 服务器为对象存储启用哪种模式;确保您列出了 samba.schema。less nameofschema.schema)的开始部分列出。例如,samba.schema 依赖于 cosine.schema 中 uid 属性和 inetorgperson.schema 的 displayName 属性;与此相反,core.schema 是“顶级”模式,没有依赖性。rootpw 项正如其名称一样 ― rootdn 或“Manager”在对目录进行写操作时必须提供的密码。显然“secret”不是好的选择。好的密码应该混合大、小写和标点符号,并至少有 8 个字符长。而且,假定 root 密码是存储在纯文本中,确保小心地保护对该文件的访问,以切实避免它“对全世界都可读”。大多数安装都正确地配置了该文件,但进行复核没有坏处。在 Red Hat 下,OpenLDAP 服务器是作为用户/组 ldap.ldap 运行的。database 项确定目录数据的存储格式。取决于为该目录服务的后端类型,这一项可以是 ldbm、shell 或 passwd 中的一种。也存在使用象 MySQL 或 DB2 这样的关系数据库来存储目录对象的选项。请参阅 man slapd.conf 以获取详细信息(请牢记,man 命令是您的朋友!)。通常,对 RDBM 的支持需要重新编译 OpenLDAP。下一步我们将创建 /etc/openldap/ldap.conf 文件。
ldap.conf与 /etc/openldap/slapd.conf 相比,/etc/openldap/ldap.conf 相对简单些。ldap.conf 由 OpenLDAP 客户机和库使用。警告:在一些 LDAP 配置中,服务器上出现了两个ldap.conf文件:/etc/ldap.conf(由 PAM 使用)和 /etc/openldap/ldap.conf(由 LDAP 客户机和库使用);不要混淆这两者。
# /etc/openldap/ldap.conf # LDAP defaults for clients and libraries # At a minimum, HOST and BASE need to be set # See man ldap.conf for further settings and options HOST 127.0.0.1 BASE dc=syroidmanor, dc=com # ends
其它可用于 ldap.conf 的选项包括搜索超时、最大返回搜索大小、连接端口(如果不是缺省的话)和用于通过 Cyrus SASL 进行连接的几个安全性特性。注:每个用户都可以通过创建 .ldaprc 并将它放置在自己的主目录中来指定唯一的设置。管理员也可以通过强制 LDAP 只读取/etc/openldap/ldap.conf 文件来覆盖这个选项。
最后,启动 OpenLDAP 服务器。在基于 Red Hat 的系统上,输入 /etc/init.d/ldap start。服务器启动时应该有错误或声明。如果不是这样:
/var/lib/ldap 存在并由被指派运行服务器的用户/组(在 Red Hat 下是 ldap.ldap)所拥有。man ldap、info slapd 和 www.openldap.org 是三个不错的起点)。既然 LDAP 服务器已经在运行了,是用一些初始项填充目录的时候了。有两种进行这一操作的方法:
smbldap-tools 脚本。base.ldif)并用 ldapadd 命令添加项。我们将从 smbldap-tools 方法入手……
smbldap-populate.pl根据第 2 章中提供的安装指示信息,首先用“cd”命令进入 /usr/local/sbin。您会在那里找到一个名为 mkntpwd.tar.gz 的文件。进行下列操作以解压缩、构建和编译程序:
[root@thor sbin]# tar xvzf mkntpwd.tar.gz [root@thor sbin]# cd mkntpwd [root@thor sbin]# make [root@thor sbin]# make install # Note: this will place the built executable in /sbin; # I prefer all my smbldap files together in one place, # so the following further steps are required. [root@thor sbin]# cd .. && rm -rf ./mkntpwd (remove the directory so the file can be copied back) [root@thor sbin]# mv /sbin/mkntpwd /usr/local/sbin
现在,在您喜欢的文本编辑器里打开 /usr/local/sbin/smbldap_conf.pm,然后开始编辑。您将找到略少于一页的指示信息(## Configuration Start here),它确切地指出了哪些项需要更改。如果您已经脱离了本章先前讨论的组织单元,则必须更改$usersdn、$computersdn 和 $groupsdn 项。此外:
$binddn 下输入 dn=Manager而不是“manager”(如果您采用本教程中所使用的示例的话;关键在于确保与所有 LDAP 和 SMBLDAP 工具配置文件上的大小写匹配)。$_userSmbHome/$_userProfile 节中使用的任何反斜杠进行转义操作(“\\”)。smbpasswd 的路径是正确的(我的项读取 /usr/local/samba/bin/smbpasswd)。UID、GID 等的项,以确保所用的项与您的用户/组编号约定匹配。最后,执行 smbldap-populate.pl。如果配置是正确的,脚本将输出一串“adding entry...”资料,并且用一组基本对象填充目录。如果得到任何“credential”或“cannot bind”错误,则说明 smbldap_conf.pm 中某处存在拼写错误 ― 回头重新检查您的项。
OpenLDAP 当然可以满足那些喜欢手工执行操作的管理员。填充 LDAP 目录的第二种方法是使用 LDIF 文件。LDIF 文件是文本文件,具有多个遵循特定格式的项。下面是两个样本目录对象项。
dn: dc=syroidmanor,dc=com objectClass: domain dc: syroidmanor dn: ou=Users,dc=syroidmanor,dc=com objectClass: top objectClass: organizationalUnit ou: Users description: System Users
用上述格式创建一个名为 base.ldif 的文件并创建您希望的对象。将该文件保存到您所选择的目录,然后执行下列命令:
[root@thor root]# ldapadd -x -h localhost -D "cn=Manager,dc=syroidmanor,dc=com" -f /root/base.ldif -W
系统将提示您输入“Manager”的密码(在所提供的示例中是“secret”),如果文件中没有语法错误,则用该文件的内容填充目录。
输入 man ldapadd 以获取上述选项开关作用的说明。可在结束语和参考资料 一章获取样本 base.ldif 文件。
如果您选择使用 PAM(请牢记先前的警告 ― PAM 与 Samba 和加密密码的合作并不好),则需要配置 LDAP 以使用 PAM 进行用户认证(这是个与使用 LDAP 认证 Samba 用户截然不同的问题)。幸运的是,在 Red Hat 下这个过程很简单,因为有捆绑的程序:/usr/sbin/authconfig/usr/sbin/authconfig。
作为 root 用户,从命令行或终端窗口,输入 authconfig 并选择下列选项/复选框:
Cache Information 选项意味着使用 nscd(名称服务高速缓存守护程序,Name Service Caching Daemon)服务;它高速缓存频繁使用的 LDAP 请求。在最后一个对话框上选择 OK 将自动启动 nscd 守护程序。最后一个难题是编辑/etc/ldap.conf 文件。
/etc/ldap.conf正如本章先前部分所提到的,当使用 PAM 认证时,LDAP 使用另一个 ldap.conf 文件。打开您喜欢的文本编辑器并将下列内容添加到/etc/ldap.conf 中:
# /etc/ldap.conf # LDAP authentication configuration # last modified, 4/15/02, TMS host 127.0.0.1 # your LDAP server base dc=syroidmanor,dc=com # your DN search base # point the nss modules to the correct search base nss_base_passwd dc=syroidmanor,dc=com?sub nss_base_shadow dc=syroidmanor,dc=com?sub nss_base_group ou=Groups,dc=syroidmanor,dc=com?one ssl no pam_passwd md5 # ends
在上述示例中,因为目录树的组织而使用了“?sub”查询选项;我们选择分离出“ou=Computers”和“ou=Users”。有关 ?sub 和 ?one 选项的更多详细信息,请在因特网上搜索 RFC2307。还可获得一份 PDF 文档,它解释了 PAM 和 NSS 背后的概念和实现;请参阅结束语和参考资料 一章以获取更多信息。
最后,关键时刻到来了 ― 这一切都有效吗?
转到包含 SMBLDAP Perl 脚本的目录;所提供的示例在 /usr/local/sbin 中。使用 smbldap-tools 创建新用户时输入下列命令:
[root@thor sbin]# ./smbldap-useradd.pl -m testuser2 adding new entry "uid=testuser2,ou=Users,dc=syroidmanor,dc=com" [root@thor sbin]# ./smbldap-passwd.pl testuser2 Changing password for testuser2 New password : Retype new password : all authentication tokens updated successfully [root@thor sbin]#
现在,尝试用刚才创建的帐户从另一台计算机登录到系统上。如果正确地配置了一切,则应该正确地认证您:
[tom@phaedrus tom]$ ssh testuser2@thor testuser2@thor's password: Last login: Thu Apr 25 11:28:24 2002 from 192.168.1.100 [testuser2@thor testuser2]$ id uid=1000(testuser2) gid=100(users) groups=100(users)
现在,让我们转过头来研究一下等价的 Samba 端。
在完成 LDAP 部分的配置之后,所剩下的工作就只是告知 Samba 执行用户认证时要使用 LDAP 目录服务而不是自身的密码文件 smbpasswd。这是个相对简单的过程,尤其是当假定了这样的起点:我们已经有一个配置正确、功能正常的 Samba PDC。首先,给出一些背景知识说明:
smb.conf。这个文件的位置因安装选项而异;缺省目录是/usr/local/samba/lib。SYROIDMANOR(smb.conf 中的“workgroup =”选项)。THOR。/home/samba/profiles 下。/home/netlogon 目录中的任何脚本都将运行。下一步是添加必需的特定于 LDAP 的选项。这些选项都放置在 smb.conf 的 [global] 节中。
下列配置片段显示了“引导”Samba 将目录服务用于用户认证所需的特定于 LDAP 的选项:
;LDAP-specific settings ldap admin dn = "cn=Manager,dc=syroidmanor,dc=com" ldap server = localhost ldap port = 389 ldap ssl = no ldap suffix = "ou=Users,dc=syroidmanor,dc=com"
slapd.conf 文件的 rootdn 项匹配(要完全匹配 ― 注意大小写!)。ldap ssl = on,则 Samba 会自动尝试与端口 636 上的目录服务器通信。ldap ssl 选项决定是否对 PDC 和 LDAP 服务器之间的通信加密。如果您正在使用 SSL 加密,则将 ldap ssl = no 更改成yes(或“on”)。我们不设置成加密通信,因为两种服务都基于同一服务器。ldap suffix 是在搜索目录时使用的基本 DN。如果除去该选项,则 LDAP 将从树顶(即 dc=syroidmanor,dc=com)开始所有搜索。将这个选项设置成常用搜索点(如“Users”)会加快查找时间。上一节还可以再添加一条选项:ldap root passwd =。如果有其它选项存在,那么将管理员密码原封不动地留在配置文件中就决不是一个好主意(在 /etc/openldap/slapd.conf 情况下,不存在其它选项)。在这种情况下我们确实另有选择 ― 可以将它作为秘密隐藏在 tdb 数据库中。
整个练习的目的是将所有用户认证信息存储到一个中央资源库(也即 LDAP 目录)中。但是 Samba 守护程序必须代表 LDAP 管理员更改那里存储的信息。这意味着 Samba 必须知道管理员的密码。我们加密了该密码并将它储存在只有 Samba 能够访问的 tdb 数据库中,而不是将该密码放在他人可能“闯入”的文件中。完成这一操作的命令是:
smbpasswd -w yoursecretpassword
这一操作将创建一个名为 secrets.tdb 的文件,在缺省安装的情况下该文件存储在目录 /usr/local/samba/private 中。注:您在上述操作中输入的密码必须与 /etc/openldap/slapd.conf 中包含的“秘密”密码匹配。
我们需要对 smb.conf 作的最后的更改是两个选项行,其中一行允许用户从客户机更改其密码,另一行允许在必要时自动添加机器帐户。下面是这两个选项行:
;password sync passwd program = /usr/local/sbin/smbldap-passwd.pl -o %u passwd chat = *New*password* %n\n *Retype*new*password* %n\n *passwd:*all*authentication*tokens*updated* unix password sync = Yes ;automatically add trust accounts add user script = /usr/local/sbin/smbldap-useradd.pl -m -d /dev/null -g computers -s /bin/false
如您所见,我们只是用本教程中先前安装的 Perl 脚本替换了 /usr/local/samba/bin/smbpasswd 命令。之所以这样更改,是因为smbpasswd 不知道如何与 LDAP 服务器交互;而取代它的 Perl 脚本则知道。下一页是完整的 smb.conf 清单。
smb.conf# /usr/local/samba/lib/smb.conf # samba configuration file # last updated: 4/19/2002 by tms [global] ;basic server settings workgroup = SYROIDMANOR netbios name = THOR server string = Samba-LDAP PDC running %v socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=8192 SO_RCVBUF=8192 ;PDC and master browser settings os level = 64 preferred master = yes local master = yes domain master = yes wins support = yes ;security and logging settings security = user encrypt passwords = yes log file = /var/log/samba/log.%m log level = 2 max log size = 50 hosts allow = 127.0.0.1 192.168.1.0/255.255.255.0 ;password sync passwd program = /usr/local/sbin/smbldap-passwd.pl -o %u passwd chat = *New*password* %n\n *Retype*new*password* %n\n *passwd:*all*authentication*tokens*updated* unix password sync = Yes ;LDAP-specific settings ldap admin dn = "cn=Manager,dc=syroidmanor,dc=com" ldap server = localhost ldap port = 389 ldap ssl = no ldap suffix = "ou=Users,dc=syroidmanor,dc=com" ;user profiles and home directory logon home = \\%L\%U\ logon drive = H: logon path = \\%L\profiles\%U logon script = netlogon.bat ;automatically add trust accounts add user script = /usr/local/sbin/smbldap-useradd.pl -m -d /dev/null -g computers -s /bin/false # ==== shares ==== [homes] comment = Home Directories valid users = %S browseable = no writeable = yes create mask = 0664 directory mask = 0775 [profiles] path = /home/samba/profiles writeable = yes browseable = no create mask = 0600 directory mask = 0700 [netlogon] comment = Network Logon Service path = /home/netlogon read only = yes browseable = no write list = tom
关键时刻已经来到……现在是测试您手艺的时候了。在控制台(或控制台窗口中)以 root 用户输入(在 Red Hat 系统上,一些分发版对其初始化脚本使用不同的布局):
/etc/init.d/smb start [或者如果 Samba 已经运行,restart]
使用 Samba 总是很容易知道您是否拼错了选项或参数 ― 守护程序将在没有任何错误警告的情况下启动和退出。这就是为什么总是在 ps -ef | grep smb 命令后面跟上 Samba start|restart 是个好主意的原因。您应该看到至少一个 smbd 和一个 nmbd 守护程序正在运行。
如果 Samba 启动失败:
/usr/local/samba/bin/testparm,因 Samba 安装而异)并检查输出。如果有语法错误,testparm 将指出它出现的行号。/usr/local/samba/var 下找到它们。接下来我们将研究使用 IDEALX 脚本编制实用程序进行帐户管理。
在开始执行将用户添加到 LDAP 目录的实际操作之前,迅速复习一下与用户/机器帐户有关的 Samba 规则以及这些规则是如何在访问 LDAP 存储时规范 Samba 的行为,这样做是没有坏处的。
smbpasswd 密码文件之前,该用户必须在托管 Samba 服务的系统上拥有 UNIX/Linux 帐户(通常存储在/etc/passwd 中)。如果您尝试使用 /usr/local/samba/bin/smbpasswd 实用程序添加用户帐户,则会被告知这种情况。如果您尝试用 smbldap-useradd.pl 脚本添加用户(我们将稍后讨论它),则不会获得这一情况的警告。smbldap-useradd.pl 将它们添加到 LDAP 目录。迄今为止,我们对 LDAP 帐户结构的大多数讨论,都太过理论化了。为了进一步了解 LDAP 下的 POSIX 帐户和 Samba 帐户的差异,同时为了更详细地说明前一页中讨论的帐户创建过程,让我们研究一个示例。下面显示了一位用户的 LDIF(LDAP 目录信息文件,LDAP Directory Information File)输出,该用户是用下列命令创建的:/usr/local/sbin/smbldap-useradd.pl -m -P tom (“-m”基于 /etc/skel 中包含的模板创建用户目录和概要;“-P”在添加了该用户之后提示输入密码)。要产生实际 LDIF 输出:/usr/local/sbin/smbldap-usershow.pl tom
[root@thor sbin]# /usr/local/sbin/smbldap-usershow.pl tom dn: uid=tom,ou=Users,dc=syroidmanor,dc=com objectClass: top objectClass: account objectClass: posixAccount cn: tom uid: tom uidNumber: 500 gidNumber: 100 homeDirectory: /hometom loginShell: /bin/bash gecos: User description: User userPassword:: e1NTSEF9bWxBL1RHZFNoTkREEWlGTndZOFlCWUVUdWp3MGgrbTc=
接下来,让我们将另一个用户添加到同一用户项,并执行下列操作:
root@thor root # useradd -p test tom2 root@thor root # /usr/local/samba/bin/smbpasswd tom2 New SMB password: typesecretpassword Retype new SMB password: typesecretpassword User added All authentication tokens updated root@thor root #
现在,如果输入 /usr/local/sbin/smbldap-usershow.pl tom,则获得下列输出:
dn: uid=tom,ou=Users,dc=syroidmanor,dc=com objectClass: top objectClass: account objectClass: posixAccount objectClass: sambaAccount cn: tom uid: tom uidNumber: 500 gidNumber: 100 homeDirectory: /hometom loginShell: /bin/bash gecos: User description: User userPassword:: e1NTSEF9bWxBL1RHZFNoTkREEWlGTndZOFlCWUVUdWp3MGgrbTc= lmPassword: 552902031BEDE9EFAAD3B435B51404EE pwdCanChange: 0 pwdMustChange: 2147483647 ntPassword: 878D8014606CDA29677A44EFA1353FC7 pwdLastSet: 1010179230 rid: 2000
如您所见,用户 tom 的 LDIF 现在同时具有 posixAccount 详细信息和 sambaAccount 信息。
您也许在 Samba 文档或者可能是在 LDAP 帐户的输出中见到过对术语 RID 的引用。那么什么是 RID 呢?UNIX 操作系统(包括象 Linux 这样的派生物)通过整数 uid(用户标识,User ID)唯一地标识用户,并通过整数 gid(组标识,Group ID)唯一地标识组。当以某一用户登录时,通过输入 id 即可访问这个信息。
当前的 Microsoft 操作系统通过称为 RID 的值唯一地标识用户和组,该值通常是一个用十六进制表示的整数。在 UNIX 下,用户和组存在于独立的名称空间中。而在 Microsoft 操作系统上,用户和组存在于一个名称空间中。
Samba 使用下列公式将 UNIX uid 和 gid 映射为 RID:
rid = 2 (uid) + 1000 rid = 2 (gid) + 1001
因此,如果工作在 Red Hat 系统上的用户 tom,其 uid 为 500,gid 为 500,则映射到 Microsoft 域中的 RID 分别为 2000 和 2001。
下列参考资料将引导您开始理解和实现 LDAP 目录服务的旅程:
nss_ldap 和 pam_ldap 是由 PADL Software 维护和分发的。与 LDAP 类似,Web上的 Samba 参考资料也很丰富:
/usr/local/samba,则可以在 ../swat/using_samba 下找到 O'Reilly 的 Using Samba 一书的完整文本,并可在 ../swat/help 下找到一些有用的 HTML 文档。nss_ldap 和 pam_ldap PAM 模块外,还有迁移脚本集,您也许有兴趣查看一下。类似于 IDEALX 脚本,它们是用 Perl 编写的,PADL 脚本旨在迁移诸如 /etc/hosts、/etc/group、/etc/networks 和 /etc/passwd 之类的 UNIX 配置文件,而不是针对 Samba 用户管理。祝您好运,玩得开心点!
请将您对本教程的反馈发送给我们。我们盼望获得您对本教程的意见!
这样您就拥有了它 ― 一个完全配置的、将为 Samba PDC 提供用户认证的 OpenLDAP 服务器。或者至少假定您最终得到了。这并非取笑您,毫无疑问,本教程中所包含内容所处的环境,会因为某些原因而对某些人无效。还记得我们先前在收集和构建必需的软件 中讨论的开放源码软件的选择么?有时,选择是一把双刃剑。选择也增加了一层复杂性,因为并非“条条大路通罗马”。因此我们修修补补,最终找到一个解决方案 ― 但最终,它也可能只比原始方案更好些。然后,本着开放源码模型的精神,我们又将那些解决方案回报给社区。
因为本教程中的主题范围所限,所以不能讨论某些背景资料。例如,我们在本教程开始时假定您已经有效地启动和运行了 Samba PDC;我们还假定您对 LDAP 幕后的术语和概念有基本的理解。如果您发现自己对 LDAP/Samba 的了解有一些缺陷,则请看一看后两页中列出的参考资料。它们包含一些优秀的背景材料和深入的看法,即使是对于经验丰富的管理员,这些参考资料也肯定会使他们受益匪浅。
我相信,您已经发现此处提供的参考资料对于您的特定实现是有用和有益的。与往常一样,感谢提出意见、指出缺点和勘误。请填写最后一页的反馈表单,或者直接给我发邮件(ibm-feedback@syroidmanor.com)。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。