コンテンツにスキップ

LDAPの構築

参考: https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-openldap-and-phpldapadmin-on-ubuntu-16-04

OpenLDAPのインストール

sudo apt update
sudo apt install slapd ldap-utils

<パスワードをセット>

$ cd /etc/ldap
$ sudo cp ldap.conf ldap.conf.org
$ diff ldap.conf ldap.conf.org
8,9c8,9
< BASE  dc=a910,dc=tak-cslab,dc=org
< URI   ldap://ldap.a910.tak-cslab.org ldap://ldap-master.a910.tak-cslab.org:666
---
> #BASE dc=example,dc=com
> #URI  ldap://ldap.example.com ldap://ldap-master.example.com:666
$ sudo slapcat
dn: dc=a910,dc=tak-cslab,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: a910.tak-cslab.org
dc: a910
structuralObjectClass: organization
entryUUID: c94f4c60-8850-1039-8ded-b306a16f182d
creatorsName: cn=admin,dc=a910,dc=tak-cslab,dc=org
createTimestamp: 20191021131650Z
entryCSN: 20191021131650.368566Z#000000#000#000000
modifiersName: cn=admin,dc=a910,dc=tak-cslab,dc=org
modifyTimestamp: 20191021131650Z

dn: cn=admin,dc=a910,dc=tak-cslab,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9ME0wRC9wUGRlZ0plelpNQmp4ZmpOKzBVMm5kb0NGQ0s=
structuralObjectClass: organizationalRole
entryUUID: c94f5638-8850-1039-8dee-b306a16f182d
creatorsName: cn=admin,dc=a910,dc=tak-cslab,dc=org
createTimestamp: 20191021131650Z
entryCSN: 20191021131650.368842Z#000000#000#000000
modifiersName: cn=admin,dc=a910,dc=tak-cslab,dc=org
modifyTimestamp: 20191021131650Z
sudo ufw allow ldap

phpLDAPadminのインストール

Dockerの場合

sudo docker run -p 6443:443 \
--env PHPLDAPADMIN_LDAP_HOSTS=auth-primary.a910.tak-cslab.org \
--detach osixia/phpldapadmin:0.9.0

uidとgidの初期設定とハッシュアルゴリズムの初期設定を変更(末尾に以下を追記)

/var/www/phpldapadmin/config/config.php

/*
 * Autogenerated servers variables will come here
 */
$servers->newServer('ldap_pla');
$servers->setValue('server','name','auth-primary.a910.tak-cslab.org');
$servers->setValue('server','host','auth-primary.a910.tak-cslab.org');

// 以下が追記
$servers->setValue('auto_number', 'min', array('uidNumber'=>2000,'gidNumber'=>500));
$servers->setValue('appearance', 'pla_password_hash', 'sha512crypt');

それ以外

$ sudo apt-get install phpldapadmin
$ sudo vim /etc/phpldapadmin/config.php

```php:/etc/phpldapadmin/config.phpの一部 /****** * Define your LDAP servers in this section * ******/

$servers = new Datastore();

/ $servers->NewServer('ldap_pla') must be called before each new LDAP server declaration. / $servers->newServer('ldap_pla');

/ A convenient name that will appear in the tree viewer and throughout phpLDAPadmin to identify this LDAP server to users. / // $servers->setValue('server','name','My LDAP Server'); $servers->setValue('server','name','CDSL LDAP Server');

/ Examples: 'ldap.example.com', 'ldaps://ldap.example.com/', 'ldapi://%2fusr%local%2fvar%2frun%2fldapi' (Unix socket at /usr/local/var/run/ldap) / $servers->setValue('server','host','127.0.0.1');

/ The port your LDAP server listens on (no quotes). 389 is standard. / // $servers->setValue('server','port',389);

/ Array of base DNs of your LDAP server. Leave this blank to have phpLDAPadmin auto-detect it for you. / // $servers->setValue('server','base',array('dc=example,dc=com')); $servers->setValue('server','base',array('dc=a910,dc=tak-cslab,dc=org'));

/ Hide the warnings for invalid objectClasses/attributes in templates. / // $config->custom->appearance['hide_template_warning'] = false; $config->custom->appearance['hide_template_warning'] = false;


Webブラウザからアクセス

http://auth-primary.a910.tak-cslab.org/phpldapadmin/

DN: cn=admin,dc=a910,dc=tak-cslab,dc=org PW: xxxx


エラーが出たのでオリジナルパッチで対応

https://stackoverflow.com/questions/50698477/cant-create-new-entry-phpldapadmin

ログイン後

![image.png (259.1 kB)](/assets/2019/10/21/60982/f58c6533-be23-4bee-845e-f04b6935bbc7.png)

# LDAPクライアントの設定

参考

- https://www.itzgeek.com/how-tos/linux/ubuntu-how-tos/configure-ldap-client-on-ubuntu-16-04-debian-8.html
- https://help.ubuntu.com/community/LDAPClientAuthentication

## 基本設定

```bash
sudo apt-get update
sudo apt-get -y install libnss-ldap libpam-ldap ldap-utils nscd

ldap://192.168.100.7

image.png (340.1 kB)

dc=a910,dc=tak-cslab,dc=org1

image.png (285.8 kB)

image.png (311.8 kB)

cn=admin,dc=a910,dc=tak-cslab,dc=org

スクリーンショット 2019-10-22 12.25.23.png (240.7 kB)

設定ファイルを書き換え(認証方式の変更)

変更前 /etc/nsswitch.conf

passwd:         compat systemd
group:          compat systemd
shadow:         compat

変更後 /etc/nsswitch.conf

passwd:         compat systemd ldap
group:          compat systemd ldap
shadow:         compat

ログイン時にディレクトリを作成

sudo sh -c 'echo "session required        pam_mkhomedir.so skel=/etc/skel umask=077" >> /etc/pam.d/common-session'
sudo systemctl restart nscd

設定ファイルの書き換え(passwdコマンドによるパスワード変更を可能)

参考: Bug #329067 “Cannot change password on ldap client, need to have...” : Bugs : libpam-ldap package : Ubuntu

変更前 /etc/pam.d/common-password

password      [success=1 user_unknown=ignore default=die]     pam_ldap.so use_authtok try_first_pass

変更後 /etc/pam.d/common-password

password        [success=1 user_unknown=ignore default=die]     pam_ldap.so try_first_pass

公開鍵スキームを追加

$ wget https://www.osstech.co.jp/~hamano/posts/centos7-openldap-ssh/openssh-lpk-openldap.ldif
$ ldapadd -Y EXTERNAL -H ldapi:/// -f openssh-lpk-openldap.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=1000+uidNumber=1000,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=openssh-lpk-openldap,cn=schema,cn=config"
ldap_add: Insufficient access (50)

アクセス権限が不足していると怒られるので以下で対処

OpenLDAP-2.4.28セットアップ。ベースDNと管理者DN – JesTech

IDM OIM Blog: ldap_add insufficient access (50) openldap

具体的には /etc/ldap/slapd.d/cn=config/olcDatabase={0}config.ldif へ以下を追記する.

olcRootDN: cn=config
olcRootPW: {SSHA}TgR7I0OCdRwSNoCvx9zGELeh6PkoPCqA

SLAPDサービスを再起動する.

しかし上手く行かず.下記で上手く行った.

$ ldapadd -D CN=config -W -H ldapi:/// -f openssh-lpk-openldap.ldif
Enter LDAP Password:
adding new entry "cn=openssh-lpk-openldap,cn=schema,cn=config"

以下のスキームも追加する.

$ ldapadd -D CN=config -W -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
$ ldapadd -D CN=config -W -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
$ ldapadd -D CN=config -W -H ldapi:/// -f /etc/ldap/schema/nis.ldif

phpldapadmin(port: 6443/tcp)から ldapPublicKey ObjectClassを追加して公開鍵を追加する.

image.png (80.6 kB)

LDAP 連携を設定したいサーバーに以下の手順を参考にスクリプトを配置する.

SSSD+LDAP+SSH連携の設定 | 外道父の匠

動きが変だったので sed のあたりに修正を加えた.

/etc/ssh/get-ldap-keys.sh

#!/bin/bash                                                                                                                                                   
user="${1}"
host="ldap://auth-primary.a910.tak-cslab.org"
base="dc=a910,dc=tak-cslab,dc=org"
filter1="(& (objectClass=posixAccount) (uid=${user}))"
filter2="sshPublicKey"

id "$user" >/dev/null 2>&1

RESULT=$(ldapsearch -x -LLL -H "$host" -b "$base" "$filter1" "$filter2" \
         | sed -z 's/\n\s\?//g;s/.*sshPublicKey::\? //g;s/.*/&\n/g' )
DECODE=$(echo $RESULT | base64 -d &> /dev/null; echo $?)

if [ $DECODE == "0" ]
then
  echo $RESULT | base64 -d
  echo
else
  echo $RESULT
fi

パーミッションを適切に付与する.

sudo chmod 500 /etc/ssh/get-ldap-keys.sh

SSHサーバのConfigをセットする.

/etc/ssh/sshd_config

AuthorizedKeysCommand /etc/ssh/get-ldap-keys.sh
AuthorizedKeysCommandUser root

https://drive.google.com/drive/u/1/folders/1eoN-gTqFBO6yL7yQjV4AeTeKZedOXkWZ

Sambaのスキーマを追加

スキーマをSambaパッケージから取得

sudo apt install samba
sudo cp /usr/share/doc/samba/examples/LDAP/samba.ldif.gz ~
sudo apt purge samba
sudo apt autoremove

展開して変換

gunzip samba.ldif.gz
sudo cp samba.ldif /etc/ldap/schema/
ldapadd -D CN=config -W -H ldapi:/// -f /etc/ldap/schema/samba.ldif