CentOS上OpenLDAP Server使用cn=config方式配置

LDAPworm

翻译自How to Configure OpenLDAP server in Red Hat Enterprise Linux 7 using cn=config method ?

环境

  • CentOS 7
  • openldap-2.4

问题

  • 使用slapd工具在CentOS上安装与配置OpenLDAP Server
  • 使用olc方式如何配置OpenLDAP Server

操作

  1. 安装openldap包
yum install -y openldap openldap-clients openldap-servers

LDAP默认的配置目录是/etc/openldap/slapd.d

[root@rhel7 ~]# cd /etc/openldap/slapd.d/
[root@rhel7 slapd.d]# ls -l
drwxr-x---. 4 ldap ldap 4096 Aug  3 22:49 cn=config
-rw-------. 1 ldap ldap  589 Aug  2 23:39 cn=config.ldif
[root@rhel7 slapd.d]# cd cn\=config
[root@rhel7 cn=config]# ls -l
drwxr-x---. 2 ldap ldap 4096 Aug  3 22:11 cn=schema
-rw-------. 1 ldap ldap  378 Aug  2 22:21 cn=schema.ldif
-rw-------. 1 ldap ldap  552 Aug  3 20:42 olcDatabase={0}config.ldif
-rw-------. 1 ldap ldap  443 Aug  2 22:21 olcDatabase={-1}frontend.ldif
-rw-------. 1 ldap ldap  562 Aug  2 22:21 olcDatabase={1}monitor.ldif
drwxr-x---. 2 ldap ldap   65 Aug  3 22:53 olcDatabase={2}hdb.ldif
  1. 设置olcSuffix,设置domain。只需要更新下文件olcDatabase={2}hdb.ldif中的olcSuffix
[root@rhel7 cn=config]# vi /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif
olcSuffix: dc=example,dc=com
  1. 推荐先创建一个专用的具有所有权限的账号,用它来更新LDAP的数据库。需要更新文件olcDatabase={2}hdb.ldif中的olcRootDN和olcRootPW
[root@rhel7 cn=config]# vi /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif
olcRootDN: cn=Manager,dc=example,dc=com
olcRootPW: redhat
  1. 同时设置config数据库的管理员账号
    这里设置的密码很简单,请在生产环境下将密码设置复杂些
[root@rhel7 cn=config]# vi olcDatabase\=\{0\}config.ldif
olcRootDN: cn=config
olcRootPW: secret
  1. 使用slaptest命令去验证配置
[root@rhel7 cn=config]# slaptest -u
config file testing succeeded

如果报ldif_read_file: checksum error这样的错误,是因为计算文件的CRC32码来自动校验(文件中前两行中带有校验码),需要更新校验码

  • 删除掉报错的文件的前两行
    # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
    # CRC32 3e515b74
    
  • 安装crc32工具(perl-Archive-Zip)
    [root@rhel7 cn=config]# yum install perl-Archive-Zip -y
    
  • 计算新文件的CRC32码
    [root@rhel7 cn=config]# crc32 <(cat olcDatabase\=\{2\}hdb.ldif)
    509f92c7
    
  • 将计算的CRC32码更新到文件中,添加到文件的前两行
    # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
    # CRC32 509f92c7
    
  1. 如果配置验证成功,启动openldap server
$ systemctl start slapd
  1. 创建ldap server的基础结构
$ cat base.ldif
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
o: example.com

dn: ou=users,dc=example,dc=com
objectClass: organizationalUnit
objectClass: top
ou: users

dn: ou=groups,dc=example,dc=com
objectClass: organizationalUnit
objectClass: top
ou: groups       
  1. 使用ldapadd命令向LDAP目录导入基础结构
$ ldapadd -x -D "cn=Manager,dc=example,dc=com" -w redhat -f base.ldif
adding new entry "dc=example,dc=com"
adding new entry "ou=users,dc=example,dc=com"
adding new entry "ou=groups,dc=example,dc=com"
  1. 使用ldapsearch命令验证基础结构是否成功导入
$ ldapsearch -x -D 'cn=Manager,dc=example,dc=com' -b dc=example,dc=com -w redhat
  1. 在向ldap结构中添加users和groups之前,先使用ldapadd导入schema,以免出现“object class not defined"的报错
$ ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/schema/cosine.ldif 
$ ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/schema/nis.ldif 
$ ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/schema/inetorgperson.ldif
  1. 向ldap结构中添加users和groups
  • Users
    • 使用slappasswd命令获取需要的密码
      # slappasswd -s test
      {SSHA}5rMM/3f8Ki13IyarGTtwzieoTu7KMgwc
      
    • 使用ldif文件和上面的hashed密码创建users.ldif
      $ cat users.ldif
      dn: uid=testuser,ou=users,dc=example,dc=com
      uid: testuser
      cn: testuser
      objectClass: shadowAccount
      objectClass: top
      objectClass: person
      objectClass: inetOrgPerson
      objectClass: posixAccount
      userPassword: {SSHA}5rMM/3f8Ki13IyarGTtwzieoTu7KMgwc
      shadowLastChange: 17016
      shadowMin: 0
      shadowMax: 99999
      shadowWarning: 7
      loginShell: /bin/bash
      uidNumber: 1000
      gidNumber: 1000
      homeDirectory: /home/testuser
      sn: testuser
      mail: testuser@example.com
      
      dn: uid=testuser1,ou=users,dc=example,dc=com
      uid: testuser1
      cn: testuser1
      objectClass: shadowAccount
      objectClass: top
      objectClass: person
      objectClass: inetOrgPerson
      objectClass: posixAccount
      userPassword: {SSHA}5rMM/3f8Ki13IyarGTtwzieoTu7KMgwc
      shadowLastChange: 17016
      shadowMin: 0
      shadowMax: 99999
      shadowWarning: 7
      loginShell: /bin/bash
      uidNumber: 1001
      gidNumber: 1001
      homeDirectory: /home/testuser1
      sn: testuser1
      mail: testuser1@example.com
      
  • Groups
    创建groups.ldif
    $ cat groups.ldif
    dn: cn=testuser,ou=groups,dc=example,dc=com
    objectClass: posixGroup
    objectClass: top
    cn: testuser
    userPassword: {crypt}x
    gidNumber: 1000
    
    dn: cn=testuser1,ou=groups,dc=example,dc=com
    objectClass: posixGroup
    objectClass: top
    cn: testuser1
    userPassword: {crypt}x
    gidNumber: 1001
    
  1. 使用ldapadd命令添加users和groups
$ ldapadd -x -D cn=Manager,dc=example,dc=com -f users.ldif -w redhat
$ ldapadd -x -D cn=Manager,dc=example,dc=com -f groups.ldif -w redhat
  1. 使用ldapsearch命令来验证users和groups创建是否成功
$ ldapsearch -x -D cn=Manager,dc=example,dc=com -b dc=example,dc=com -w redhat

OpenLDAP的操作

  1. 添加数据
 $ cat user3.ldif
dn: uid=testuser3,ou=users,dc=example,dc=com
uid: testuser3
cn: testuser3
objectClass: shadowAccount
objectClass: top
objectClass: person
objectClass: inetOrgPerson
objectClass: posixAccount
userPassword: {SSHA}5rMM/3f8Ki13IyarGTtwzieoTu7KMgwc
shadowLastChange: 17016
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/testuser
sn: testuser3
mail: testuser@example.com
$ ldapadd -x -D 'cn=Manager,dc=example,dc=com' -w redhat -f user3.ldif
  1. 查询数据
$ ldapsearch -x -b 'dc=example,dc=com'
$ ldapsearch -x -b 'dc=example,dc=com' 'sn=testuser3'
  1. 修改数据
# 方法一:交互式
$ ldapmodify -x -D 'cn=Manager,dc=example,dc=com' -w redhat
dn: uid=testuser3,ou=users,dc=example,dc=com
changetype: modify
replace: sn
sn: Test User 3
-
add: description
description: add attribute

# 方法二:配置文件式
$ cat modify.ldif
dn: uid=testuser3,ou=users,dc=example,dc=com
changetype: modify
replace: sn
sn: Test User 3
-
delete: description
$ ldapmodify -x -D 'cn=Manager,dc=example,dc=com' -w redhat -f modify.ldif
  1. 删除数据
$ ldapdelete -x -D 'cn=Manager,dc=example,dc=com' -w redhat uid=testuser3,ou=users,dc=example,dc=com
  1. 数据导出
# 方法一:用查询导出
$ ldapsearch -x -b 'dc=example,dc=com' > export.ldif
# 方法二:导出命令
$ slapcat -l export.ldif

打开OpenLDAP日志

  1. 更新日志级别
$ cat loglevel.ldif 
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats

$ ldapmodify -Y EXTERNAL -H ldapi:/// -f loglevel.ldif
$ systemctl restart slapd
  1. 修改rsyslog配置文件
$ touch /var/log/slapd.log
$ echo local4.* /var/log/slapd.log >> /etc/rsyslog.conf
$ systemctl restart rsyslog
  1. 查看openldap日志
$ tail -f /var/log/slapd.log

容器化部署

$ docker run --name ldap_core -p 389:389 -p 636:636 --env LDAP_ORGANISATION="example.com" --env LDAP_DOMAIN="example.com" --env LDAP_ADMIN_PASSWORD="redhat" --detach osixia/openldap
$ docker run --name ldap_web -p 80:80 -p 443:443 --link ldap_core:ldap_core --env PHPLDAPADMIN_LDAP_HOSTS=ldap_core --detach osixia/phpldapadmin

同时还有Openshift的openldap容器openshift/openldap-2441-centos7

工具

  1. 浏览ldap目录列表的工具ldapbrowser
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272