RHEL (clone 含む) の LDAP
389 DS, RHDS, FreeIPA について
皆様の手元の
PC について
●
デスクトップ左上に Chrome ブラウザのアイコンがあります。これを起動すると本資
料のブックマーク(「RHEL の LDAP」) があります。よろしければ講義に合わせて参照く
ださい。また,後半のハンズオンではコマンドを入力する際のコピーペースト元として
利用できます。
●
[Chrome Secret] と [TeraTerm]のアイコンは後半のハンズオンで利用します。
念の為
今更 LDAP の説明 (基本)
●
LDAP とは
Lightweight Directory Access Protocol の略
X.500(ディレクトリサービスの標準規格 ) の DAP を軽量化●
LDAP の用途
○ アカウント認証 ○ アカウント属性管理 , グループ属性管理 ○ automount マップ, netgroup マップ, その他....●
実装
○ 商用: Oracle Directory Server Enterprise Edition, NetIQ eDirectory,
Red Hat Directory Server, etc…
○ OSS: OpenLDAP, 389 Directory Server, Apache Directory Server, OpenDJ
念の為
今更 LDAP の説明 (エントリ例)
dn: uid=John,ou=people,dc=example,dc=com uid: john cn: john objectClass: top objectClass: posixAccount objectClass: account userPassword: {MD5}rU9r/C1izZZyn5s09g2ypD== uidNumber: 2947 gidNumber: 300 homeDirectory: /home/john gecos: 2nd Grade Student loginShell: /bin/bash 4 dn: cn=sales,ou=group,dc=examples,dc=com objectclass: posixGroup cn: sales gidNumber: 1012 memberUid: tom memberUid: john memberUid: mary ユーザエントリの例 グループエントリの例LDAP における各データをエントリと呼びます
念の為
今更 LDAP の説明 (ツリー構造)
5 c=JP o=Example ou=Sales ou=tech cn=Div1 cn=Div2 cn=John cn=Ken cn=Mary cn=Paul dc=com dc=example cn=Users cn=Groups cn=Johncn=Ken cn=Mary cn=Sales cn=Tech
Red Hat said in the RHEL 7.4 Release Notes :
サイオステクノロジー社内エンジニアの反応
7 せっかく OLC 覚えたのに LDAPなんて微妙なミドルだし問 題ないよ まだ先の話じゃん ビジネスチャンス なんじゃないの? お客様から問合せ が増えそうそれでも
OpenLDAP を使いたい(使うしかない)場合は...
●
RHEL8 (CentOS8, Scientific Linux 8, etc...) にバージョンアップしない
→ RHEL7 なら 2024 年まで安泰... 未来の管理者にエール
●
OS 乗り換え
→ SUSE Linux, Debian GNU/Linux, etc… → SIOS はあまりうれしくない
●
OpenLDAP 本家のソースをビルドする
→ 管理コスト増
●
Docker 使う
→ Official イメージ無し→ 管理コスト増
Red Hat は LDAP をどうするのか
今後,純粋な Red Hat で LDAP したいなら以下の 3 つの手段が考えられます。
●
389 Directory Server (389DS)
オープンソースの LDAP Server。2009 年 Fedora Directory Server から改
名。RHEL6, RHEL7 に同梱
●
Red Hat Directory Server (RHDS
NOT Red Hat Developer Studio)
有償の LDAP Server 製品。Netscape Directory Server の後継。upstream
は 389 Directory Server。
●
FreeIPA / Red Hat Identity Management (IdM)
オープンソースの多機能 ID 管理システム。RHEL6, RHEL7 に同梱。
389 Directory Server, Kerberos, Bind, sssd 他の組み合わせ。
何を選べば幸せになれるか
?
サポートは必須だ LDAPツリーを 自由に組みたい Directory Server RHEL なら サポート有 NO/どちらでもいい YES NO YES 単体サポート なし 10RHEL におけるサポート状況 (1)
●
389 Directory Server
https://access.redhat.com/solutions/2440481 に以下の記述↓
The package is not supported as a stand-alone solution to provide LDAP services. IdM(FreeIPA) または RHDS とセットならサポートするとのこと。
単体利用はサポート無し (非Coreパッケージの扱い )
●
FreeIPA / Red Hat Identity Management (IdM)
ipa-server, ipa-client パッケージは RHEL の Core パッケージとしてパッケージマニフェストに定義 されている。
→ RHEL サブスクリプションでサポート可能。
RHEL におけるサポート状況 (2)
●
Red Hat Directory Server
○
サポート期間: 5年 (GA から)
RHDS 10 (on RHEL7) → 2020/6
RHDS 11 ??
○
サブスクリプション価格 (/台/年)
■
Master:
¥1,950,000-■
Replica: ¥
390,000-別途 RHEL Server 要購入 Directory Server 高い? 安い? 12RHDS も FreeIPA も結局
389 Directory Server (389 DS) に関連
Directory Server
389 DS と RHDS のパッケージ構成
/usr/bin/ns-slapd /usr/bin/db2ldif /usr/bin/ldif2db /usr/bin/rsearch /usr/bin/ldclt : 389-ds-base /usr/lib/dirsrv/* 389-ds-base-libsRHEL (or CentOS)
EPEL Reository 389-admin-util 389-admin-console 389-console 389-ds-console idm-console-framework RHDS Repository 389-admin-util 389-admin-console 389-console 389-ds-console redhat-ds redhat-ds-admin redhat-ds-console redhat-ds-base idm-console-framework redhat-idm-console redhat-admin-console GUI GUI daemon / utility
GUI 不要なら RHEL (or CentOS) だけで LDAP Server として動作する
FreeIPA (Red Hat IdM) の構成要素
RHEL (or CentOS)
389 Directory Server Kerberos 5 NSS Bind NTP SSSD
RHEL (or CentOS) だけで完結
FreeIPA ・389-ds-base
・389-ds-base-libs
389 Directory Server の歴史
University of Michigan SlapdOpenLDAP Netscape Directory Server (NDS) 1993 1998 1996 Netscape社が開発者を雇用 iPlanet Directory Server 1998 AOL社が Netscape 社を買収 Sun Microsystems と共同開発 Sun One Directory Server 2002 AOL社は知的財産権 AOL社は所有権を保持 をSun に売却 開発 継続中 Netscape Directory Server (NDS) Oracle Directory Server Enterprise Edition 2010 Oracle が Sun を買収 製品提供中
Red Hat Directory Server
Red Hat 社が AOL 社の Netscape Scurity Solutions 事業を買収
製品提供中 2004
Fedora Directory Server
389 Directory Server OSS 化 2005 Kurt Zeilenga により cloning feedback 2009 改名 改名のねらい ・別OSで稼働 ・vender nutral 開発継続中 16
389 Directory Server のインストールデモ - GUI なし -1
(on CentOS7)
1. 389 Directory Server (本体のみ:GUIなし) RPM インストール
# yum install 389-ds-base
2. セットアップスクリプトの実行 (GUI なし, setup type: 2)
# setup-ds.pl
※ General.StrictHostCheck=false で DNS チェック回避可能
※ setup type 1: 評価用, 2: 一般的な設定/ACL/ツリー, 3: 完全カスタム用(ツリーなしACLなし)
3. 各種確認
1. サービス確認
# systemctl status dirsrv@<インスタンスID>.servce
2. 初期設定確認
# ldapsearch -x -b "cn=config" -H ldap://localhost -D "cn=Directory Manager" -W
3. デフォルトスキーマ確認
# ldapsearch -x -b "cn=schema" -H ldap://localhost -D "cn=Directory Manager" -W +
4. 初期データ確認
# ldapsearch -x -b "dc=soy,dc=local" -H ldap://localhost -D "cn=Directory Manager" -W
5. ACL等操作属性確認
389 Directory Server のインストールデモ - GUI なし -2
(on CentOS7)
4. OpenLDAP と比較してみる (search のベンチマーク)
4.0. OSS Tech 様が提供している「 lb」という LDAP ベンチマーツールを利用
https://github.com/hamano/lb (既にデモ用のサーバにはインストール済み ) 4.1. OpenLDAP サーバの用意 このデモに利用している 389 Directory Server と同性能のマシンを用意 vCPU 2 RAM 7.5GB エントリキャッシュサイズ ・ 389DS : 512MB (デフォルト) ・ OpenLDAP : 1,000,000 エントリ ※ どちらもデータ量に対して十分 DB キャッシュサイズ ・389DS : 146MB (デフォルト) ・OpenLDAP : 512MB Index 389, OpenLDAP 共に検索キー cn に設定 18
389 Directory Server のインストールデモ - GUI なし -3
(on CentOS7)
4.
4.2. データの仕込み (389 DS, OpenLDAP 共に 10000 ユーザエントリを登録する ) 4.2.1. OpenLDAP # cd /root/go/bin/ # export GODEBUG=cgocheck=0# ./lb setup base -b 'dc=soy,dc=local' ldap://localhost/ -D 'cn=Manager,dc=soy,dc=local' -w password # ./lb setup person -b 'dc=soy,dc=local' --cn 'user%d' --last 10000 ldap://localhost/ \
-D 'cn=Manager,dc=soy,dc=local' -w password 4.2.2. 389 Directory Server
# cd /root/go/bin/
# export GODEBUG=cgocheck=0
# ./lb setup person -b 'dc=soy,dc=local' --cn 'user%d' --last 10000 ldap://localhost/ \ -D 'cn=Directory Manager' -w password
※登録されるユーザエントリは cn=user1,dc=soy,dc=local , cn=user2,dc=soy,dc=local …
4.3. OSS Tech 様の lb コマンド (LDAP ベンチマークツール ) を利用してベンチマークを実施
./lb search -b 'dc=soy,dc=local' -c 10 -n 10000 -a '(cn=user%d)' --last 10000 -s sub -D '' ldap://localhost
4.4.
389 Directory Server のインストールデモ - GUI なし -2
(on CentOS7)
4.
4.3. ベンチマークの実施
10000 ユーザを 10 スレッドでランダムに SEARCH
4.3.1. OpenLDAP
# ./lb search -b 'dc=soy,dc=local' -c 10 -n 10000 -a '(cn=user%d)' --last 10000 -s sub -D '' ldap://localhost 4.3.2. 389 Directory Server
# ./lb search -b 'dc=soy,dc=local' -c 10 -n 10000 -a '(cn=user%d)' --last 10000 -s sub -D '' ldap://localhost
`
4.4. OSS Tech 様の lb コマンド (LDAP ベンチマークツール ) を利用してベンチマークを実施
./lb search -b 'dc=soy,dc=local' -c 10 -n 10000 -a '(cn=user%d)' --last 10000 -s sub -D '' ldap://localhost
4.5.
389 Directory Server のインストールデモ - リセット
(on CentOS7)
5. セットアップのリセット (次のデモのため)
# remove-ds.pl -a -i slapd-<インスタンスID>
389 Directory Server のインストールデモ - GUIあり
(on CentOS7)
1. GUI 関連パッケージのインストール
# yum install xauth
# yum install 389-console 389-ds-console 389-admin
2. セットアップスクリプトの実行 (GUI あり, setup type: 2)
# setup-ds-admin.pl
※ setup type 1: 評価用, 2: 一般的な設定/ACL/ツリー, 3: 完全カスタム用(ツリーなしACLなし)
3. 各種確認
1. サービス確認 (LDAPサーバ及び GUI サービス)
# systemctl status dirsrv@<インスタンスID>.service
# systemctl status dirsrv-admin.service
2. 適当なクライアントから ssh の X Forwardingで接続し GUI 画面の表示 ssh -X -l <一般ユーザID> <サーバホスト名 >
# 389-console
(適当なユーザエントリを作成してみる )
389 Directory Server の機能 - レプリケーション(1)
●
用語
○レプリカ
レプリケーションに参加している各サーバ ○サプライヤ (Supplier)
レプリケーションのマスタサーバ (データを送信する側 : read-write) ○コンシューマ (Consumer)
レプリケーションのスレーブサーバ (データを受信する側 : read-only) ○ハブ (Hub)
サプライヤとコンシューマの中間に立つ (Cascade Replicatoin で使用: read-only)
○
レプリケーション合意 (Replication Agreement)
各レプリカ間のレプリケーション設定 (プッシュ型)
○
チェンジログ (changelog)
データ更新の記録。サプライヤもしくはハブが保持。 (like: RDB のトランザクションログ )
389 Directory Server の機能 - レプリケーション(2)
シングルマスタレプリケーション
● サプライヤサーバ 1 台 ● 読み取り専用のコンシューマサーバ 1 台以上 ● サプライヤプッシュ型レプリケーションでデータ同 期を行う。 ● レプリケーション合意をサプライヤに設定する ● レプリケーション用接続エントリ (Supplier Bind DN)をコンシューマ側に作成する。 レプリケーション合意定義 LDIF 例 dn: cn=Agmt1,cn=replica,cn=’dc=example,dc=com’cn=mapping tree,cn=config objectClass: top objectClass: nsds5ReplicationAgreement cn: Agmt1 nsds5ReplicaHost: 172.16.0.1 nsds5ReplicaPort: 389 nsds5ReplicaBindDN: cn=replicaUser,cn=config nsds5ReplicaBindMethod: SIMPLE nsds5ReplicaCredential: <password> nsds5ReplicaRoot: ou=people,dc=example,dc=com 24389 Directory Server の機能 - レプリケーション(3)
マルチマスタレプリケーション
● 最大 4 台のサプライヤサーバ ● 読み取り専用のコンシューマは無制限 ● サプライヤ-サプライヤ間は双方にレプリケーション 合意が必要 ● レプリケーション用接続エントリ (Supplier Bind DN)をサプライヤに作成する (コンシューマがある 場合はもちろんそれらにも作成する )。 ● コンシューマは 1 台以上のサプライヤからデータ 受信が可能 (同じコンシューマのレプリケーション 合意を複数のサプライヤに定義可能 ) 2 台サプライヤ 2 台コンシューマ構成の例 25389 Directory Server の機能 - レプリケーション(4)
マルチマスタレプリケーション
389 Directory Server の機能 - レプリケーション(5)
カスケードレプリケーション
● ハブサーバがサプライヤサーバとコンシューマ サーバの間に入り中継するイメージ。拠点が多数 ありネットワーク制限が厳しい環境や,アクセス量 が多い拠点等がある場合に有用。 ● ハブサーバはユーザからの接続に対しては読み 取り専用 ● サプライヤ - ハブ間のレプリケーション合意をサプ ライヤに設定。ハブ - コンシューマ間のレプリケー ション合意をハブに設定 ● マルチマスタとの組み合わせも可能 27389 Directory Server の機能 - Active Directory 同期
●
Active Directory (以降 AD) との双方向同期が可能 (ユーザ, グループ)
→ レプリケーションの設定方法とほぼ同じ (レプリケーション合意を AD と組む) → サプライヤ側にのみレプリケーション合意を設定すれば双方向同期になる (ただし,Windows からのパスワード変更以外 )
●
AD 配下の Windows 上で変更したパスワードを 389 DS に同期可能
→ Windows Server 側にパスワードフックモジュール (PassSync) をインストールする
グループエントリ , ユーザエントリの双方向同期 (AD 側パスワード以外 )
PassSync で AD 側パスワードを同期
デモ
: 389 Directory Server と AD の同期
こんな環境を作ります。
■ 389 Directory Server ・ホスト名: demo-389.soy.local ・サフィックス: dc=soy,dc=local ・同期対象: ou=People 以下 ■ Active Directory ・ホスト名: ad-389.sios.local ・ADドメイン: sios.local ・同期対象: cn=Users 以下 双方向ユーザ同期 (但しAD でのパスワード変更の同期以外) AD でのパスワード変更の同期 29※ 本デモでは,ADパスワード同期はモジュールインストールだけを行います。
389 Directory Server の AD 同期デモ (1)
0. 事前準備
1. LDAPS を喋る AD (Windows Server)を事前に用意 (自 己署名証明書 ) ※AD への接続は ldaps が必須
2. 先ほどのデモの環境を削除
# remove-ds-admin.pl -a -y
3. GUI なしで再セットアップ
# setup-ds.pl
setup type 2 (Typical)
Computer Name demo-389.soy.local Instance ID demo-389 Suffix dc=soy,dc=local ホスト名 ad-389.sios.local AD ドメイン名 sios.local
1. 【389】AD サーバ上の LDAPS 用 SSL 証明書を取得し 389 DS に登録
# cd /etc/dirsrv/slapd-demo-389# echo | openssl s_client -connect ad-389:636 2>/dev/null | openssl x509 > ad-389.crt # certutil -d . -A -n "Windows Server CA Cert" -t CT,, -a -i ad-389.crt
AD サーバに接続し
389 Directory Server の AD 同期デモ (2)
2. 【AD】AD 上にレプリケーション接続用ユーザを作成する
下記の URL を参考に作成。ポイントはドメインの最上位エントリに対して [Read/Write/Create all child
objects/Delete all child objects/Add GUID]が許可されていること。 "Domain Admins" グループに所属させる こと。
http://directory.fedoraproject.org/docs/389ds/howto/howto-windowssync.html#creating-ad-user-with-replication-rights:
a. Select the top level domain node (e.g. example.com) under the Active Directory Users and Groups node in the tree in the left hand pane b. In the ‘View’ menu, select ‘Advanced Features’
c. Create a user account using the Windows AD GUI
d. you probably want to set the password to never expire, or at least have a very long expiration time
e. Select the top level domain node (e.g. example.com) under the Active Directory Users and Groups node in the tree in the left hand pane f. Open ‘Properties’
g. In the ‘Properties’ dialog box, select the Security tab h. Click on the Add… button
i. Search for your windows sync user - Check Names - then hit the OK button j. In the ‘Group or User Names:’ list, select your windows sync user
k. In the ‘Permissions for Windows Sync’ list, make sure Read is checked under the Allow column
l. If you will want to write changes from 389 to AD, make sure Write/Create all child objects/Delete all child objects/Add GUID are all checked under the Allow column
m. Scroll down to Replicating Directory Changes - check this on under the Allow column n. Press ‘Apply’ or ‘OK’
→デモ環境では replication (CN=replication,CN=Users,DC=sios,DC=local) というユーザ
ID
で作成済389 Directory Server の AD 同期デモ (3)
3. 【389】389 DS で changelog を有効化
# ldapmodify -x -D "cn=Directory Manager" -H ldap://localhost -W -f changelog.ldif
4. 【389】389 DS でレプリケーション機能を有効化
# ldapmodify -x -D "cn=Directory Manager" -H ldap://localhost -W -f replication.ldif
dn: cn=changelog5,cn=config changetype: add objectclass: top objectclass: extensibleObject cn: changelog5 nsslapd-changelogdir: /var/lib/dirsrv/slapd-demo-389/changelogdb nsslapd-changelogmaxage: 7d dn: cn=syncreplica,cn=dc\=soy\,dc\=local,cn=mapping tree,cn=config changetype: add objectclass: top objectclass: nsds5replica objectclass: extensibleObject cn: syncreplica nsds5replicaroot: dc=soy,dc=local nsds5replicaid: 7 nsds5replicatype: 3 nsds5flags: 1 nsds5ReplicaPurgeDelay: 604800 32
389 Directory Server の AD 同期デモ (4)
5. 【389】389 DS で AD とのレプリケーション合意を設定
# ldapmodify -x -D "cn=Directory Manager" -H ldap://localhost -f agreement.ldif
dn: cn=adagreement1,cn=syncreplica,cn=dc\=soy\,dc\=local,cn=mapping tree,cn=config changetype: add objectclass: top objectclass: nsDSWindowsReplicationAgreement cn: adagreement1 nsds7WindowsReplicaSubtree: cn=Users,DC=sios,DC=local nsds7DirectoryReplicaSubtree: ou=people,dc=soy,dc=local nsds7NewWinUserSyncEnabled: on nsds7NewWinGroupSyncEnabled: on nsds7WindowsDomain: SIOS nsDS5ReplicaRoot: dc=soy,dc=local nsDS5ReplicaHost: ad-389.sios.local nsDS5ReplicaPort: 636 nsDS5ReplicaBindDN: CN=replication,CN=Users,DC=sios,DC=local nsDS5ReplicaCredentials: MySecret-123 nsDS5ReplicaTransportInfo: SSL nsds5replicabindmethod: SIMPLE winSyncInterval: 30 winSyncMoveAction: delete nsds5BeginReplicaRefresh: start 33
389 Directory Server の AD 同期デモ (5)
6. AD → 389 Directory ユーザ同期の確認
a. 【AD】AD 側でUsersコンテナの下に aduser1 というユーザを作る。
b. 【389】389 DS 側で ou=People,dc=soy,dc=lolcal 以下に aduser1 のエントリがあることを確認する。 # ldapsearch -x -b 'ou=People,dc=soy,dc=local' -H ldap://localhost -D "cn=Directory Manager" -W '(uid=aduser1)'
7. 389 Directory → AD ユーザ同期の確認
a. 【389】389 DS 側で以下の LDIF により dsuser1 ユーザを作成。
# ldapmodify -a -x -D "cn=Directory Manager" -W -H ldap://localhost -f dsuser1.ldif
b. 【AD】AD 側で Users コンテナの下に dsuser1 ユーザが存在することを確認する。
dn: uid=dsuser1,ou=people,dc=soy,dc=local objectClass: top objectClass: person objectClass: organizationalperson objectClass: inetOrgPerson objectClass: ntUser ntUserDomainId: dsuser1 ntUserCreateNewAccount: true ntUserDeleteAccount: true givenName: dsuser1 sn: dsuser1 uid: dsuser1 cn: dsuser1 userPassword: P@ssword1 34
389 Directory Server の AD 同期デモ (6)
8. 【AD】Password Sync のインストール (参考まで)
以下の URL から最新の PassSync (Windows Password Synchroniztion) のインストーラをダ
ウンロードします。
http://directory.fedoraproject.org/docs/389ds/download.html
インストーラを実行して設定を行います。
※ 本デモでは PassSync についてはここまでとします。
FreeIPA とは
●
FreeIPA は単なる LDAP サーバでなく、Windows の Active Directory (以降 AD)
のようなドメイン(Linux ドメイン)管理を行うソフトウェア。
●
I
dentity,
P
olicy,
A
udit (現状 Audit の機能無し)
●
RHEL 6 から同梱されており,その上では Identity Management (IdM)という名前で
ある。
●
FreeIPA は様々なソフトウェアの寄せ集め。AD 同様にその核は LDAP と Kerberos
である。
FreeIPA で出来ること
●
RHEL 系 Linux 上でのユーザ/ホスト/サービス(プリンシパル)の一元管理
●
上記プリンシパルに対する Kerberos 認証によるシングルサインオン
●
AD のセキュリティグループのようなグループ管理
●
ホストベースアクセス制御(HBAC)
●
AD とフォレスト信頼を結び,AD ユーザが FreeIPA 内のサービスにアクセスする際
にシングルサインオンを提供する。
●
二要素認証 (TOTP, HOTP)
●
証明書の発行
●
XMLRPC API の提供
●
マルチマスタレプリケーション
●
ロールベースアクセス制御 (RBAC)
●
その他...
37FreeIPA サーバの構成要素
●
LDAP Server
→ 389 Directory Server
●
Kerberos
→ MIT の Kerberos 実装 (krb5-server, etc…)
●
DNS
→ Bind
●
PKI (証明書関連)
→ Dogtag Certification System
●
NTP
→ MIT の NTP 実装
●
上記をまとめる
→ FreeIPA (ipa-server)
FreeIPA クライアントの構成要素
●
SSSD
○ 当初は FreeIPA のクライアントとして開発が始まったが今は独立している。
○ SSSD を導入しない場合は Linux クライアントから LDAP, AD, Kerberos 他の認証をする際,それぞ れ個別に PAM 及び NSS (Name Service Switch) のモジュールを利用する必要があった
(pam_ldap, nss_ldap, pam_krb5, pam_winbind, etc….)[図1]。しかし SSSD はそれらを統合して扱 えるデーモンを実装し, pam_sss, nss_sss モジュールに統一 [図2]。 sssd_nss SSSD Applications Kerberos LDAP LDAP Applications Kerberos LDAP LDAP nss_ldap pam_ldap nss_ldap pam_krb5 nss_winbind pam_winbind 図1. 旧型の Linux 認証構成 図2. SSSD を用いた Linux 認証構成 pam_sss 39
FreeIPA の LDAP ツリー
FreeIPA サーバにおける LDAP ツリーは以下ような構造です(代表的なコンテナを抜粋)。
(suffix) cn=accounts,(suffix) ※現状ではAD のような OU による組織分けができない cn=hbac,(suffix) cn=ca,(suffix) cn=otp,(suffix) cn=users,cn=accounts,(suffix) cn=groups,cn=accounts,(suffix) cn=services,cn=accounts,(suffix) cn=computers,cn=accounts,(suffix) ←ユーザの格納 ←グループの格納 ← サービスプリンシパルの格納 ← ホストプリンシパルの格納 ← ホストベースアクセスコントロールの格納 ← 証明書情報の格納 ← ワンタイムパスワード情報の格納 40FreeIPA 簡単なハンズオン : 流れ
1. ipa-server パッケージのインストール (1台)
2. ipa-client パッケージのインストール (3 台)
3. ipa-server コンソール(GUI) にログイン後ホスト等の登録状況を確認
4. ユーザ及びグループの作成 / ssh + Kerberos による SSO の確認
5. OTP ログインの確認
6. ホストグループの作成
7. HBAC (Host-Based Access Control) の作成及び動作の確認
FreeIPA 簡単なハンズオン : 環境の説明
libvirt
仮想ネットワーク 192.168.122.0/24 ipaserver
DNSドメイン: soy.local
math1 phys1 client1
.2 .101 .102 .201 GCE VM インスンタンス Global IP Address セミナールーム Socks Proxy (ssh) ProxyCap 使用 ● GCE VM インスタンス内 (一人1台)に libvirt(KVM)で仮想ネットワーク /サーバを構築
● GCE VM インスタンス内に SOCKS サーバ (1080 port) を起動 (ssh クライアント)
● セミナールーム Windows 端末からは ProxyCap (SOCKS)経由で直接仮想ネットワーク
に接続可能
● client1 を操作用のクライアントマシンと想定し,そこからそれ以外の 3 台のマシンに ssh
ログイン等を行う
仮想ブリッジ
FreeIPA 簡単なハンズオン : ipa-server インストール (準備)
ipaserver.soy.local(192.168.122.2) を IPA サーバにします。
1. TeraTerm から ipaserver.soy.local(192.168.122.2) に接続
ユーザ: root パスワード: password2. ipa-server , ipa-server-dns パッケージをインストール
# yum install ipa-server ipa-server-dns
仮想ネットワーク 192.168.122.0/24
ipaserver math1 phys1 client1
.2 .101 .102 .201
FreeIPA 簡単なハンズオン : ipa-server インストール
(セットアップ1)
3. セットアップコマンドを実行
# ipa-server-install --mkhomedir
○ Do you want to configure integrated DNS (BIND)? [no]: yes↲ ← DNS のインストール
○ Server host name [ipaserver1.soy.local]: ↲
○ Please confirm the domain name [soy.local]: ↲ ← DNS ドメイン名
○ Please provide a realm name [SOY.LOCAL]: ↲ ← Kerberos Realm 名
○ Directory Manager password: password↲ ← LDAP管理者パスワード
○ Password (confirm): password↲
○ IPA admin password: password↲ ← 管理コンソールパスワード
○ Password (confirm): password↲
44
FreeIPA 簡単なハンズオン : ipa-server インストール
(セットアップ2)
...セットアップコマンドの実行続き ...○ Do you want to configure DNS forwarders? [yes]: ↲ ← DNS Forwarder 設定する
○ Following DNS servers are configured in /etc/resolv.conf: 192.168.122.1 ← Forwarder を既存 DNS に
Do you want to configure these servers as DNS forwarders? [yes]:↲ 設定する
○ Enter an IP address for a DNS forwarder, or press Enter to skip: ↲ ← skip
○ Do you want to search for missing reverse zones? [yes]: no↲ ← 逆引ゾーンは無いので no
○ Hostname: ipaserver1.soy.local IP address(es): 192.168.122.2 Domain name: soy.local Realm name: SOY.LOCAL
BIND DNS server will be configured to serve IPA domain with: Forwarders: 192.168.122.1
Forward policy: only
Reverse zone(s): No reverse zone
Continue to configure the system with these values? [no]: yes↲ ← インストールの開始
FreeIPA 簡単なハンズオン : ipa-server インストール
(ポート開放)
4. IPA サーバで利用するポートを開放
LDAP(389/tcp), LDAPS(636/tcp) HTTP(80tcp), HTTPS(443)
Kerberos,(88/tcp, 88/udp, 464/tcp, 464/udp) NTP(123/udp)
DNS(53/udp)
# firewall-cmd --permanent --add-service={freeipa-ldap,freeipa-ldaps,http,https,kerberos,ntp,dns} # firewall-cmd --complete-reload
※ハンズオン環境では http(80) は既に開いているので警告が出ますが無視して下さい。
FreeIPA 簡単なハンズオン : ipa-client インストール (概要)
以下のマシンを IPA クライアントにします。
●
math1.soy.local (192.168.122.101)
●
phys1.soy.local (192.168.122.102)
●
client1.soy.local (192.168.122.201)
仮想ネットワーク 192.168.122.0/24ipaserver math1 phys1 client1
.2 .101 .102 .201
これら 3 台を IPA クライアントとする
FreeIPA 簡単なハンズオン : ipa-client インストール (準備)
math1.soy.local, phys1.soy.local, client1.soy.local それぞれに以下を実行します。
1. ssh で対象のマシンに接続
ユーザ: rootパスワード: password
2. ipa-client パッケージのインストール
# yum install ipa-client3. 参照先 DNS サーバの設定
Auto Discovery 機能を利用するため,参照する DNS サーバを libvirt のデフォルト (192.168.122.1) から ipaserver(192.168.122.2) に変更します。
# nmcli con mod eth0 ipv4.ignore-auto-dns yes ipv4.dns 192.168.122.2 # nmcli con reload eth0
# nmcli con up eth0
FreeIPA 簡単なハンズオン : ipa-client インストール
(セットアップ)
4. セットアップコマンドの実行
# ipa-client-install --mkhomedir
○ Discovery was successful! ← DNS を ipaserver に向けたのでオートディスカバリが成功する
Client hostname: shared1.soy.local Realm: SOY.LOCAL
DNS Domain: soy.local
IPA Server: ipaserver1.soy.local BaseDN: dc=soy,dc=local
Continue to configure the system with these values? [no]: yes↲
○ User authorized to enroll computers:admin↲
○ Password for admin@SOY.LOCAL: password↲
※ --mkhomedir オプションで初回ログイン時に自動的にホームディレクトリが作成されるようになります。
FreeIPA 簡単なハンズオン : IPAサーバコンソールの確認
1. FreeIPA コンソールへのログイン
※ ハンズオン環境では数回ベーシック認証の画面が出ますがキャンセルしてください 手元の Windows マシンのブラウザから以下 URL にアクセスし,ログインします。https://ipaserver.soy.local/
ユーザ: admin パスワード: password2. [Identity] タグでユーザ([Users])やホスト([Hosts])を確認してみます
ホストを確認した例 50FreeIPA 簡単なハンズオン : ユーザ / グループの作成 (概要)
これより以下の構成の3ユーザ, 3グループを作成します。
user1 user2 user3
・・・ ・・・
情報センターグループ (ug-center) 数学科グループ (ug-math) 物理学科グループ (ug-phys)
● ユーザグループ ○ 情報センターグループ (ug-center) → システム全体を管理する ○ 数学科グループ (ug-math) → 数学科サーバにアクセス可 ○ 物理学科グループ (ug-phys) → 物理学科サーバにアクセス可 ・・・ ● ユーザ ○ user1 : 情報センターに所属 ○ user2 : 数学科に所属 ○ user3 : 物理学科に所属 51
FreeIPA 簡単なハンズオン : ユーザ / グループの作成 (作成作業)
1. ユーザの作成
[Identity] タグで [Users] をクリック,[+Add]ボタンで以下のユーザを作成します。
2. グループの作成
[Identity] タグで[Groups]をクリック,画面左で [User Groups] が選択されていることを確認して [+Add]ボタ ンで以下のグループを作成します。作成時に [Add and Edit]ボタンで続けてメンバーを登録できます。
User login First name Last name Password
user1 user1 user1 password
user2 user2 user2 password
user3 user3 user3 password
Group name Description Group type メンバー
ug-center 情報センター POSIX user1
ug-math 数学科 POSIX user2
作成したユーザについて、LDAP のエントリと Kerberos のプリンシパルの登録状況を確認してみま
しょう。
TeraTerm から ipaserver.soy.local に root ユーザでログインします。
ユーザ: rootパスワード: password
●
LDAP エントリの確認
# ldapsearch -x -b "cn=users,cn=accounts,dc=soy,dc=local" -H ldap://localhost
# ldapsearch -x -b "cn=groups,cn=accounts,dc=soy,dc=local" -H ldap://localhost
●
Kerberos プリンシパルの確認
#
kadmin.local
kadmin.local:
listprincs
FreeIPA 簡単なハンズオン : ユーザ / グループの作成 (確認)
FreeIPA 簡単なハンズオン : シングルサインオンの確認
1.
TeraTerm から client1.soy.local (192.168.122.201)にログイン
ユーザ: user3 パスワード: password2.
client1.soy.local から ssh コマンドで math1.soy.local にログイン
$ ssh math1.soy.local
パスワード入力無しでログインできます。 hostname コマンド等でホスト名を確認します。 確認が終了したら exit を入力しログアウトします。3.
client1.soy.local から ssh コマンドで phys1.soy.local にログイン
$ ssh phys1.soy.local
パスワード入力無しでログインできます。 hostname コマンド等でホスト名を確認します。 確認が終了したら exit を入力しログアウトします。 54FreeIPA 簡単なハンズオン : HBAC をやってみる
user1 user2 user3
・・・ ・・・
情報センターグループ (ug-center) 数学科グループ (ug-math) 物理学科グループ (ug-phys)
・・・ ・・・ phys1 物理学科ホストグループ (hg-phys) ・・・ math1 数学科ホストグループ (hg-math) client1 ipaserver 保守用ホストグループ (hg-manage) ・・・ 55
FreeIPA 簡単なハンズオン : HBAC をやってみる
(ホストグループの作成 )1. FreeIPA コンソールに戻る
https://ipaserver.soy.local/ に admin ユーザでログイン中 の Chrome ブラウザに戻ります。
2. ホストグループの作成
画面上部にある [ Groups ] をクリックした後,画面左側の [ Host Groups ] をクリックします。 [+Add] ボタンをク リックし,以下のホストグループを作成します。作成時に [Add and Edit]ボタンで続けて所属するホストまたはホ ストグループを登録できます。
ホストグループにホストを登録するときは青帯の「 Hosts」タブを選択して「 +Add」をクリックします。
ホストグループのホストグループを登録するときは青帯の「 Host Groups」タブを選択して「 +Add」をクリックしま す。
Host-Group Description 属させるホスト or ホストグループ
hg-math 数学科ホストグループ math1.soy.local
hg-phys 物理学科ホストグループ phys1.soy.local
hg-manage 保守用ホストグループ hg-math1, hg-phs1, ipaserver.soy.local
FreeIPA 簡単なハンズオン : HBAC をやってみる
(HBAC ルールの作成)3. HBAC ルールの作成
画面上部にある [ Policy ] をクリックすると「 HBAC Rules」の画面が表示されます。 [+Add] ボタンをクリック し,以下の HBAC ルールを作成します。作成時に [Add and Edit]ボタンで続けてルールの詳細が設定でき ます。設定が完了したら画面ごとに [Save]ボタンをクリックします。
4. デフォルトの HBACルール(allow_all)を無効化
デフォルトの「 allow_all」という HBAC ルールは無効にしておきます。「 HBAC Rules」の画面で「allow_all」の 行を選択して [-Disable] ボタンをクリックします。
Rule name Description Who Accessing Via Service
hbac-math 数学科用HBAC ug-math hg-math Any Service
hbac-phys 物理学科用HBAC ug-phys hg-phys Any Service
hbac-manage 保守用ホストグループ ug-center hg-manage Any Service
hbac-client クライアント用 Anyone client1.soy.local Any Service
FreeIPA 簡単なハンズオン : HBAC をやってみる
(ssh ログイン確認)5. user1 が全てのホストにログイン可能か確認
1. TeraTerm から client1.soy.local(192.168.122.201)に user1 でログイン 2. 5.1 の状態のまま client1.soy.local から各サーバにログイン出来ることを確認
$ ssh ipaserver.soy.local #→ 成功するはず: hostname コマンド等で確認後 exit でログアウト
$ ssh math1.soy.local #→ 成功するはず: hostname コマンド等で確認後 exit でログアウト
$ ssh phys1.soy.local #→ 成功するはず: hostname コマンド等で確認後 exit でログアウト
3. client1.soy.local(192.168.122.201)からログアウト $ exit
6. user2 が math1 にのみログイン可能か確認
1. TeraTerm から client1.soy.local(192.168.122.201)に user2 でログイン 2. 6.1 の状態のまま client1.soy.local から各サーバにログイン出来ることを確認
$ ssh ipaserver.soy.local #→ 失敗するはず
$ ssh math1.soy.local #→ 成功するはず: hostname コマンド等で確認後 exit でログアウト
$ ssh phys1.soy.local #→ 失敗するはず
3. client1.soy.local(192.168.122.201)からログアウト $ exit
FreeIPA 簡単なハンズオン : OTPの確認 (流れ)
59
I.
一般ユーザ(user1) で FreeIPA コンソールにログインして OTP シークレットを生成
II.
上記 1 で生成した OTP シークレットを 各自のスマートフォンの Google Authenticator に読み込
み、または弊社で用意した OTP 取得 JavaScript ページに設定。
III.
管理ユーザ(admin) で FreeIPA コンソールにログインして一般ユーザ(user1)に対する OTP ログ
インを許可
IV.
TeraTerm から一般ユーザ(user1) で client1.soy.local に ssh ログイン
→ ワンタイムパスワードを尋ねられるはず
V.
ID / パスワード / ワンタイムパスワード を入力してログインを確認
(上記 I, II は Chrome ブラウザのシークレットモードを使います。)
FreeIPA 簡単なハンズオン : OTPの確認 (1)
60
1. FreeIPA コンソールに user1 としてログイン
Chrome ブラウザの
シークレットモード
で以下 URL の FreeIPA コンソールにアクセスし user1 ユーザでログ インします。 ※ ハンズオン環境では数回ベーシック認証の画面が出ますがキャンセルしてくださいhttps://ipaserver.soy.local/
ユーザ: user1 パスワード: password2. OTP シークレットの取得
画面上の [OTP Tokens] をクリックします。表示された画面で右上にある [+ADD] をクリックします。ポップ アップした画面にて, [Type] として 「Time-based (TOTP)」が選択されていることを確認し [ADD] ボタンをク リックします。 OTP トークンが QR コードで表示されます。 ご自分のスマートフォン等で Google
Authenticator 等の OTP アプリケーションをお持ちの方はここで QR コードを読み取り次々ページの 6 の手 順へ。それ以外の方は次のページの 3 の手順へ。
FreeIPA 簡単なハンズオン : OTPの確認 (2)
3. OTP シークレットを URI で表示
QR コードの下にある [ Show configuration uri ] というリンクをクリックすると OTP シークレットが
URI で表示されます。このURI を OS のクリップボードにコピーします。
4. OTP トークン取得 JavaScript のページにアクセス
サイオスが簡易作成した OTP トークン取得 JavaScript のページに Chrome ブラウザの別タブで
アクセスします。これは以下の URL にあります(「OTP トークン取得」のブックマークをクリックしても
アクセスできます。
5. OTP シークレットの URI を登録
「Input your configuration URI in the following text box」の右横にあるテキストボックスに,3
でクリップボードにコピーした URI をペーストします。すると,その下にワンタイムパスワードが表示
されます。
FreeIPA 簡単なハンズオン : OTPの確認 (3)
6. admin ユーザでログインしていた FreeIPA コンソールに戻る
https://ipaserver.soy.local/ に admin ユーザでログイン中 の Web ブラウザに戻ります。
7. user1 に OTP のログインを許可する
[Users] タブの [Active users] の画面で「user1」をクリックし,画面右の真ん中くらいまでスクロールしたとこ ろにある[User authentication types] で「Two factor authentication (password + OTP)」をチェックしま す。画面上部に戻り [Save] をクリックし変更を保存します。
8. TeraTerm からワンタイムパスワードによるログインを試行
TeraTerm から math1.soy.local などの適当なサーバに対し user1 でログインします。なお,二要素認証を 利用するため, TeraTerm の「SSH 認証」の画面で「キーボードインタラクティブ認証を使う」を選択する必要 があります。
First Factor : パスワード (password) Second Factor : ワンタイムパスワード