Linux(CentOS)のユーザ管理 OpenLDAPでユーザ認証

OpenLDAPを使ってユーザ情報を複数サーバで共有する

先日、Linuxユーザを管理する記事を投稿させていただきましたが、今回はOpenLDAPを使って複数サーバでユーザ情報を共有したいと思います。
今回の検証環境はCentOS7のサーバ2台でユーザ情報を共有します。少ない台数だとメリットも少ないですが、検証環境なのでご了承ください。またSELinuxはdisabled状態で検証を実施しています。

OpenLDAPとは?

LDAPはLightweight Directory Access Protocolの略称です。LDAPのオープンソースソフトウェアがOpenLDAPになります。
LDAPサーバは、ネットワーク上でユーザー情報、組織情報などを保存、管理して、ネットワーク上のクライアントに、これらの情報を提供するサーバです。クライアントは、ディレクトリサーバで認証後、許可された操作を行うことになります。この認証を行うためサーバとクライアント間のプロトコルがLDAPです。

LDAPを実装しているソフトウエアとして、MicrosoftのActive Directoryなどがありますが、OpenLDAPは多くのLinuxディストリビューションにも含まれていているオープンソースソフトウェアです。

ディレクトリサーバを導入するメリット

1台や2台のサーバだけを運用している環境では、個々のサーバ上でユーザを管理することが一般的ではないかと思います。サーバが増減したり、ユーザが10人もいたら、個々のサーバ上でユーザを管理するのは面倒になるのではないでしょうか。
ユーザ情報が追加・削除・変更するたびに、複数台のサーバで情報をアップデートするより、1台のサーバで更新すればいいという方が楽です。サーバ台数やユーザ数が多くなればなるほどメリットがあります。

また、LinuxだけではなくWindowsのActive Direcoryとも連携すれば、ユーザ情報も統合管理することができます。

OpenLDAPをインストール

OpenLDAPは、多くのLinuxディストリビューションに含まれているので、インストール自体は簡単です。7では、yumコマンドでインストールができます。
インストールするパッケージはopenldap-serversとopenldap-clientsです。

# yum install openldap-servers openldap-clients
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp-srv2.kddilabs.jp
 * extras: centos.usonyx.net
 * updates: centos.usonyx.net
base                                                                         | 3.6 kB  00:00:00
extras                                                                       | 3.4 kB  00:00:00
updates                                                                      | 3.4 kB  00:00:00
updates/7/x86_64/primary_db                                                  | 3.6 MB  00:00:01
依存性の解決をしています
--> トランザクションの確認を実行しています。

***長いので途中略***

:
  openldap-clients.x86_64 0:2.4.44-15.el7_5        openldap-servers.x86_64 0:2.4.44-15.el7_5

依存性関連をインストールしました:
  libtool-ltdl.x86_64 0:2.4.2-22.el7_3           perl.x86_64 4:5.16.3-292.el7
  perl-Carp.noarch 0:1.26-244.el7                perl-Encode.x86_64 0:2.51-7.el7
  perl-Exporter.noarch 0:5.68-3.el7              perl-File-Path.noarch 0:2.09-2.el7
  perl-File-Temp.noarch 0:0.23.01-3.el7          perl-Filter.x86_64 0:1.49-3.el7
  perl-Getopt-Long.noarch 0:2.40-3.el7           perl-HTTP-Tiny.noarch 0:0.033-3.el7
  perl-PathTools.x86_64 0:3.40-5.el7             perl-Pod-Escapes.noarch 1:1.04-292.el7
  perl-Pod-Perldoc.noarch 0:3.20-4.el7           perl-Pod-Simple.noarch 1:3.28-4.el7
  perl-Pod-Usage.noarch 0:1.63-3.el7             perl-Scalar-List-Utils.x86_64 0:1.27-248.el7
  perl-Socket.x86_64 0:2.010-4.el7               perl-Storable.x86_64 0:2.45-3.el7
  perl-Text-ParseWords.noarch 0:3.29-4.el7       perl-Time-HiRes.x86_64 4:1.9725-3.el7
  perl-Time-Local.noarch 0:1.2300-2.el7          perl-constant.noarch 0:1.27-2.el7
  perl-libs.x86_64 4:5.16.3-292.el7              perl-macros.x86_64 4:5.16.3-292.el7
  perl-parent.noarch 1:0.225-244.el7             perl-podlators.noarch 0:2.5.1-3.el7
  perl-threads.x86_64 0:1.87-4.el7               perl-threads-shared.x86_64 0:1.43-6.el7

完了しました!

インストールされたことを確認します。

# yum list installed |grep ldap
openldap.x86_64                      2.4.44-15.el7_5                   @updates 
openldap-clients.x86_64              2.4.44-15.el7_5                   @updates 
openldap-servers.x86_64              2.4.44-15.el7_5                   @updates  

OpenLDAPを設定

インストールが完了したら、OpenLDAPの設定を行います。

DBコンフィグファイルをコピーします

設定前に/usr/share/openldap-servers/DB_CONFIG.exampleを /var/lib/ldap/DB_CONFIGとしてコピーします。

# find / -name DB_CONFIG*
/usr/share/openldap-servers/DB_CONFIG.example
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# find / -name DB_CONFIG*
/var/lib/ldap/DB_CONFIG
/usr/share/openldap-servers/DB_CONFIG.example

サービスを開始します

slapdサービスを有効にしてslapdサービスを開始します。

# systemctl status slapd
● slapd.service - OpenLDAP Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/slapd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:slapd
           man:slapd-config
           man:slapd-hdb
           man:slapd-mdb
           file:///usr/share/doc/openldap-servers/guide.html
# systemctl start slapd
# systemctl enable slapd
Created symlink from /etc/systemd/system/multi-user.target.wants/slapd.service to /usr/lib/systemd/system/slapd.service.
# systemctl status slapd
● slapd.service - OpenLDAP Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled)
   Active: active (running) since 木 2018-07-12 11:41:33 JST; 8s ago
     Docs: man:slapd
           man:slapd-config
           man:slapd-hdb
           man:slapd-mdb
           file:///usr/share/doc/openldap-servers/guide.html
 Main PID: 3552 (slapd)
   CGroup: /system.slice/slapd.service
           mq3552 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///

 7月 12 11:41:32 centos7-102 systemd[1]: Starting OpenLDAP Server Daemon...
 7月 12 11:41:32 centos7-102 runuser[3539]: pam_unix(runuser:session): session opened for use...=0)
 7月 12 11:41:32 centos7-102 slapd[3550]: @(#) $OpenLDAP: slapd 2.4.44 (May 16 2018 09:55:53) $
                                                   mockbuild@c1bm.rdu2.centos.org:/builddir/bu...apd
 7月 12 11:41:33 centos7-102 slapd[3550]: tlsmc_get_pin: INFO: Please note the extracted key ...ns.
 7月 12 11:41:33 centos7-102 slapd[3552]: slapd starting
 7月 12 11:41:33 centos7-102 systemd[1]: Started OpenLDAP Server Daemon.
Hint: Some lines were ellipsized, use -l to show in full.

OpenLDAP管理者パスワードを生成します

slappasswdコマンドを使用して管理者用パスワードを生成します。{SSHA}xxxxxxxxxxxxxxxxxxxxxxを記録します。

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

生成したOpenLDAP管理者パスワード設定ファイルを作成します

生成したOpenLDAP管理者パスワードと情報を記述するldifファイルを作成します。
※コメント箇所は削除してください。

# vi ldrootPW.ldif ← ファイル名は任意でいいようです

dn: olcDatabase={0}config,cn=config ← 識別名 とりあえずこのままでOK
changetype: modify ← 変更種別 add / modify / delete
add: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxx ← 生成したOpenLDAP管理者パスワードを記述

OpenLDAP管理者パスワード設定を反映します

作成したldifファイルを基にしてOpenLDAP管理者パスワード設定を反映します。

ldapadd -Y EXTERNAL -H ldapi:/// -f 作成したファイル

簡単なオプション説明

  • -Y EXTERNAL → SASLのEXTERNAL認証を使用する
  • -H → ldapi:で指定するホスト名(IPアドレス)を指定します
    ldapサーバ上で操作しているため、ldapi://という記述で使用
  • -f → ldifファイルを指定します

コマンド実行例 ※以降はコマンド実行例を記述しています。ファイル名などはご自分の環境に合わせて変更してください。

# ldapadd -Y EXTERNAL -H ldapi:/// -f /root/ldrootPW.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"

スキーマの読み込み

3つのスキーマを読み込みます。(cosine.ldif、nis.ldif、inetorgperson.ldif)

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"

ベースDNと管理者DNを設定

ladpで検索などに使用するベースDNと管理者DNを設定します。ベースDNと管理者DNを設定するには、設定ファイルを作成します。
検証ではvsample.comをベースDNとして設定しています。

#  vi /root/lddomain.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=vsample,dc=com" read by * none

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

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

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxx ← OpenLDAP管理者パスワードとして生成したパスワードを記述

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=Manager,dc=vsample,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=vsample,dc=com" write by * read

設定を反映します

ldapmodifyコマンドを使用して設定を反映します。

# ldapmodify -Y EXTERNAL -H ldapi:/// -f lddomain.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"

投入した設定が反映されているかを確認します

設定が反映されているかをldapsearchコマンドで確認します。

# ldapsearch -LLL -Y EXTERNAL -H ldapi:// -b 'olcDatabase={1}monitor,cn=config'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={1}monitor,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {1}monitor
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth" read by dn.base="cn=Manager,dc=vsample,dc=com" read by * none

# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'olcDatabase={2}hdb,cn=config'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
olcSuffix: dc=vsample,dc=com
olcRootDN: cn=Manager,dc=vsample,dc=com
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxx
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=vsam
 ple,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=vsample,dc=com" write by * read

オブジェクトと属性の設定

# vi /root/ldbase_ou.ldif

dn: dc=vsample,dc=com
objectClass: dcObject
objectClass: organization
dc: vsample
o: SPDSK.

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

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

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

設定を反映します

# ldapadd -x -D "cn=Manager,dc=vsample,dc=com" -W -f /root/ldbase_ou.ldif
Enter LDAP Password: ← ここで入力するのはディレクトリマネージャのパスワード

adding new entry "dc=vsample,dc=com"

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

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

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

投入した設定が反映されているかを確認します

設定が反映されているかをldapsearchコマンドで確認します。

# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'dc=vsample,dc=com' '(objectClass=*)'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: dc=vsample,dc=com
objectClass: dcObject
objectClass: organization
dc: vsample
o: SPDSK

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

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

グループを登録します

ユーザが所属するグループを作成します。これ自体は必須な作業ではありませんが、ここでは組織内に複数のチームがあるだろう。ユーザはチーム所属しているであろう。という意味合いで作っています。

# vi /root/groupadd.ldif   →  ファイル名は任意でいいようです

dn: cn=Manager,ou=Group,dc=vsample,dc=com
objectClass: posixGroup
objectClass: top
cn: Manager
gidNumber: 1001  →  グループのIDを登録します 既存のグループが存在する場合は事前に確認してください

グループを登録します。

# ldapadd -x -D "cn=Manager,dc=vsample,dc=com" -W -f /root/groupadd.ldif
Enter LDAP Password: 
adding new entry "cn=Manager,ou=Group,dc=vsample,dc=com"

検証環境ではManagerというグループとcentosという2つのグループを作りました。
グループManagerはgidNumberは1000、グループcentosのgidNumberは1001としています

# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'dc=vsample,dc=com' 'cn=Manager'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=Manager,ou=Group,dc=vsample,dc=com
objectClass: posixGroup
objectClass: top
cn: Manager
gidNumber: 1000

[root@centos7-110 ~]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'dc=vsample,dc=com' 'cn=centos'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=centos,ou=Group,dc=vsample,dc=com
objectClass: posixGroup
objectClass: top
cn: centos
gidNumber: 1001

LDAPサーバにユーザを登録します

LDAPサーバ自体のインストールと設定が完了したら、LDAPサーバにユーザを登録します。

ユーザアカウント用のパスワードを生成します

ユーザ登録時にはOpenLDAP管理者パスワードを生成と同様にパスワードを生成しておきます。通常はInitialパスワードを作成しておいて、後で変更してもらうとかでしょうか。

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

ユーザ登録用の設定ファイルを作成します

ここではcentos1というユーザをグループ centosに追加する形でユーザを作成します。
userPasswordに入力するパスワードはslappasswdで作成しておきます。

# vi /root/lduser.ldif

dn: uid=centos1,ou=People,dc=vsample,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: centos1
sn: 
userPassword: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxx
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1001
homeDirectory: /home/centos1

ユーザを登録します

ldapaddコマンドを使用してユーザを登録します。

# ldapadd -x -D "cn=Manager,dc=vsample,dc=com" -W -f /root/lduser.ldif
Enter LDAP Password: ← ここで入力するのはディレクトリマネージャのパスワード
adding new entry "uid=centos1,ou=People,dc=vsample,dc=com"

投入した設定が反映されているかを確認します

設定が反映されているかをldapsearchコマンドで確認します。

# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'dc=vsample,dc=com' 'uid=centos1'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: uid=centos1,ou=People,dc=vsample,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: centos1
sn: Linux
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1001
homeDirectory: /home/centos1
uid: centos1

登録したユーザとグループを削除する際のコマンド例

# ldapdelete -x -W -D 'cn=Manager,dc=vsample,dc=com' "uid=ユーザ名,ou=People,dc=vsample,dc=com"

# ldapdelete -x -W -D 'cn=Manager,dc=vsample,dc=com' "cn=グループ名,ou=Group,dc=vsample,dc=com"

LDAPクライアント設定

nss-pam-ldapdを使う方法とsssdを使う方法があるようです。今回はnss-pam-ldapを使う方法で構築します。

nss-pam-ldapのインストール

# yum install nss-pam-ldapd
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.usonyx.net
 * extras: centos.usonyx.net
 * updates: ftp-srv2.kddilabs.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ nss-pam-ldapd.x86_64 0:0.8.13-16.el7 を インストール

***長いので途中略***

インストール:
  nss-pam-ldapd.x86_64 0:0.8.13-16.el7

依存性関連をインストールしました:
  nscd.x86_64 0:2.17-222.el7

完了しました!

authconfigコマンドで反映

ldapserverは自身のLDAPサーバーのホスト名またはIPアドレス、ldapbasednは自身のドメイン名を入力します。

# authconfig --enableldap --enableldapauth --ldapserver=192.168.1.102 --ldapbasedn="dc=vsample,dc=com" --enablemkhomedir --update

LDAPユーザが認識されているかを確認

LDAPユーザとして登録したユーザ(ここではcentos1)が認識されているかを確認します。

# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:997:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
ldap:x:55:55:OpenLDAP server:/var/lib/ldap:/sbin/nologin
sssd:x:996:993:User for sssd:/:/sbin/nologin

ユーザとしてcentos1は存在していない状態でidコマンドを実行してcentos1がリストされるかを確認します。

# id centos1
uid=1000(centos1) gid=1001(centos) groups=1001(centos)

LDAPユーザでログインした際にホームディレクトリが自動作成されるようにします

LDAPユーザでログインした時にはホームディレクトリが作成されないため、oddjob-mkhomedirパッケージをインストール、設定してホームディレクトリが自動作成されるようにします。

# yum install oddjob-mkhomedir
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp-srv2.kddilabs.jp
 * extras: centos.usonyx.net
 * updates: centos.usonyx.net
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ oddjob-mkhomedir.x86_64 0:0.31.5-4.el7 を インストール

***長いので途中略***

インストール:
  oddjob-mkhomedir.x86_64 0:0.31.5-4.el7

依存性関連をインストールしました:
  oddjob.x86_64 0:0.31.5-4.el7                     psmisc.x86_64 0:22.20-15.el7

完了しました!

authconfigコマンドでoddjob-mkhomedirを有効にして、oddjobdサービスを起動します。

# authconfig --enablemkhomedir --update
# systemctl start oddjobd
# systemctl enable oddjobd
# systemctl status oddjobd
● oddjobd.service - privileged operations for unprivileged applications
   Loaded: loaded (/usr/lib/systemd/system/oddjobd.service; enabled; vendor preset: disabled)
   Active: active (running) since 金 2018-07-13 10:07:45 JST; 21s ago
 Main PID: 1735 (oddjobd)
   CGroup: /system.slice/oddjobd.service
           mq1735 /usr/sbin/oddjobd -n -p /var/run/oddjobd.pid -t 300

 7月 13 10:07:45 centos7-102.vsample.com systemd[1]: Started privileged operations for unprivi...s.
 7月 13 10:07:45 centos7-102.vsample.com systemd[1]: Starting privileged operations for unpriv.....
Hint: Some lines were ellipsized, use -l to show in full.

suコマンドでLDAPユーザに変更してホームディレクトリが作成されているかを確認します。

# ls /home/   ← ホームディレクトリは存在していないことを確認
# su centos1
$ ls /home
centos1 
$ exit
exit

firewallを設定します

CentOS7ではfirewallが有効になっているので、firewallでldapを通過するように設定します。 ※検証環境はVirtualBoxで3つのInterfaceを使用しているため interfaces: enp0s3 enp0s8 enp0s9 にリストされています。

# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 金 2018-07-13 09:05:02 JST; 50min ago
     Docs: man:firewalld(1)
 Main PID: 508 (firewalld)
   CGroup: /system.slice/firewalld.service
           mq508 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

 7月 13 09:05:02 centos7-102.vsample.com systemd[1]: Starting firewalld - dynamic firewall dae.....
 7月 13 09:05:02 centos7-102.vsample.com systemd[1]: Started firewalld - dynamic firewall daemon.
Hint: Some lines were ellipsized, use -l to show in full.
[root@centos7-102 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8 enp0s9
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

# firewall-cmd --add-service=ldap --permanent
success
# firewall-cmd --reload
success
# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8 enp0s9
  sources:
  services: dhcpv6-client ssh ldap
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

クライアント側のインストールと設定

別のLinux PCでLDAPアクセスができるように設定します。

# yum install openldap-clients nss-pam-ldapd oddjob-mkhomedir

***長いので途中略***

インストール:
  nss-pam-ldapd.x86_64 0:0.8.13-16.el7           openldap-clients.x86_64 0:2.4.44-15.el7_5
  oddjob-mkhomedir.x86_64 0:0.31.5-4.el7

依存性関連をインストールしました:
  nscd.x86_64 0:2.17-222.el7
  oddjob.x86_64 0:0.31.5-4.el7                     psmisc.x86_64 0:22.20-15.el7

authconfigコマンドでoddjob-mkhomedirを有効にして、oddjobdサービスを起動します。

# authconfig --enablemkhomedir --update
# systemctl start oddjobd
# systemctl enable oddjobd
# systemctl status oddjobd

ユーザとしてcentos1は存在していない状態でidコマンドを実行してcentos1がリストされるかを確認します。

# id centos1
uid=1000(centos) gid=1001(centos) groups=1001(centos),10(wheel)

ログインしてみます。同時にホームディレクトリが作成されるかを確認します。

# ls /home/
# su centos1
$ ls /home
centos1

ここまででLDAPを使用してアクセスすることが確認できました。通常はこのままでは使わないでSSHやsudo設定を実施してアクセスできるように運用すると思いますが、ここではLDAPユーザでログインできることでLDAPが使えるところまでの確認となります。