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 []: [email protected]

启动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

时间: 2024-10-11 10:17:41

OenLDAP 配置记录的相关文章

我的vim配置记录

配置路径,/etc/vim/vimrc,这个是系统的vim配置,如果一台PC多个用户使用,每个用户的习惯不同的话,可以使用不同的配置,在用户目录下新建一个.vimrc的文件就可以了. 我目前是将配置写在系统的配置中,我的配置文件如下所示: set nu set tabstop=4 set autoindent set matchtime=1 set hlsearch set cindent set shiftwidth=4 set ruler set showmode colorscheme d

Linux下apache+php搭建配置记录

linux下apache+php搭建配置记录 第1章  环境说明 1.1 系统说明 CentOS 6.4 1.2 软件说明 httpd-2.4.2.tar.gz apr-util-1.4.1.tar.gz apr-1.4.6.tar.gz pcre-8.13.tar.gz php-5.4.3.tar.bz2 libmcrypt-2.5.8.tar.gz mhash-0.9.9.9.tar.gz 第2章  Apache搭建说明 2.1 安装依赖包 yum install make openldap

Phabricator 开放源代码的软件开发平台 Window Active Directory ldap ad域配置记录

phabricator 开放源代码的软件开发平台Web应用程序,用以帮助软件公司开发更好的软件. 在代码审查(Code Review)方面,Facebook做了一个可视化的工具,现已开源,叫Phabricator;工程师可以在页面上非常方便的针对每一段(单行或者多行)代码进行交互讨论;负责审查的工程师可以接受代码改变,可以提出疑问要求原作者继续修改,可以提出自己不适合以推出该代码审查,等等.只有代码被明确接受之后才能被工程师提交到服务器端的代码库,这一点集成到提交工具中强制执行.基本理念就是凡是

ubuntu14.04上Trac配置记录

系统环境:ubuntu14.04 (并假设Apache2服务可以正常运行) 1. 安装软件: sudo aptitude install trac python-mysqldb 2. 创建数据库Trac可支持的数据库有:sqlite, postgresql及mysql等.默认的是sqlite,但这里选用的是mysql. $ mysql -uroot -p Enter password: ****** mysql> CREATE DATABASE $myproject DEFAULT CHARAC

Mac环境下 jieba 配置记录

Mac环境下 jieba 配置记录pip3 install jieba完事了 样例: 1 import jieba 2 s="我??山东大学" 3 ls=jieba.lcut(s) 4 print(ls) 原文地址:https://www.cnblogs.com/war1111/p/10907060.html

CSDN网站CODE配置记录

为了出门写代码方便,决定还是开个项目,因此才有了这次经历. 原来有在windows下用过git,不过用法跟svn一样.虽然以前也在souceforge或者git上看一些代码,但是对操作一直没有了解过.今天把自己配置过程记录一下,方便以后查看. 开始之前没有发现,CODE下的规则,直接百度各种资料,后来才发现,呵呵,这也太显眼了. 1.创建项目 这个简单,也没啥可记录的. 2.配置git 给的链接下的太慢了,我干脆直接下了个git,Git-1.9.5-preview20150319,给个下载地址吧

nginx的文件cache服务配置记录(proxy_cache)

根据业务部门需求,申请一台文件的cache服务器.如下记录在单台机器上部署Nginx缓存服务过程: nginx缓存配置(缓存配置的参数这里就不做过多解释了,在前面的文档中已说明过,这里只做简单记录) [[email protected] ~]# cat /data/nginx/conf/nginx.conf|grep -v "^$"|grep -v "#" user www; worker_processes 8; events { worker_connectio

nginx线上一次临时小小配置记录

由于用到了开源产品接入游戏sdk服务器,因此将nginx 80端口转向了40000 因此nginx访问会出现这种情况: 404 not found 好久没有配置这个了,百度了一下很多坑,不信你自己百度试试,404 not found鬼知道会给你带来什么,于是自己琢磨了下,打开配置文件看看后才知道原来问题在: proxy_pass http://127.0.0.1:40000; 于是修改配置,nginx -t之后检查 nginx: the configuration file /etc/nginx

ldap配置记录

记录一下最近研究ldap+nfs的情况 ldap这个东西上次研究nis的时候就有人说那是上个世纪的老东西了,不应该继续使用.虽然意识到如此但时间不够还是使用了nis,这次乘着重做就干脆切换到ldap,可这次相当不顺利,折腾了一个星期左右,现在总算折腾好了,中间被坑了无数次,记录一下以备下次继续参考吧. 关防火墙,关防火墙,关防火墙 没想到这次又被这个大坑害了一把,因为用的是redhat7.0, 所以每次安装之后都是直接service iptables off, 一看提示没有就大意了,没把防火墙作