2장. Apache Karaf 컨테이너 보안


초록

Apache Karaf 컨테이너는 JAAS를 사용하여 보호됩니다. JAAS 영역을 정의하면 사용자 자격 증명을 검색하는 데 사용되는 메커니즘을 구성할 수 있습니다. 기본 역할을 변경하여 컨테이너의 관리 인터페이스에 대한 액세스를 구체화할 수도 있습니다.

2.1. JAAS 인증

초록

JAAS(Java Authentication and Authorization Service)는 Java 애플리케이션에서 인증을 구현하기 위한 일반 프레임워크를 제공합니다. 인증 구현은 모듈식이며 개별 JAAS 모듈(또는 플러그인)은 인증 구현을 제공합니다.

JAAS에 대한 배경 정보는 JAAS 참조 가이드를 참조하십시오.

2.1.1. 기본 JAAS Cryostat

이 섹션에서는 Karaf 컨테이너에서 기본 JAAS 영역에 대한 사용자 데이터를 관리하는 방법을 설명합니다.

2.1.1.1. 기본 JAAS 영역

Karaf 컨테이너에는 기본적으로 컨테이너의 모든 측면을 보호하는 데 사용되는 karaf 영역인 사전 정의된 JAAS 영역이 있습니다.

2.1.1.2. JAAS와 애플리케이션을 통합하는 방법

자체 애플리케이션에서 karaf 영역을 사용할 수 있습니다. 간단하게 karaf 를 사용하려는 JAAS 영역의 이름으로 구성합니다.

2.1.1.3. 기본 JAAS 로그인 모듈

Karaf 컨테이너를 처음 시작하면 karaf 기본 영역을 사용하도록 구성됩니다. 이 기본 구성에서 karaf 영역은 동시에 활성화된 5개의 JAAS 로그인 모듈을 배포합니다. 배포된 로그인 모듈을 보려면 다음과 같이 jaas:realms console 명령을 입력합니다.

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
3     │ karaf      │ org.apache.karaf.jaas.modules.audit.FileAuditLoginModule
4     │ karaf      │ org.apache.karaf.jaas.modules.audit.LogAuditLoginModule
5     │ karaf      │ org.apache.karaf.jaas.modules.audit.EventAdminAuditLoginModule

사용자가 로그인을 시도할 때마다 인증은 5개의 모듈을 목록순으로 진행합니다. 각 모듈의 플래그 값은 인증이 성공하려면 모듈이 성공적으로 완료되어야 하는지 여부를 지정합니다. 또한 플래그 값은 모듈이 완료된 후 인증 프로세스가 중지되는지 또는 다음 모듈을 진행할지 여부를 지정합니다.

선택적 플래그는 5개의 인증 모듈 모두에 대해 설정됩니다. Optional 플래그 설정을 사용하면 현재 모듈이 성공적으로 완료되었는지 여부와 관계없이 인증 프로세스가 항상 한 모듈에서 다음으로 전달됩니다. Karaf JAAS 영역의 플래그 값은 하드 코딩되며 변경할 수 없습니다. 플래그에 대한 자세한 내용은 표 2.1. “JAAS 모듈 정의 플래그” 을 참조하십시오.

중요

Karaf 컨테이너에서 properties 로그인 모듈과 공개 키 로그인 모듈이 모두 활성화됩니다. JAAS가 사용자를 인증하면 먼저 properties 로그인 모듈을 사용하여 사용자를 인증하려고 합니다. 실패하는 경우 공개 키 로그인 모듈을 사용하여 사용자를 인증하려고 합니다. 이 모듈이 실패하면 오류가 발생합니다.

2.1.1.1. 인증 감사 로깅 모듈

Karaf 컨테이너의 기본 모듈 목록 내에서 처음 두 모듈만 사용자 ID를 확인하는 데 사용됩니다. 나머지 모듈은 성공 및 실패한 로그인 시도의 감사 추적을 기록하는 데 사용됩니다. 기본 영역에는 다음과 같은 감사 로깅 모듈이 포함됩니다.

org.apache.karaf.jaas.modules.audit.LogAuditLoginModule
이 모듈은 etc/org.ops4j.pax.logging.cfg 의 Pax 로깅 인프라에 대해 구성된 로거를 사용하여 인증 시도에 대한 정보를 기록합니다. 자세한 내용은 JAAS 로그 로그인 모듈을 참조하십시오.
org.apache.karaf.jaas.modules.audit.FileAuditLoginModule
이 모듈은 사용자가 지정하는 파일에 대한 인증 시도에 대한 정보를 직접 기록합니다. 로깅 인프라를 사용하지 않습니다. 자세한 내용은 JAAS 파일 감사 로그인 모듈을 참조하십시오.
org.apache.karaf.jaas.modules.audit.EventAdminAuditLoginModule
이 모듈은 OSGi 이벤트 관리 서비스를 사용하여 인증 시도를 추적합니다.

2.1.1.4. properties 로그인 모듈에서 사용자 구성

properties 로그인 모듈은 사용자 이름/암호 자격 증명을 플랫 파일 형식으로 저장하는 데 사용됩니다. properties 로그인 모듈에서 새 사용자를 생성하려면 텍스트 편집기를 사용하여 InstallDir/etc/users.properties 파일을 열고 다음 구문으로 행을 추가합니다.

Username=Password[,UserGroup|Role][,UserGroup|Role]...

예를 들어 암호, topsecret, 역할인 admin 을 사용하여 jdoe 사용자를 생성하려면 다음과 같은 항목을 생성할 수 있습니다.

jdoe=topsecret,admin

admin 역할이 jdoe 사용자에게 전체 관리 권한을 제공하는 경우.

2.1.1.5. properties 로그인 모듈에서 사용자 그룹 구성

사용자에게 직접 역할을 할당하는 대신 속성 로그인 모듈에서 사용자 그룹에 사용자를 추가하는 옵션도 있습니다. properties 로그인 모듈에서 사용자 그룹을 생성하려면 텍스트 편집기를 사용하여 InstallDir/etc/users.properties 파일을 열고 다음 구문으로 행을 추가합니다.

_g_\:GroupName=Role1,Role2,...

예를 들어 역할, 그룹 및 admin 을 사용하여 admin group 사용자 그룹을 생성하려면 다음과 같은 항목을 생성할 수 있습니다.

_g_\:admingroup=group,admin

그런 다음 다음 사용자 항목을 생성하여 majorclanger 사용자를 admingroup 에 추가할 수 있습니다.

majorclanger=secretpass,_g_:admingroup

2.1.1.6. 공개 키 로그인 모듈 구성

공개 키 로그인 모듈은 SSH 공개 키 자격 증명을 플랫 파일 형식으로 저장하는 데 사용됩니다. 공개 키 로그인 모듈에서 새 사용자를 생성하려면 텍스트 편집기를 사용하여 InstallDir/etc/keys.properties 파일을 열고 다음 구문으로 행을 추가합니다.

Username=PublicKey[,UserGroup|Role][,UserGroup|Role]...

예를 들어 InstallDir/etc/keys.properties 파일에 다음 항목을 추가하여 admin 역할이 있는 jdoe 사용자를 생성할 수 있습니다.

jdoe=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,admin
중요

id_rsa.pub 파일의 전체 내용을 여기에 삽입하지 마십시오. 공개 키 자체를 나타내는 기호 블록을 삽입합니다.

2.1.1.7. 공개 키 로그인 모듈에서 사용자 그룹 구성

사용자에게 직접 역할을 할당하는 대신 공개 키 로그인 모듈에서 사용자 그룹에 사용자를 추가하는 옵션도 있습니다. 공개 키 로그인 모듈에서 사용자 그룹을 생성하려면 텍스트 편집기를 사용하여 InstallDir/etc/keys.properties 파일을 열고 다음 구문으로 행을 추가합니다.

_g_\:GroupName=Role1,Role2,...

예를 들어 역할, 그룹 및 admin 을 사용하여 admin group 사용자 그룹을 생성하려면 다음과 같은 항목을 생성할 수 있습니다.

_g_\:admingroup=group,admin

그런 다음 다음 사용자 항목을 생성하여 admingroupjdoe 사용자를 추가할 수 있습니다.

jdoe=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,_g_:admingroup

2.1.1.8. 저장된 암호 암호화

기본적으로 암호는 InstallDir/etc/users.properties 파일에 일반 텍스트 형식으로 저장됩니다. 이 파일에서 암호를 보호하려면 관리자만 읽을 수 있도록 users.properties 파일의 파일 권한을 설정해야 합니다. 추가 보호를 제공하기 위해 메시지 다이제스트 알고리즘을 사용하여 저장된 암호를 선택적으로 암호화할 수 있습니다.

암호 암호화 기능을 활성화하려면 InstallDir/etc/org.apache.karaf.jaas.cfg 파일을 편집하고 주석에 설명된 대로 암호화 속성을 설정합니다. 예를 들어 다음 설정은 MD5 메시지 다이제스트 알고리즘을 사용하여 기본 암호화를 활성화합니다.

encryption.enabled = true
encryption.name = basic
encryption.prefix = {CRYPT}
encryption.suffix = {CRYPT}
encryption.algorithm = MD5
encryption.encoding = hexadecimal
참고

org.apache.karaf.jaas.cfg 파일의 암호화 설정은 Karaf 컨테이너의 기본 karaf 영역에 적용됩니다. 사용자 지정 영역에는 영향을 미치지 않습니다.

암호 암호화에 대한 자세한 내용은 2.1.10절. “저장된 암호 암호화” 을 참조하십시오.

2.1.1.9. 기본 영역 덮어쓰기

JAAS 영역을 사용자 정의하려는 경우 가장 편리한 방법은 더 높은 순위의 karaf 영역을 정의하여 기본 karaf 영역을 재정의하는 것입니다. 이렇게 하면 모든 Red Hat Fuse 보안 구성 요소가 사용자 지정 영역을 사용하도록 전환됩니다. 사용자 지정 JAAS 영역을 정의하고 배포하는 방법에 대한 자세한 내용은 2.1.2절. “JAAS Cryostats 정의” 을 참조하십시오.

2.1.2. JAAS Cryostats 정의

OSGi 컨테이너에 JAAS 영역을 정의할 때 기존 JAAS 로그인 구성 파일에 정의를 배치할 수 없습니다. 대신 OSGi 컨테이너는 블루프린트 구성 파일에서 JAAS 영역을 정의하는 데 특수 jaas:config 요소를 사용합니다. 이러한 방식으로 정의된 JAAS 영역은 컨테이너에 배포된 모든 애플리케이션 번들에서 사용할 수 있으므로 전체 컨테이너에서 JAAS 보안 인프라를 공유할 수 있습니다.

2.1.2.1. 네임스페이스

jaas:config 요소는 http://karaf.apache.org/xmlns/jaas/v1.0.0 네임스페이스에 정의되어 있습니다. JAAS 영역을 정의할 때 예 2.1. “JAAS 블루프린트 네임스페이스” 에 표시된 행을 포함해야 합니다.

예 2.1. JAAS 블루프린트 네임스페이스

xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0"

2.1.2.2. JAAS 영역 구성

jaas:config 요소의 구문은 예 2.2. “블루프린트 XML에서 JAAS Cryostat 정의” 에 표시됩니다.

예 2.2. 블루프린트 XML에서 JAAS Cryostat 정의

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
           xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0">

    <jaas:config name="JaasRealmName"
                 rank="IntegerRank">
        <jaas:module className="LoginModuleClassName"
                     flags="[required|requisite|sufficient|optional]">
            Property=Value
            ...
        </jaas:module>
        ...
        <!-- Can optionally define multiple modules -->
        ...
    </jaas:config>

</blueprint>

요소는 다음과 같이 사용됩니다.

jaas:config

JAAS 영역을 정의합니다. 다음과 같은 속성이 있습니다.

  • name- JAAS 영역의 이름을 지정합니다.
  • rank- JAAS 영역 간의 이름 지정 충돌을 해결하기 위한 선택적 순위를 지정합니다. 두 개 이상의 JAAS 영역이 동일한 이름으로 등록되면 OSGi 컨테이너는 항상 가장 높은 순위의 realm 인스턴스를 선택합니다. 기본 영역인 karaf 를 재정의하려면 이전에 설치한 모든 karaf 영역을 덮어쓰도록 100 개 이상의 순위를 지정해야 합니다.
JAAS:module

현재 영역에서 JAAS 로그인 모듈을 정의합니다. JAAS:module 에는 다음과 같은 속성이 있습니다.

  • className- JAAS 로그인 모듈의 정규화된 클래스 이름입니다. 지정된 클래스는 번들 클래스 로더에서 사용할 수 있어야 합니다.
  • 플래그- 로그인 작업의 성공 또는 실패 시 발생하는 작업을 결정합니다. 표 2.1. “JAAS 모듈 정의 플래그” 유효한 값을 설명합니다.

    표 2.1. JAAS 모듈 정의 플래그
    현재의설명

    필수 항목

    이 로그인 모듈의 인증이 성공해야 합니다. 성공 또는 실패와 관계없이 항상 이 항목의 다음 로그인 모듈로 이동합니다.

    필수 조건

    이 로그인 모듈의 인증이 성공해야 합니다. 성공하면 다음 로그인 모듈로 진행합니다. 실패하는 경우 나머지 로그인 모듈을 처리하지 않고 즉시 돌아갑니다.

    충분합니다.

    이 로그인 모듈의 인증이 성공하려면 필요하지 않습니다. 성공하면 나머지 로그인 모듈을 처리하지 않고 즉시 돌아갑니다. 실패하는 경우 다음 로그인 모듈로 진행합니다.

    optional

    이 로그인 모듈의 인증이 성공하려면 필요하지 않습니다. 성공 또는 실패와 관계없이 항상 이 항목의 다음 로그인 모듈로 이동합니다.

    jaas:module 요소의 내용은 공백으로 구분된 속성 설정 목록으로, JAAS 로그인 모듈 인스턴스를 초기화하는 데 사용됩니다. 특정 속성은 JAAS 로그인 모듈에 의해 결정되며 적절한 형식으로 입력해야 합니다.

    참고

    영역에 여러 로그인 모듈을 정의할 수 있습니다.

2.1.2.3. 표준 JAAS 로그인 속성을 XML로 변환

Red Hat Fuse는 표준 Java 로그인 구성 파일과 동일한 속성을 사용하지만 Red Hat Fuse를 사용하려면 약간 다르게 지정해야 합니다. 표준 Java 로그인 구성 파일 방식과 비교하여 JAAS 영역을 정의하는 Red Hat Fuse 접근 방식은 예 2.3. “표준 JAAS 속성” 에 표시된 로그인 구성을 변환하는 방법을 고려하십시오. 이 방법은 Red Hat Fuse 속성 로그인 모듈 클래스인 PropertiesLogin Module 을 사용하여 PropertiesLogin 영역을 정의합니다.

예 2.3. 표준 JAAS 속성

PropertiesLogin {
    org.apache.activemq.jaas.PropertiesLoginModule required
        org.apache.activemq.jaas.properties.user="users.properties"
        org.apache.activemq.jaas.properties.group="groups.properties";
};

블루프린트 파일에서 jaas:config 요소를 사용하는 동등한 JAAS 영역 정의는 예 2.4. “블루프린트 JAAS 속성” 에 표시됩니다.

예 2.4. 블루프린트 JAAS 속성

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
  xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0"
  xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0">

  <jaas:config name="PropertiesLogin">
    <jaas:module flags="required"
      className="org.apache.activemq.jaas.PropertiesLoginModule">
        org.apache.activemq.jaas.properties.user=users.properties
        org.apache.activemq.jaas.properties.group=groups.properties
    </jaas:module>
  </jaas:config>

</blueprint>
중요

블루프린트 구성에서는 JAAS 속성에 큰따옴표를 사용하지 마십시오.

2.1.2.4. 예

Red Hat Fuse는 JAAS 인증 데이터를 X.500 서버에 저장할 수 있는 어댑터도 제공합니다. 예 2.5. “JAAS Cryostat 구성” ldap://localhost:10389 에 있는 LDAP 서버에 연결하는 Red Hat Fuse의 LDAPLogin Module 클래스를 사용할 LDAPLogin 영역을 정의합니다.

예 2.5. JAAS Cryostat 구성

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
  xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0"
  xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0">

  <jaas:config name="LDAPLogin" rank="200">
    <jaas:module flags="required"
      className="org.apache.karaf.jaas.modules.ldap.LDAPLoginModule">
        initialContextFactory=com.sun.jndi.ldap.LdapCtxFactory
        connection.username=uid=admin,ou=system
        connection.password=secret
        connection.protocol=
        connection.url = ldap://localhost:10389
        user.base.dn = ou=users,ou=system
        user.filter = (uid=%u)
        user.search.subtree = true
        role.base.dn = ou=users,ou=system
        role.filter = (uid=%u)
        role.name.attribute = ou
        role.search.subtree = true
        authentication = simple
    </jaas:module>
  </jaas:config>
</blueprint>

LDAP 로그인 모듈 사용에 대한 자세한 설명 및 예제는 2.1.7절. “JAAS LDAP 로그인 모듈” 에서 참조하십시오.

2.1.3. JAAS 속성 로그인 모듈

JAAS 속성 로그인 모듈은 사용자 데이터를 플랫 파일 형식으로 저장합니다(저장된 암호는 메시지 다이제스트 알고리즘을 사용하여 선택적으로 암호화할 수 있음). 사용자 데이터는 간단한 텍스트 편집기를 사용하여 직접 편집하거나 jaas:* 콘솔 명령을 사용하여 관리할 수 있습니다.

예를 들어 Karaf 컨테이너는 기본적으로 JAAS 속성 로그인 모듈을 사용하고 관련 사용자 데이터를 InstallDir/etc/users.properties 파일에 저장합니다.

2.1.3.1. 지원되는 인증 정보

JAAS 속성 로그인 모듈은 사용자 이름/암호 자격 증명을 인증하고 인증된 사용자와 연결된 역할 목록을 반환합니다.

2.1.3.2. 구현 클래스

다음 클래스는 JAAS 속성 로그인 모듈을 구현합니다.

org.apache.karaf.jaas.modules.properties.PropertiesLoginModule
JAAS 로그인 모듈을 구현합니다.
org.apache.karaf.jaas.modules.properties.PropertiesBackingEngineFactory
OSGi 서비스로 노출되어야 합니다. 이 서비스를 사용하면 Apache Karaf 쉘에서 jaas:* 콘솔 명령을 사용하여 사용자 데이터를 관리할 수 있습니다( Apache Karaf 콘솔 참조 참조 참조).

2.1.3.3. 옵션

JAAS 속성 로그인 모듈은 다음 옵션을 지원합니다.

사용자
사용자 속성 파일의 위치입니다.

2.1.3.4. 사용자 속성 파일의 형식

사용자 속성 파일은 properties 로그인 모듈에 대한 사용자 이름, 암호 및 역할 데이터를 저장하는 데 사용됩니다. 각 사용자는 사용자 속성 파일에서 한 줄로 표시됩니다. 여기서 한 줄의 형식은 다음과 같습니다.

Username=Password[,UserGroup|Role][,UserGroup|Role]...

사용자 그룹은 이 파일에서도 정의할 수 있습니다. 여기서 각 사용자 그룹은 다음 형식으로 한 줄로 표시됩니다.

_g_\:GroupName=Role1[,Role2]...

예를 들어 다음과 같이 user, bigcheeseguest, 사용자 그룹, admingroupguestgroup 을 정의할 수 있습니다.

# Users
bigcheese=cheesepass,_g_:admingroup
guest=guestpass,_g_:guestgroup

# Groups
_g_\:admingroup=group,admin
_g_\:guestgroup=viewer

2.1.3.5. 샘플 블루프린트 구성

다음 블루프린트 구성은 속성 로그인 모듈을 사용하여 새 karaf 영역을 정의하는 방법을 보여줍니다. 여기서 기본 karaf 영역은 rank 속성을 200 으로 설정하여 재정의됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
  xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0"
  xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
  xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0">

  <type-converters>
    <bean class="org.apache.karaf.jaas.modules.properties.PropertiesConverter"/>
  </type-converters>

<!--Allow usage of System properties, especially the karaf.base property-->
  <ext:property-placeholder
       placeholder-prefix="$[" placeholder-suffix="]"/>

  <jaas:config name="karaf" rank="200">
    <jaas:module flags="required"
className="org.apache.karaf.jaas.modules.properties.PropertiesLoginModule">
        users= $[karaf.base]/etc/users.properties
    </jaas:module>
  </jaas:config>

  <!-- The Backing Engine Factory Service for the PropertiesLoginModule -->
  <service interface="org.apache.karaf.jaas.modules.BackingEngineFactory">
    <bean class="org.apache.karaf.jaas.modules.properties.PropertiesBackingEngineFactory"/>
  </service>

</blueprint>

jaas:* console 명령에서 사용자 데이터를 관리할 수 있도록 BackingEngineFactory 8080을 OSGi 서비스로 내보내야 합니다.

2.1.4. JAAS OSGi Config 로그인 모듈

2.1.4.1. 개요

JAAS OSGi 구성 로그인 모듈은 OSGi Config Admin Service 를 활용하여 사용자 데이터를 저장합니다. 이 로그인 모듈은 JAAS 속성 로그인 모듈(예: 사용자 항목의 구문)과 매우 유사하지만 사용자 데이터를 검색하는 메커니즘은 OSGi Config Admin Service를 기반으로 합니다.

사용자 데이터는 해당 OSGi 구성 파일 etc/PersistentID.cfg 또는 OSGi Config Admin Service에서 지원하는 구성 방법을 사용하여 직접 편집할 수 있습니다. 그러나 jaas:* 콘솔 명령은 지원되지 않습니다.

2.1.4.2. 지원되는 인증 정보

JAAS OSGi 구성 로그인 모듈은 사용자 이름/암호 인증 정보를 인증하고 인증된 사용자와 연결된 역할 목록을 반환합니다.

2.1.4.3. 구현 클래스

다음 클래스는 JAAS OSGi config 로그인 모듈을 구현합니다.

org.apache.karaf.jaas.modules.osgi.OsgiConfigLoginModule
JAAS 로그인 모듈을 구현합니다.
참고

OSGi 구성 로그인 모듈에 대한 백업 엔진 팩토리가 없으므로 이 모듈은 jaas:* 콘솔 명령을 사용하여 관리할 수 없습니다.

2.1.4.4. 옵션

JAAS OSGi 구성 로그인 모듈은 다음 옵션을 지원합니다.

pid
사용자 데이터를 포함하는 OSGi 구성의 영구 ID 입니다. OSGi Config Admin 표준에서 영구 ID는 관련 구성 속성 세트를 참조합니다.

2.1.4.5. 구성 파일의 위치

구성 파일의 위치는 영구 ID의 구성이 다음 파일에 저장되는 일반 규칙을 따릅니다.

InstallDir/etc/PersistentID.cfg

2.1.4.6. 구성 파일의 형식

PersistentID.cfg 구성 파일은 OSGi 구성 로그인 모듈에 대한 사용자 이름, 암호 및 역할 데이터를 저장하는 데 사용됩니다. 각 사용자는 구성 파일의 한 줄로 표시됩니다. 여기서 행은 다음과 같습니다.

Username=Password[,Role][,Role]...
참고

JAAS OSGi 구성 로그인 모듈에서는 사용자 그룹이 지원되지 않습니다.

2.1.4.7. 샘플 블루프린트 구성

다음 블루프린트 구성은 OSGi config 로그인 모듈을 사용하여 새 karaf 영역을 정의하는 방법을 보여줍니다. 여기서 기본 karaf 영역은 rank 속성을 200 으로 설정하여 재정의됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
  xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0"
  xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
  xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0">

  <jaas:config name="karaf" rank="200">
    <jaas:module flags="required"
className="org.apache.karaf.jaas.modules.osgi.OsgiConfigLoginModule">
        pid = org.jboss.example.osgiconfigloginmodule
    </jaas:module>
  </jaas:config>

</blueprint>

이 예에서 사용자 데이터는 InstallDir/etc/org.jboss.example.osgiconfigloginmodule.cfg 에 저장되며 jaas:* 콘솔 명령을 사용하여 구성을 편집할 수 없습니다.

2.1.5. JAAS 공개 키 로그인 모듈

JAAS 공개 키 로그인 모듈은 사용자 데이터를 단순 텍스트 편집기를 사용하여 직접 편집할 수 있는 플랫 파일 형식으로 저장합니다. 그러나 jaas:* 콘솔 명령은 지원되지 않습니다.

예를 들어 Karaf 컨테이너는 기본적으로 JAAS 공개 키 로그인 모듈을 사용하고 관련 사용자 데이터를 InstallDir/etc/keys.properties 파일에 저장합니다.

2.1.5.1. 지원되는 인증 정보

JAAS 공개 키 로그인 모듈은 SSH 키 자격 증명을 인증합니다. 사용자가 로그인을 시도하면 SSH 프로토콜은 저장된 공개 키를 사용하여 사용자에게 챌린지를 수행합니다. 사용자는 챌린지에 응답하기 위해 해당 개인 키를 보유해야 합니다. 로그인에 성공하면 로그인 모듈에서 사용자와 연결된 역할 목록을 반환합니다.

2.1.5.2. 구현 클래스

다음 클래스는 JAAS 공개 키 로그인 모듈을 구현합니다.

org.apache.karaf.jaas.modules.publickey.PublickeyLoginModule
JAAS 로그인 모듈을 구현합니다.
참고

공개 키 로그인 모듈에 대한 백업 엔진 팩토리가 없으므로 이 모듈은 jaas:* 콘솔 명령을 사용하여 관리할 수 없습니다.

2.1.5.3. 옵션

JAAS 공개 키 로그인 모듈은 다음 옵션을 지원합니다.

사용자
공개 키 로그인 모듈에 대한 사용자 속성 파일의 위치입니다.

2.1.5.4. 키 속성 파일의 형식

keys.properties 파일은 공개 키 로그인 모듈에 대한 사용자 이름, 공개 키 및 역할 데이터를 저장하는 데 사용됩니다. 각 사용자는 키 속성 파일에서 한 줄로 표시됩니다. 여기서 한 줄의 양식은 다음과 같습니다.

Username=PublicKey[,UserGroup|Role][,UserGroup|Role]...

여기서 PublicKey 는 SSH 키 쌍의 공개 키 부분입니다(일반적으로 UNIX 시스템의 ~/.ssh/id_rsa.pub 의 사용자 홈 디렉터리에 있음).

예를 들어 admin 역할을 사용하여 사용자 jdoe 를 생성하려면 다음과 같은 항목을 생성합니다.

jdoe=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,admin
중요

id_rsa.pub 파일의 전체 내용을 여기에 삽입하지 마십시오. 공개 키 자체를 나타내는 기호 블록을 삽입합니다.

사용자 그룹은 이 파일에서도 정의할 수 있습니다. 여기서 각 사용자 그룹은 다음 형식으로 한 줄로 표시됩니다.

_g_\:GroupName=Role1[,Role2]...

2.1.5.5. 샘플 블루프린트 구성

다음 블루프린트 구성은 공개 키 로그인 모듈을 사용하여 새 karaf 영역을 정의하는 방법을 보여줍니다. 여기서 기본 karaf 영역은 rank 속성을 200 으로 설정하여 재정의됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
  xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0"
  xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
  xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0">

<!--Allow usage of System properties, especially the karaf.base property-->
  <ext:property-placeholder
       placeholder-prefix="$[" placeholder-suffix="]"/>

  <jaas:config name="karaf" rank="200">
    <jaas:module flags="required"
className="org.apache.karaf.jaas.modules.publickey.PublickeyLoginModule">
        users = $[karaf.base]/etc/keys.properties
    </jaas:module>
  </jaas:config>

</blueprint>

이 예에서 사용자 데이터는 InstallDir/etc/keys.properties 파일에 저장되며 jaas:* 콘솔 명령을 사용하여 구성을 편집할 수 없습니다.

2.1.6. JAAS JDBC 로그인 모듈

2.1.6.1. 개요

JAAS JDBC 로그인 모듈을 사용하면 JDBC(Java Database Connectivity)를 사용하여 데이터베이스에 연결할 수 있는 데이터베이스 백엔드에 사용자 데이터를 저장할 수 있습니다. 따라서 JDBC를 지원하는 데이터베이스를 사용하여 사용자 데이터를 저장할 수 있습니다. 사용자 데이터를 관리하려면 네이티브 데이터베이스 클라이언트 도구 또는 jaas:* 콘솔 명령(지원 엔진에서 구성된 SQL 쿼리를 사용하여 관련 데이터베이스 업데이트를 수행하는 위치)을 사용할 수 있습니다.

인증 및 권한 부여 구성 요소를 모두 제공하는 각 로그인 모듈과 여러 로그인 모듈을 결합할 수 있습니다. 예를 들어 기본 PropertiesLoginModuleJDBCLoginModule 을 결합하여 시스템에 대한 액세스를 보장할 수 있습니다.

참고

사용자 그룹은 JAAS JDBC 로그인 모듈에서는 지원되지 않습니다.

2.1.6.2. 지원되는 인증 정보

JAAS JDBC 로그인 모듈은 사용자 이름/암호 자격 증명을 인증하고 인증된 사용자와 관련된 역할 목록을 반환합니다.

2.1.6.3. 구현 클래스

다음 클래스는 JAAS JDBC 로그인 모듈을 구현합니다.

org.apache.karaf.jaas.modules.jdbc.JDBCLoginModule
JAAS 로그인 모듈을 구현합니다.
org.apache.karaf.jaas.modules.jdbc.JDBCBackingEngineFactory
OSGi 서비스로 노출되어야 합니다. 이 서비스를 사용하면 Apache Karaf 쉘에서 jaas:* 콘솔 명령을 사용하여 사용자 데이터를 관리할 수 있습니다( olink:FMQCommandRef/Consolejaas참조).

2.1.6.4. 옵션

JAAS JDBC 로그인 모듈은 다음 옵션을 지원합니다.

데이터 소스

OSGi 서비스 또는 JNDI 이름으로 지정된 JDBC 데이터 소스입니다. 다음 구문을 사용하여 데이터 소스의 OSGi 서비스를 지정할 수 있습니다.

osgi:ServiceInterfaceName[/ServicePropertiesFilter]

ServiceInterfaceName 은 데이터 소스의 OSGi 서비스(일반적으로 javax.sql.DataSource)에서 내보낸 인터페이스 또는 클래스입니다.

Karaf 컨테이너에서 여러 데이터 소스를 OSGi 서비스로 내보낼 수 있으므로 일반적으로 원하는 특정 데이터 소스를 선택하려면 필터인 ServicePropertiesFilter 를 지정해야 합니다. OSGi 서비스의 필터는 서비스 속성 설정에 적용되며 LDAP 필터 구문에서 빌린 구문을 따릅니다.

query.password
사용자 암호를 검색하는 SQL 쿼리입니다. 쿼리는 런타임에 사용자 이름으로 대체되는 단일 물음표 문자 ? 를 포함할 수 있습니다.
query.role
사용자의 역할을 검색하는 SQL 쿼리입니다. 쿼리는 런타임에 사용자 이름으로 대체되는 단일 물음표 문자 ? 를 포함할 수 있습니다.
insert.user
새 사용자 항목을 만드는 SQL 쿼리입니다. 쿼리에는 두 개의 물음표가 포함될 수 있습니다. ?, 문자는 첫 번째 물음표가 사용자 이름으로 대체되고 두 번째 물음표는 런타임에 암호로 대체됩니다.
insert.role
사용자 항목에 역할을 추가하는 SQL 쿼리입니다. 쿼리는 두 개의 물음표( ? )를 포함할 수 있습니다. 첫 번째 물음표는 사용자 이름으로 대체되고 두 번째 물음표는 런타임 시 역할로 대체됩니다.
delete.user
사용자 항목을 삭제하는 SQL 쿼리입니다. 쿼리는 런타임에 사용자 이름으로 대체되는 단일 물음표 문자 ? 를 포함할 수 있습니다.
delete.role
사용자 항목에서 역할을 삭제하는 SQL 쿼리입니다. 쿼리는 두 개의 물음표( ? )를 포함할 수 있습니다. 첫 번째 물음표는 사용자 이름으로 대체되고 두 번째 물음표는 런타임 시 역할로 대체됩니다.
delete.roles
사용자 항목에서 여러 역할을 삭제하는 SQL 쿼리입니다. 쿼리는 런타임에 사용자 이름으로 대체되는 단일 물음표 문자 ? 를 포함할 수 있습니다.

2.1.6.5. JDBC 로그인 모듈 설정 예

JDBC 로그인 모듈을 설정하려면 다음 주요 단계를 수행합니다.

2.1.6.6. 데이터베이스 테이블 만들기

JDBC 로그인 모듈을 설정하려면 먼저 사용자 데이터를 저장하려면 백업 데이터베이스에 사용자 테이블 및 역할 테이블을 설정해야 합니다. 예를 들어 다음 SQL 명령은 적절한 사용자 테이블 및 역할 테이블을 만드는 방법을 보여줍니다.

CREATE TABLE users (
  username VARCHAR(255) NOT NULL,
  password VARCHAR(255) NOT NULL,
  PRIMARY KEY (username)
);
CREATE TABLE roles (
  username VARCHAR(255) NOT NULL,
  role VARCHAR(255) NOT NULL,
  PRIMARY KEY (username,role)
);

users 테이블은 사용자 이름/암호 데이터를 저장하고 roles 테이블은 사용자 이름을 하나 이상의 역할과 연결합니다.

2.1.6.7. 데이터 소스 생성

JDBC 로그인 모듈에서 JDBC 데이터 소스를 사용하려면 데이터 소스 인스턴스를 생성하고 데이터 소스를 OSGi 서비스로 내보내는 것이 좋습니다. 그런 다음 JDBC 로그인 모듈은 내보낸 OSGi 서비스를 참조하여 데이터 소스에 액세스할 수 있습니다. 예를 들어 MySQL 데이터 소스 인스턴스를 생성하고 블루프린트 파일에서 다음과 같은 코드를 사용하여 OSGi 서비스(Java x.sql.DataSource 유형)로 노출할 수 있습니다.

<blueprint xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
  <bean id="mysqlDatasource"
        class="com.mysql.jdbc.jdbc2.optional.MysqlDataSource">
    <property name="serverName" value="localhost"></property>
    <property name="databaseName" value="DBName"></property>
    <property name="port" value="3306"></property>
    <property name="user" value="DBUser"></property>
    <property name="password" value="DBPassword"></property>
  </bean>

  <service id="mysqlDS" interface="javax.sql.DataSource"
        ref="mysqlDatasource">
    <service-properties>
        <entry key="osgi.jndi.service.name" value="jdbc/karafdb"/>
    </service-properties>
  </service>
</blueprint>

위의 블루프린트 구성은 Karaf 컨테이너에 OSGi 번들로 패키지하고 설치해야 합니다.

2.1.6.8. OSGi 서비스로 데이터 소스 지정

데이터 소스를 인스턴스화하고 OSGi 서비스로 내보낸 후 JDBC 로그인 모듈을 구성할 준비가 된 것입니다. 특히 JDBC 로그인 모듈의 데이터 소스 옵션은 다음 구문을 사용하여 데이터 소스의 OSGi 서비스를 참조할 수 있습니다.

osgi:javax.sql.DataSource/(osgi.jndi.service.name=jdbc/karafdb)

여기서 javax.sql.DataSource 는 내보낸 OSGi 서비스의 인터페이스 유형이며 필터 (osgi.jndi.service.name=jdbc/karafdb). 여기서 osgi.jndi.service.name 서비스 속성에 값이 jdbc/karafdb 인 특정 javax.sql.DataSource 인스턴스를 선택합니다.

예를 들어 다음 블루프린트 구성을 사용하여 샘플 MySQL 데이터 소스를 참조하는 JDBC 로그인 모듈로 karaf 영역을 재정의할 수 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
  xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0"
  xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
  xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0">

<!--Allow usage of System properties, especially the karaf.base property-->
  <ext:property-placeholder
       placeholder-prefix="$[" placeholder-suffix="]"/>

  <jaas:config name="karaf" rank="200">
    <jaas:module flags="required"
      className="org.apache.karaf.jaas.modules.jdbc.JDBCLoginModule">
        datasource = osgi:javax.sql.DataSource/(osgi.jndi.service.name=jdbc/karafdb)
        query.password = SELECT password FROM users WHERE username=?
        query.role = SELECT role FROM roles WHERE username=?
        insert.user = INSERT INTO users VALUES(?,?)
        insert.role = INSERT INTO roles VALUES(?,?)
        delete.user = DELETE FROM users WHERE username=?
        delete.role = DELETE FROM roles WHERE username=? AND role=?
        delete.roles = DELETE FROM roles WHERE username=?
    </jaas:module>
  </jaas:config>

  <!-- The Backing Engine Factory Service for the JDBCLoginModule -->
  <service interface="org.apache.karaf.jaas.modules.BackingEngineFactory">
    <bean class="org.apache.karaf.jaas.modules.jdbc.JDBCBackingEngineFactory"/>
  </service>

</blueprint>
참고

이전 구성에 표시된 SQL 설명은 실제로 이러한 옵션의 기본값입니다. 따라서 이러한 SQL 문과 일치하는 사용자 및 역할 테이블을 생성하는 경우 옵션 설정을 생략하고 기본값을 사용할 수 있습니다.

JDBCLoginModule을 생성하는 것 외에도 이전 블루프린트 구성은 JDBCBackingEngineFactory 인스턴스를 인스턴스화하고 내보냅니다. 이를 통해 jaas:* 콘솔 명령을 사용하여 사용자 데이터를 관리할 수 있습니다.

2.1.7. JAAS LDAP 로그인 모듈

2.1.7.1. 개요

JAAS LDAP 로그인 모듈을 사용하면 사용자 데이터를 LDAP 데이터베이스에 저장할 수 있습니다. 저장된 사용자 데이터를 관리하려면 표준 LDAP 클라이언트 툴을 사용합니다. jaas:* 콘솔 명령은 지원되지 않습니다.

Red Hat Fuse에서 LDAP를 사용하는 방법에 대한 자세한 내용은 LDAP 인증 튜토리얼을 참조하십시오.

참고

사용자 그룹은 JAAS LDAP 로그인 모듈에서는 지원되지 않습니다.

2.1.7.2. 지원되는 인증 정보

JAAS LDAP 로그인 모듈은 사용자 이름/암호 자격 증명을 인증하고 인증된 사용자와 연결된 역할 목록을 반환합니다.

2.1.7.3. 구현 클래스

다음 클래스는 JAAS LDAP 로그인 모듈을 구현합니다.

org.apache.karaf.jaas.modules.ldap.LDAPLoginModule
JAAS 로그인 모듈을 구현합니다. Karaf 컨테이너에 미리 로드되므로 번들을 설치할 필요가 없습니다.
참고

LDAP 로그인 모듈에 대한 백업 엔진 팩토리가 없으므로 이 모듈은 jaas:* 콘솔 명령을 사용하여 관리할 수 없습니다.

2.1.7.4. 옵션

JAAS LDAP 로그인 모듈은 다음 옵션을 지원합니다.

인증

LDAP 서버에 바인딩할 때 사용되는 인증 방법을 지정합니다. 유효한 값은

  • simple- 사용자 이름 및 암호 인증에 바인딩하여 connection.usernameconnection.password 속성을 설정해야 합니다.
  • 아니요, 파키스탄에 묶습니다. 이 경우 connection.usernameconnection.password 속성은 할당되지 않은 상태로 둘 수 있습니다.

    참고

    디렉터리 서버에 대한 연결은 검색 수행에만 사용됩니다. 이 경우 인증된 바인딩보다 빠르기 때문에 익명 바인딩이 선호되는 경우가 많습니다(예: 방화벽 뒤에 배치하여 디렉터리 서버가 충분히 보호되는지 확인해야 합니다).

connection.url

ldap URL, ldap://호스트:포트 를 사용하여 디렉터리 서버의 위치를 지정합니다. 선택적으로 디렉토리 트리에 있는 특정 노드의 DN을 추가한 후 슬래시( / )를 추가하여 이 URL을 지정할 수 있습니다. 연결에 SSL 보안을 활성화하려면 URL에 ldaps: scheme을 지정해야 합니다(예: ldaps://Host:포트 ). 여러 URL을 공백으로 구분된 목록으로 지정할 수도 있습니다. 예를 들면 다음과 같습니다.

connection.url=ldap://10.0.0.153:2389 ldap://10.10.178.20:389
connection.username
디렉터리 서버에 대한 연결을 여는 사용자의 DN을 지정합니다. 예: uid=admin,ou=system. DN에 공백이 포함된 경우 LDAPLoginModule 을 구문 분석할 수 없습니다. 유일한 해결책은 공백을 포함하는 DN 이름 주위에 큰따옴표를 추가한 다음 백슬래시를 추가하여 따옴표를 이스케이프하는 것입니다. 예: uid=admin,ou=\"system index\".
connection.password
connection.username 에서 DN과 일치하는 암호를 지정합니다. 디렉터리 서버에서 암호는 일반적으로 해당 디렉터리 항목에 userPassword 속성으로 저장됩니다.
context.com.sun.jndi.ldap.connect.pool
true 인 경우 LDAP 연결에 대한 연결 풀링을 활성화합니다. 기본값은 false 입니다.
context.com.sun.jndi.ldap.connect.timeout
LDAP 서버에 대한 TCP 연결을 생성하는 시간 제한을 밀리초 단위로 지정합니다. 기본값은 무한이므로 중단된 연결 시도를 초래할 수 있으므로 이 속성을 명시적으로 설정하는 것이 좋습니다.
context.com.sun.jndi.ldap.read.timeout
LDAP 작업의 읽기 제한 시간을 밀리초 단위로 지정합니다. 기본값은 무한이므로 이 속성을 명시적으로 설정하는 것이 좋습니다.We recommend that you set this property explicitly, because the default value is infinite.
context.java.naming.referral

LDAP 추천 은 일부 LDAP 서버에서 지원하는 간접 경로의 한 유형입니다. LDAP 추천은 하나 이상의 URL(일반적으로 다른 LDAP 서버에서 노드 또는 노드 참조)이 포함된 LDAP 서버의 항목입니다. context.java.naming.referral 속성을 사용하여 다음에 추천을 활성화하거나 비활성화할 수 있습니다. 다음 값 중 하나로 설정할 수 있습니다.

  • 추천에 따라 (LDAP 서버에서 지원한다고 가정함)
  • 모든 추천을 자동으로 무시하도록 무시하십시오.
  • 추천이 발생할 때마다 PartialResultExceptionthrow 합니다.
disableCache
이 속성을 true 로 설정하여 사용자 및 역할 캐시를 비활성화할 수 있습니다. 기본값은 false 입니다.
initial.context.factory
LDAP 서버에 연결하는 데 사용되는 컨텍스트 팩토리의 클래스를 지정합니다. 항상 com.sun.jndi.ldap.LdapCtxFactory 로 설정해야 합니다.
role.base.dn
역할 항목을 검색할 DIT의 하위 트리의 DN을 지정합니다. 예를 들어 ou=groups,ou=system.
role.filter

역할을 찾는 데 사용되는 LDAP 검색 필터를 지정합니다. role.base.dn 에서 선택한 하위 트리에 적용됩니다. 예를 들면 (member=uid=%u) 입니다. LDAP 검색 작업에 전달하기 전에 값은 다음과 같이 문자열 대체를 따릅니다.

  • % U는 들어오는 인증 정보에서 추출된 사용자 이름으로 교체되고,
  • %DN 은 LDAP 서버에서 해당 사용자의 RDN으로 교체됩니다( user.filter 필터와 일치하여 검색됨).
  • % FQDN은 LDAP 서버에서 해당 사용자의 DN으로 교체됩니다( user.filter 필터와 일치하여 확인됨).
role.mapping

LDAP 그룹과 JAAS 역할 간의 매핑을 지정합니다. 매핑을 지정하지 않으면 각 LDAP 그룹이 동일한 이름의 해당 JAAS 역할에 매핑되는 기본 매핑입니다. 역할 매핑은 다음 구문으로 지정됩니다.

ldap-group=jaas-role(,jaas-role)*(;ldap-group=jaas-role(,jaas-role)*)*

여기서 각 LDAP 그룹 ldap-group 은 CN(일반 이름)으로 지정됩니다.

예를 들어 LDAP 그룹, admin,devop, tester 가 있는 경우 다음과 같이 JAAS 역할에 매핑할 수 있습니다.

role.mapping=admin=admin;devop=admin,manager;tester=viewer
role.name.attribute
역할/그룹 이름이 포함된 역할 항목의 특성 유형을 지정합니다. 이 옵션을 생략하면 역할 검색 기능이 효과적으로 비활성화됩니다. 예를 들면 cn 입니다.
role.search.subtree
역할 항목 검색 범위에 role.base.dn 에서 선택한 트리의 하위 트리가 포함되어 있는지 여부를 지정합니다. true 인 경우 역할 조회는 재귀(SUBTREE)입니다. false 인 경우 역할 조회는 첫 번째 수준(ONELEVEL)에서만 수행됩니다.
ssl
LDAP 서버에 대한 연결이 SSL을 사용하여 보안되는지 여부를 지정합니다. connection.url 이 이 속성에 관계없이 ldaps:// SSL로 시작하는 경우.
ssl.provider
LDAP 연결에 사용할 SSL 공급자를 지정합니다. 지정하지 않으면 기본 SSL 공급자가 사용됩니다.
ssl.protocol
SSL 연결에 사용할 프로토콜을 지정합니다. SSLv3 프로토콜이 사용되지 않도록 하려면 이 속성을 TLSv1설정해야 합니다(POODLE).
ssl.algorithm
신뢰 저장소 관리자가 사용하는 알고리즘을 지정합니다. 예: PKIX.
ssl.keystore
LDAP 클라이언트의 자체 X.509 인증서를 저장하는 키 저장소의 ID입니다(LDAP 서버에서 SSL 클라이언트 인증이 활성화된 경우에만 필요합니다). 키 저장소는 jaas:keystore 요소를 사용하여 배포해야 합니다( “Apache DS의 설정 예”참조).
ssl.keyalias
LDAP 클라이언트 자체 X.509 인증서의 키 저장소 별칭입니다( ssl.keystore에서 지정한 키 저장소에 두 개 이상의 인증서가 저장되어 있는 경우에만 필요합니다).
ssl.truststore
LDAP 서버의 인증서를 확인하는 데 사용되는 신뢰할 수 있는 CA 인증서를 저장하는 키 저장소의 ID입니다(LDAP 서버의 인증서 체인은 truststore의 인증서 중 하나에서 서명해야 함). 키 저장소는 jaas:keystore 요소를 사용하여 배포해야 합니다.
user.base.dn
사용자 항목을 검색할 DIT의 하위 트리의 DN을 지정합니다. 예를 들어 ou=users,ou=system.
user.filter

사용자 인증 정보를 찾는 데 사용되는 LDAP 검색 필터를 지정합니다. user.base.dn 에서 선택한 하위 트리에 적용됩니다. 예: (uid=%u) LDAP 검색 작업에 전달하기 전에 값은 다음과 같이 문자열 대체를 따릅니다.

  • % U는 들어오는 인증 정보에서 추출된 사용자 이름으로 교체됩니다.
user.search.subtree
사용자 항목 검색 범위에 user.base.dn 에서 선택한 트리의 하위 트리가 포함되어 있는지 여부를 지정합니다. true 인 경우 사용자 조회는 재귀입니다(SUBTREE). false 인 경우 사용자 조회는 첫 번째 수준(ONELEVEL)에서만 수행됩니다.

2.1.7.5. Apache DS의 설정 예

다음 블루프린트 구성은 LDAP 로그인 모듈을 사용하여 새 karaf 영역을 정의하는 방법을 보여줍니다. 여기서 기본 karaf 영역은 rank 속성을 200 으로 설정하여 재정의되고 LDAP 로그인 모듈은 Apache Directory 서버에 연결됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
  xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0"
  xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
  xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0">

  <jaas:config name="karaf" rank="100">

    <jaas:module className="org.apache.karaf.jaas.modules.ldap.LDAPLoginModule" flags="sufficient">
      debug=true

      <!-- LDAP Configuration -->
      initialContextFactory=com.sun.jndi.ldap.LdapCtxFactory
<!--  multiple LDAP servers can be specified as a space separated list of URLs -->
      connection.url=ldap://10.0.0.153:2389 ldap://10.10.178.20:389

<!--  authentication=none -->
      authentication=simple
      connection.username=cn=Directory Manager
      connection.password=directory

      <!-- User Info -->
      user.base.dn=dc=redhat,dc=com
      user.filter=(&amp;(objectClass=InetOrgPerson)(uid=%u))
      user.search.subtree=true

      <!-- Role/Group Info-->
      role.base.dn=dc=redhat,dc=com
      role.name.attribute=cn
<!--
      The 'dc=redhat,dc=com' used in the role.filter
      below is the user.base.dn.
-->
<!--      role.filter=(uniquemember=%dn,dc=redhat,dc=com) -->
      role.filter=(&amp;(objectClass=GroupOfUniqueNames)(UniqueMember=%fqdn))
      role.search.subtree=true

<!-- role mappings - a ';' separated list -->
      role.mapping=JBossAdmin=admin;JBossMonitor=viewer

<!-- LDAP context properties -->
      context.com.sun.jndi.ldap.connect.timeout=5000
      context.com.sun.jndi.ldap.read.timeout=5000

<!-- LDAP connection pooling -->
<!-- http://docs.oracle.com/javase/jndi/tutorial/ldap/connect/pool.html -->
<!-- http://docs.oracle.com/javase/jndi/tutorial/ldap/connect/config.html -->
     context.com.sun.jndi.ldap.connect.pool=true

<!-- How are LDAP referrals handled?

     Can be `follow`, `ignore` or `throw`.  Configuring `follow` may not work on all LDAP servers, `ignore` will
     silently ignore all referrals, while `throw` will throw a partial results exception if there is a referral.
-->
     context.java.naming.referral=ignore

<!-- SSL configuration -->
     ssl=false
     ssl.protocol=SSL
<!-- matches the keystore/truststore configured below -->
     ssl.truststore=ks
     ssl.algorithm=PKIX
<!-- The User and Role caches can be disabled - 6.3.0 179 and later -->
     disableCache=true
    </jaas:module>
  </jaas:config>

  <!-- Location of the SSL truststore/keystore
  <jaas:keystore name="ks" path="file:///${karaf.home}/etc/ldap.truststore" keystorePassword="XXXXXX" />
-->
</blueprint>
참고

SSL을 활성화하려면 connection.url 설정에서 ldaps 스키마를 사용해야 합니다.

중요

2.1.7.6. 다른 디렉터리 서버의 필터 설정

LDAP 로그인 모듈에서 필터 옵션을 설정하는 것과 관련하여 디렉터리 서버 간의 가장 중요한 차이점이 있습니다. 정확한 설정은 궁극적으로 DIT 조직에 의존하지만 다음 표에서는 다른 디렉터리 서버에 필요한 일반적인 역할 필터 설정에 대한 아이디어를 제공합니다.

디렉터리 서버일반적인 필터 설정

389-DS

Red Hat DS

user.filter=(&amp;(objectClass=InetOrgPerson)(uid=%u))
role.filter=(uniquemember=%fqdn)

MS Active Directory

user.filter=(&amp;(objectCategory=person)(samAccountName=%u))
role.filter=(uniquemember=%fqdn)

Apache DS

user.filter=(uid=%u)
role.filter=(member=uid=%u)

OpenLDAP

user.filter=(uid=%u)
role.filter=(member:=uid=%u)
참고

이전 표에서 & amp; 기호(Logical And operator 표시)는 블루프린트 XML 파일에 옵션 설정이 포함되므로 & 로 이스케이프됩니다.

2.1.8. JAAS 로그 감사 로그인 모듈

로그인 모듈 org.apache.karaf.jaas.modules.audit.LogAuditLoginModule 은 강력한 인증 시도를 로깅합니다. 최대 파일 크기, 로그 회전, 파일 압축 및 필터링 설정과 같은 표준 로그 관리 기능을 지원합니다. 로깅 구성 파일에서 이러한 옵션에 대한 설정을 설정합니다.

기본적으로 인증 감사 로깅은 비활성화되어 있습니다. 로깅을 활성화하려면 로깅 구성과 감사 구성을 정의한 다음 둘을 함께 연결해야 합니다. 로깅 구성에서 파일 appender 프로세스 및 로거 프로세스의 속성을 지정합니다. file appender는 인증 이벤트에 대한 정보를 지정된 파일에 게시합니다. 로거는 인증 이벤트에 대한 정보를 캡처하고 사용자가 지정하는 appender에서 사용할 수 있도록 하는 메커니즘입니다. 표준 Karaf Log4j 로깅 구성 파일 etc/org.ops4j.pax.logging.cfg 에 로깅 구성을 정의합니다.

감사 구성을 사용하면 감사 로깅 및 로깅 인프라에 대한 링크를 사용할 수 있습니다. etc/org.apache.karaf.jaas.cfg 에 감사 구성을 정의합니다.

2.1.8.1. appender 구성

기본적으로 표준 Karaf Log4j 구성 파일(etc/org.ops4j.pax.logging.cfg)은 AuditRollingFile 이라는 이름으로 감사 로깅 appender를 정의합니다.

샘플 구성 파일의 다음 발췌 내용은 ${karaf.data}/security/audit.log 에서 감사 로그 파일에 쓰는 appender의 속성을 보여줍니다.

# Audit file appender
log4j2.appender.audit.type = RollingRandomAccessFile
log4j2.appender.audit.name = AuditRollingFile
log4j2.appender.audit.fileName = ${karaf.data}/security/audit.log
log4j2.appender.audit.filePattern = ${karaf.data}/security/audit.log.%i
log4j2.appender.audit.append = true
log4j2.appender.audit.layout.type = PatternLayout
log4j2.appender.audit.layout.pattern = ${log4j2.pattern}
log4j2.appender.audit.policies.type = Policies
log4j2.appender.audit.policies.size.type = SizeBasedTriggeringPolicy
log4j2.appender.audit.policies.size.size = 8MB

appender를 사용하려면 appender가 로그 파일에 게시할 정보를 제공하는 로거를 구성해야 합니다.

2.1.8.2. 로거 구성

기본적으로 Karaf Log4j 구성 파일 etc/org.ops4j.pax.logging.cfgorg.apache.karaf.jaas.modules.audit 라는 이름으로 감사 로거를 설정합니다. 샘플 구성 파일에서 발췌한 다음에서 기본 로거는 인증 이벤트에 대한 정보를 AuditRollingFile 이라는 이름으로 appender에 제공하도록 구성됩니다.

log4j2.logger.audit.name = org.apache.karaf.jaas.modules.audit
log4j2.logger.audit.level = INFO
log4j2.logger.audit.additivity = false
log4j2.logger.audit.appenderRef.AuditRollingFile.ref = AuditRollingFile

etc/org.ops 4j.pax.logging.cfg감사 파일 appender 섹션에 있는 log4j2.audit.ref의 log4j2.appender.audit.name 값과 log4j2.appenderRef.ref의 값이 일치해야 합니다.

2.1.8.1. 인증 감사 로깅 활성화

로깅 구성을 설정한 후 감사 로깅을 켜고 로깅 구성을 감사 구성에 연결할 수 있습니다.

감사 로깅을 활성화하려면 etc/org.apache.karaf.jaas.cfg 에 다음 행을 삽입합니다.

audit.log.enabled = true
audit.log.logger = <logger.name>
audit.log.level = <level>

< logger.name >은 Apache Log4J 및 Log4J2 라이브러리(예: org.jboss.fuse.audit 또는 com.example.audit )에 의해 설정된 표준 로거(category) 이름을 구분한 점 형식으로 나타냅니다. & lt;level>'WARN,INFO,TRACE 또는 DEBUG 와 같은 로그 수준 설정을 나타냅니다.

예를 들어 샘플 감사 구성 파일에서 다음 발췌에서 감사 로그가 활성화되고 이름이 org.apache.karaf.jaas.modules.audit:로 감사 로거를 사용하도록 구성됩니다.

audit.log.enabled = true
audit.log.logger = org.apache.karaf.jaas.modules.audit
audit.log.level = INFO

audit.log.logger 의 값은 Karaf Log4j 구성 파일(etc/org.ops4j.pax.logging.cfg)의 log4j2.logger.audit.name 값과 일치해야 합니다.

파일을 업데이트한 후 Apache Felix File Install 번들에서 변경 사항을 감지하고 Apache Felix 구성 관리 서비스(구성관리자 )에서 구성을업데이트합니다. 그러면 구성 관리자의 설정이 로깅 인프라에 전달됩니다.

2.1.1. 구성 파일을 업데이트하기 위한 Apache Karaf shell 명령

< FUSE_HOME>/etc 에서 구성 파일을 직접 편집하거나 Apache Karaf config:* 명령을 실행하여 구성 관리자를 업데이트할 수 있습니다.

config* 명령을 사용하여 구성을 업데이트하면 Apache Felix File Install 번들에 변경 사항에 대한 알림을 받고 관련 etc/*.cfg 파일을 자동으로 업데이트합니다.

예: config 명령을 사용하여 JAAS 영역의 속성 나열

쉘 프롬프트에서 JAAS 영역의 속성을 나열하려면 다음 명령을 입력합니다.

config:property-list --pid org.apache.karaf.jaas

이 명령은 영역의 현재 속성을 반환합니다. 예를 들면 다음과 같습니다.

   audit.log.enabled = true
   audit.log.level = INFO
   audit.log.logger = org.apache.karaf.jaas.modules.audit
   encryption.algorithm = MD5
   encryption.enabled = false
   encryption.encoding = hexadecimal
   encryption.name =
   encryption.prefix = {CRYPT}
   encryption.suffix = {CRYPT}

예: config 명령을 사용하여 감사 로그 수준 변경

영역의 감사 로그 수준을 DEBUG 로 변경하려면 쉘 프롬프트에서 config:property-set --pid org.apache.karaf.jaas audit.log.level DEBUG명령을 입력합니다.

변경 사항이 유효한지 확인하려면 속성을 다시 나열하여 audit.log.level 값을 확인합니다.

2.1.9. JAAS 파일 감사 로그인 모듈

인증 모듈 org.apache.karaf.jaas.modules.audit.FileAuditLoginModule 은 인증 시도에 대한 기본 로깅을 제공합니다. 파일 감사 로그인 모듈은 지정된 파일에 직접 씁니다. Pax 로깅 인프라에 의존하지 않기 때문에 구성은 간단합니다. 그러나 로그 감사 로그인 모듈과 달리 패턴 필터링, 로그 파일 순환 등과 같은 로그 관리 기능은 지원되지 않습니다.

FileAuditLoginModule 을 사용하여 감사 로깅을 활성화하려면 etc/org.apache.karaf.jaas.cfg:에 다음 행을 삽입합니다.

audit.file.enabled = true
audit.file.file = ${karaf.data}/security/audit.log
참고

일반적으로 파일 감사 로그인 모듈과 로그 감사 로그인 모듈 모두를 통한 감사 로깅을 구성하지 않습니다. 두 모듈을 통한 로깅을 활성화하면 고유한 대상 로그 파일을 사용하도록 각 모듈을 구성하여 데이터 손실을 방지할 수 있습니다.

2.1.10. 저장된 암호 암호화

기본적으로 JAAS 로그인 모듈은 암호를 일반 텍스트 형식으로 저장합니다. 파일 권한을 적절하게 설정하여 이러한 데이터를 보호할 수 있지만 메시지 다이제스트 알고리즘을 사용하여 모호한 형식으로 저장하여 암호에 대한 추가 보호를 제공할 수 있습니다.

Red Hat Fuse는 암호 암호화를 활성화하는 일련의 옵션을 제공합니다. 이 모듈은 JAAS 로그인 모듈과 결합할 수 있습니다(필요하지 않은 공개 키 로그인 모듈 제외).

중요

메시지 다이제스트 알고리즘은 해독하기 어렵지만 공격할 수 없는 것은 아닙니다(예: 암호화 해시 함수에 대한RADIUS 문서를참조하십시오). 항상 파일 권한을 사용하여 암호가 포함된 파일을 보호하고 암호 암호화를 사용합니다.

2.1.10.1. 옵션

선택적으로 다음 로그인 모듈 속성을 설정하여 JAAS 로그인 모듈에 대한 암호 암호화를 활성화할 수 있습니다. 이를 위해 InstallDir/etc/org.apache.karaf.jaas.cfg 파일을 편집하거나 “Jasypt 암호화를 사용하는 로그인 모듈의 예” 에 설명된 대로 자체 블루프린트 파일을 배포합니다.

encryption.enabled
암호 암호화를 활성화하려면 true 로 설정합니다.
encryption.name
OSGi 서비스로 등록된 암호화 서비스의 이름입니다.
encryption.prefix
암호화된 암호의 접두사입니다.
encryption.suffix
암호화된 암호의 접미사입니다.
encryption.algorithm

암호화 알고리즘의 이름을 지정합니다(예: MD5 또는 SHA-1 ). 다음 암호화 알고리즘 중 하나를 지정할 수 있습니다.

  • MD2
  • MD5
  • SHA-1
  • SHA-256
  • SHA-384
  • SHA-512
encryption.encoding
암호화된 암호 인코딩: 16진수 또는 base64.
encryption.providerName (Jasypt만 해당)
다이제스트 알고리즘을 제공할 java.security.Provider 인스턴스의 이름입니다.
encryption.providerClassName (Jasypt only)
다이제스트 알고리즘을 제공하는 보안 공급자의 클래스 이름입니다.
Encryption.iterations (Jasypt만 해당)
해시 함수를 재귀적으로 적용하는 횟수입니다.
encryption.saltSizeBytes (Jasypt만 해당)
다이제스트를 계산하는 데 사용되는 Salt 크기입니다.
encryption.saltGeneratorClassName (Jasypt only)
Salt Generator의 클래스 이름입니다.
role.policy
역할 주체를 식별하는 정책을 지정합니다. 값이 있을 수 있습니다, 접두사 또는 그룹.
role.discriminator
역할 정책에서 사용할 discriminator 값을 지정합니다.

2.1.10.2. 암호화 서비스

Fuse에서 제공하는 두 가지 암호화 서비스가 있습니다.

자체 암호화 서비스를 생성할 수도 있습니다. 이렇게 하려면 다음을 수행해야 합니다.

  • org.apache.karaf.jaas.modules.EncryptionService 인터페이스 구현
  • 구현을 OSGI 서비스로 노출합니다.

다음 목록은 사용자 정의 암호화 서비스를 OSGI 컨테이너에 노출하는 방법을 보여줍니다.

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">

    <service interface="org.apache.karaf.jaas.modules.EncryptionService">
        <service-properties>
            <entry key="name" value="jasypt" />
        </service-properties>
        <bean class="org.apache.karaf.jaas.jasypt.impl.JasyptEncryptionService"/>
    </service>
    ...
</blueprint>

2.1.10.3. 기본 암호화 서비스

기본 암호화 서비스는 기본적으로 Karaf 컨테이너에 설치되고 encryption.name 속성을 값, basic 로 설정하여 참조할 수 있습니다. 기본 암호화 서비스에서 메시지 다이제스트 알고리즘은 SUN 보안 공급자(Oracle JDK의 기본 보안 공급자)에서 제공합니다.

2.1.10.4. Jasypt 암호화

Jasypt 암호화 서비스는 일반적으로 Karaf에 기본적으로 설치됩니다. 필요한 경우 다음과 같이 jasypt-encryption 기능을 설치하여 명시적으로 설치할 수 있습니다.

JBossA-MQ:karaf@root> features:install jasypt-encryption

이 명령은 필수 Jasypt 번들을 설치하고 Jasypt 암호화를 OSGi 서비스로 내보내 JAAS 로그인 모듈에서 사용할 수 있도록 합니다.

Jasypt 암호화에 대한 자세한 내용은 Jasypt 설명서 를 참조하십시오.

2.1.10.5. Jasypt 암호화를 사용하는 로그인 모듈의 예

기본적으로 암호는 etc/users.properties 파일에 명확한 형식으로 저장됩니다. jasypt-encryption 기능을 설치하고 etc/org.apache.karaf.jaas.cfg 구성 파일을 수정하여 암호화를 활성화할 수 있습니다.

  1. 기능 jasypt-encryption 를 설치합니다. 그러면 jasypt 서비스가 설치됩니다.

    karaf@root> features:install jasypt-encryption

    이제 jaas 명령을 사용하여 사용자를 만들 수 있습니다.

  2. $FUSE_HOME/etc/org.apache.karaf.jaas.cfg 파일을 열고 다음과 같이 수정합니다. encryption.enabled = true,encryption.name = jasypt 를 설정하고 이 경우 encryption.algorithm = SHA-256. 다른 encryption.algorithm 옵션을 사용할 수 있으며 요구 사항에 따라 설정할 수 있습니다.

    #
    # Boolean enabling / disabling encrypted passwords
    #
    encryption.enabled = true
    
    #
    # Encryption Service name
    #   the default one is 'basic'
    #   a more powerful one named 'jasypt' is available
    #       when installing the encryption feature
    #
    encryption.name = jasypt
    
    #
    # 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 = SHA-256
  3. Karaf 콘솔에 jaas:realms 명령을 입력하여 배포된 로그인 모듈을 확인합니다.

    karaf@root()> jaas:realms
    
    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
    
    3     │ karaf      │ org.apache.karaf.jaas.modules.audit.FileAuditLoginModule
    
    4     │ karaf      │ org.apache.karaf.jaas.modules.audit.LogAuditLoginModule
    
    5     │ karaf      │ org.apache.karaf.jaas.modules.audit.EventAdminAuditLoginModule
  4. 다음 명령을 입력하여 사용자를 생성합니다.

    karaf@root()> jaas:realm-manage --index 1
    
    karaf@root()> jaas:user-list
    
    User Name │ Group      │ Role
    
    ──────────┼────────────┼──────────────
    
    admin     │ admingroup │ admin
    
    admin     │ admingroup │ manager
    
    admin     │ admingroup │ viewer
    
    admin     │ admingroup │ systembundles
    
    admin     │ admingroup │ ssh
    
    karaf@root()> jaas:useradd usertest test123
    
    karaf@root()> jaas:group-add usertest admingroup
    
    karaf@root()> jaas:update
    
    karaf@root()> jaas:realm-manage --index 1
    
    karaf@root()> jaas:user-list
    
    User Name │ Group      │ Role
    
    ──────────┼────────────┼──────────────
    
    admin     │ admingroup │ admin
    
    admin     │ admingroup │ manager
    
    admin     │ admingroup │ viewer
    
    admin     │ admingroup │ systembundles
    
    admin     │ admingroup │ ssh
    
    usertest  │ admingroup │ admin
    
    usertest  │ admingroup │ manager
    
    usertest  │ admingroup │ viewer
    
    usertest  │ admingroup │ systembundles
    
    usertest  │ admingroup │ ssh
  5. 이제 $FUSE_HOME/etc/users.properties 파일을 보면 usertest 사용자가 파일에 추가되었음을 확인할 수 있습니다.

    admin = {CRYPT}WXX+4PM2G7nT045ly4iS0EANsv9H/VwmStGIb9bcbGhFH5RgMuL0D3H/GVTigpga{CRYPT},_g_:admingroup
    
    _g_\:admingroup = group,admin,manager,viewer,systembundles,ssh
    
    usertest = {CRYPT}33F5E76E5FF97F3D27D790AAA1BEE36057410CCDBDBE2C792239BB2853D17654315354BB8B608AD5{CRYPT},_g_:admingroup
  6. 이미 jaas:update 명령을 실행하므로 다른 터미널에서 새로 생성된 로그인을 테스트할 수 있습니다.

2.1.11. JAAS와 HTTP 기본 인증 통합

Servlet REST를 사용하여 REST DSL을 사용하여 Camel 경로에서 REST 끝점을 정의할 수 있습니다. 다음 예제에서는 HTTP Basic Authentication으로 보호되는 REST 끝점을 Karaf JAAS 서비스에 사용자 인증을 위임하는 방법을 보여줍니다.

프로세스

  1. CamelInstallDir 에 Apache Camel을 설치했다고 가정하면 다음 디렉터리에서 예를 찾을 수 있습니다.

    CamelInstallDir/examples/camel-example-servlet-rest-karaf-jaas
  2. Maven을 사용하여 예제를 OSGi 번들로 빌드하고 설치합니다. 명령 프롬프트를 열고 현재 디렉터리를 CamelInstallDir/examples/camel-example-servlet-rest-karaf-jaas 로 전환한 다음 다음 명령을 입력합니다.

    mvn install
  3. 보안 구성 파일을 KARAF_HOME/etc 폴더에 복사하려면 다음 명령을 입력합니다.

    cp src/main/resources/org.ops4j.pax.web.context-camelrestdsl.cfg $KARAF_HOME/etc
  4. Karaf에 Apache Camel을 설치하려면 Karaf 쉘 콘솔에 다음 명령을 입력합니다.

    feature:repo-add camel ${project.version}
    feature:install camel
  5. 다음 기능을 설치하려면 camel-servlet,camel-jacksonwar Karaf 기능도 필요합니다.

    feature:install camel-servlet
    feature:install camel-jackson
    feature:install war
  6. camel-example-servlet-rest-karaf-jaas 예제를 설치하려면 다음 명령을 입력합니다.

    install -s mvn:org.apache.camel.example/camel-example-servlet-rest-karaf-jaas/${project.version}

결과

애플리케이션이 실행 중인지 확인하려면 다음 명령을 입력하여 애플리케이션 로그 파일을 볼 수 있습니다(로그 후 중지하려면 ctrl+c 사용).

log:tail

REST 사용자 끝점은 다음 작업을 지원합니다.

  • GET /user/{id} - 지정된 ID가 있는 사용자를 보기
  • GET /user/final - 모든 사용자를 볼 수 있습니다
  • PUT /user - 사용자를 업데이트/생성
참고

뷰 작업에서는 HTTP GET 을 사용하고 업데이트 작업을 업데이트하여 HTTP PUT 을 사용합니다.

2.1.11.1. 웹 브라우저에서 REST 서비스에 액세스

웹 브라우저에서 다음 예제를 사용하여 서비스에 액세스할 수 있습니다(연락 대화 상자에서 admin 을 사용자로 입력하고 admin 을 암호로 입력해야 함).

예: 사용자 ID 123

http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/123

예: 모든 사용자 나열

http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/findAll

2.1.11.2. 명령줄에서 REST 서비스에 액세스

명령줄에서 다음 예와 같이 curl 을 사용하여 REST 사용자 엔드포인트에 액세스할 수 있습니다.

예: 사용자 ID 123

curl -X GET -H "Accept: application/json" --basic -u admin:admin http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/123

예: 모든 사용자 보기

curl -X GET -H "Accept: application/json" --basic -u admin:admin http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/findAll

예: 사용자 ID 234 만들기 또는 업데이트

curl -X PUT -d "{ \"id\": 234, \"name\": \"John Smith\"}" -H "Accept: application/json" --basic -u admin:admin http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.