Chinaunix首页 | 论坛 | 博客
  • 博客访问: 80244
  • 博文数量: 19
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 202
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-24 17:26
个人简介

Linux、Python爱好者,推广者。

文章分类

全部博文(19)

文章存档

2015年(1)

2011年(1)

2010年(2)

2009年(15)

我的朋友

分类: LINUX

2009-05-09 16:42:12

服务器的ip192.168.0.145      客户端ip192.168.0.151

系统环境:AS4,软件包采用默认安装,内核版本2.6.9-11.EL

所需软件:rpm –qa |grep ldap

openldap-2.2.13-2     //包含 OpenLDAP 配置文件、库和文档

openldap-clients-2.2.13-2    //包含客户机程序,用来访问和修改 OpenLDAP 目录

openldap-servers-2.2.13-2   //包含 slapd slurpd 服务器、迁移脚本和相关文件

openldap-devel-2.2.13-2

OpenLDAP 包在服务器上安装了很多程序:

  • 守护进程:
    • slapd:主 LDAP 服务器
    • slurpd:负责与复制 LDAP 服务器保持同步的服务器
  • 对网络上的目录进行操作的客户机程序。下面这两个程序是一对儿:
    • ldapadd:打开一个到 LDAP 服务器的连接,绑定、修改或增加条目
    • ldapsearch:打开一个到 LDAP 服务器的连接,绑定并使用指定的参数进行搜索
  • 对本地系统上的数据库进行操作的几个程序:
    • slapadd:将以 LDAP 目录交换格式(LDIF)指定的条目添加到 LDAP 数据库中
    • slapcat:打开 LDAP 数据库,并将对应的条目输出为 LDIF 格式

服务器配置(192.168.0.145

OpenLDAP 的主要服务器配置文件是 /etc/openldap/slapd.conf

正如上面介绍的一样,信息被组织成属性和值的组合,称为条目。条目属性必须遵循的规则是使用 objectclass 专用属性进行组织的,这可以在 /etc/openldap/schema/ 模式文件中找到。对于身份验证来说,需要使用在 nis.schema 中定义的 posixAccount shadowAccount objectclasses

include /etc/openldap/schema/nis.schema

loglevel 行设置的是日志选项。可以将其设置为这样的级别:调试语句和操作统计信息都会被记录到 /var/log/slapd.log 中。日志级别是累加的:296 = 256 日志连接/操作/结果 + 32 搜索过滤器处理 + 8 连接管理:

loglevel 296

日志信息会被记录到 syslogd LOG_LOCAL4 机制中。还需要将下面的内容添加到 /etc/syslog.conf 中,并让 syslogd 重新读取自己的配置文件:

local4.debug /var/log/slapd.log

access 行定义了谁可以访问目录中的内容。我们希望用户可以修改自己的密码,并更新自己的 shadow 信息来反映密码的变化。希望身份验证程序能够检索用户的密码。还希望用户能够读取所有其他条目。注意密码条目是不可读的,shadow 属性的惟一用处就是管理密码的过期问题。

access to attrs=shadowLastChange,userPassword

      by self write

      by * auth

 

access to *

      by * read

接下来,在 database 部分,要定义下面的内容。

使用新的 bdb 后端数据库:

database bdb

指定管理 DN,它不用于访问控制或限制数据库的操作。也不需要在目录中为这个 DN 指定一个条目。为具有 rootpw 密码的管理员使用 DN 可以跳过 ACL 规则中的所有访问控制:

rootdn "cn=root,dc=it,dc=com"
rootpw 123    //
明文

ldap 客户机工具的配置文件是 /etc/openldap/ldap.conf

BASE dc=it,dc=com

启动服务

# service ldap restart

shadow 信息

Red Hat 所提供的 openldap-servers 包包含 PADL Software Pty Ltd. 公司的 MigrationTools 工具。我们将使用这些工具将数据从 Linux 系统文件(例如 /etc/group /etc/password)转换成 LDAP LDIF 格式,这是数据库信息的一种文本格式的表示。这种格式是行界定、冒号分隔的属性-值对。

有一组 Perl 脚本被安装到 /usr/share/openldap/migration/ 中执行迁移。这些 Perl 脚本的配置信息包含在 migrate_common.ph 文件的开头。对于我们的目的来说,只需要修改命名前缀的变量来使用条目的识别名就足够了,如下所示:

$DEFAULT_BASE = "dc=it,dc=com"

在进行这些修改之后请运行脚本 migrate_base.pl它会创建根项并为 HostsNetworksGroup People 等创建低一级的组织单元

# migrate_base.pl > base.ldif

base.ldif 条目

# cat base.ldif
dn: dc=it,dc=com
dc: it
objectClass: top
objectClass: domain
dn: ou=People,dc=it,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=it,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit

LDAP 服务器上,使用 OpenLDAP 客户机工具 ldapadd 将以下条目插入到数据库中。简单身份验证必须要使用 -x 选项指定。在 slapd.conf 中定义的 rootdn 身份验证识别名是 “cn=Manager,dc=it,dc=com”。对于简单身份验证来说,必须使用密码。选项 -W 强制提示输入密码。这个密码就是在 slapd.conf 文件中指定的 rootpw 参数的值。包含这些条目的 LDIF 文件是使用 -f 选项指定的:

# ldapadd -x -D "cn=root,dc=it,dc=com" -W -f base.ldif

迁移 ldapuser 组

# grep ldapuser /etc/group > group.in
# ./migrate_group.pl group.in > group.ldif
#  cat group.ldif
dn: cn=ldapuser,ou=Group,dc=it,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapuser
userPassword: {crypt}x
gidNumber: 500
# ldapadd -x -D "cn=root,dc=it,dc=com" –W -f group.ldif

最后,从 /etc/passwd /etc/shadow 中迁移 ldapuser 的信息

# grep ldapuser /etc/passwd > passwd.in
# ./migrate_passwd.pl passwd.in > passwd.ldif
# cat passwd.ldif
dn: uid=ldapuser,ou=People,dc=it,dc=com
uid: ldapuser
cn: ldapuser
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt$1$TeOlOcMc$cpQaa0WpLSFRC1HIHW5bt1
shadowLastChange: 13048
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 500
homeDirectory: /home/ldapuser
gecos: ldapuser
# ldapadd -x -D "cn=root,dc=it,dc=com" -W -f passwd.ldif

 

检查已经添加到数据库中的信息

# ldapsearch -x
# extended LDIF
## LDAPv3
# base <> with scope sub
# filter: (objectclass=*)
# requesting: ALL
#
# it.com
dn: dc=it,dc=com
dc: ibm
objectClass: top
objectClass: domain
# People, it.com
dn: ou=People,dc=it,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
# Group, it.com
dn: ou=Group,dc=it,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
# ldapuser, Group, it.com
dn: cn=ldapuser,ou=Group,dc=it,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapuser
gidNumber: 500
# ldapuser, People, it.com
dn: uid=ldapuser,ou=People,dc=it,dc=com
uid: ldapuser
cn: ldapuser
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 500
homeDirectory: /home/ldapuser
gecos: test2
# search result
search: 2
result: 0 Success
# numResponses: 6
# numEntries: 5

以后新创建了用户使用上面的方法把用户加到ldap数据库里。

LDAP 客户机192.168.0.151

用来设置客户机的 Red Hat Enterprise Linux release 4 Update 1 包包括:

  • nss_ldap-226-6:包括两个 LDAP 访问客户机:nss_ldap pam_ldap

    nss_ldap 是一组 C 库扩展,它允许 LDAP 目录服务器用作一个用户和组信息的主源

          pam_ldap 是一个 Linux-PAM 模块,它支持身份验证功能

LDAP 身份验证要想正确地工作,需要配置两个服务:系统命名服务和身份验证服务。

系统命名服务(NSS)需要配置为使用 LDAP 来解析诸如用户和组帐号之类的资源。例如,在运行命令 ls -l 时,如果某个文件 inode 给出文件的所有者是 “user 501”,那么命名服务就需要将 “uid 501” 解析成用户名,并在 ls 命令输出结果中输出。通常来说,这是通过查找 /etc/passwd 文件中的所有用户帐号实现的。由于用户现在都存储在 LDAP 目录中,因此系统需要配置成同时对 passwd 文件和 LDAP 目录中的帐号进行解析。这种功能是通过 /usr/lib/libnss_ldap.so 库提供的。

身份验证服务是实际向 LDAP 验证用户身份的服务。可插入身份验证模块(PAM)提供了本地 Linux 身份验证服务。下面我们将配置 PAM 先对本地的 /etc/passwd 文件检查用户帐号,然后再对 LDAP 服务器进行检查。PAM LDAP 模块可以用来将身份验证重定向到 LDAP 目录上。/lib/security/pam_ldap.so PAM 模块提供了 LDAP 身份验证功能。

身份验证本身是由 PAM 程序执行的,它从身份验证候选机制中获取用户名,将其绑定到 OpenLDAP 服务器上,检索与这个 uid 条目(用户名条目)相关的 DN;从身份验证候选机制中获取密码,然后使用这个 DN 和密码试图将其绑定到 OpenLDAP 服务器上。如果绑定成功,PAM 会报告说这个用户已经成功通过了 pam_ldap.so 提供的身份验证测试。根据 PAM 的配置不同,在用户看到命令行提示符之前可能会执行其他测试。

我们可以采用两种方法来配置 LDAP 客户机。一种快速而简单的方法是运行 /usr/sbin/authconfig,并在两个屏幕中输入信息。另外一种方法是通过编辑客户机 LDAP 配置文件 /etc/ldap.conf,然后修改 /etc/nsswitch.conf/etc/sysconfig/authconfig /etc/pam.d/system-auth。首先让我们来看一下如何运行 authconfig

如图 3 所示进行选择,然后点击 Next


3. 执行 authconfig 命令的第一个页面


在如图 4 所示的第二个屏幕中输入对应的信息,然后点击 下一步

要手工配置 OpenLDAP 客户机,请遵循下面的步骤。

用来跟踪特定身份验证机制是否已经启用的文件是 /etc/sysconfig/。我们可以希望以下条目的值都是 “yes”

USELDAP=yes
USELDAPAUTH=yes
USEMD5=yes
USESHADOW=yes
USELOCAUTHORIZE=yes

PAM NSS 模块使用的基本配置文件是 /etc/ldap.confhost 选项指定 LDAP 服务器,base 选项指定这个目录使用的 DN,最初我们希望关闭加密功能:

host 192.168.0.145   //服务器的ip或主机名   客户端ip192.168.0.151

base dc=it,dc=com
ssl off

要让 NSS 服务使用 OpenLDAP 服务器,需要将 “ldap” 添加到 /etc/nsswitch.conf 文件的 passwdshadow group 行中,如下所示:

passwd: files ldap
shadow: files ldap
group: files ldap

要让 PAM 身份验证服务使用 OpenLDAP 服务器,请将 pam_ldap 行加入到 /etc/pam.d/system-auth 中,位置在对应的标准 pam_unix.so 条目之后。尽管其他设置也可以实现相同的结果,但是我使用下面的文件设置:

auth required /lib/security/$ISA/pam_env.so
auth sufficient /lib/security/$ISA/pam_unix.so likeauth nullok
auth sufficient /lib/security/$ISA/pam_ldap.so use_first_pass
auth required /lib/security/$ISA/pam_deny.so
account required /lib/security/$ISA/pam_unix.so broken_shadow
account sufficient /lib/security/$ISA/pam_localuser.so
account sufficient /lib/security/$ISA/pam_succeed_if.so uid %lt; 100 quiet
account [default=bad success=ok user_unknown=ignore] /lib/security/$ISA/pam_ldap.so
account required /lib/security/$ISA/pam_permit.so
password requisite /lib/security/$ISA/pam_cracklib.so retry=3
password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
password sufficient /lib/security/$ISA/pam_ldap.so use_authtok
password required /lib/security/$ISA/pam_deny.so
session required /lib/security/$ISA/pam_limits.so
session required /lib/security/$ISA/pam_unix.so
session optional /lib/security/$ISA/pam_ldap.so

现在,用户帐号信息可以从客户机系统中删除并从 LDAP 目录中进行获取了。当用户试图登录客户机系统时,PAM 身份验证服务就会从用户那里获取用户名,在我们的例子中是 ldapuserPAM 会从 LDAP 服务器中检索识别名(DN)条目 .dn: uid=ldapuser, ou=People, dc=it, dc=com.PAM 然后会从用户那里获取密码。然后 PAM 试图使用这个 DN 和密码与 LDAP 服务器进行绑定。DN 和密码都以正文文本的格式发送给 LDAP 服务器。在对密码进行散列操作之后,如果服务器可以让用户登录,就会向 PAM 报告说已经成功进行了绑定。成功绑定可以完全满足 PAM pam_ldap 模块汇报成功的标准,如果所有其他 PAM 标准都已经满足了,那么就允许用户登录到系统中。

 

Samba+ldap:参考

openldap能认识samba的用户信息,我们需在openldap服务器中导入samba.schema。该文件是不包含在openldap源码中的,我们可在samba源码目录中的/examples/LDAP路径中找到该文件。把它拷贝到openldapschema目录。接着编辑slapd.conf文件,用include指令把samba.schema导入openldap。如:

include         /etc/ldap/schema/samba.schema              #导入samba.schema文件

 

192.168.0.151上安装samba,修改配置文件如下:

security = user

ldap admin dn = "cn=root,dc=it,dc=com"    #指定管理员,请参考slapd.conf文件

passdb backend = ldapsam:ldap://192.168.0.145     #指定用户验证的ldap目录服务器的IP地址或主机名

ldap group suffix = ou=Group   

ldap user suffix = ou=People     #用户信息存放的目录路径

ldap delete dn = no             #不允许删除dn

ldap suffix = dc=it,dc=com        #指定搜索后缀

启动sambaservice smb restart

cn=root,dc=it,dc=com管理员的密码“123”保存到secrets.tdb文件中,以便samba服务器与openldap服务器进行通信。

smbpasswd -w 123

Setting stored password for "cn=Manager,dc=my-domain,dc=com" in secrets.tdb        #成功保存的提示信息,千万注意!!这里的密码“123,就是slapd.conf文件里指定的管理员的密码!

配置完成,使用smbpasswd命令就可把用户信息保存到ldap目录服务器上了。

 

因为我们的最终目的是要使用户可以自已登录ldap服务器修改自已的samba密码,所以在ldap服务器上有cn=test,dc=samba,dc=it,dc=com目录项,且使用该dn能正常登录ldap目录服务器。在cn=test,dc=samba,dc=it,dc=com目录项中还要添加一个sambaSamAccount对象类型,以便smbpasswd程序写入samba帐号信息。添加该对象类型时需要填两个属性,一个是sambaSID,一个是uidsambaSID类似Windows NT中的SID,它是以S开头一串数字,由Samba服务器的SID + UID组成。当你的samba服务器成功连接到ldap目录服务器时,它已在ldap目录服务器中自动创建一个sambaDomainName=hostname的目录项。该目录项的sambaSID就是Samba服务器的SID了,类似于S-1-5-21-3129426798-1813742091-3551573396UID手动填一个即可,如3001。每个用户的UID都是不同的。最后的sambaSIDS-1-5-21-3129426798-1813742091-3551573396-3001
    *

     
配置完成,使用smbpasswd命令就可把用户信息保存到ldap目录服务器上了。

debian:~# smbpasswd -a test
New SMB password:
Retype new SMB password:
Added user test.             #
成功添加用户

 

# smbpasswd -a test1   //此用户为ldap上的用户,如上图。

  New SMB password:

  Retype new SMB password:

  Added user test1.             #成功添加用户

把服务器里的用户添加为samba用户,如上图中的用户:

#smbpasswd -a test    //登录samba服务器可以使用这个帐号

New SMB password:

Retype new SMB password:

Added user test.

/etc/samba目录下并没有产生smbpasswd这个文件: #ls

lmhosts  secrets.tdb  smb.conf  smb.conf.bak  smbusers

 

 

 

设定ldap服务来维护samba帐号

  到此为止,使用ldap目录服务器进行Samba用户验证已配置完成。但现在还是要管理员在samba服务器上使用smbpasswd命令为用户维护密码。从维护工作量和保密的角度出发,由用户自已维护自已的密码是一种最好的方法。具体设置方法是这样的:

  通过目录服务器的权限管理,我们也可把test用户密码属性设置成只有 dncn=test,ou=people,dc=it,dc=com的用户和目录服务器管理员才能修改。要达到该项果,请把以下ACL加入到 slapd.conf中。

 

            access to attrs=sambaLMPassword

                    by dn="cn=root,dc=it,dc=com" write

                    by anonymous auth

                    by self write

                    by * none

 

            access to attrs=sambaNTPassword

                    by dn="cn=root,dc=it,dc=com" write

                    by anonymous auth

                    by self write

                    by * none

 

  重启openldap服务器使配置生效。

  用smbpasswd命令就能修改用户的密码了,不过别忘了原始密码,否则又得劳驾管理员了!

  根据密码复杂度要求,用户自己设的密码至少要有6位,以root权限执行没此要求。

阅读(2926) | 评论(0) | 转发(0) |
0

上一篇:Linux下安装飞信

下一篇:ldap源码安装

给主人留下些什么吧!~~