こんにちは。サイオステクノロジーの有村です。
前回までに
新卒がShibbolethを学ぶ ~その1:HTTP,HTTPS,SSLって何?~
新卒がShibbolethを学ぶ ~その2:シングルサインオンって何?~
を学びました。
今回はShibbolethのデータベースとして使うLDAPの勉強とOpenLDAPを使ったLDAPサーバの実装をしたのでアウトプットしていきたいと思います。
LDAPとは
LDAP(Lightweight Directory Access Protocol)とはディレクトリサービス(情報を一元管理し情報提供を行うサービス)を提供するサーバへアクセスするときに使うプロトコルのことです。LDAPに対応してディレクトリサービスを提供するサーバをLDAPサーバといい、ツリー構造のデータベースを使って情報を管理します。
LDAPを使う事で出来ること
LDAPの「LDAP認証」や「LDAP連携」を使う事で以下のような機能を実装することが出来ます。
-
- Linuxのシステムアカウント情報(/etc/passwdや/etc/shadow)の一元化
- Linuxサーバの各種アプリでのIDパスワードの統一
- シングルサインオンの実装
- 社員情報の共有
- アカウント自動作成等のLDAP連携
一部抜粋しましたが、他にも様々な機能をLDAPを使う事で実装出来ます。
LDAPとRDBの違い
RDBでは頻繁に更新が行われ、レコードを更新したときに別のテーブルが更新されることも多いので一連の処理に一貫性と整合性が担保されています。なので、複雑なテーブル構造の更新処理に適している反面、負荷が大きくなってしまいます。
一方、LDAPはツリー構造をとっているのでRDBのような複雑な構造は取れない代わり負荷が軽くなっています。
なので、データベースの更新は少ないが、検索はよくするという場合(電話帳やアカウントシステムの管理)にはLDAPが適しています。
OpenLDAPを使ったLDAPサーバの実装
今回は簡単なLDAPサーバを構築してLDAP Adminでユーザーを追加するとこまで実装したいと思います。実装するLDAPのイメージは下のイラストです。
LDAPサーバの環境はAzure上にCentOS7.6を構築しています。
(構築方法は下のリンクに乗っています)
Azureに仮想マシン(CentOS)を構築する Ver.2.0
LDAPサーバの実装
LDAPサーバの実装方法は以下のようになります。
-
- CentOS上にOpenLDAPをインストール
//OpenLDAPのインストール # yum -y install openldap-servers openldap-clients //DB設定ファイルの用意 # cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG //権限の変更 # chown ldap. /var/lib/ldap/DB_CONFIG //LDAPサーバの起動 # systemctl start slapd //LDAPサーバの自動起動の有効化 # systemctl enable slapd
- OpenLDAPの管理者パスワードの設定
//管理者パスワードの設定 # slappasswd New password: Re-enter new password: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx //管理者設定変更用ldifファイルの作成 //olcRootPWに生成した管理者パスワードを指定 # vi chrootpw.ldif dn: olcDatabase={0}config,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx //管理者設定の変更 # ldapmodify -Y EXTERNAL -H ldapi:/// -f chrootpw.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"
- 基本的なスキーマの読み込み
# 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"
- ディレクトリマネージャーの設定
//ディレクトリマネージャーのパスワードの設定 # slappasswd New password: Re-enter new password: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx //ディレクトリマネージャーの設定変更用ldifファイルの作成 # vi chdomain.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=srv,dc=world" read by * none dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=srv,dc=world dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=Manager,dc=srv,dc=world dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=srv,dc=world" write by anonymous auth by self write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by dn="cn=Manager,dc=srv,dc=world" write by * read //ディレクトリマネージャーの設定変更 # ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.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"
- CentOS上にOpenLDAPをインストール
LDAP Adminでユーザーの追加
LDAP Adminをダウンロードしていない人は下のリンクからダウンロードできます。
LDAP AdminからOpenLDAPサーバへの接続
- LDAP Adminを起動する
- メニューから「Start」→「Connect」を選択
- New connectionを選択
- 「Connection name」に「OpenLDAPサーバのIP」を入力
- 「Host」に「OpenLDAPサーバのIP」を入力
- 「Base」に「dc=srv,dc=world」を入力
- 「Username」に「cn=Manager,dc=srv,dc=world」を入力
- 「Password」に「任意のパスワード」を入力
- 「OK」ボタンをクリック
- 作成されたサーバのIPをクリックして「OK」ボタンをクリック
- 接続されていることを確認する
LDAP AdminからOpenLDAPにPeopleを追加する
- ウィンドウから「ou=People」を選択。
- 右クリックから「New」⇒「User」を選択
- 「First name」に「名前」を入力。
- 「Second name」に「名前」を入力
- 「Username」に「ユーザ名(ログインID)」を入力
- 「Home Directory」に「ユーザ名のホームディレクトリ」を入力
- 「OK」ボタンをクリック。
- ユーザーができていることを確認する
- 作成されたユーザーを右クリックして「Set Password」を選択
-
- 「New password」に「パスワード」を入力
- 「Confirm password」に「パスワード』を入力
「OK」ボタンをクリック
-
- パスワードが設定出来ていることを確認する。
まとめ
今回はLDAPについて学びました。実装の部分は
https://www.server-world.info/query?os=CentOS_7&p=openldap&f=1
この記事を参考にしています。
次回は今回作ったLDAPサーバを用いてShibbolethの実装をしていきたいと思います。