注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

梦想之鹰的天空

天高任鸟飞......放飞....心情..........放飞.....梦想

 
 
 

日志

 
 

OpenLDAP配置记录[转]  

2014-01-21 16:17:35|  分类: Linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

概述

  • 测试环境
    • CentOS 6.3
    • domain: gdu.me
    • LDAP server: ldap.gdu.me
DEVICE="eth1"
BOOTPROTO="static"
HWADDR="08:00:27:EF:6C:2B"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=192.168.56.2
NETMASK=255.255.255.0
  • 配置步骤
  1. 安装软件包
  2. 配置LDAP Server域信息
  3. 配置LDAP Server加密(TLS)认证
  4. 启动LDAP Server、测试
  5. 通过迁移工具导入本地用户
  6. 增加用户和组(ldif文件)
  7. 客户端LDAP认证配置

OpenLDAP Server

OpenLDAP 2.3以后版本有两种配置方式:

  1. 配置文件:旧方式,通过/etc/openldap/slapd.conf配置。
  2. 非配置文件:配置存储在LDAP server中,可动态更新。在/etc/openldap/sladp.d目录中配置。

安装所需软件包

1
2
yum install openldap-servers migrationtools
#openssl
==========================================================================================
 Package                          Arch        Version                Repository      Size
==========================================================================================
Installing:
 migrationtools                   noarch      47-7.el6               base            25 k
 openldap-servers                 i686        2.4.23-26.el6_3.2      updates        2.0 M
Installing for dependencies:
 openldap-clients                 i686        2.4.23-26.el6_3.2      updates        158 k
 portreserve                      i686        0.0.4-9.el6            base            22 k

Transaction Summary
==========================================================================================
Install       4 Package(s)

生成管理员密码串

1
2
slappasswd -s 123456
#{SSHA}IYj/KpP3SS4Ka3Qcn55hfvMb8Ionc/h8

配置文件

  • 删除配置目录

如果使用配置文件,需删除或改名配置目录(启动脚本优先使用目录下的配置)。

1
rm -rf /etc/openldap/slapd.d/
  • 创建配置文件
1
cp -a /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
  • 修改配置

设置domain(dc=gdu,dc=me)、admin密码、密钥文件路径信息(注意:有的站点说配置项与配置内容间必须用TAB分隔,我没测试过)。

  1. domain修改修改
    • 直接替换
      1
      sed -i.bak 's/dc=my-domain,dc=com/dc=gdu,dc=com/g' /etc/openldap/slapd.conf
    • 手工修改
      suffix "dc=gdu,dc=me"
      rootdn "cn=Manager,dc=gdu,dc=me"
      ...
      # allow only rootdn to read the monitor
      # enable server status monitoring (cn=monitor)
      database monitor
      access to *
          by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
          by dn.exact="cn=Manager,dc=gdu,dc=me" read
          by * none
      
  2. 设置admin密码、密钥文件路径(后续生成)
    1
    2
    3
    4
    5
    cat >> /etc/openldap/slapd.conf <<EOF
    rootpw  {SSHA}IYj/KpP3SS4Ka3Qcn55hfvMb8Ionc/h8
    TLSCertificateFile  /etc/openldap/ssl/slapdcert.pem
    TLSCertificateKeyFile   /etc/openldap/ssl/slapdkey.pem
    EOF

非配置文件

通过修改slapd.d目录下的文件(.ldif),将配置存入LDAP server中(cn=config)。

首先配置的两个是基础数据库文件。

  • bdb.ldif
    • domain修改
      1
      sed -i.bak 's/dc=my-domain,dc=com/dc=gdu,dc=me/g' /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif
      • 手工修改
        olcRootDN: dc=gdu,dc=me
        
    • admin密码及密钥文件路径
      1
      2
      3
      4
      5
      cat >> /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif <<EOF
      olcRootPW: {SSHA}IYj/KpP3SS4Ka3Qcn55hfvMb8Ionc/h8
      olcTLSCertificateFile: /etc/openldap/ssl/slapdcert.pem
      olcTLSCertificateKeyFile: /etc/openldap/ssl/slapdkey.pem
      EOF
  • monitor.ldif
    1
    sed -i.bak 's/cn=manager,dc=my-domain,dc=com/cn=Manager,dc=gdu,dc=me/g' /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif

数据库缓存

现在已用配置、或非配置文件方式完成了LDAP配置。复制DB_CONFIG文件,并设置使用Berkley数据库。

1
2
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -Rf ldap:ldap /var/lib/ldap/

测试配置

1
2
slaptest -u
#config file testing succeeded

配置文件转为目录

1
2
3
4
5
service slapd stop
mkdir -p /etc/openldap/slapd.d/
rm -rf /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
chown ldap.ldap /etc/openldap/slapd.d/ -R

配置加密(LDAPS)

为提高使用LDAP认证的安全性,配置同时运行LDAP(TLS,tcp:389)和TLS或LDAPS(TLS,tcp:636)。

  • 设置ldap启动参数
    1
    sed -i.bak 's/\(SLAPD_LDAPS=\).*$/\1yes/g' /etc/sysconfig/ldap
  • 生成SSL密钥

注意替换按提示输入的ldap server信息。

1
2
3
4
5
6
7
mkdir /etc/openldap/ssl/
openssl req -new -x509 -nodes -out /etc/openldap/ssl/slapdcert.pem -keyout /etc/openldap/ssl/slapdkey.pem -days 365
 
# 设置生成的两个文件(公钥、私钥)ldap用户可读
chown -Rf root:ldap /etc/openldap/ssl
chmod -Rf 750 /etc/openldap/ssl
chmod -Rf 640 /etc/openldap/ssl/*
Generating a 2048 bit RSA private key
 ....................................................+++
 writing new private key to '/etc/openldap/ssl/slapdkey.pem'
 -----
 You are about to be asked to enter information that will be incorporated
 into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 If you enter '.', the field will be left blank.
 -----
 Country Name (2 letter code) [XX]: CN
 State or Province Name (full name) []: SC
 Locality Name (eg, city) [Default City]: Chengdu
 Organization Name (eg, company) [Default Company Ltd]: GDU
 Organizational Unit Name (eg, section) []: IT
 Common Name (eg, your name or your server's hostname) []: ldap.gdu.me 
 Email Address []: admin@gdu.me

启动LDAP服务

  • 启动LDAP服务
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 启动服务
    service slapd start
     
    # 检查服务侦听
    netstat -lt |grep ldap
    #tcp  0  0 *:ldap   *:*  LISTEN
    #tcp  0  0 *:ldaps  *:*  LISTEN
     
    # 设置自启动
    chkconfig slapd on
     
    # 测试配置
    ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
# extended LDIF
#
# LDAPv3
# base <> with scope baseObject
# filter: (objectclass=*)
# requesting: namingContexts
#

#
dn:
namingContexts: dc=gdu,dc=me

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

LDAP基本服务配置完成,后面需构建用户和组。

配置base domain

LDAP已经运行起来,但还没有任何用户(People)、组(Group),我们将在后续添加,现在我们需要设置base、证书和组文件。

这是使用迁移本地用户的方式来完成:转换成LDIF文件用于导入LDAP。

我们面要建立base.ldif模板,给我们的目录(gdu.me)定义基本结构。

  • 建立base.ldif
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    cat > base.ldif <<EOF
    dn: dc=gdu,dc=me
    dc: gdu
    objectClass: top
    objectClass: domain
     
    dn: ou=People,dc=gdu,dc=me
    ou: People
    objectClass: top
    objectClass: organizationalUnit
     
    dn: ou=Group,dc=gdu,dc=me
    ou: Group
    objectClass: top
    objectClass: organizationalUnit
    EOF

注意:换行符差别可能造成导入失败(从网页复制,换行符会出错)。与migrate_base.pl > base.ldif生成的比较,只有一些换行符差别。

ldapadd: attributeDescription "dn": (possible missing newline after line 8, entry "dc=gdu,dc=m                e"?)
  • 导入base.ldif
    1
    2
    3
    4
    5
    ldapadd -x -W -D "cn=Manager,dc=gdu,dc=me" -f ./base.ldif
    # Enter LDAP Password:
    # adding new entry "dc=gdu,dc=me"
    # adding new entry "ou=People,dc=gdu,dc=me"
    # adding new entry "ou=Group,dc=gdu,dc=me"

If you saw the above, then it worked! If you get an error about authentication issues connecting to my-domain.com then it’s not reading your configuration properly, and is using the default. Stop the service and start again.

迁移本地用户和组

下面使用迁移工具根据本地已有用户和组创建ldif文件,用于导入LDAP。

  • 配置migrate工具
    1
    vim /usr/share/migrationtools/migrate_common.ph

修改以下内容:

# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "gdu.me";
 
# Default base 
$DEFAULT_BASE = "dc=gdu,dc=me";
  • Users (People)

生成已有用户ldif文件。

1
/usr/share/migrationtools/migrate_passwd.pl /etc/passwd people.ldif

编辑people.ldif文件,删除不需要导入的用户信息(如:mysql,nobody等等)。

  • Groups (Group)

生成已有组ldif文件。

1
/usr/share/migrationtools/migrate_group.pl /etc/group group.ldif

编辑group.ldif文件,删除不需导入的组信息(似乎保留root,wheel,users就可了)。

  • 导入ldif文件
    1
    2
    ldapadd -x -W -D "cn=Manager,dc=gdu,dc=me" -f group.ldif
    ldapadd -x -W -D "cn=Manager,dc=gdu,dc=me" -f people.ldif
  • 测试连接LDAP数据库
    1
    2
    ldapsearch -xWD "cn=Manager,dc=gdu,dc=me" -b "dc=gdu,dc=me" "cn=root"
    ldapsearch -x -b 'dc=gdu,dc=me' 'cn=yuanxing'
    Enter LDAP Password:
    # extended LDIF
    #
    # LDAPv3
    # base <dc=gdu,dc=me> with scope subtree
    # filter: cn=root
    # requesting: ALL
    #
    
    # root, People, gdu.me
    dn: uid=root,ou=People,dc=gdu,dc=me
    uid: root
    cn: root
    objectClass: account
    objectClass: posixAccount
    objectClass: top
    objectClass: shadowAccount
    userPassword:: e2NyeXB0fSQ2JFdjN.....
    shadowLastChange: 15663
    shadowMin: 0
    shadowMax: 99999
    shadowWarning: 7
    loginShell: /bin/bash
    uidNumber: 0
    gidNumber: 0
    homeDirectory: /root
    gecos: root
    
    # root, Group, gdu.me
    dn: cn=root,ou=Group,dc=gdu,dc=me
    objectClass: posixGroup
    objectClass: top
    cn: root
    userPassword:: e2NyeXB0fXg=
    gidNumber: 0
    
    # search result
    search: 2
    result: 0 Success
    
    # numResponses: 3
    # numEntries: 2
    

添加用户和组

创建用户、组ldif文件,导入LDAP。

  • User

创建username.ldif文件(如yuanxing.ldif):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cat > yuanxing.ldif <<EOF
dn: uid=yuanxing,ou=People,dc=gdu,dc=me
uid: yuanxing
cn: YuanXing
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {CRYPT}cr7JQsCc2EcXg
shadowLastChange: 14846
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 501
gidNumber: 501
homeDirectory: /home/yuanxing
gecos: YuanXing
EOF

UserPassword可用下面的命令生成加密串:

1
2
slappasswd -c crypt -s 111111
{CRYPT}cr7JQsCc2EcXg
  • Group

创建username.ldif文件(如yuanxing-group.ldif):

1
2
3
4
5
6
7
8
cat > yuanxing-group.ldif <<EOF
dn: cn=yuanxing,ou=Group,dc=gdu,dc=me
objectClass: posixGroup
objectClass: top
cn: yuanxing
userPassword: {crypt}x
gidNumber: 501
EOF
  • 导入LDAP
    1
    2
    3
    4
    5
    6
    7
    ldapadd -x -W -D "cn=Manager,dc=gdu,dc=me" -f yuanxing-group.ldif
    #Enter LDAP Password:
    #adding new entry "cn=yuanxing,ou=Group,dc=gdu,dc=me"
     
    ldapadd -x -W -D "cn=Manager,dc=gdu,dc=me" -f yuanxing.ldif
    #Enter LDAP Password:
    #adding new entry "uid=yuanxing,ou=People,dc=gdu,dc=me"

客户端配置

认证配置

LDAP服务端运行正常,现在可以配置客户机通过LDAP进行认证。

  • 设置DNS或host
    192.168.56.101 ldap.gdu.me
    
  • 安装软件包
    1
    yum install openldap-clients nss-pam-ldapd pam_ldap

CentOS/Fedora主机,使用authconfig-gtk或authconfig-tui(authconfig好像可以通过命令行参数完成?),并做如下设置:

  • 证书文件

将slapdcert.pem文件上传到/etc/openldap/cacerts目录。

  • 设置认证方式
       ┌────────────────┤ Authentication Configuration ├─────────────────┐
       │                                                                 │
       │  User Information        Authentication                         │
       │  [ ] Cache Information   [*] Use MD5 Passwords                  │
       │  [*] Use LDAP            [*] Use Shadow Passwords               │
       │  [ ] Use NIS             [*] Use LDAP Authentication            │
       │  [ ] Use IPAv2           [ ] Use Kerberos                       │
       │  [ ] Use Winbind         [ ] Use Fingerprint reader             │
       │                          [ ] Use Winbind Authentication         │
       │                          [*] Local authorization is sufficient  │
       └─────────────────────────────────────────────────────────────────┘
    
    1
    yum install nss-pam-ldapd pam_ldap
  • 设置LDAP Server信息
       ┌─────────────────┤ LDAP Settings ├─────────────────┐
       │                                                   │
       │          [*] Use TLS                              │
       │  Server: ldaps://ldap.gdu.me/____________________ │
       │ Base DN: dc=gdu,dc=me____________________________ │
       │                                                   │
       └───────────────────────────────────────────────────┘
    

配置完成后,会启动nslcd服务进程(nslcd - local LDAP name service daemon)。

  • 测试ldap查询
    1
    2
    3
    ldapsearch -xWD "cn=Manager,dc=gdu,dc=me" -b "dc=gdu,dc=me" "cn=root"
    ldapsearch -x -b 'dc=gdu,dc=me' 'cn=yuanxing'
    getent passwd|grep yuanxing

如果没有返回信息,或返回错误,请检查配置,重新进行测试。如果检查配置没有错误,可以做如下修改,重新进行测试。 将/etc/sssd/sssd.conf文件中的#enumerate=false,修改为:enumerate=true,这样修改完后,getent就会从LDAP查找账户信息。 并重新执行如下命令: service sssd restart

  • 测试登录

成功登录后提示无home目录,需后续设置登录时自动创建目录、或通过autofs自动mountNFS目录。

No directory /home/yuanxing!
Logging in with home = "/".
  • TLS方式失败,原因待查

LDAP以TLS方式运行时,执行登录后,LDAP服务端slapd进程CPU占用达90%以上,日志中无相应信息,原因待查。

客户快速配置

参考: http://myhat.blog.51cto.com/391263/972870

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
chmod 755 /var/log/audit
grep "192.168.56.101" /etc/hosts || echo "192.168.56.101   ldap.gdu.me"  >> /etc/hosts
grep "192.168.56.102" /etc/hosts || echo "192.168.56.102   ldap.gdu.me"  >> /etc/hosts
 
grep SUDOERS /etc/openldap/ldap.conf || echo "SUDOERS_BASE ou=SUDOers,dc=gdu,dc=me"  >> /etc/openldap/ldap.conf
grep sudoers /etc/nsswitch.conf || echo "sudoers:    ldap"  >> /etc/nsswitch.conf
 
test -e /etc/openldap/cacerts/ca.pem || wget http://192.168.56.101/config/ca.pem -P /etc/openldap/cacerts/
 
authconfig --useshadow --usemd5 --enableldap --enableldapauth --enableldaptls --ldapserver=ldap.gdu.me \
--ldapbasedn="dc=gdu,dc=me" --ldaploadcacert=file:///etc/openldap/cacerts/ca.pem --enablemkhomedir --updateall
 
grep "sbin" /etc/skel/.bashrc || echo -e 'PATH=$PATH:/sbin:/usr/local/sbin:/usr/kerberos/sbin;\nexport PATH' >> /etc/skel/.bashrc

自动创建HOME

对于ldap认证的用户,通常需要自动创建他们的HOME目录,好在pam模块pam_mkhomedir.so解决了这一问题,只要把下面内容添加到/etc/pam.d/system-auth的session部分的第一行即可:

session required pam_mkhomedir.so skel=/etc/skel/ umask=0066

但如果没在sshd_config里启用pam,则通过ssh登录的用户没机会运行这个模块。因此,需要如下设置sshd_config:

UsePAM yes

开启日志

LDAP服务器需要手动添加日志功能。/etc/openldap/slapd.conf中末行添加

loglevel 296

local4.* /var/log/ldap.log (說明:local0-7为syslog的facilities,具体的程序应用的facility不一样,每一个facility都有它的数字代码,由 这些代码加上错误信息的程度syslog可以判断出信息的优先权。就上例来说,local7的代码为23,notice的代码为5,那么 local7.notice的信息优先权为:23*8+5=189。这是/var/adm/messages.T3是信息的优先仅。具体可以查 RFC3164。我自己认为设定local7而不用local5是由应用程序决定的。)

这是一个比较详细的日志级别。同时在/etc/syslog.conf中添加local4.* /var/log/ldap.log 确定LDAP服务器的日志位置。

用如下命令使日志功能生效:

service syslog restart

  评论这张
 
阅读(909)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017