(ヽ´ω`) < 助けてほしいマン

わからないことを助けてほしいマンが書くブログ

(ヽ´ω`) < OpenLDAP + SSSDでLinuxログインアカウント一元管理がさっぱりわからん - 1. OpenLDAP初期設定 -

(ヽ´ω`) < ログインアカウント一元管理したいよね、公開鍵で

多分Linuxのアカウントを一元管理したい、あるいはできるようにしろと上から命令されてググってみたけど古い情報も多くて涙目の人に送る。

何回かのエントリに分けて投稿するが、最終的にこんな感じのことができるようになる想定。

  • 複数台のLinuxサーバに対して、それぞれユーザを作成しなくてもログインが可能になる
  • ログイン情報はOpenLDAPで一元管理
  • ユーザの所属グループも
  • 各サーバのsudoersも
  • もう今更パスワード認証にも戻れないので公開鍵認証でお願いします

(ヽ´ω`) < まずはOpenLDAP側の設定について

実際に設定するにはSSSDやらNSSやらPAMやらといろいろと設定が必要になるのだが、それは後回しにしておいてOpenLDAP側の設定。

OSはみんな大好きAmazon Linux2で。多分、CentOS7までならほとんど一緒なはず。8からは389 Directory Serverに置き換えられてるかも。

(ヽ´ω`) < インストール

サーバの設定を流し込んだり確認するのに ldap*** 系のコマンドを使用するので、 openldap-clients もインストールしておく。

# yum install openldap-servers openldap-clients

(ヽ´ω`) < 管理者ユーザのパスワード作成とルートサフィックス変更

下記の記事でも書いたのだが、ちょっと前のバージョンまでは /etc/openldap/slapd.conf に設定を記載する素直な子だったのだが、2.3以降では ldifファイルからデータを読み込ませる方式に変わってしまった。

www.tsugihagi.net

slapd.conf による設定も完全に無効というわけではなく、推奨しないながらも可能なようなので、ディストリビューションによっては slapd.conf が残されているようだが、Amazon Linux2では消えているようだ。

インストール直後のデフォルト設定から、自分の環境に合わせた内容に変更。
と簡単に言ってしまったが、そもそもOpenLDAPなんてよくわからんという人が多いと思うので、一旦は小難しいことは置いておいて、

  • tsugihagi.local というグループのようなものを作る(デフォルトではmy-domain.comに設定されている)
  • 管理者はManagerという名前(これはデフォルトと同じ)

という設定を行う。

まずはパスワード作成 slappasswd コマンドでパスワードを生成してメモしておく。

# slappasswd
New password: (パスワードを入力)
Re-enter new password: (パスワードを再入力)
{SSHA}SFlHUkAMFkH6xUPA61IEqDnTY2lN2YwF (ここでは hogehoge というパスワード設定)

次にルートサフィックスを dc=tusgihagi, dc=local 、管理者を cn=Manager,dc=tsugiahgi,dc=local としたLDIFファイルを作成。

# 下記内容をinit.ldifという名前で保存

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

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

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

作成した init.ldif を流し込む。(デフォルトでローカルのrootユーザは各Backendに対して書き込みが可能)

# ldapmodify -Y EXTERNAL -H ldapi:/// -f init.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

(ヽ´ω`) < スキーマ追加

インストール直後の状態では、Linuxのユーザ情報を保持するためのスキーマ情報が読み込まれていないので、手動で読み込んでやる必要がある。

基本的なスキーマファイルは /etc/openldap/schema ディレクトリに存在するのだが、今回はさらに

  • sudo権限を管理するためのオブジェクト用スキーマ
  • 公開鍵認証のための属性用スキーマ

が必要となる。

cosine, inetorgperson, nisスキーマのインストール

基本的なスキーマファイルは /etc/openldap/schema ディレクトリ以下に揃っているので、下記の通り ldapadd で追加してやる。

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
sudo用スキーマのインストール

ありがたいことにスキーマファイルからLDIFに変換されたものがGithub上に存在するのでそちらを使わせてもらう。

# curl -L https://raw.githubusercontent.com/Lullabot/openldap-schema/master/sudo.ldif -o /etc/openldap/schema/sudo.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/sudo.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=sudo,cn=schema,cn=config"

ちなみにsudo用のスキーマは sudo パッケージに付属している。

linuxjm.osdn.jp

下記のスキーマは OpenLDAP 用の形式になっており、 sudo のソースやバイナリの配布には schema.OpenLDAP として収録されている。その schema.OpenLDAP ファイルをスキーマ・ディレクトリ (たとえば /etc/openldap/schema) にそのままコピーし、適切な include 行を slapd.conf に追加して、 slapd をリスタートすればよい。

## バージョンが違うかもしれないのでそれぞれの環境で場所チェック
# rpm -ql sudo | grep schema.OpenLDAP
/usr/share/doc/sudo-1.8.23/schema.OpenLDAP

すでに説明したとおり slapd.conf は存在せず、ldifファイルをschemaファイルから変換しなくてはいけないので、今回はそのままダウンロードして楽をさせてもらった。

公開鍵認証用スキーマのインストール

公開鍵認証に必要な openssh-lpk-openldap.ldifopenssh-ldap パッケージに付属している。

yum install openssh-ldap
rpm -ql openssh-ldap | grep openssh-lpk-openldap.ldif
cp /usr/share/doc/openssh-ldap-7.4p1/openssh-lpk-openldap.ldif /etc/openldap/schema

パッケージがインストールできたら流し込み。

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

これにてOpenLDAPの初期設定は完了。

ぶっちゃけそんなに大したことはやってなくて、スキーマの追加が少し特殊なぐらい。