21장. 보안

Apache Karaf는 OSGi 호환 방식으로 JAAS(Java Authentication and Authorization Service)를 제공하는 고급적이고 유연한 보안 시스템을 제공합니다.

동적 보안 시스템을 제공합니다.

Apache Karaf 보안 프레임워크는 다음에 대한 액세스를 제어하기 위해 내부적으로 사용됩니다.

  • OSGi 서비스(개발 가이드에 설명되어 있음)
  • 콘솔 명령
  • Cryostat 계층
  • WebConsole

애플리케이션은 보안 프레임워크를 사용할 수도 있습니다(자세한 내용은 개발자 가이드 참조).

21.1. realms

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

Apache Karaf가 기본 영역 karaf 를 제공하는 것을 확인할 수 있습니다.

이 영역에는 두 가지 로그인 모듈이 있습니다.

  • PropertiesLoginModuleetc/users.properties 파일을 사용자, 그룹, 역할 및 암호의 백엔드로 사용합니다. 이 로그인 모듈은 사용자를 인증하고 사용자의 역할을 반환합니다.
  • PublickeyLoginModule 은 SSHd에서 특히 사용합니다. etc/keys.properties 파일을 사용합니다. 이 파일에는 각 사용자와 연결된 공개 키가 포함되어 있습니다.

Apache Karaf는 추가 로그인 모듈을 제공합니다(자세한 내용은 개발자 가이드 참조).

  • JDBCLoginModule은 데이터베이스를 백엔드로 사용
  • LdapLoginModule은 LDAP 서버를 백엔드로 사용
  • SyncopeLoginModule은 Apache Syncope를 백엔드로 사용
  • OsgiConfigLoginModule은 구성을 백엔드로 사용
  • Krb5LoginModule은 Kerberos 서버를 백엔드로 사용
  • GSSAPILdapLoginModule은 LDAP 서버를 백엔드로 사용하지만 LDAP 서버 인증을 다른 백엔드(일반적으로 Krb5LoginModule)에 위임합니다.

기존 realm, login 모듈을 관리하거나 jaas:realm-manage 명령을 사용하여 고유한 영역을 생성할 수 있습니다.

21.1.1. 사용자, 그룹, 역할 및 암호

지금까지 본 것처럼 Apache Karaf는 PropertiesLoginModule을 사용합니다.

이 로그인 모듈은 etc/users.properties 파일을 사용자, 그룹, 역할 및 암호의 스토리지로 사용합니다.

초기 etc/users.properties 파일에는 다음이 포함됩니다.

################################################################################
#
#    Licensed to the Apache Software Foundation (ASF) under one or more
#    contributor license agreements.  See the NOTICE file distributed with
#    this work for additional information regarding copyright ownership.
#    The ASF licenses this file to You under the Apache License, Version 2.0
#    (the "License"); you may not use this file except in compliance with
#    the License.  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
#
################################################################################

#
# This file contains the users, groups, and roles.
# Each line has to be of the format:
#
# USER=PASSWORD,ROLE1,ROLE2,...
# USER=PASSWORD,_g_:GROUP,...
# _g_\:GROUP=ROLE1,ROLE2,...
#
# All users, grousp, and roles entered in this file are available after Karaf startup
# and modifiable via the JAAS command group. These users reside in a JAAS domain
# with the name "karaf".
#
karaf = karaf,_g_:admingroup
_g_\:admingroup = group,admin,manager,viewer

이 파일에서는 기본적으로 한 명의 사용자가 있습니다. karaf. 기본 암호는 karaf 입니다.

karaf 사용자는 하나의 그룹인 admingroup 의 멤버입니다.

그룹은 항상 g: 접두사가 지정됩니다. 이 접두사가 없는 항목은 사용자입니다.

그룹은 역할 세트를 정의합니다. 기본적으로 admin group 은 그룹 ,admin,manager, viewer 역할을 정의합니다.

즉, karaf 사용자는 admingroup 에서 정의한 역할을 갖습니다.

21.1.1.1. 명령

jaas:* 명령은 콘솔에서 영역, 사용자, 그룹, 역할을 관리합니다.

21.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

여기에 두 개의 로그인 모듈 (PropertiesLoginModulePublickeyLoginModule)을 포함하는 하나의 영역 (karaf)이 있습니다.

인덱스jaas:realm-manage 명령에서 사용할 realm/login 모듈을 쉽게 식별할 수 있습니다.

21.1.1.1.2. jaas:realm-manage

jaas:realm-manage 명령은 login 모듈에서 사용자, 그룹 및 역할을 관리할 수 있는 realm/login 모듈 편집 모드에서 전환합니다.

관리할 realm 및 로그인 모듈을 식별하려면 --index 옵션을 사용하면 됩니다. 인덱스는 jaas:realm-list 명령으로 표시됩니다.

karaf@root()> jaas:realm-manage --index 1

또 다른 방법은 --realm--module 옵션을 사용하는 것입니다. --realm 옵션에는 realm 이름이 필요하며 --module 옵션에는 로그인 모듈 클래스 이름이 필요합니다.

karaf@root()> jaas:realm-manage --realm karaf --module org.apache.karaf.jaas.modules.properties.PropertiesLoginModule
21.1.1.1.3. jaas:user-list

편집 모드에 있는 경우 jaas:user-list:을 사용하여 로그인 모듈의 사용자를 나열할 수 있습니다.

karaf@root()> jaas:user-list
User Name | Group      | Role
--------------------------------
karaf     | admingroup | admin
karaf     | admingroup | manager
karaf     | admingroup | viewer

역할별로 사용자 이름과 그룹을 확인할 수 있습니다.

21.1.1.1.4. jaas:user-add

jaas:user-add 명령은 현재 편집한 로그인 모듈에 새 사용자(및 암호)를 추가합니다.

karaf@root()> jaas:user-add foo bar

변경 사항(사용자 추가)을 "커밋"하려면 jaas:update 명령을 실행해야 합니다.

karaf@root()> jaas:update
karaf@root()> jaas:realm-manage --index 1
karaf@root()> jaas:user-list
User Name | Group      | Role
--------------------------------
karaf     | admingroup | admin
karaf     | admingroup | manager
karaf     | admingroup | viewer
foo       |            |

반면 사용자 추가를 롤백하려면 jaas:cancel 명령을 사용할 수 있습니다.

21.1.1.1.5. jaas:user-delete

jaas:user-delete 명령은 현재 편집된 로그인 모듈에서 사용자를 삭제합니다.

karaf@root()> jaas:user-delete foo

jaas:user-add 명령과 마찬가지로 jaas:update 를 사용하여 변경 사항(또는 jaas:cancel to rollback)을 커밋해야 합니다.

karaf@root()> jaas:update
karaf@root()> jaas:realm-manage --index 1
karaf@root()> jaas:user-list
User Name | Group      | Role
--------------------------------
karaf     | admingroup | admin
karaf     | admingroup | manager
karaf     | admingroup | viewer
21.1.1.1.6. jaas:group-add

jaas:group-add 명령은 현재 편집된 로그인 모듈에서 그룹을 할당하고 결국 그룹을 생성합니다.

karaf@root()> jaas:group-add karaf mygroup
21.1.1.1.7. JAAS:group-delete

jaas:group-delete 명령은 현재 편집된 로그인 모듈의 그룹에서 사용자를 제거합니다.

karaf@root()> jaas:group-delete karaf mygroup
21.1.1.1.8. jaas:group-role-add

jaas:group-role-add 명령은 현재 편집된 로그인 모듈의 그룹에 역할을 추가합니다.

karaf@root()> jaas:group-role-add mygroup myrole
21.1.1.1.9. jaas:group-role-delete

jaas:group-role-delete 명령은 현재 편집된 로그인 모듈의 그룹에서 역할을 제거합니다.

karaf@root()> jaas:group-role-delete mygroup myrole
21.1.1.1.10. jaas:update

jaas:update 명령은 로그인 모듈 백엔드에서 변경 사항을 커밋합니다. 예를 들어 PropertiesLoginModule의 경우 etc/users.propertiesjaas:update 명령을 실행한 후에만 업데이트됩니다.

21.1.1.1.11. jaas:cancel

jaas:cancel 명령은 변경 사항을 롤백하고 로그인 모듈 백엔드를 업데이트하지 않습니다.

21.1.2. 암호 암호화

기본적으로 암호는 etc/users.properties 파일에 명확한 형식으로 저장됩니다.

etc/org.apache.karaf.jaas.cfg 구성 파일에서 암호화를 활성화할 수 있습니다.

################################################################################
#
#    Licensed to the Apache Software Foundation (ASF) under one or more
#    contributor license agreements.  See the NOTICE file distributed with
#    this work for additional information regarding copyright ownership.
#    The ASF licenses this file to You under the Apache License, Version 2.0
#    (the "License"); you may not use this file except in compliance with
#    the License.  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
#
################################################################################

#
# Boolean enabling / disabling encrypted passwords
#
encryption.enabled = false

#
# Encryption Service name
#   the default one is 'basic'
#   a more powerful one named 'jasypt' is available
#       when installing the encryption feature
#
encryption.name =

#
# Encryption prefix
#
encryption.prefix = {CRYPT}

#
# Encryption suffix
#
encryption.suffix = {CRYPT}

#
# Set the encryption algorithm to use in Karaf JAAS login module
# Supported encryption algorithms follow:
#   MD2
#   MD5
#   SHA-1
#   SHA-256
#   SHA-384
#   SHA-512
#
encryption.algorithm = MD5

#
# Encoding of the encrypted password.
# Can be:
#   hexadecimal
#   base64
#
encryption.encoding = hexadecimal

encryption.enabled y가 true로 설정되면 암호 암호화가 활성화됩니다.

암호화가 활성화되면 사용자가 처음 로그인할 때 암호가 암호화됩니다. 암호화된 암호는 접두사가 지정되고 \{CRYPT\}로 접미사가 지정됩니다. 암호를 다시 암호화하려면 \{CRYPT\} 접두사 및 접미사 없이 암호를 clear( 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 속성은 암호화된 암호의 인코딩을 정의합니다. 가능한 값은 16진수 또는 base64 입니다. 기본값은 16진수 입니다.

21.1.3. 키로 인증 관리

SSH 계층의 경우 Karaf는 키로 인증을 지원하므로 암호를 제공하지 않고 로그인할 수 있습니다.

SSH 클라이언트(Karaf 자체에서 제공하는 bin/client 또는 OpenSSH와 같은 ssh 클라이언트)는 Karaf SSHD(서버 측)에서 담당자를 식별하는 공개/개인 키 쌍을 사용합니다.

연결할 수 있는 키는 형식에 따라 etc/keys.properties 파일에 저장됩니다.

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
참고

보안상의 이유로 이 키는 비활성화되어 있습니다. 클라이언트당 키 쌍을 생성하고 etc/keys.properties 파일을 업데이트하는 것이 좋습니다.

키 쌍을 생성하는 가장 쉬운 방법은 OpenSSH를 사용하는 것입니다.

다음을 사용하여 키 쌍을 만들 수 있습니다.

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

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.id_dsa 개인 키를 사용하도록 클라이언트에 지정합니다.

bin/client -k ~/karaf.id_dsa

또는 ssh로

ssh -p 8101 -i ~/karaf.id_dsa karaf@localhost

21.1.4. RBAC

Apache Karaf는 역할을 사용하여 RBAC(역할 기반 액세스 제어) 시스템이라는 리소스에 대한 액세스를 제어합니다.

역할은 다음을 제어하는 데 사용됩니다.

  • OSGi 서비스에 액세스
  • 콘솔에 대한 액세스(명령 실행을 제어)
  • Cryostat(MBean 및/또는 작업에 대한 액세스)
  • WebConsole 액세스

21.1.4.1. OSGi 서비스

OSGi 서비스 RBAC 지원에 대한 자세한 내용은 개발자 가이드에 설명되어 있습니다.

21.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

여기서는 feature:listfeature:info 명령을 뷰어 역할이 있는 사용자가 실행할 수 있는 반면 feature:installfeature:uninstall 명령은 관리자 역할이 있는 사용자만 실행할 수 있습니다. 관리 그룹의 사용자에게도 뷰어 역할이 있으므로 모든 작업을 수행할 수 있습니다.

Apache Karaf 명령 ACL은 지정된 명령 범위 내에서 를 사용하여 액세스를 제어할 수 있습니다.

  • 명령 이름 regex (예: name = role)
  • 명령 이름 및 옵션 또는 인수 값 regex(예: name[/.[0-9][0-9]+./] = 100 이상의 인수 값으로만 이름을 실행하는 역할 )

명령 이름 및 options/arguments는 모두 정확히 일치하는 또는 regex 일치를 지원합니다.

기본적으로 Apache Karaf는 다음 명령 ACL을 정의합니다.

  • etc/org.apache.karaf.command.acl.bundle.cfg 구성 파일은 bundle:* 명령에 대한 ACL을 정의합니다. 이 ACL은 시스템 번들에 대한 bundle:* 명령의 실행을 admin 역할이 있는 사용자에게만 제한하지만, 비 시스템 번들에 대한 bundle:* 명령은 관리자 역할이 있는 사용자가 실행할 수 있습니다.
  • etc/org.apache.karaf.command.acl.config.cfg 구성 파일은 config:* 명령에 대한 ACL을 정의합니다. 이 ACL은 jmx.acl.*, org.apache.karaf.command.acl.*, org.apache.karaf.service.acl.* 구성 PID를 admin 역할의 사용자로 config:* 명령 실행을 제한합니다. 다른 구성 PID의 경우 manager 역할의 사용자는 config:* 명령을 실행할 수 있습니다.
  • etc/org.apache.karaf.command.acl.feature.cfg 구성 파일은 feature:* 명령에 대한 ACL을 정의합니다. 관리자 역할이 있는 사용자만 feature:installfeature:uninstall 명령을 실행할 수 있습니다. 기타 기능:* 명령은 모든 사용자가 실행할 수 있습니다.
  • etc/org.apache.karaf.command.acl.jaas.cfg 구성 파일은 jaas:* 명령에 대한 ACL을 정의합니다. 관리자 역할이 있는 사용자만 jaas:update 명령을 실행할 수 있습니다. 다른 jaas:* 명령은 모든 사용자가 실행할 수 있습니다.
  • etc/org.apache.karaf.command.acl.kar.cfg 구성 파일은 kar:* 명령에 대한 ACL을 정의합니다. admin 역할이 있는 사용자만 kar:installkar: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, etc/org.apache.karaf.command.acl.camel.cfg from Apache Camel, …​).

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
#
karaf.secured.services = (&(osgi.command.scope=*)(osgi.command.function=*))

21.1.4.3. JMX

콘솔 명령과 마찬가지로 ACL(AccessLists)을 Cryostat 계층에 정의할 수 있습니다.

Cryostat ACL은 etc/jmx.acl<ObjectName>.cfg 구성 파일에 정의되어 있습니다. 여기서 < ObjectName >은 object name입니다(예: org.apache.karaf.bundle 은 org.apache.karaf.bundle은 org.apache.karaf;type=Bundle Cryostat).

etc/jmx.acl.cfg 는 가장 일반적인 구성 파일이며 특정 구성 파일이 없는 경우 사용됩니다. "global" ACL 정의가 포함되어 있습니다.

Cryostat ACL은 (inside a Cryostat)를 사용하여 액세스를 제어할 수 있습니다.

  • 작업 이름 regex(예: operation* = role)
  • 작업 인수 값 regex (예: operation(java.lang.String, int)[/([1-4])?[0-9]/,/.*/] = role)

기본적으로 Apache Karaf는 다음 Cryostat ACL을 정의합니다.

  • etc/jmx.acl.org.apache.karaf.bundle.cfg 구성 파일은 org.apache.karaf:type=bundle 에 대한 ACL을 정의합니다. 이 ACL은 admin 역할이 있는 사용자만 시스템 번들에 대한 setStartLevel(), start(), stop(), update() 작업을 제한합니다. 다른 작업은 manager 역할이 있는 사용자가 수행할 수 있습니다.
  • etc/jmx.acl.org.apache.karaf.config.cfg 구성 파일은 org.apache.karaf:type=config Cryostat에 대한 ACL을 정의합니다. 이 ACL은 admin 역할의 사용자만 jmx.acl*, org.apache.karaf.command.acl*org.apache.karaf.service.acl* 구성 PIDs의 변경을 제한합니다. 다른 작업은 manager 역할이 있는 사용자가 수행할 수 있습니다.
  • etc/jmx.acl.org.apache.karaf.security.jmx.cfg 구성 파일은 org.apache.karaf:type=security,area=jmx Cryostat에 대한 ACL을 정의합니다. 이 ACL은 뷰어 역할이 있는 사용자에 대해 canInvoke() 작업의 호출을 제한합니다.
  • etc/jmx.acl.osgi.compendium.cm.cfg 구성 파일은 osgi.compendium:type=cm Cryostat에 대한 ACL을 정의합니다. 이 ACL은 admin 역할의 사용자만 jmx.acl*, org.apache.karaf.command.acl*org.apache.karaf.service.acl* 구성 PIDs의 변경 사항을 제한합니다. 다른 작업은 manager 역할이 있는 사용자가 수행할 수 있습니다.
  • etc/jmx.acl.java.lang.Memory.cfg 구성 파일은 코어 JVM 메모리에 대한 ACL을 정의합니다. 이 ACL은 manager 역할이 있는 사용자만 gc 작업의 호출을 제한합니다.
  • etc/jmx.acl.cfg 구성 파일은 가장 일반적인 파일입니다. 여기에 정의된 ACL은 다른 특정 ACL과 일치하지 않을 때 사용됩니다(특정 ACL에 의해 다른 특정 etc/jmx.acl.*.cfg 구성 파일에 정의된 ACL임). list*(), get*(), is*() 작업은 뷰어 역할의 사용자가 수행할 수 있습니다. set*() 및 기타 모든 *() 작업은 관리자 역할이 있는 사용자가 수행할 수 있습니다.

21.1.4.4. WebConsole

Apache Karaf WebConsole은 기본적으로 사용할 수 없습니다. 이를 활성화하려면 webconsole 기능을 설치해야 합니다.

karaf@root()> feature:install webconsole

WebConsole은 현재 콘솔 또는 Cryostat와 같은 세분화된 RBAC를 지원하지 않습니다.

admin 역할이 있는 모든 사용자는 WebConsole을 로그인하고 모든 작업을 수행할 수 있습니다.

21.1.5. SecurityMBean

Apache Karaf는 현재 사용자가 지정된 Cryostat 및/또는 작업을 호출할 수 있는지 확인하는 Cryostat를 제공합니다.

canInvoke() 작업은 현재 사용자의 역할을 가져오고, 역할 중 하나가 지정된 인수 값을 사용하여 및/또는 작업을 호출할 수 있는지 확인합니다.

21.1.5.1. 작업

  • 현재 사용자가 objectName,false else를 사용하여 Cryostat를 호출할 수 있는 경우 canInvoke(objectName)true 를 반환합니다.
  • 현재 사용자가 objectName,false 를 사용하여 operation methodName 을 호출할 수 있는 경우 canInvoke(objectName, methodName)true 를 반환합니다.
  • Can Invoke(objectName, methodName, argumentTypes ) 는 현재 사용자가 objectName,false 를 사용하여 argumentsTypes 배열을 사용하여 작업 methodName을 호출할 수 있는 경우 true 를 반환합니다.
  • canInvoke(bulkQuery)canInvoketrue 또는 false 인 경우 bulkQuery 테이블 형식 데이터의 각 작업에 대해 포함하는 테이블 형식 데이터를 반환합니다.

21.1.6. 보안 공급자

일부 애플리케이션에서는 [BouncyCastle|http://www.bouncycastle.org]과 같은 특정 보안 공급자를 사용할 수 있어야 합니다.

JVM은 이러한 safety의 사용에 대해 몇 가지 제한 사항을 적용합니다. 서명하여 부팅 클래스 경로에서 사용할 수 있어야 합니다.

이러한 공급자를 배포하는 한 가지 방법은 $JAVA_HOME/jre/lib/ext 의 JRE 폴더에 배치하고 보안 정책 구성($JAVA_HOME/jre/lib/security/java.security)을 수정하여 이러한 공급자를 등록하는 것입니다.

이 접근 방식은 잘 작동하지만 글로벌 효과가 있으며 모든 서버를 적절하게 구성해야 합니다.

Apache Karaf는 추가 보안 공급자를 구성하는 간단한 방법을 제공합니다. * 공급자를 lib/ext *에 배치하고 etc/config.properties 구성 파일을 수정하여 다음 속성을 추가합니다.

org.apache.karaf.security.providers = xxx,yyy

이 속성의 값은 등록할 공급자 클래스 이름의 쉼표로 구분된 목록입니다.

예를 들어 bouncycastle 보안 공급자를 추가하려면 다음을 정의합니다.

org.apache.karaf.security.providers = org.bouncycastle.jce.provider.BouncyCastleProvider

또한 모든 번들이 해당 번들에 액세스할 수 있도록 시스템 번들에서 해당 공급자의 클래스에 대한 액세스를 제공할 수 있습니다.

동일한 구성 파일에서 org.osgi.framework.bootdelegation 속성을 수정하여 수행할 수 있습니다.

org.osgi.framework.bootdelegation = ...,org.bouncycastle*