第19章 セキュリティー
Apache Karaf は、JAAS (Java Authentication and Authorization Service) が搭載する高度なセキュリティーシステムを OSGi に準拠する方法で提供します。
動的セキュリティーシステムを提供します。
Apache Karaf セキュリティーフレームワークは、以下へのアクセスを制御するために内部で使用されます。
- OSGi サービス (開発者ガイドで説明)
- コンソールコマンド
- JMX レイヤー
- WebConsole
アプリケーションはセキュリティーフレームワークを使用することもできます (詳細は、開発者ガイドを参照してください)。
19.1. レルム リンクのコピーリンクがクリップボードにコピーされました!
Apache Karaf は複数のレルムを管理できます。レルムには、このレルムの認証や承認に使用するログインモジュールの定義が含まれます。ログインモジュールは、レルムの認証および承認を定義します。
jaas:realm-list コマンドは、現在定義されたレルムを一覧表示します。
karaf@root()> jaas:realm-list Index | Realm Name | Login Module Class Name ----------------------------------------------------------------------------------- 1 | karaf | org.apache.karaf.jaas.modules.properties.PropertiesLoginModule 2 | karaf | org.apache.karaf.jaas.modules.publickey.PublickeyLoginModule
karaf@root()> jaas:realm-list
Index | Realm Name | Login Module Class Name
-----------------------------------------------------------------------------------
1 | karaf | org.apache.karaf.jaas.modules.properties.PropertiesLoginModule
2 | karaf | org.apache.karaf.jaas.modules.publickey.PublickeyLoginModule
Apache Karaf は karaf という名前のデフォルトのレルムを提供していることがわかります。
このレルムには 2 つのログインモジュールがあります。
-
PropertiesLoginModuleは、etc/users.propertiesファイルをユーザー、グループ、ロール、およびパスワードのバックエンドとして使用します。このログインモジュールはユーザーを認証し、ユーザーのロールを返します。 -
PublickeyLoginModuleは、特に SSHd で使用されます。etc/keys.propertiesファイルを使用します。このファイルには、ユーザーおよび各ユーザーに関連付けられた公開鍵が含まれます。
Apache Karaf は、追加のログインモジュールを提供します (詳細は、開発者ガイドを参照してください)。
- JDBCLoginModule がデータベースをバックエンドとして使用する
- LdapLoginModule が LDAP サーバーをバックエンドとして使用する
- SyncopeLoginModule が Apache Syncope をバックエンドとして使用する
- OsgiConfigLoginModule は設定をバックエンドとして使用する
- Krb5LoginModule が Kerberos サーバーをバックエンドとして使用する
- GSSAPILdapLoginModule は LDAP サーバーをバックエンドとして使用するが、LDAP サーバー認証を他のバックエンド (通常は Krb5LoginModule) に委譲する
jaas:realm-manage コマンドを使用して、既存のレルムとログインモジュールを管理するか、独自のレルムを作成できます。
19.1.1. ユーザー、グループ、ロール、およびパスワード リンクのコピーリンクがクリップボードにコピーされました!
Apache Karaf はデフォルトで PropertiesLoginModule を使用する
このログインモジュールは、ユーザー、グループ、ロール、およびパスワードのストレージとして etc/users.properties ファイルを使用します。
初期の etc/users.properties ファイルには次のものが含まれています。
デフォルトではユーザーは karaf の 1 人のみであることが分かります。デフォルトのパスワードは、karaf です。
karaf ユーザーは 1 つのグループ admingroup のメンバーです。
グループの先頭には常に g: が付けられます。この接頭辞のないエントリーはユーザーです。
グループはロールのセットを定義します。デフォルトでは、admingroup は、group、admin、manager、および viewer のロールを定義します。
つまり、karaf ユーザーは admingroup によって定義されたロールを持つことを意味します。
19.1.1.1. コマンド リンクのコピーリンクがクリップボードにコピーされました!
jaas:* コマンドは、コンソールでレルム、ユーザー、グループ、および ロールを管理します。
19.1.1.1.1. jaas:realm-list リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、これまでに jaas:realm-list を使用しました。
jaas:realm-list コマンドは、レルムと各レルムのログインモジュールを一覧表示します。
karaf@root()> jaas:realm-list Index | Realm Name | Login Module Class Name ----------------------------------------------------------------------------------- 1 | karaf | org.apache.karaf.jaas.modules.properties.PropertiesLoginModule 2 | karaf | org.apache.karaf.jaas.modules.publickey.PublickeyLoginModule
karaf@root()> jaas:realm-list
Index | Realm Name | Login Module Class Name
-----------------------------------------------------------------------------------
1 | karaf | org.apache.karaf.jaas.modules.properties.PropertiesLoginModule
2 | karaf | org.apache.karaf.jaas.modules.publickey.PublickeyLoginModule
ここに、2 つのログインモジュール (PropertiesLoginModule と PublickeyLoginModule) を含む 1 つのレルム (karaf) があります。
index コマンドは、管理するレルム/ログインモジュールを簡単に識別するために jaas:realm-manage コマンドによって使用されます。
19.1.1.1.2. jaas:realm-manage リンクのコピーリンクがクリップボードにコピーされました!
jaas:realm-manage コマンドは、レルム/ログインモジュールの編集モードを切り替え、ログインモジュールでユーザー、グループ、およびロールを管理できます。
管理するレルムおよびログインモジュールを識別するには、--index オプションを使用します。インデックスは jaas:realm-list コマンドによって表示されます。
karaf@root()> jaas:realm-manage --index 1
karaf@root()> jaas:realm-manage --index 1
もう 1 つの方法は、--realm および --module オプションを使用することです。--realm オプションはレルム名を想定し、--module オプションはログインモジュールクラス名を想定します。
karaf@root()> jaas:realm-manage --realm karaf --module org.apache.karaf.jaas.modules.properties.PropertiesLoginModule
karaf@root()> jaas:realm-manage --realm karaf --module org.apache.karaf.jaas.modules.properties.PropertiesLoginModule
19.1.1.1.3. jaas:user-list リンクのコピーリンクがクリップボードにコピーされました!
編集モードの場合は、jaas:user-list を使用してログインモジュールのユーザーを一覧表示できます。
ユーザー名およびグループはロールごとに確認できます。
19.1.1.1.4. jaas:user-add リンクのコピーリンクがクリップボードにコピーされました!
jaas:user-add コマンドは、現在編集中のログインモジュールに新しいユーザー (およびパスワード) を追加します。
karaf@root()> jaas:user-add foo bar
karaf@root()> jaas:user-add foo bar
変更 (ユーザーの追加) をコミットするには、jaas:update コマンドを実行します。
一方、ユーザーの追加をロールバックする場合は、jaas:cancel コマンドを使用できます。
19.1.1.1.5. jaas:user-delete リンクのコピーリンクがクリップボードにコピーされました!
jaas:user-delete コマンドは、現在編集中のログインモジュールからユーザーを削除します。
karaf@root()> jaas:user-delete foo
karaf@root()> jaas:user-delete foo
jaas:user-add コマンドの場合と同様に、jaas:update を使用して変更をコミットする必要があります (または jaas:cancel を使用してロールバックする必要があります)。
19.1.1.1.6. jaas:group-add リンクのコピーリンクがクリップボードにコピーされました!
jaas:group-add コマンドは、現在編集中のログインモジュールでグループをユーザーに割り当てます (最終的にグループを作成)。
karaf@root()> jaas:group-add karaf mygroup
karaf@root()> jaas:group-add karaf mygroup
19.1.1.1.7. jaas:group-delete リンクのコピーリンクがクリップボードにコピーされました!
jaas:group-delete コマンドは、現在編集中のログインモジュールでグループからユーザーを削除します。
karaf@root()> jaas:group-delete karaf mygroup
karaf@root()> jaas:group-delete karaf mygroup
19.1.1.1.8. jaas:group-role-add リンクのコピーリンクがクリップボードにコピーされました!
jaas:group-role-add コマンドは、現在編集中のログインモジュールでグループのロールを追加します。
karaf@root()> jaas:group-role-add mygroup myrole
karaf@root()> jaas:group-role-add mygroup myrole
19.1.1.1.9. jaas:group-role-delete リンクのコピーリンクがクリップボードにコピーされました!
jaas:group-role-delete コマンドは、現在編集中のログインモジュールでグループからロールを削除します。
karaf@root()> jaas:group-role-delete mygroup myrole
karaf@root()> jaas:group-role-delete mygroup myrole
19.1.1.1.10. jaas:update リンクのコピーリンクがクリップボードにコピーされました!
jaas:update コマンドは、ログインモジュールのバックエンドで変更をコミットします。たとえば、PropertiesLoginModule の場合、etc/users.properties は jaas:update コマンドの実行後にのみ更新されます。
19.1.1.1.11. jaas:cancel リンクのコピーリンクがクリップボードにコピーされました!
jaas:cancel コマンドは変更をロールバックし、ログインモジュールのバックエンドを更新しません。
19.1.2. パスワードの暗号化 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、パスワードは etc/users.properties ファイルにクリアテキストで保存されます。
etc/org.apache.karaf.jaas.cfg 設定ファイルで暗号化を有効にすることができます。
encryption.enabled が true に設定されている場合、パスワードの暗号化が有効になります。
暗号化を有効にすると、パスワードは、ユーザーの初回ログイン時に暗号化されます。暗号化したパスワードの先頭と末尾に、\{CRYPT\} が付きます。パスワードを再暗号化するには、先頭と末尾の \{CRYPT\} がない状態でパスワードをリセットできます (etc/users.properties ファイルで)。Apache Karaf は、このパスワードが明確であることを検出し (先頭と末尾に \{CRYPT\} がないため)、再度暗号化します。
etc/org.apache.karaf.jaas.cfg 設定ファイルを使用すると、高度な暗号化動作を定義できます。
-
encryption.prefixプロパティーは、パスワードが暗号化されていることをフラグする接頭辞を定義します。デフォルトは\{CRYPT\} です。 -
encryption.suffixプロパティーは、パスワードが暗号化されていることをフラグする接尾辞を定義します。デフォルトは\{CRYPT\} です。 -
encryption.algorithmプロパティーは、暗号化 (digest) に使用するアルゴリズムを定義します。可能な値は、MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512です。デフォルトはMD5です。 -
encryption.encodingプロパティーは、暗号化されたパスワードのエンコーディングを定義します。可能な値はhexadecimalまたはbase64です。デフォルト値はhexadecimalです。
19.1.3. キーによる認証の管理 リンクのコピーリンクがクリップボードにコピーされました!
SSH レイヤーでは Karaf はキーによる認証をサポートし、パスワードなしでログインできるようにします。
SSH クライアント (Karaf 自体によって提供される bin/client、OpenSSH などの ssh クライアント) は、Karaf SSHD(サーバー側) 上で自身を識別する公開鍵と秘密鍵のペアを使用します。
接続が許可された鍵は、次の形式に従って etc/keys.properties ファイルに格納されます。
user=key,role
user=key,role
デフォルトでは、Karaf は karaf ユーザーのキーを許可します。
karaf=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAIEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53JjTuyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,admin
# karaf=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAIEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53JjTuyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,admin
セキュリティー上の理由から、このキーは無効になっています。クライアントごとにキーペアを作成し、etc/keys.properties ファイルを更新することが推奨されます。
キーペアを作成する最も簡単な方法は、OpenSSH を使用することです。
以下を使用してキーペアを作成できます。
ssh-keygen -t dsa -f karaf.id_dsa -N karaf
ssh-keygen -t dsa -f karaf.id_dsa -N karaf
これで公開鍵と秘密鍵ができました。
-rw------- 1 jbonofre jbonofre 771 Jul 25 22:05 karaf.id_dsa -rw-r--r-- 1 jbonofre jbonofre 607 Jul 25 22:05 karaf.id_dsa.pub
-rw------- 1 jbonofre jbonofre 771 Jul 25 22:05 karaf.id_dsa
-rw-r--r-- 1 jbonofre jbonofre 607 Jul 25 22:05 karaf.id_dsa.pub
etc/keys.properties の karaf.id_dsa.pub ファイルの内容をコピーできます。
karaf=AAAAB3NzaC1kc3MAAACBAJLj9vnEhu3/Q9Cvym2jRDaNWkATgQiHZxmErCmiLRuD5Klfv+HT/+8WoYdnvj0YaXFP80phYhzZ7fbIO2LRFhYhPmGLa9nSeOsQlFuX5A9kY1120yB2kxSIZI0fU2hy1UCgmTxdTQPSYtdWBJyvO/vczoX/8I3FziEfss07Hj1NAAAAFQD1dKEzkt4e7rBPDokPOMZigBh4kwAAAIEAiLnpbGNbKm8SNLUEc/fJFswg4G4VjjngjbPZAjhkYe4+H2uYmynry6V+GOTS2kaFQGZRf9XhSpSwfdxKtx7vCCaoH9bZ6S5Pe0voWmeBhJXi/Sww8f2stpitW2Oq7V7lDdDG81+N/D7/rKDD5PjUyMsVqc1n9wCTmfqmi6XPEw8AAACAHAGwPn/Mv7P9Q9+JZRWtGq+i4pL1zs1OluiStCN9e/Ok96t3gRVKPheQ6IwLacNjC9KkSKrLtsVyepGA+V5j/N+Cmsl6csZilnLvMUTvL/cmHDEEhTIQnPNrDDv+tED2BFqkajQqYLgMWeGVqXsBU6IT66itZlYtrq4v6uDQG/o=,admin
karaf=AAAAB3NzaC1kc3MAAACBAJLj9vnEhu3/Q9Cvym2jRDaNWkATgQiHZxmErCmiLRuD5Klfv+HT/+8WoYdnvj0YaXFP80phYhzZ7fbIO2LRFhYhPmGLa9nSeOsQlFuX5A9kY1120yB2kxSIZI0fU2hy1UCgmTxdTQPSYtdWBJyvO/vczoX/8I3FziEfss07Hj1NAAAAFQD1dKEzkt4e7rBPDokPOMZigBh4kwAAAIEAiLnpbGNbKm8SNLUEc/fJFswg4G4VjjngjbPZAjhkYe4+H2uYmynry6V+GOTS2kaFQGZRf9XhSpSwfdxKtx7vCCaoH9bZ6S5Pe0voWmeBhJXi/Sww8f2stpitW2Oq7V7lDdDG81+N/D7/rKDD5PjUyMsVqc1n9wCTmfqmi6XPEw8AAACAHAGwPn/Mv7P9Q9+JZRWtGq+i4pL1zs1OluiStCN9e/Ok96t3gRVKPheQ6IwLacNjC9KkSKrLtsVyepGA+V5j/N+Cmsl6csZilnLvMUTvL/cmHDEEhTIQnPNrDDv+tED2BFqkajQqYLgMWeGVqXsBU6IT66itZlYtrq4v6uDQG/o=,admin
また、クライアントに karaf.id_dsa 秘密鍵を使用するように指定します。
bin/client -k ~/karaf.id_dsa
bin/client -k ~/karaf.id_dsa
または ssh を使用します。
ssh -p 8101 -i ~/karaf.id_dsa karaf@localhost
ssh -p 8101 -i ~/karaf.id_dsa karaf@localhost
19.1.4. RBAC リンクのコピーリンクがクリップボードにコピーされました!
Apache Karaf はロールを使用してリソースへのアクセスを制御します。これは RBAC(Role Based Access Control) システムです。
ロールは、以下を制御するために使用されます。
- OSGi サービスへのアクセス
- コンソールへのアクセス (コマンドの実行の制御)
- JMX へのアクセス (MBean や操作)
- WebConsole へのアクセス
19.1.4.1. OSGi サービス リンクのコピーリンクがクリップボードにコピーされました!
OSGi サービス RBAC サポートの詳細は、開発者ガイドを参照してください。
19.1.4.2. コンソール リンクのコピーリンクがクリップボードにコピーされました!
コンソール RBAC のサポートは、OSGi サービス RBAC を特化したものです。実際には、Apache Karaf では、すべてのコンソールコマンドは OSGi サービスとして定義されます。
コンソールのコマンド名は scope:name 形式に従います。
ACL(アクセスリスト) は、etc/org.apache.karaf.command.acl.<scope>.cfg 設定ファイルで定義されています。<scope> はコマンドスコープです。
たとえば、etc/org.apache.karaf.command.acl.feature.cfg 設定ファイルを作成することにより、feature:* コマンドに対する ACL を定義できます。この etc/org.apache.karaf.command.acl.feature.cfg 設定ファイルでは、次のように設定できます。
list = viewer info = viewer install = admin uninstall = admin
list = viewer
info = viewer
install = admin
uninstall = admin
ここでは、feature:list コマンドと feature:info コマンドは、viewer ロールを持つユーザーが実行できるのに対し、feature:install コマンドと feature:uninstall コマンドは admin ロールを持つユーザーのみが実行できることを定義します。admin グループのユーザーも viewer ロールを持っているため、すべて実行できることに注意してください。
Apache Karaf コマンド ACL は、(指定のコマンドスコープ内で) を使用してアクセスを制御できます。
-
コマンド名の正規表現 (例:
name = role) -
コマンド名とオプションまたは引数の値の正規表現 (例: 100 を超える引数の値でのみ名前を実行する
name[/.[0-9][0-9][0-9]+./] = role)
コマンド名とオプション/引数はいずれも、完全一致または正規表現の一致をサポートします。
デフォルトでは、Apache Karaf は以下の ACL を定義します。
-
etc/org.apache.karaf.command.acl.bundle.cfg設定ファイルは、bundle:*コマンドの ACL を定義します。この ACL は、システムバンドルのbundle:*コマンドの実行をadminロールが割り当てられたユーザーのみに制限しますが、システム以外のバンドルのbundle:*コマンドは、managerロールを持つユーザーが実行できます。 -
etc/org.apache.karaf.command.acl.config.cfg設定ファイルは、config:*コマンドの ACL を定義します。この ACL は、jmx.acl.*、org.apache.karaf.command.acl.*、およびorg.apache.karaf.service.acl.*設定 PID を使用したconfig:*コマンドの実行をadminロールを持つユーザーに制限します。他の設定 PID の場合、managerロールを持つユーザーはconfig:*コマンドを実行できます。 -
etc/org.apache.karaf.command.acl.feature.cfg設定ファイルは、feature:*コマンドの ACL を定義します。adminロールを持つユーザーのみがfeature:installおよびfeature:uninstallコマンドを実行できます。その他のfeature:*コマンドは、任意のユーザーが実行できます。 -
etc/org.apache.karaf.command.acl.jaas.cfg設定ファイルは、jaas:*コマンドの ACL を定義します。adminロールを持つユーザーのみがjaas:updateコマンドを実行できます。その他のjaas:*コマンドは、任意のユーザーが実行できます。 -
etc/org.apache.karaf.command.acl.kar.cfg設定ファイルは、kar:*コマンドの ACL を定義します。adminロールを持つユーザーのみがkar:installおよびkar:uninstallコマンドを実行できます。その他のkar:*コマンドは、任意のユーザーが実行できます。 -
etc/org.apache.karaf.command.acl.shell.cfg設定ファイルは、shell:*コマンドと"direct"コマンドの ACL を定義します。adminロールを持つユーザーのみが、shell:edit、shell:exec、shell:new、およびshell:javaコマンドを実行できます。その他のshell:*コマンドは、任意のユーザーが実行できます。
これらのデフォルト ACL を変更し、追加のコマンド範囲に自身の ACL を追加できます (Apache Karaf Cellar の場合は etc/org.apache.karaf.command.acl.cluster.cfg、Apache Camel の場合は etc/org.apache.karaf.command.acl.camel.cfg など)。
etc/system.properties の karaf.secured.services プロパティーを編集することにより、コマンド RBAC サポートを微調整できます。
By default, only Karaf shell commands are secured, but additional services can be secured by expanding this filter
#
# By default, only Karaf shell commands are secured, but additional services can be
# secured by expanding this filter
#
karaf.secured.services = (&(osgi.command.scope=*)(osgi.command.function=*))
19.1.4.3. JMX リンクのコピーリンクがクリップボードにコピーされました!
コンソールコマンドと同様に、ACL(AccessList) を JMX レイヤーに定義できます。
JMX ACL は、etc/jmx.acl<ObjectName>.cfg 設定ファイルで定義されます。<ObjectName> は MBean オブジェクト名です (たとえば、org.apache.karaf.bundle は org.apache.karaf;type=Bundle MBean を表します)。
etc/jmx.acl.cfg は最も汎用的な設定ファイルであり、特定の設定ファイルが見つからない場合に使用されます。グローバル ACL 定義が含まれます。
JMX ACL は、(JMX MBean 内) を使用してアクセスを制御できます。
-
操作名の正規表現 (例:
operation* = role) -
操作引数値正規表現 (例:
operation(java.lang.String, int)[/([1-4])?[0-9]/,/.*/] = role)
デフォルトでは、Apache Karaf は以下の JMX ACL を定義します。
-
etc/jmx.acl.org.apache.karaf.bundle.cfg設定ファイルは、org.apache.karaf:type=bundleMBean の ACL を定義します。この ACL は、adminロールを持つユーザーに対してのみ、システムバンドルsetStartLevel()、start()、stop()、およびupdate()操作を制限します。その他の操作は、managerのロールを持つユーザーが実行できます。 -
etc/jmx.acl.org.apache.karaf.config.cfg設定ファイルは、org.apache.karaf:type=configMBean の ACL を定義します。この ACL は、jmx.acl*、org.apache.karaf.command.acl*、およびorg.apache.karaf.service.acl*設定 PID の変更を、adminロールを持つユーザーに制限します。その他の操作は、managerのロールを持つユーザーが実行できます。 -
etc/jmx.acl.org.apache.karaf.security.jmx.cfg設定ファイルは、org.apache.karaf:type=security,area=jmxMBean の ACL を定義します。この ACL は、viewerロールを持つユーザーにcanInvoke()操作の呼び出しを制限します。 -
etc/jmx.acl.osgi.compendium.cm.cfg設定ファイルは、osgi.compendium:type=cmMBean の ACL を定義します。この ACL は、jmx.acl*、org.apache.karaf.command.acl*、およびorg.apache.karaf.service.acl*設定 PID の変更を、adminロールを持つユーザーに制限します。その他の操作は、managerのロールを持つユーザーが実行できます。 -
etc/jmx.acl.java.lang.Memory.cfg設定ファイルは、コア JVM Memory MBean の ACL を定義します。この ACL は、gc操作の呼び出しをmanagerロールを持つユーザーのみに制限します。 -
etc/jmx.acl.cfg設定ファイルは最も汎用的なファイルです。ここで定義された ACL は、他の特定の ACL が一致しない場合に使用されます (特定の ACL によって)。これは別の MBean 固有のetc/jmx.acl.*.cfg設定ファイルで定義される ACL です。list*()、get*()、is*()操作は、viewerロールを持つユーザーが実行できます。set*()および他のすべての*()操作は、adminロールを持つユーザーが実行できます。
19.1.4.4. WebConsole リンクのコピーリンクがクリップボードにコピーされました!
Apache Karaf WebConsole はデフォルトで利用できません。これを有効にするには、webconsole 機能をインストールする必要があります。
karaf@root()> feature:install webconsole
karaf@root()> feature:install webconsole
WebConsole では、コンソールや JMX などの粒度の細かい RBAC はサポートされません。
admin ロールを持つすべてのユーザーが WebConsole にログインし、任意の操作を実行できます。
19.1.5. SecurityMBean リンクのコピーリンクがクリップボードにコピーされました!
Apache Karaf は、現在のユーザーが指定の MBean や操作を呼び出すことができるかどうかをチェックする JMX MBean を提供します。
canInvoke() 操作は現在のユーザーのロールを取得し、最終的に指定された引数値を使用して、ロールが MBean や操作を呼び出しできるかどうかを確認します。
19.1.5.1. 操作 リンクのコピーリンクがクリップボードにコピーされました!
-
canInvoke(objectName)は、現在のユーザーがobjectNameを使用して MBean を呼び出すことができる場合はtrueを返し、できない場合はfalseを返します。 -
canInvoke(objectName)は、現在のユーザーがobjectNameを使用して操作methodNameを MBean で呼び出すことができる場合はtrueを返し、できない場合はfalseを返します。 -
canInvoke(objectName, methodName, argumentTypes)は、現在のユーザーがobjectNameを使用して、MBean で引数タイプargumentTypesの配列を使用して操作methodNameを呼び出すことができる場合はtrueを返し、それ以外の場合はfalseを返します。 -
canInvoke(bulkQuery)は、canInvokeがtrueまたはfalseの場合、bulkQuery表形式データの各操作を含む表形式データを返します。
19.1.6. セキュリティープロバイダー リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションによっては、[BouncyCastle|http://www.bouncycastle.org] などの特定のセキュリティープロバイダーが利用可能である必要があります。
JVM には、署名済みでブートクラスパスで利用可能できる必要があるなど、jar の使用に関するいくつかの制限があります。
これらのプロバイダーをデプロイする方法の 1 つは、$JAVA_HOME/jre/lib/ext の JRE フォルダーに配置し、そのプロバイダーを登録するためにセキュリティーポリシー設定 ($JAVA_HOME/jre/lib/security/java.security) を変更することです。
このアプローチは問題なく機能しますが、グローバルな効果があり、それに応じてすべてのサーバーを設定する必要があります。
Apache Karaf は、追加のセキュリティープロバイダーを設定する簡単な方法を提供します。* プロバイダー jar を lib/ext に配置 * etc/config.properties 設定ファイルを変更して以下のプロパティーを追加
org.apache.karaf.security.providers = xxx,yyy
org.apache.karaf.security.providers = xxx,yyy
このプロパティーの値は、登録するプロバイダークラス名のコンマ区切りリストです。
たとえば、bouncycastle セキュリティープロバイダーを追加するには、以下を定義します。
org.apache.karaf.security.providers = org.bouncycastle.jce.provider.BouncyCastleProvider
org.apache.karaf.security.providers = org.bouncycastle.jce.provider.BouncyCastleProvider
さらに、すべてのバンドルがそれらにアクセスできるように、システムバンドルのこれらのプロバイダーからクラスにアクセスできるようにしてください。
これには、同じ設定ファイルの org.osgi.framework.bootdelegation プロパティーを変更します。
org.osgi.framework.bootdelegation = ...,org.bouncycastle*
org.osgi.framework.bootdelegation = ...,org.bouncycastle*