OpenLDAP

この章では、OpenLDAPをインストールし、認証サーバを構築します。
ミドルウェアやOSの認証設定をOpenLDAPサーバにすることで、ユーザーの一元管理ができるようになります。

準備

rootに昇格

sudo su - 

便利ツールインストール

yum -y install vim bash-completion net-tools

SELinux停止

vi /etc/selinux/config
SELINUX=disabled

反映

reboot

LDAPサーバの構築

  • OpenLDAPをインストール

インストール

yum -y install openldap-servers openldap-clients

DB設定ファイルをセット

  • exampleから初期値を設定
cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG

自動起動設定

systemctl start slapd
systemctl enable slapd

管理者アカウントパスワード設定

  • のちに追加するManagerとは別

ハッシュ化されたパスワード出力

  • デフォルトでSHA-1暗号化アルゴリズムで暗号化される
  • プレーンパスワードでもOK
slappasswd

出力

New password:
Re-enter new password:
{SSHA}gtNovF08wCs9igii4/RBa4MSoAtiqdfr

ldifファイル作成

  • olcRootPWにslappasswdコマンドで出力されたパスワードを埋め込む
vi chrootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}gtNovF08wCs9igii4/RBa4MSoAtiqdfr

追加

  • -Y EXTERNALオプションでrootパスワード入力をスキップ
ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif

標準スキーマの追加

# COSINEとInternet X.500スキーマ(必須)
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif

# UNIXアカウント等を扱うために使用するスキーマ、posixAccountやposixGroupはこのファイルに定義されている。
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif

# 組織に関連する人を表すオブジェクトクラスinetOrgPersonを定義するスキーマ
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

Managerアカウントパスワード変更

ハッシュ化されたパスワード出力

slappasswd

出力

New password:
Re-enter new password:
{SSHA}jjvqxnULFJHaCjntF7TqIbhD9+Y1aevU
vi chdomain.ldif
  • olcRootPW に生成したディレクトリマネージャーのパスワードを指定する
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=vamdemic,dc=inc" read by * none

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

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

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

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=Manager,dc=vamdemic,dc=inc" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=vamdemic,dc=inc" write by * read

反映

ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif

OU作成

vi basedomain.ldif
dn: dc=vamdemic,dc=inc
objectClass: top
objectClass: dcObject
objectclass: organization
o: VamdemicSystem
dc: vamdemic

dn: cn=Manager,dc=vamdemic,dc=inc
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=vamdemic,dc=inc
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=vamdemic,dc=inc
objectClass: organizationalUnit
ou: Group

反映

ldapadd -x -D cn=Manager,dc=vamdemic,dc=inc -W -f basedomain.ldif

ファイアウォール設定

firewall-cmd --add-service=ldap --permanent
firewall-cmd --reload

ユーザー作成

ハッシュ化されたパスワード出力

slappasswd

出力

New password:
Re-enter new password:
{SSHA}jjvqxnULFJHaCjntF7TqIbhD9+Y1aevU

ldifファイル作成

vi ldapuser.ldif
dn: uid=yuta,ou=People,dc=vamdemic,dc=inc
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: yuta
sn: Linux
userPassword: {SSHA}GdmS2szfRwKj5KiitpFSdVG4QLA0O0a/
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/yuta

dn: cn=system,ou=Group,dc=vamdemic,dc=inc
objectClass: posixGroup
cn: system
gidNumber: 1000
memberUid: yuta
ldapadd -x -D cn=Manager,dc=vamdemic,dc=inc -W -f ldapuser.ldif

エントリの確認

ldapsearch -x -b "ou=Group,dc=vamdemic,dc=inc" cn=system

エントリの削除

ldapdelete -x -D  "cn=Manager,dc=vamdemic,dc=inc" -w password "uid=yuta,ou=People,dc=vamdemic,dc=inc"
ldapdelete -x -D  "cn=Manager,dc=vamdemic,dc=inc" -w password "cn=system,ou=Group,dc=vamdemic,dc=inc"

ユーザーのパスワード変更

ldappasswd -x -D  "cn=Manager,dc=vamdemic,dc=inc" -w password -s pass "uid=yuta,ou=People,dc=vamdemic,dc=inc"

クライアント設定

パッケージインストール

yum -y install openldap-clients nss-pam-ldapd

SELinux停止

vi /etc/selinux/config
SELINUX=disabled

反映

reboot

設定投入

  • authconfig-tuiでGUI風に設定も可能
    authconfig --enableldap \
    --enableldapauth \
    --ldapserver=192.168.11.221 \
    --ldapbasedn="dc=vamdemic,dc=inc" \
    --enablemkhomedir \
    --update

ログイン動作確認

ssh yuta@192.168.11.222

Webツールインストール

  • phpldapadmin

Apacheインストール

yum -y install httpd
systemctl start httpd
systemctl enable httpd
firewall-cmd --add-service=http --permanent
firewall-cmd --reload

PHPインストール

yum -y install php php-mbstring php-pear

phpldapadmin

インストール

yum -y install epel-release
yum --enablerepo=epel -y install phpldapadmin

IPアドレス許可設定

vi /etc/httpd/conf.d/phpldapadmin.conf
  • Require ipにLANのCIDRblockを追記
  <IfModule mod_authz_core.c>
    Require local
    Require ip 192.168.11.0/24
  </IfModule>

認証方法変更

vi /etc/phpldapadmin/config.php

398行目

$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid');

設定反映

systemctl restart httpd

アクセス

http://192.168.11.221/ldapadmin/

cn=Manager,dc=vamdemic,dc=inc/password

ミドルウェアでの認証(NextCloud)

インストール

yum -y install docker
docker ps
systemctl enable docker
systemctl start docker

NextCloud起動

docker run -d -p 8080:80 nextcloud

ファイアウォール設定

firewall-cmd --add-port=8080 --permanent
firewall-cmd --reload

アクセス

http://192.168.11.221:8080





付録

動作している仮想マシンのovaファイルです。うまくいかない場合、こちらをインポートしていただき設定値をご確認いただければと思います!

https://vamdemic.sharepoint.com/:f:/s/vamdemicsystem/Ek84RP2mCJlHuk2pb-B1iV8BOs77i6KA_t3fVTL4OlcZMA?e=rIZUdk
pass: openldap

参考サイト

https://www.server-world.info/query?os=CentOS_7&p=openldap