OpenLDAP:修订间差异
(→基本概念) |
(→基本概念) |
||
第13行: | 第13行: | ||
== 基本概念 == | == 基本概念 == | ||
這邊會提到一些OpenLDAP與一般LDAP比較不一樣的地方。 | 這邊會提到一些OpenLDAP與一般LDAP比較不一樣的地方 ,以及一些值得提出來的基本概念 。 | ||
=== 管理員帳號名稱 === | === 管理員帳號名稱 === | ||
在OpenLDAP的文件的範例中,都是以<code>cn=Manager</code>當作是管理權限帳號。但透過網路搜尋可以看到很多人是使用<code>cn=admin</code>,甚至是<code>cn=root</code>的帳號。在這份文件裡面我們採用了OpenLDAP文件範例的慣例來設計。 | 在OpenLDAP的文件的範例中,都是以<code>cn=Manager</code>當作是管理權限帳號。但透過網路搜尋可以看到很多人是使用<code>cn=admin</code>,甚至是<code>cn=root</code>的帳號。在這份文件裡面我們採用了OpenLDAP文件範例的慣例來設計。 | ||
=== 管理員帳號權限 === | |||
在OpenLDAP的設定中,可以透過<code>rootdn</code>與<code>rootpw</code>設定出管理員的帳號密碼,但你也可以不設定<code>rootpw</code>,單獨建立出<code>cn=Manager,dc=example,dc=com</code>的entry,在裡面設定<code>userPassword</code>(可以透過<code>simpleSecurityObject</code>使用)。 | |||
== 設定檔 == | == 設定檔 == |
2018年3月30日 (五) 08:42的版本
OpenLDAP是一套LDAP伺服器软体。
安装
由于OpenLDAP 2.4在2007年十月发行,至今只有一直发行minor release,所以通常都可以透过系统的套件装到合理的版本:
# apt install slapd
另外会安装ldap-utils
,主要是因为CLI下常用的工具不在OpenLDAP内提供,而是透过第三方的方式操作(像是ldapmodify
、ldapdelete
这些指令):
# apt install ldap-utils
基本概念
这边会提到一些OpenLDAP与一般LDAP比较不一样的地方,以及一些值得提出来的基本概念。
管理员帐号名称
在OpenLDAP的文件的范例中,都是以cn=Manager
当作是管理权限帐号。但透过网路搜寻可以看到很多人是使用cn=admin
,甚至是cn=root
的帐号。在这份文件里面我们采用了OpenLDAP文件范例的惯例来设计。
管理员帐号权限
在OpenLDAP的设定中,可以透过rootdn
与rootpw
设定出管理员的帐号密码,但你也可以不设定rootpw
,单独建立出cn=Manager,dc=example,dc=com
的entry,在里面设定userPassword
(可以透过simpleSecurityObject
使用)。
设定档
Ubuntu 16.04内的版本预设会使用目录结构设定档(预设读取/etc/ldap/slapd.d/
整个目录),但这跟网路上一般使用单档设定不同(通常会是/etc/ldap/slapd.conf
),所以我们要告知slapd使用档案设定档。
这要修改/etc/default/slapd
的内容,将SLAPD_CONF
参数从空的值改为/etc/ldap/slapd.conf
:
# Default location of the slapd.conf file or slapd.d cn=config directory. If
# empty, use the compiled-in default (/etc/ldap/slapd.d with a fallback to
# /etc/ldap/slapd.conf).
SLAPD_CONF=/etc/ldap/slapd.conf
同时我们要将范本复制过来修改(范本在/usr/share/slapd/slapd.conf
这边),里面有一些变数需要设定:
@BACKEND@
设为mdb
。@SUFFIX@
设为dc=example,dc=com
。@ADMIN@
设为cn=Manager,dc=example,dc=com
。
其中的dc=example,dc=com
为范例,可以依照实际组织设定。
另外因为使用mdb,需要将dbconfig
的参数都删除掉(这些是给BerkeleyDB,也就是bdb使用)。
资料初始化设定
预设资料库内应该是空的(可以透过ldapsearch
确认),所以会需要塞一些资讯进去。
Domain
先加入domain本身,透过ldapmodify
加入即可:
dn: dc=example,dc=com changetype: add objectclass: top objectclass: domain dc: example
People
再来是产生ou=People,dc=example,dc=com
:
dn: ou=People,dc=example,dc=com changetype: add objectClass: organizationalUnit ou: People
Manager
这是管理员的身份,可以不在资料库内设定,而是透过slapd.conf
内的ACL与rootpw
设定。
dn: cn=Manager,dc=example,dc=com changetype: add objectClass: organizationalRole objectClass: simpleSecurityObject cn: Manager userPassword: {CRYPT}$1$xxxxxxxx$yyyyyyyyyyyyyyyyyyyy
常用指令
这边会列出日常营运常用的指令。其中ldap*
系列指令有一些共通参数:
- 表示操作使用者的
-D
,通常会使用管理员帐号操作,像是-D 'cn=Manager,dc=example,dc=com'
或是-D 'cn=admin,dc=example,dc=com'
。 - 表示base的
-b
,像是-b 'dc=example,dc=com'
。
这些参数可以透过~/.ldaprc
的设定让使用者不需要每次都输入:
BASE dc=example,dc=com BINDDN cn=Manager,dc=example,dc=com
另外密码是每次都得输入的项目:
- 表示操作使用者密码的
-y
,后面接档案名称,像是-y ~/passwd-Manager.txt
。另外一种输入密码的方式为-W
,表示程式执行时手动输入密码。
新增使用者
这边是选用inetOrgPerson
处理,要给Unix-like系统帐号使用的,可以考虑用posixAccount
。
指令:
$ ldapmodify -x -y ~/passwd-Manager.txt -f user.ldif
对应的LDIF:
dn: uid=${USERNAME},ou=People,dc=example,dc=com changetype: add objectClass: inetOrgPerson cn: ${USERNAME} gn: ${FIRSTNAME} sn: ${LASTNAME} uid: ${USERNAME} userPassword: ${PASSWORD_APR1MD5}
查询使用者
一般情况下,不需要拉出密码栏位时可以用anonymous的方式列出(不指定密码相关指令时会自动变成anonymous行为),像是这样:
$ ldapsearch -x 'uid=gslin'
如果有需要拉出密码栏位需求时,会需要登入(这边有透过~/.ldaprc
减少输入的参数):
$ ldapsearch -x -y ~/passwd-Manager.txt 'uid=gslin'
删除使用者
删除会透过有写入权限(删除权限)的帐号来处理,会需要指定dn
栏位,也就是完整的名称:
$ ldapdelete -x -y ~/passwd-Manager.txt 'uid=gslin,ou=People,dc=example,dc=com'