FreeBSD で OpenAM を動かす

前提条件


OpenAM のインストール

OpenAM 設定ファイル保存用ディレクトリ作成

デフォルトディレクトリを/rootから変更できないようなので 作っておきます。

# mkdir /var/db/tomcat
# mkdir /var/db/tomcat/openam
# mkdir /var/db/tomcat/.openamcfg
# chown -R www:www /var/db/tomcat
# chmod -R 750 /var/db/tomcat
# cd /root
# ln -s /var/db/tomcat/openam .
# ln -s /var/db/tomcat/.openamcfg .

OpenAM パッケージの入手

ForgeRockの OpenAMプロジェクトページ からwarパッケージをダウンロードしてファイル名を変更します。
なお、ダウンロードにはユーザ登録(無料)が必要です。

% mv OpenAM-13.0.0.war openam.war

Tomcat の管理画面の Manager App から openam.war をアップロードしてインストールします。

インストールしたOpenAMにブラウザでアクセスします。

エラーが出ても気にせずに設定ページに進みます。

カスタム設定を選びます。

ウイザードに従って設定してきます。

OpenAM amadmin OpenAM server OpenAM config store OpenAM user store OpenAM SLB OpenAM apadmin OpenAM create OpenAM finish

OpenAM login


OpenAM の設定

amadminでログインします。

OpenAM Realm

最上位 Realm を選択します。

OpenAM Realm Overview

Subject を選択します。

OpenAM Data Store

データストアを選択し、新規に OpenLDAP のデータストアを追加します。

OpenAM Data Store

サーバー設定

変数
LDAP サーバー localhost:389
LDAP バインド DN cn=manager,dc=next-hop,dc=net
LDAP バインドパスワード password
LDAP 組織 DN dc=next-hop,dc=net
LDAP Connection Mode LDAP

ユーザー設定

変数
LDAP ユーザー検索属性 uid
LDAP ユーザー検索フィルタ (objectClass=inetOrgPerson)
LDAP ピープルコンテナネーミング属性 ou
LDAP ピープルコンテナ値 user
LDAP ユーザーオブジェクトクラス
top
inetOrgPerson
posixAccount
inetUser

グループ設定

変数
LDAP グループ検索属性 cn
LDAP グループ検索フィルタ (objectClass=groupOfUniqueNames)
LDAP グループコンテナネーミング属性 ou
LDAP ピープルコンテナ値 group
グループメンバーシップの属性 cn
一意のメンバーの属性名 uniqueMember

持続検索制御

変数
持続検索ベース DN dc=next-hop,dc=net
持続検索フィルタ (objectClass=*)

LDAP 管理下のユーザでログインできるかどうか確認します。

OpenAM login


OpenAM SSO Admin Tool のインストール

OpenAM-13.0.0.zip から ツールを取出しインストールします。

# mkdir /usr/local/libexec/openam
# mkdir /usr/local/libexec/openam/ssoadmin
# mkdir /usr/local/libexec/openam/ssoconfig
# cd /usr/local/libexec/openam/ssoadmin
# unzip SSOAdminTools-13.0.0.zip
# cd /usr/local/libexec/openam/ssoconfig
# unzip SSOConfiguratorTools-13.0.0.zip

SSO Admin Tool のインストール

証明書を読み込むように setup スクリプトを修正します。

# cd /usr/local/libexec/openam/ssoadmin
# vi setup
--- setup.orig  2016-01-14 21:07:00.000000000 +0900
+++ setup       2016-10-23 03:26:26.258677000 +0900
@@ -94,5 +94,6 @@
 $JAVA_HOME/bin/java -D"load.config=yes" -D"help.print=$help_print" \
                       -D"path.AMConfig=$path_AMConfig" -D"path.debug=$path_debug" \
                       -D"path.log=$path_log" \
+                      -D"javax.net.ssl.trustStore=/usr/local/apache-tomcat-8.0/.keystore" \
                       -cp "$CLASSPATH" \
                       com.sun.identity.tools.bundles.Main $accept_license
# setenv JAVA_HOME /usr/local/openjdk8
# ./setup --acceptLicense
OpenAM サーバーの設定ファイルのパス [/root/openam]:/var/db/tomcat/openam
デバッグディレクトリ [/usr/local/libexec/openam/ssoadmin/debug]:/var/db/tomcat/openam/openam/debug
ログディレクトリ [/usr/local/libexec/openam/ssoadmin/log]:/var/db/tomcat/openam/openam/log
デバッグディレクトリは /var/db/tomcat/openam/openam/debug です。
ログディレクトリは /var/db/tomcat/openam/openam/log です。
この tools.zip のバージョン:  OpenAM 13.0.0
サーバーインスタンスのバージョン:  OpenAM 13.0.0 Build 5d4589530d (2016-January-14 21:15)

SSO Configuration Tool のインストール

# cd /usr/local/libexec/openam/ssoconfig
# cp sampleconfiguration config.properties
# chmod 600 config.properties
# vi config.properties

config.properties

SERVER_URL=https://openam.next-hop.net:8443
DEPLOYMENT_URI=/openam
BASE_DIR=/var/db/tomcat/openam
locale=en_US
PLATFORM_LOCALE=en_US
AM_ENC_KEY=
ADMIN_PWD=password
AMLDAPUSERPASSWD=password
COOKIE_DOMAIN=.next-hop.net
ACCEPT_LICENSES=true
DATA_STORE=embedded
DIRECTORY_SSL=SIMPLE
DIRECTORY_SERVER=localhost
DIRECTORY_PORT=50389
DIRECTORY_ADMIN_PORT=4444
DIRECTORY_JMX_PORT=1689
ROOT_SUFFIX=dc=openam,dc=forgerock,dc=org
DS_DIRMGRDN=cn=Directory Manager
DS_DIRMGRPASSWD=password
# java -D"javax.net.ssl.trustStore=/usr/local/apache-tomcat-8.0/.keystore" -jar openam-configurator-tool-13.0.0.jar --file config.properties

test 証明書の置き換え

SAML 認証等で使用するデフォルト証明書を test 用証明書から tomcat で使用している証明書に置き換えます。

#!/bin/sh

TOMCATDIR="/usr/local/apache-tomcat-8.0"
if [ ! -f $TOMCATDIR/.keystore ]; then
    echo "file not found: $TOMCATDIR/.keystore"
    exit 1
fi
cd /var/db/tomcat/openam/openam
if [ ! -f .keypass.test ]; then
    cp -p .keypass .keypass.test
fi
if [ ! -f .storepass.test ]; then
    cp -p .storepass .storepass.test
fi
if [ ! -f keystore.jks.test ]; then
    cp -p keystore.jks keystore.jks.test
fi
echo "changeit" > .keypass
echo "changeit" > .storepass
cp -p $TOMCATDIR/.keystore keystore.jks
chmod 640 .keypass
chmod 640 .storepass
chmod 640 keystore.jks
chown www:www keystore.jks

ログイン画面のカスタマイズ

--- config/auth/default/DataStore.xml.orig	2016-01-14 21:19:46.000000000 +0900
+++ config/auth/default/DataStore.xml	2016-10-23 22:21:27.209983000 +0900
@@ -37,7 +37,7 @@
 
 
 <ModuleProperties moduleName="DataStore" version="1.0" >
-    <Callbacks length="2" order="1" timeout="120" header="Sign in to OpenAM" >
+    <Callbacks length="2" order="1" timeout="120" header="Sign in to Next Hop Account" >
         <NameCallback>
             <Prompt>User Name:</Prompt>
         </NameCallback>
--- config/auth/default_ja/DataStore.xml.orig	2016-01-14 21:19:46.000000000 +0900
+++ config/auth/default_ja/DataStore.xml	2016-10-23 22:22:22.189537000 +0900
@@ -36,7 +36,7 @@
 
 
 <ModuleProperties moduleName="DataStore" version="1.0" >
-    <Callbacks length="2" order="1" timeout="120" header="OpenAM へのサインイン" >
+    <Callbacks length="2" order="1" timeout="120" header="Next Hop アカウントへのサインイン" >
         <NameCallback>
             <Prompt>ユーザー名:</Prompt>
         </NameCallback>
--- XUI/locales/en/translation.json.orig	2016-01-14 21:19:46.000000000 +0900
+++ XUI/locales/en/translation.json	2016-10-23 22:17:38.254850000 +0900
@@ -303,7 +303,7 @@
             "deactivate": "Deactivate",
             "active": "Active",
             "inactive": "Inactive",
-            "copyright" : "Copyright © 2010-2016 ForgeRock AS. All rights reserved.",
+            "copyright" : "Copyright © 2016 Next Hop. All rights reserved.",
             "build": "Build",
             "sessionExpired" : "Session Expired",
             "enableCookies" : "Cookies must be enabled to login",
--- XUI/config/ThemeConfiguration.js.orig	2016-01-14 21:19:46.000000000 +0900
+++ XUI/config/ThemeConfiguration.js	2016-10-23 05:53:21.240959000 +0900
@@ -29,22 +29,22 @@
                 // This logo is displayed on user profile pages.
                 logo: {
                     // The URL of the image.
-                    src: "images/logo-horizontal.png",
+                    src: "images/logo-horizontal2.png",
                     // The title attribute used on <img> tags.
-                    title: "ForgeRock",
+                    title: "Next Hop",
                     // The alt attribute used on <img> tags.
-                    alt: "ForgeRock",
+                    alt: "Next Hop",
                     // The width of the logo as a CSS length.
                     width: "202px"
                 },
                 // This logo is displayed on login pages.
                 loginLogo: {
                     // The URL of the image.
-                    src: "images/login-logo.png",
+                    src: "images/login-logo2.png",
                     // The title attribute used on <img> tags.
-                    title: "ForgeRock",
+                    title: "Next Hop",
                     // The alt attribute used on <img> tags.
-                    alt: "ForgeRock",
+                    alt: "Next Hop",
                     // The height of the logo as a CSS length.
                     height: "104px",
                     // The width of the logo as a CSS length.
@@ -53,7 +53,7 @@
                 // The footer is displayed on every page.
                 footer: {
                     // A contact email address.
-                    mailto: "info@forgerock.com",
+                    mailto: "info@next-hop.net",
                     // A contact phone number. If empty, it will not be displayed.
                     phone: ""
                 }
@@ -68,9 +68,9 @@
             ],
             settings: {
                 loginLogo: {
-                    src: "themes/dark/images/login-logo-white.png",
-                    title: "ForgeRock",
-                    alt: "ForgeRock",
+                    src: "themes/dark/images/login-logo-white2.png",
+                    title: "Next Hop",
+                    alt: "Next Hop",
                     height: "228px",
                     width: "220px"
                 }

openam を再起動します。


設定のバックアップ

#!/bin/sh

DBDIR="/var/db/tomcat/openam"
#BACKEND_ID="adminRoot"
#BACKEND_ID="ads-truststore"
#BACKEND_ID="backup"
#BACKEND_ID="config"
#BACKEND_ID="monitor"
#BACKEND_ID="schema"
#BACKEND_ID="tasks"
BACKEND_ID="userRoot"

$DBDIR/opends/bin/export-ldif \
  --port 4444 \
  --hostname `uname -n` \
  --bindDN "cn=Directory Manager" \
  --bindPassword password \
  --backendID $BACKEND_ID \
  --includeBranch dc=openam,dc=forgerock,dc=org \
  --excludeBranch ou=tokens,dc=openam,dc=forgerock,dc=org \
  --ldifFile $DBDIR/$BACKEND_ID-backup-`date -u +%F-%m-%s`.ldif \
  --start 0 \
  --trustAll

ネットワークフィルタリング

まずは閉めて、必要に応じて開けるようにしてきます。

/etc/rc.local

#!/bin/sh

IF0_IP4="me"
IF0_IP6="me6"

ipfw add 10210 allow tcp from ${IF0_IP4} any to ${IF0_IP4} 50389 setup keep-state
ipfw add 10220 allow tcp from ${IF0_IP6} any to ${IF0_IP6} 50389 setup keep-state
ipfw add 10230 allow tcp from ${IF0_IP4} any to ${IF0_IP4} 4444 setup keep-state
ipfw add 10240 allow tcp from ${IF0_IP6} any to ${IF0_IP6} 4444 setup keep-state
ipfw add 10250 allow tcp from ${IF0_IP4} any to ${IF0_IP4} 1689 setup keep-state
ipfw add 10260 allow tcp from ${IF0_IP6} any to ${IF0_IP6} 1689 setup keep-state
ipfw add 10270 deny tcp from any any to ${IF0_IP4} 50389 setup
ipfw add 10280 deny tcp from any any to ${IF0_IP6} 50389 setup
ipfw add 10290 deny tcp from any any to ${IF0_IP4} 4444 setup
ipfw add 10300 deny tcp from any any to ${IF0_IP6} 4444 setup
ipfw add 10310 deny tcp from any any to ${IF0_IP4} 1689 setup
ipfw add 10320 deny tcp from any any to ${IF0_IP6} 1689 setup

参考