下記ページを参考に、JOC Cockpit のLDAP認証を試してみます。
https://kb.sos-berlin.com/display/PKB/Authentication+and+Authorization+-+ConfigurationJOC Cockpit の認証は、shiro.ini で設定します。
shiro.ini には、デフォルトで複数の Role が定義されており、ユーザによって使用できる機能を制限できます。
詳細は下記ページを参照
https://kb.sos-berlin.com/display/PKB/Authentication+and+Authorization+-+Permissions+for+the+JOC+Cockpit+Web+Serviceテスト環境は以下のとおり。dockerコンテナ4台で試します。
- Dockerホスト(CentOS7.3)
- docker1.10.3
- docker-compose1.10.0
- Dockerコンテナ(Debian8)
- JobSchedulerMaster1.11.0-R3
- JOC Cockpit1.11.0-R3
- MariaDB10.1
- OpenLDAP2.4.40
LDAPのユーザ登録
DockerHUBのイメージを使用して OpenLDAPサーバを起動しました。
ドメインは "dc=example, dc=local" とします。
[root@centos0702 ldap]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 45be5aba3636 dinkel/openldap "/entrypoint.sh slapd" 22 hours ago Up 30 minutes 0.0.0.0:389->389/tcp ldap_server_1
下記のユニットを登録します。
[root@centos0702 ldap]# cat unit.ldif dn: ou=Users,dc=example,dc=local objectclass: organizationalUnit ou: Users dn: ou=Groups,dc=example,dc=local objectclass: organizationalUnit ou: Groups dn: ou=Computers,dc=example,dc=local objectclass: organizationalUnit ou: Computers [root@centos0702 ldap]# ldapadd -x -w p@ssw0rd -D "cn=admin,dc=example,dc=local" -f unit.ldif adding new entry "ou=Users,dc=example,dc=local" adding new entry "ou=Groups,dc=example,dc=local" adding new entry "ou=Computers,dc=example,dc=local"
上記で登録した Users にテスト用のユーザを1人登録します。
後述のJOC Cockpit の設定で、「LDAPのgidNumber」 と 「JOC Cockpit の Role」 を紐つけるように設定します。
[root@centos0702 ldap]# ldapadd -x -w p@ssw0rd -D "cn=admin,dc=example,dc=local" -f user.ldif adding new entry "uid=dev01,ou=Users,dc=example,dc=local"
登録した dev01 ユーザを検索してみます。
[root@centos0702 ldap]# ldapsearch -x -D "uid=dev01,ou=Users,dc=example,dc=local" -w p@ssw0rd -b "ou=Users,dc=example,dc=local" "(&(objectClass=posixAccount)(uid=dev01))" # extended LDIF # # LDAPv3 # base <ou=Users,dc=example,dc=local> with scope subtree # filter: (&(objectClass=posixAccount)(uid=dev01)) # requesting: ALL # # dev01, Users, example.local dn: uid=dev01,ou=Users,dc=example,dc=local objectClass: posixAccount objectClass: inetOrgPerson sn: dev01-sn cn: dev01-cn displayName: develop01 uid: dev01 uidNumber: 1000 gidNumber: 1000 homeDirectory: /home/dev01 loginShell: /bin/bash userPassword:: e0NSWVBUfU9Kd0FkMkJjdGo1aXc= mail: dev01@example.local # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
JOC Cockpit のLDAP認証設定
JOC Cockpit の認証設定は、shiro.ini に記載されています。
設定ファイルのデフォルトの格納場所は、以下のとおり。
/home/[install user]/sos-berlin.com/joc/resources/joc/shiro.ini今回は、以下の PATH に格納しています。
/root/sos-berlin.com/joc/resources/joc/shiro.iniデフォルトのshiro.ini では、[user] に root ユーザが定義されています。
LDAP認証に変更すると、この root ユーザは使用不可になります。
[user]は、変更せずに残します。
[Role]には、"administrator"や"application_manager" などが、あらかじめ定義されているので、ユーザごとに割り当てる Role を変更して使用可能なJOCの機能を制限することにします。
[Role]も変更せずに残します。
[main]は、[user]で定義したユーザでログインできるような設定になっているので、以下のようにしてLDAP認証に変更します。
[main] ldapRealm = com.sos.auth.shiro.SOSLdapAuthorizingRealm ldapRealm.userDnTemplate = uid={0},ou=Users,dc=example,dc=local ldapRealm.searchBase = ou=Users,dc=example,dc=local ldapRealm.contextFactory.url = ldap://ldap_server_1:389 ldapRealm.groupNameAttribute = gidNumber #ldapRealm.userNameAttribute = uid ldapRealm.userSearchFilter = (&(objectClass=posixAccount)(uid=%s)) # Mapping of a LDAP group to roles. You can assign more than one role with separator sign | ldapRealm.groupRolesMap = \ "1000":"administrator|application_manager", \ "1001":"application_manager", \ "1002":"it_operator" rolePermissionResolver = com.sos.auth.shiro.SOSPermissionResolverAdapter rolePermissionResolver.ini = $iniRealm ldapRealm.rolePermissionResolver = $rolePermissionResolver securityManager.realms = $ldapRealm cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager securityManager.cacheManager = $cacheManager #Session timeout in milliseconds securityManager.sessionManager.globalSessionTimeout = 1800000
ldapRealm.userDnTemplate は、LDAP サーバーからユーザーを取得する DN テンプレートです。{0}は、JOC Cockpitログイン画面で入力したユーザIDが入ります。
ldapRealm.searchBaseは、ユーザーを検索するLDAP ディレクトリーのルートを設定します。
ldapRealm.contextFactory.urlは、LDAPサーバのURLを設定します。
ldapRealm.groupNameAttributeは、ldapRealm.groupRolesMapで紐つけるLDAP属性(gidNumber)を指定 ldapRealm.groupRolesMapは、LDAP属性の gidNumber と JOCのRole を紐つけます。複数のロールを紐つける場合は "|" で区切ります。
このLDAP用の shiro.ini をコンテナにコピーして JocCockpit を再起動します。
[root@centos0702 sosjs11]# docker cp ./shiro.ini.ldap sosjs11_joc_cockpit_1:/root/sos-berlin.com/joc/resources/joc/shiro.ini [root@centos0702 sosjs11]# docker exec sosjs11_joc_cockpit_1 /etc/init.d/joc restart Stopping Jetty: OK Starting Jetty: . . . . . OK Sun Jan 29 02:57:32 UTC 2017
ログイン確認
コンテナの状態を確認します。
[root@centos0702 sosjs11]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fd455e36a585 js_master "bash /opt/startup_sc" 16 hours ago Up 3 minutes 0.0.0.0:4444->4444/tcp, 0.0.0.0:40444->40444/tcp, 48444/tcp sosjs11_master_1 b51cc531a282 joc_cockpit "bash /opt/startup_jo" 16 hours ago Up 3 minutes 0.0.0.0:4446->4446/tcp, 0.0.0.0:40446->40446/tcp sosjs11_joc_cockpit_1 7c09a173ee7a mariadb "docker-entrypoint.sh" 16 hours ago Up 3 minutes 3306/tcp sosjs11_db_1 45be5aba3636 dinkel/openldap "/entrypoint.sh slapd" 23 hours ago Up About an hour 0.0.0.0:389->389/tcp ldap_server_1
下記URLでログインします。
http://<DockerホストのIPアドレス>:4446/ログイン画面で、上記で登録したLDAPユーザの dev01/p@ssw0rd を入力してログインします。
ログインに成功して、右上の[dev01] > [プロファイル] を選択すると、下図のように使用可能な機能を確認できます。