[원본 출처] http://karaf.apache.org/manual/latest-2.3.x/users-guide/security.html 




Security (보안)

Managing authentication by users and passwords (사용자와 비밀번호로 인증 관리하기)

The default security configuration uses a property file located at etc/users.properties to store authorized users and their passwords.
기본 보안 환경 구성은 인증된 사용자와 그들의 비밀번호를 저장하기 etc/users.properties 에 위치한 프로퍼티 파일을 사용한다.

The default user name is karaf and the associated password is karaf too. We strongly encourage you to change the default password by editing the above file before moving Karaf into production.
기본 사용자 이름은 karaf 이고 관련된 비밀번호도 karaf 이다.  우리는 제품에 Karaf를 옮기기 전에 위 파일을 편집하여 강력히 당신이 기본 비밀번호를 변경 할 것을 장려한다. 

The users are currently used in three different places in Karaf:
Karaf 에서 사용자들은 현재 3가지 다른 곳에서 사용된다. 

  • access to the SSH console (SSH 콘솔로 접근)
  • access to the JMX management layer (JMX 관리 레이어로 접근)
  • access to the Web console (웹 콘솔로 접근)

    Those three ways all delegate to the same JAAS based security authentication.
    그 3가지 방법 모두는 깉은 JAAS 기반 보안 인증에 위임한다.

    The users.properties file contains one or more lines, each line defining a user, its password and the associated roles.
    users.properties 파일은 사용자와 그의 패스워드와 관련된 권한을 정의하는 각각의 라인을 하나 또는 그 이상의 줄을  포함한다.

    user=password[,role][,role]...
    

Managing authentication by key (키에 의한 인증 관리)

For the SSH layer, Karaf supports the authentication by key, allowing to login without providing the password.
SSH 레이어를 위해서 Karaf는 key에 의한 인증을 지원하고,  비밀번호를 제공하는 것 없이 로그인을 허용한다.

The SSH client (so bin/client provided by Karaf itself, or any ssh client like OpenSSH) uses a public/private keys pair that
will identify himself on Karaf SSHD (server side).
SSH 클라이언트는 (서버에서) Karaf SSHD에 그 자신을 식별하게 될 키로 공용키/개인키 쌍을 사용한다. (그래서 bin/client Karaf 자체또는 OpenSSH 같은 어떤 ssh 클라이언트로 제공된다. : 키 생성을 위해 자체나 OepnSSH 를 사용하여 생성함) 

The keys allowed to connect are stored in etc/keys.properties file, following the format:
접속하기 위해 허용된 이 키들은 etc/keys.properties 파일에 저장된다. 형식은 다음과 같다.

user=key,role

By default, Karaf allows a key for the karaf user:
기본적으로 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

For security reason, this key is disabled. We encourage to create the keys pair per client and update the etc/keys.properties file.
보안을 이유로, 이 키는 비활성화 되었다. 우리는 이 키 쌍을 클라이언트 당 키 쌍을 생성하고 etc/keys.properties 파일을 변경 할 것을 장려한다.

The easiest way to create key pair is to use OpenSSH.
키 쌍을 가장 쉬운 방법은 OpenSSH 를 사용하는 것 이다.

You can create a key pair using:
당신은 다음을 사용하여 키 쌍을 생성할 수 있다.

ssh-keygen -t dsa -f karaf.id_dsa -N karaf

You have now the public and private keys:
당신은 지금 공개키와 개인키를 가졌다.

-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

You can copy in the content of the karaf.id_dsa.pub file in the etc/keys.properties:
당신 또 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

and specify to the client to use the karaf.id_dsa private key:
그리고 클라이언트가 karaf.id_dsa 개인키를 사용하게 하기 위해 기술한다.

bin/client -k ~/karaf.id_dsa

or to ssh ssh 에서

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

Managing roles (역할 관리하기)

JAAS roles can be used by various components. The three management layers (SSH, JMX and WebConsole) all use a global role based authorization system. The default role name is configured in the etc/system.properties using the karaf.admin.role system property and the default value is admin. All users authenticating for the management layer must have this role defined.
JAAS 역할 은 다양한 컴포넌트에 의해서 사용될 수 있다. 이 3가지 레이어(SSH, JMX, 그리고 WebConsole) 모두 글로벌 역할 기반 인증시스템을 사용한다. 기본 역할 이름은 karaf.admin.role 시스템 프로퍼티를 사용하여 etc/system.properties 에 환경 구성되어 있고 디폴트 값은 admin 이다. 모든 관리 레이어를 위해 인증된 사용자들은 반드시 정의된 역할을 가져야 한다. 

The syntax for this value is the following:이 값에 대한 구문은 다음이다.

[classname:]principal

where classname is the class name of the principal object (defaults to org.apache.karaf.jaas.modules.RolePrincipal) and principal is the name of the principal of that class (defaults to admin).
그곳 classname 은 본래 오프젝트의 클래스 이름이다  ( 기본은 org.apache.karaf.jaas.modules.RolePrincipal ) 그리고 principal 은 그 클래스의 본래의 이름이다.

Note that roles can be changed for a given layer using ConfigAdmin in the following configurations:
다음 구성에서 역할은 ConfigAdmin을 사용하여 주어진 레이어를 변경 할수 있다는 점을 적어둔다.

LayerPIDValue
SSHorg.apache.karaf.shellsshRole
JMXorg.apache.karaf.managementjmxRole
Weborg.apache.karaf.webconsolerole

Enabling password encryption (비밀번호 암호화 활성화하기)

In order to not keep the passwords in plain text, the passwords can be stored encrypted in the configuration file.
This can be easily enabled using the following commands:
평문의 비밀번호를 유지하지 않기 위해 환경 구성 파일에서 비밀번호는 암호화된채로 저장 될수 있다. 다음 명령어를 사용하여 쉽게 활성화 할 수 있다.

# edit config
config:edit org.apache.karaf.jaas
config:propset encryption.enabled true
config:update 
# force a restart
dev:restart

The passwords will be encrypted automatically in the etc/users.properties configuration file the first time the user logs in.
Encrypted passwords are prepended with {CRYPT} so that are easy to recognize.
비밀번호는 etc/users.properties  환경구성 파일에 사용자가 로그인 하는 첫 시점에 자동으로 암호화될 것이다. 암호화된 비밀번호는 {CRYPT} 로 앞에 추가되고 그래서 쉽게 인식할 수 있다.

Managing realms (영역 관리 하기)

More information about modifying the default realm or deploying new realms is provided in the developers guide.
developers guide 에 기본영역을 변경 하는 것과 새 영역을 배포하는 것에 대한 더 많은 정보가 제공되고 있다.

Deploying security providers (보안 프로바이더 배포하기)

Some applications require specific security providers to be available, such as BouncyCastle. The JVM impose some restrictions about the use of such jars: they have to be signed and be available on the boot classpath. One way to deploy those providers is to put them in the JRE folder at $JAVA_HOME/jre/lib/ext and modify the security policy configuration ($JAVA_HOME/jre/lib/security/java.security) in order to register such providers.
몇몇 어플리케이션들은 BouncyCastle 같은 사용가능한 보안 제공자의 명세를 필요로 한다. JVM은 몇몇 그런 jar들을 사용하는것에 대한 제한들을 강요한다. 그것들은 부트 클래스 패스에서 서명되어있어야 하고 사용 가능해야 한다. 그 프로바이더를 등록하기 위해 그 프로바이더를 배포하는 하나의 방법은 JRE folder at $JAVA_HOME/jre/lib/ext 에 그것들을 넣는 것과 보안 정첵 환경 구성 파일($JAVA_HOME/jre/lib/security/java.security)을 변경 하는 것이다. 

While this approach works fine, it has a global effect and requires you to configure all your servers accordingly.
이 접근이 잘 되는 동안 그것은 광범위한 효과를 가지고  당신 서버에 다라 모든 환경 구성을 하는 것을 필요로 한다.

Karaf offers a simple way to configure additional security providers:
Karaf 는 추가적인 보안 프로바이더를 환경구성하는 단순한 방법 제공한다. 

  • put your provider jar in lib/ext lib/ext폴더에 당신의 프로바이더 jar를 넣어라.
  • modify the etc/config.properties configuration file to add the following property 
    다음 프로퍼티를 추가 하기 위해 etc/config.properties 환경구성 파일을 변경하라
org.apache.karaf.security.providers = xxx,yyy

The value of this property is a comma separated list of the provider class names to register.
For example:
이 프로퍼티의 값은 등록하기 위해 콤마로 구분된 프로바이더 클래스의 이름들의 리스트이다.

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

In addition, you may want to provide access to the classes from those providers from the system bundle so that all bundles can access those. It can be done by modifying the org.osgi.framework.bootdelegation property in the same configuration file:
게다가 당신은 시스템 번들로 부터 그들 프로바이더로 부터 그 클래스에 접속할수 있게 제공되기를 원할 지 모른다. 그래서 모든 번들은 그것들에 접속 할 수 있다.  같은 환경구성 파일에서 org.osgi.framework.bootdelegation 프로퍼티를 변경 하는 것에 의해 될수 있다. 

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


+ Recent posts