CentOS7でLDAP

ldap centos

投稿日 2017年08月01日


centosにOpenLDAPを導入する

LDAPとは

ネットワーク機器やユーザーなどの情報を管理するディレクトリサービスへ接続するためのプロトコル。

今回構築する目的は自宅サーバー群のID・パスワードの管理を容易に行えるようにするため

OpenLDAPを導入する前にOpenLDAPが利用するプロトコルへの接続を許可する

firewallの設定

ldap(389) ldaps(686)のアクセスを許可する

# firewall-cmd --add-service=ldap --zone=public --permanent
success
# firewall-cmd --add-service=ldaps --zone=public --permanent
success
# firewall-cmd --reload
success

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources:
  services: dhcpv6-client ldap ldaps ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

OpenLDAPのインストール

OpenLDAPのインストールをする

(横に長いので一部編集)

# yum -y install openldap openldap-clients openldap-servers

読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
パッケージ openldap-2.4.40-13.el7.x86_64 はインストール済みか最新バージョンです
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ openldap-clients.x86_64 0:2.4.40-13.el7 を インストール
---> パッケージ openldap-servers.x86_64 0:2.4.40-13.el7 を インストール
--> 依存性の処理をしています: libltdl.so.7()(64bit) のパッケージ: openldap-servers-2.4.40-13.el7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ libtool-ltdl.x86_64 0:2.4.2-22.el7_3 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

============================================================================================
 Package                                アーキテクチャー  バージョン     リポジトリー  容量
============================================================================================
インストール中:
 openldap-clients                       x86_64            2.4.40-13.el7  base         188 k
 openldap-servers                       x86_64            2.4.40-13.el7  base         2.1 M
依存性関連でのインストールをします:
 libtool-ltdl                           x86_64            2.4.2-22.el7_3 updates       49 k

トランザクションの要約
============================================================================================
インストール  2 パッケージ (+1 個の依存関係のパッケージ)

総ダウンロード容量: 2.4 M
インストール容量: 5.3 M
Downloading packages:
(1/3): libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm                           |  49 kB  00:00:00
(2/3): openldap-clients-2.4.40-13.el7.x86_64.rpm                        | 188 kB  00:00:00
(3/3): openldap-servers-2.4.40-13.el7.x86_64.rpm                        | 2.1 MB  00:00:00
---------------------------------------------------------------------------------------------
合計                                                                     8.1 MB/s | 2.4 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : libtool-ltdl-2.4.2-22.el7_3.x86_64                  1/3
  インストール中          : openldap-servers-2.4.40-13.el7.x86_64               2/3
  インストール中          : openldap-clients-2.4.40-13.el7.x86_64               3/3
  検証中                  : libtool-ltdl-2.4.2-22.el7_3.x86_64                  1/3
  検証中                  : openldap-clients-2.4.40-13.el7.x86_64               2/3
  検証中                  : openldap-servers-2.4.40-13.el7.x86_64               3/3

インストール:
  openldap-clients.x86_64 0:2.4.40-13.el7                 openldap-servers.x86_64 0:2.4.40-13.el7

依存性関連をインストールしました:
  libtool-ltdl.x86_64 0:2.4.2-22.el7_3

完了しました!

DB設定をサンプルからコピーする

# cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

システム起動時に自動的に起動するようにする

# systemctl enable slapd
Created symlink from /etc/systemd/system/multi-user.target.wants/slapd.service to /usr/lib/systemd/system/slapd.service.

サービス起動

systemctl start  slapd

起動確認

# systemctl status slapd
● slapd.service - OpenLDAP Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled)
   Active: active (running) since 火 2017-08-01 11:30:38 JST; 32s ago
     Docs: man:slapd
           man:slapd-config
           man:slapd-hdb
           man:slapd-mdb
           file:///usr/share/doc/openldap-servers/guide.html
  Process: 11697 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=0/SUCCESS)
  Process: 11682 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS)
 Main PID: 11699 (slapd)
   CGroup: /system.slice/slapd.service
           └─11699 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///

slapd.dデータの編集

作業用ディレクトリ作成

# cd ~
# mkdir ~/ldap_work

パスワードを生成する

ソルト付きSSHAな為生成ごとに異なる

# slappasswd
New password:
Re-enter new password:
{SSHA}sWdvM8tQw3JomdNrpQSM3IEYUn6pDBis

configデータベースのRootユーザのパスワードを変更する

# vi ~/ldap_work/add_rootPw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}sWdvM8tQw3JomdNrpQSM3IEYUn6pDBis

ldapaddコマンドで、add_rootPw.ldifの内容と登録する

-Y EXTERNALとをつけることでローカル環境からパスワード無しでコマンドを実行できる

# ldapadd -Y EXTERNAL -H ldapi:// -f ~/ldap_work/add_rootPw.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"

LDAPベースエントリの変更

インストール直後のベースDNはmy-domain,dc=comとなっている為変更する

# vi ~/ldap_work/change-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=example,dc=com" read by * none

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

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

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}sWdvM8tQw3JomdNrpQSM3IEYUn6pDBis

流し込む

# ldapmodify -x -D cn=config -W -f ~/ldap_work/change-domain.ldif
Enter LDAP Password:
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"

ベースエントリを登録する

# vi ~/ldap_work/base.ldif
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.

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

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

流し込む

# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f ~/ldap_work/base.ldif
Enter LDAP Password:
adding new entry "dc=example,dc=com"

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

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

グループエントリを登録する

作業用フォルダを作成する

# mkdir ~/ldap_work/ldif

エントリ用ファイルを作成する

# vi ~/ldap_work/ldif/group.ldif
dn: cn=system,ou=Group,dc=example,dc=com
objectClass: posixGroup
objectClass: top
cn: system
gidNumber: 1000

このまま登録しようとするとエラーがでる

ldap_add: Invalid syntax (21)
    additional info: objectClass: value #0 invalid per syntax

原因は下記URLに書いてある
http://l-w-i.net/t/openldap/ldapadd_100.txt

LDIFファイル内のobjectClassで指定したクラス名が誤っている。
LDIFファイル内のobjectClassで指定したクラスが定義されているスキーマファイルをslapd.confでincludeしていない。

OLCになったことによりslapd.confにincludeする代わりにcn=configにschemaを追加する様になった
初期状態ではcoreのみがinclude入っている
UserとGroupに必要なのはposixGroup posixAccountなので
/etc/openldap/schema/nis.ldif を追加する必要があるが
/etc/openldap/schema/nis.ldifでmanegerがないと言われるので先に/etc/openldap/schema/cosine.ldifを入れてからnisを入れる

# ldapadd -x -W -D cn=config -f /etc/openldap/schema/cosine.ldif
Enter LDAP Password:
adding new entry "cn=cosine,cn=schema,cn=config"
# ldapadd -x -W -D cn=config -f /etc/openldap/schema/nis.ldif
Enter LDAP Password:
adding new entry "cn=nis,cn=schema,cn=config"

問題なく登録されたらグループエントリを登録する

# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f ~/ldap_work/ldif/group.ldif
Enter LDAP Password:
adding new entry "cn=system,ou=Group,dc=example,dc=com"

ユーザーエントリを登録する

ユーザー用のパスワードを作成する

# slappasswd
New password:
Re-enter new password:
{SSHA}MQKO56JaZKzcIPTLk305Nx/29YQcZgX6

hogeユーザー用エントリファイルを作成する

# vi ~/ldap_work/ldif/user.ldif
dn: uid=hoge,ou=People,dc=example,dc=com
objectClass: shadowAccount
objectClass: posixAccount
objectClass: account
objectClass: top
cn: HogeHoge
uid: hoge
uidNumber: 1001
gidNumber: 1000
homeDirectory: /home/
loginShell: /bin/bash
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
shadowLastChange: 16175
userPassword: {SSHA}MQKO56JaZKzcIPTLk305Nx/29YQcZgX6

流し込む

# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f ~/ldap_work/ldif/user.ldif
Enter LDAP Password:
adding new entry "cn=system,ou=Group,dc=example,dc=com"

2016 GakuBlog