OpenLDAP 2.4部署记录

2017-05-07 阅读: OpenLDAP

环境

  • CentOS 7.3 192.168.61.100

禁用selinux

setenforce 0

vi /etc/selinux/config
SELINUX=disabled

安装和配置

安装并启动服务

安装:

yum install openldap openldap-servers openldap-clients

拷贝数据库配置文件:

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

DB_CONIFG中主要是关于Berkeley DB的相关的一些配置

启动OpenLDAP Server:

systemctl start slapd 
systemctl enable slapd
systemctl status slapd

slapd即standard alone ldap daemon,该进程默认监听389端口

设置root用户密码

先用一个命令生成一个LDAP管理用户root密码。

slappasswd
New password:
Re-enter new password:
{SSHA}krOGXDmiCdSXuXocOf10F96LJO5ijdXo

上面输出的hash之后的密码注意保存一份

新建一个rootpwd.ldif(名称是自定义的)的文件:

vi rootpwd.ldif

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}krOGXDmiCdSXuXocOf10F96LJO5ijdXo
  • ldif即LDAP Data Interchange Format,是LDAP中数据交换的一种文件格式。文件内容采用的是key-value形式,注意value后面不能有空格。
  • 上面内容中dn即distingush name
  • olc即Online Configuration,表示写入LDAP后不需要重启即可生效
  • changetype: modify表示修改一个entry,changetype的值可以是add,delete, modify等。
  • add: olcRootPW表示对这个entry新增了一个olcRootPW的属性
  • olcRootPW: {SSHA}krOGXDmiCdSXuXocOf10F96LJO5ijdXo指定了属性值

下面使用ldapadd命令将上面的rootpwd.ldif文件写入LDAP:

ldapadd -Y EXTERNAL -H ldapi:/// -f rootpwd.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

导入schema

导入schema,schema包含为了支持特殊场景相关的属性,可根据选择导入,这里先全部导入:

ls /etc/openldap/schema/*.ldif | while read f; do ldapadd -Y EXTERNAL -H ldapi:/// -f $f; done

设定默认域

先使用slappasswd生成一个密码:

slappasswd
New password:
Re-enter new password:
{SSHA}OpMcf0c+pEqFLZm3i+YiI2qhId1G/yM3

新建一个domain.ldif的文件:

vi domain.ldif

dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
  read by dn.base="cn=Manager,dc=frognew,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=frognew,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=frognew,dc=com


dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}OpMcf0c+pEqFLZm3i+YiI2qhId1G/yM3


dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=Manager,dc=frognew,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=frognew,dc=com" write by * read
  • olcAccess即access,该key用于指定目录的ACL即谁有什么权限可以存取什么
  • olcRootDN设定管理员root用户的distingush name
  • 注意替换上面文件内容中cn为具体的域信息
  • olcRootPW用上面新生成的密码替换

写入:

ldapmodify -Y EXTERNAL -H ldapi:/// -f domain.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

添加基本目录

新建一个basedomain.ldif的文件:

dn: dc=frognew,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: frognew org
dc: frognew

dn: cn=Manager,dc=frognew,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=frognew,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=frognew,dc=com
objectClass: organizationalUnit
ou: Group
  • 注意替换上面文件内容中dn为具体的域信息
  • 理解dn,cn,dc
    • DC即Domain Component,LDAP目录类似文件系统目录dc=frognew,dc=com相当于/com/frognew
    • CN即Common Name,CN有可能代表一个用户名,例如cn=Manager,dc=frognew,dc=com表示在/com/frognew域下的管理员用户Manager
    • OU即Organizational Unit,例如ou=People,dc=frognew,dc=com表示在/com/frognew域下的一个组织单元People

写入:

ldapadd -x -D cn=Manager,dc=frognew,dc=com -W -f basedomain.ldif
Enter LDAP Password:
adding new entry "dc=frognew,dc=com"

adding new entry "cn=Manager,dc=frognew,dc=com"

adding new entry "ou=People,dc=frognew,dc=com"

adding new entry "ou=Group,dc=frognew,dc=com"

会要求输入当前目录管理员用户的密码

测试

可以使用ldapsearch在服务器上测试:

ldapsearch -LLL -W -x -D "cn=Manager,dc=frognew,dc=com" -H ldap://localhost -b "dc=frognew,dc=com"
Enter LDAP Password:
dn: dc=frognew,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: frognew org
dc: frognew

dn: cn=Manager,dc=frognew,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=frognew,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=frognew,dc=com
objectClass: organizationalUnit
ou: Group

管理工具

ldapadmin

可以在局域网内的windows电脑上下载ldapadmin作为管理工具。

ldap-admin

LDAP Account Manager

LDAP Account Manager(LAM)是一个基于PHP Web应用的 LADP管理工具。 具体的安装过程可以参考LDAP Account Manager - Manual。 这里使用aexoti/lam这个Docker镜像快速体验一下。

docker pull aexoti/lam

docker run  -v /var/lib/ldap/lam:/var/lib/ldap-account-manager/config  -p 8011:80 -d --name ldap-lam aexoti/lam

修改/var/lib/ldap/lam/lam.conf:

serverURL: ldap://192.168.61.100:389
admins: cn=Manager,dc=frognew,dc=com
treesuffix: dc=frognew,dc=com
activeTypes: user,group
types: suffix_user: ou=People,dc=frognew,dc=com
types: suffix_group: ou=Group,dc=frognew,dc=com

重启docker容器使配置生效:

docker restart ldap-lam

在浏览器中打开http://192.168.61.100:8011/lam/。

ldap-admin

参考

标题:OpenLDAP 2.4部署记录
本文链接:https://blog.frognew.com/2017/05/openldap-install-notes.html
转载请注明出处。

目录