LDAPで研究室のアカウント管理
研究室では主にファイルサーバーを使ってデータの共有・継承を行っています。今後Wikiやredmineなども活用したいと思い、アカウントの管理が複雑になりそうなので、LDAPを導入することにしました。
LDAPは様々な情報を保管するデータベースのようなソフトですが、主にアカウント(ユーザーIDやパスワード)を保管して、様々なソフトに認証の仕組みを提供することができます。
今回はOpenLDAPを使います。
OpenLDAPのインストール
実機のOSはMIRACLE Linux9.0です。これにdockerでOpenLDAPのコンテナを作成します。
compose.yamlを編集して、ldapサービスを定義します。
compose.yamlの一部
ldap: image: osixia/openldap container_name: ldap restart: always volumes: - ./ldap/var/lib/ldap:/var/lib/ldap - ./ldap/etc/ldap/slapd.d:/etc/ldap/slapd.d ports: - 389:389 environment: LDAP_ORGANISATION: tsbioinfo LDAP_DOMAIN: tsbio.info LDAP_BASE_DN: "dc=tsbio,dc=info" LDAP_ADMIN_PASSWORD: xxxxx
OpenLDAPを起動
# docker compose up -d ldap
接続確認
コンテナに入ってldapsearchコマンドを動かします。
# docker exec -it ldap bash # ldapsearch -x -H ldap://localhost -b dc=tsbio,dc=info -D "cn=admin,dc=tsbio,dc=info" -w xxxxx (以下検索結果) # # extended LDIF # # LDAPv3 # basewith scope subtree # filter: (objectclass=*) # requesting: ALL # # tsbio.info dn: dc=tsbio,dc=info objectClass: top objectClass: dcObject objectClass: organization o: tsbioinfo dc: tsbio
ldapsearchコマンドをホスト(MIRACLE LINUX)側にインストールしておくと、いちいちコンテナに入らなくてすみます。
# dnf install openldap # ldapsearch -x -H ldap://localhost -b dc=tsbio,dc=info -D "cn=admin,dc=tsbio,dc=info" -w xxxxx (以下省略)
データの登録
LDIFという形式でデータを用意し、ldapaddコマンドで登録、、、というのは骨が折れるので、phpLDAPadminを使います。
こちらもdockerを利用し、ホストのApacheからリバースプロキシで接続するようにします。
compose.yamlの一部
ldap-admin: image: osixia/phpldapadmin restart: always ports: - 10085:80 environment: PHPLDAPADMIN_LDAP_HOSTS: ldap PHPLDAPADMIN_HTTPS: false
phpLDAPadminを起動
# docker compose up -d ldap-admin
/etc/httpd/conf.d/kiku3.confの一部
<Virtualhost *:443> <Location /ldap/> Require ip 157.110.xx.yy # IPアドレスによるアクセス制限 ProxyPass http://localhost:10085/ ProxyPassReverse http://localhost:10085/ </Location> </Virtualhost>
apacheを再起動
# systemctl restart httpd
動作確認
https://kiku3.tsbio.info/ldap/ をブラウザーで開くと、以下のような画面が表示される。
左のloginをクリックして、ログイン画面に進む。
Login DNとしてcn=admin, dc=tsbio, dc=info 、Passwordとしてcompose.yamlに設定したものを入力してAuthenticateをクリックする。
メンバー登録
ou=Laboの登録
- 画面左のツリーで、dc=tsbio,dc=infoをクリックする。
- Create new entry here をクリックする。
- 右のTemplates中の Generic: Organisational Unitをクリックする。
- Laboと入力し、Create Objectをクリックする。
inetOrgPersonの登録
ol=Laboを追加したのと同じように、ou=Laboの下にCourier Mail Accountを作成する。
今のところサーバーへのログインとかsambaアカウントの作成を考えておらず、ウェブサービスの認証に使うだけなので、このオブジェクトで十分と思う。
ユーザーのパスワードの更新
phpLDAPadminを使うことを考えた最大の理由はユーザーにパスワードを更新させる方法の提供でした。
が、ログインにDN (uid=xxxx,ou=Labo,cn=tsbio,cn=info)を入力する必要があり、それを説明する・理解させるのが面倒になり、自前でプログラムを作成しました。その顛末はいずれここに追記します。