OenLDAP 配置记录

概述

  • 测试环境

    • 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)

生成管理员密码串

#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分隔,我没测试过)。

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

设置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密码及密钥文件路径

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

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数据库。

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

测试配置

slaptest -u 
#config file testing succeeded
 

配置文件转为目录

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信息。

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服务

# 启动服务
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

配置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



转载于:https://my.oschina.net/badboy2/blog/464517

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值