'Cloud Service/Kerberos'에 해당되는 글 3건

  1. 2016.05.10 Hadoop과 Kerberos 3
  2. 2016.05.09 CentOS6.6환경 Kerberos 설치 및 HDFS 연동 1
  3. 2016.05.09 Kerberos란?



전체적인 하둡 커버로스 동작의 주요 단계는 다음과 같다.

- 모든 하둡 서비스는 KDC에 자신을 인증하고, 데이터노드를 네임노드에 등록한다. 이와 유사하게 태스크트래커도 잡트래커에 자신을 등록하고 노드매니저는 리소스 매니저에 등록한다?

- 클라이언트는 KDC에 인증한다. 클라이언트는 네임노드와 잡 트래커/리소스 매니저에 대한 서비스 티켓을 요청한다.

- HDFS내의 파일 접근을 위해 클라이언트는 네임노드 서버에 접속하고 파일을 요청한다. 네임 노드서버에 접속하고 파일을 요청한다. 네임노드는 클라이언트를 인증한 후, 블록 접근 토큰으로 클라이언트에게 인증정보를 제공한다. 데이터노드는 사용자에게블록 접근 토큰을 요청해서 클라이언트의 권한을 확인하고 요청한 블록에 대한 접근을 제공한다.

- 하둡 클러스터에 맵리듀스 잡을 제출하기전에, 잡 트래커는 클라이언트에게 위임 토큰을 요청한다. 이 위임 토큰은 클러스터에 맵리듀스잡을 제출할 때 이용된다. 잡트래커는 긴 시간 수행되는 잡을 위해 위임 토큰을 갱신한다.



'Cloud Service > Kerberos' 카테고리의 다른 글

CentOS6.6환경 Kerberos 설치 및 HDFS 연동  (1) 2016.05.09
Kerberos란?  (0) 2016.05.09
Posted by MIDDLE
,

리눅스는 쥐뿔도 모르지만.. Kerberos 설치를 시도해보겠습니다.


http://web.mit.edu/Kerberos/krb5-latest/doc/admin/install_kdc.html

CentOS 6에 MIT에서 docu로 제공되는 installation guide를 따라 설치를 진행해보겠습니다.


시작부터 Master KDC와 Slave KDCs를 가져야 된다고 하는데 저는 

Master KDC용 VM 하나와 Slave KDC용 VM 하나를 이용하여 제작하겠습니다.


주의 사항 

1. Kerberos system은 시간정보에 의존적이기 때문에 정확한 시간 정보가 필요하다. 

즉 Master와 Slave의 시간은 동기화가 되어져야 한다.


2. 설치및 액세스 보안을 KDC를 통하여 실행하는 것이 좋습니다. KDC는 파일서버, FTP서버, 웹서버 클라이언트, Kerberos 데이터베이스에 액세스할 수 있는 지역에 보안을 설정 할 수 있습니다.


3. Kerberos는 네임노드및 모든 데이터 노드에도 설치가 되어야 한다.

Master KDC 설치 및 설정

Kerberos 설치는 OS에 맞춰 제공되어지는 패키지를 통해 설치하여야 한다.


Kerberos 설치는 다음과 같은 과정으로 진행한다.

 - 보안된 하둡 클러스터 설치를 위한 선행조건

 - 커버로스 설치

 - 커버로스 인증을 위한 하둡 설정

 - 다중 영역 환경에서 사용자 설정



(1) 선행조건

다음은 보안된 하둡 클러스터를 설치하기 위한 선행 조건이다.

 - 클러스터를 설치하는 사용자에게 Root나 sudo접근권한 필요하다. (계정이 root라...)

 - 하둡 클러스터가 설정되어있고, 비 안전모드로 수행되고 있다. (기본 설정이 none secure)

 - 적절한 파일 권한이 로컬과 하둡 시스템 디렉토리에 할당 되어 있다. (이것도 Hadoop 실행계정이 root라..)

 - 만약을 위해 소스 코드로 부터 Kerberos를 빌드한다. 커버로스 소스코드를 컴파일 하려면 GCC 컴파일러가 필요하다. RHEL/CentOS에서는 yum groupinstall 'Development Tools' 명령어를 실행해서 필요한 모든 패키지를 설치한다.

 - 클러스터에 있는 모든 머신에서 DNS검색과 호스트 맵핑이 작동하고 있다. 커버로스는 IP로는 동작하지 않는다. 모든 노드에서 역 DNS검색이 되어 전체 주소 호스트명을 리턴해야 한다.

 - 커버로스가 사용하는 포트는 KDC를 위한 88번 포트와 관리서버를 위한 749번 포트다. 모든 노드가 KDC에 연결해서 인증하므로 88번 포트는 하둡 데몬을을 구성하는 클러스터의 모든 노드에게 열려야 한다.

      ☆ Port 설정 잘못해서.. 3일동안 시간만 버렸다. 주의 필요 

 - 하둡 클러스터 인증에 쓰일 커버로스 영역명이 있어야 한다.


(2) Kerberos Build 

a. Kerberos 설치를 위한 Source 를 받아보자.

다운로드 : http://web.mit.edu/kerberos/dist/index.html

빌드 가이드 : http://web.mit.edu/Kerberos/krb5-latest/doc/build/index.html

다운로드 페이지에서 Kerberos를 받은뒤 빌드가이드에서 지시하는데로 따라 설치하면 된다.

본인은 /root 에서

wget http://web.mit.edu/kerberos/dist/krb5/1.14/krb5-1.14.2.tar.gz

tar xvzf krb5-1.14.2.tar.gz

/root/krb5-1.14.2

b. 소스 디렉토리 설명

appl : Kerberos app Client와 server programs 있는곳

ccapi : 자격증명 cache services

clients : Kerberos V5 user Programs (User Commands 모아놓은곳 )

 - http://web.mit.edu/Kerberos/krb5-latest/doc/user/user_commands/index.html#user-commands

config : scripts 설정

config-files : Kerberos 설정 sample files

include : kerberos system build에 필요한 파일 넣는곳

kadmin : Kerberos master database에 접근하기 위한 인터페이스

kdc : Kerberos 인증 서비스와 키 배포 센터

lib : Kerberos Lib 모음

plugins : Kerberos Plugins directory

po : Localization Infrastructure

prototype: Template과 MIT copyright Message 수록

slave : slave KDC database에 propagating 하기 위한 유틸(kprop, kpropd)수록 (Forward propagation, back propagation 이런걸 의미하는 건가..)

tests : Test Suite

util :  building 하거나, 설정하기위한 다양한 유틸 코드 수록

windows : Windows에서 Kerberos를 Build하기위한 소스 수록


c. Build 해보자. ( 설치과정 a만 하고 올것 a설치 않하고 올경우 정상적인 빌드가 되지않는다.)

Using Autoconf (If you are not a developer, You can skip this section) 음... 지나가도 될까요.

Kerberos V5 source directory에서는 설정 script를 자동적으로 설정해주는 과정이 존재한다. 

이 설정 script는 autoconf 을 이용하여 생성 가능하다. 이미 설치 되어있으면.


사용자라면 autoconf를 할 필요가 없다. 이미 설정 script는 먼저 빌드가 되어있을것이다.

이 명령어는 반드시 source 디렉토리 최상위에서 실행 되어져야 한다.

ex) cd /root/krb5-1.14.2/src

     ./util/reconf --force

그리고 source package를 build해야 한다. 

ex) make all

     make install DESTDIR=somewhere-else

하면 빌드가 완성 된다~?

않되는데... (make *** no rule to make target all'. stop. ) 이러한 에러 발생 검색해보니


Build within a single tree

Kerberos build를 하나의 플랫폼에서 구성하고자 하면 이 명령으로 진행하면 된다. 

그러나 Kerberos를 통해 많은 숫자의 플랫폼을 구성하려 한다면 이 명령어는 적합하지 않다.

separate build trees for each platform 을 이용하여 진행해라.

ex)  cd /root/krb5-1.14.2/src

./configure

     make

끝이다..

ps) make check를 통해 make된걸 검사해보았다. 그랬더니  이전에 내가 지정한 hostname kdc.cw.com 이게 not known error가 발생 되어졌다.

vi /etc/hosts

127.0.0.1 에 kdc.cw.com 을 추가하니 문제는 해결되었다.


재 빌드 하고싶을경우

make clean 

make distclean 

이용하여 clean 한후 빌드 하자.


(3) Kerberos 설치

빌드되어진 package를 이용하여 설치를 진행해보자.

kdc.cw.com - master KDC

kclient.cw.com - slave KDC

CW.COM - realm name

.k5 hsa.cw.com - stash file

admin/admin - admin principal

a. build 과정 이전에 Key Distributed center를 설치 해야 한다.

RHEL/ CentOS

 : yum install krb5-server krb5-libs krb5-workstation

Ubuntu

 : sudo apt-get install krb5-kdc krb5-admin-server

명령을 이용하여 설치를 진행하면 된다.


b. Build 과정 진행


c. KDC 설치가 완료 되어지면 다음 단계는 적절한 KDC 환경설정을 진행해야한다. 

Build에서도 보시다시피 Master Slaves 관계를 맺을수 있지만, 

지금은 Master 단독 Node 관계로 진행하겠다.

vi /etc/krb5.conf

[libdefaults]

    default_realm = CW.COM

    dns_lookup_realm = false

    dns_lookup_kdc = false

    ticket_lifetime = 24h

    forwardable = true

    udp_preference_limit = 1000000

    default_tkt_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1

    default_tgs_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1

    permitted_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1


[kdc]

 profile = /var/kerberos/krb5kdc/kdc.conf


[realms]

    CW.COM = {

        kdc = kdc.cw.com:88

        admin_server = kdc.cw.com:749

        default_domain = cw.com

    }


[domain_realm]

   .cw.com = CW.COM

    cw.com = CW.COM


[logging]

    kdc = FILE:/var/log/krb5kdc.log

    admin_server = FILE:/var/log/kadmin.log

    default = FILE:/var/log/krb5lib.log


위와같이 처리 진행하여야 한다.

vi /var/kerberos/krb5kdc/kdc.conf
default_realm = CW.COM

[kdcdefaults]
    v4_mode = nopreauth
    kdc_ports = 88

[realms]
    CW.COM = {
        kdc_ports = 88
        kadmind_port = 749
        admin_keytab =  /var/kerberos/krb5kdc/kadm5.keytab
        database_name = /var/kerberos/krb5kdc/principal
        acl_file = /var/kerberos/krb5kdc/kadm5.acl
        key_stash_file = /var/kerberos/krb5kdc/stash
        max_life = 10h 0m 0s
        max_renewable_life = 7d 0h 0m 0s
        master_key_type = des3-hmac-sha1
        supported_enctypes = arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3
        default_principal_flags = +preauth
    }


와 같이 설정한뒤
KDC는 KDC데이터베이스내에 각 사용자의 자격증명을 저장한다. 데이터베이스는 파일일 수도 LDAP 저장소 일수도 있다. 파일 기반 KDC 데이터베이스를 설정하려면 영역명을 이용해서 다음과 같은 명령을 실행한다.
root@kdc ~#kdb5_util create -r CW.COM -s
실행한다. (CPU에따라 다르지만 엄청 걸린다. 인내심을 가지고 기다리자. 제경우는 30분)


이제 kdc Server를 실행 시켜보자.
/etc/init.d/krb5kdc start

netstat -au | grep k
udp        0      0 *:kerberos                  *:*
udp        0      0 fe80::5054:ff:fe7e::kerberos *:*
위와같은 상태를 확인 가능하다.

d. 최초 커버로스 관리자 설치 
마스터 KDC 서버에서 kadmin.local 명령어로 KDC 데이터베이스 내 Principal의 패스워드를 설정한다. 관리자 pricipal을 설치하고 관리자 principal 패스워드를 제공하려면 다음 명령어를 실행한다.

kadmin.local -p admin/admin

kinit 명령어는 사용자를 인증하기 위해 사용한다. KDC가 사용자를 인증 할 수 있도록 kinit를 써서 관리자 인증을 확인할 수 있다.
kinit admin@CW.COM

e. 사용자 또는 서비스 Principal 추가
관리 사용자 설치가 끝나고 커버로스 데몬이 구동되면, kadmin 유틸리티를 사용해 커버로스 데이터베이스에 Principal을 추가할 수 있다.
add_principal -randkey user/mydomain.com@CW.COM


f. Hadoop과 Kerberos
이제부터 본격적으로 Hadoop과 Kerberos를 연동하기 위한 설정을 진행해보자.

하둡 커버로스 인증 설정 단계

(1) HDFS, 맵리듀스, YARN Principal 생성


(2) HDFS, 맵리듀스, Yarn Keytab 생성


(3) 모든 슬레이브로 키탭 복사


(4) 키탭 파일을 위한 적절한 권한 설정


(5) 하둡 환경설정 업데이트


(6) 보안된 데이터노드와 테스크 트래커 설정


g.모든 하둡 노드에 Kerberos Client 설치

yum install krb5-libs krb5-workstation

위의 명령어를 각 하둡 노드 (마스터노드, 슬레이브 노드)에 커버로스 클라이언트를 설치하여야 한다.


h. 하둡 서비스 Principal 설치
하둡 데몬 실행에 이용되는 세 사용자 hdfs, mapred, yarn가 있다. 네임노드와 데이터 노드 그리고 세컨더리 네임노드와 같은 모든 하둡 분산 파일시스템 관련 데몬은 hdfs사용자에 의해 수행된다. 이와 달리 MRV2에서는 mapred사용자가 JobHistory Server 와 Mapreduce Application 실행하고, yarn 사용자가 resource manager와 nodemanager를 실행한다.

Hadoop 데몬의 커버로스 인증이 가능하려면 KDC안에 hdfs, mapred, yarn 프린시플을 생성 해야한다.
이 서비스들은 모두 http를 이용하므로 http 서비스 principal도 생성 해야 한다.
Principal 생성을 위해 kadmin 을 이용한다.
근데......
kadmin 치니
Authenticating as principal root/admin@MYREALM.COM with password.
kadmin: Client not found in Kerberos database while initializing kadmin interface
이러한 에러가 발생한다. 
이 에러의 발생 이유는 
kadmin.local 에서 root/admin@MYREALM.COM가 등록 되어있지 않기 때문에 발생 되는 문제였습니다.
[root@kdc ~]# kadmin.local
Authenticating as principal root/admin@CW.COM with password.
kadmin.local:  add_principal root/admin@CW.COM
WARNING: no policy specified for root/admin@CW.COM; defaulting to no policy
Enter password for principal "root/admin@CW.COM":
Re-enter password for principal "root/admin@CW.COM":
Principal "root/admin@CW.COM" created.

등록하게 되면 이후 부터 kadmin에 접근이 가능해진다.

i. 하둡 KeyTab 파일 생성
kadmin
kadmin: xst -k hdfs-unmerged.keytab hadoop/cw.com@CW.COM 
을 이용하여 hadoop 생성

ktutil
ktutil:  rkt hdfs-unmerged.keytab
ktutil:  wkt hdfs.keytab
ktutil:  clear
을 통하여 keytab 적용
klist -e -k -t hdfs.keytab
만들어진 Keytab 확인 가능하다.

j. SSH 를 Kerberos를 통하여 제어를 해보자.
문서를 참조 하였다.
문서의 순서대로 따라 오게 된다면 
keytab까지는 등록이 완료된 상태가 되어진다.
하지만!!!!!!! Keytab으로 등록하게 된다면 random key로 생성이 되어지기 때문에 
kinit host/kdc.cw.com@CW.COM
password 입력 : 
하게 될 경우 incorrect라는 말만 계속해서 볼 수 있다.
이 경우 해결 방안은 2가지가 있다.
(1) Keytab을 이용하여 인증을 받느냐.

Without Keytab하여 Random key가 아닌 사용자 지정 비밀번호를 이용하여 
(2) kinit host/kdc.cw.com@CW.COM
password 입력 : ******
인증하는가.
선택하여 진행하면된다.


----------------------------------- SSH 까지는 연결 완료 ----------------------------------------------

k. Hadoop과 Kerberos와의 연동을 진행 해보자.

'Cloud Service > Kerberos' 카테고리의 다른 글

Hadoop과 Kerberos  (3) 2016.05.10
Kerberos란?  (0) 2016.05.09
Posted by MIDDLE
,

1. Kerberos 란??

kerberos는 네트워크 인증 protocol이다.

네트워크 보안에서 Username과 password를 계속해서 보낸다는 것은 매번 password를 가로챌 수 있는 기회를 제공하는 것과 동일하다. 그리하여 Kerberos에서는 이러한 Username과 password의 전송을 최소화로 만들도록 지원한다.


2. Kerberos와 Firewalls의 차이 

기존의 보안체계인 Firewalls과 같은 경우는 위험성이 외부에서만 접근할 것이라는 추측을 토대로 제작되어졌다. 하지만 공격의 빈도는 내부에서 더많이 이뤄진다는것을 알 수 있었다.


3. Kerberos의 아키텍쳐


그림 출처 : http://www.slideshare.net/BibekNam/kerberos-authentication-protocol

(1) Kerberos 구성요소 

3가지 Components로 구성되어 있다.

 - Client

 - Authentication Server or Key Distribution Serber (KDC)

 - Server

3가지 주요 활동이 있다.

 - Authentication Service (AS) Exchange

 - Ticket Grating Service (TGS) Exchange

 - Client Server (CS) Exchange


(2) AS Exchange

 a. Client와 Authentication Server(KDC) 간의 교환

 b. Client는 KDC에게 KRB_AS_REQ msg를 통해 인증 생성을 요청한다.

 c. KDC는 Client에게 KRB_AS_REQ에 대한 응답으로 ticket에 Session Key를 넣어 응답해준다.

 d. Session Key는 사용자 비밀번호를 이용하여 암호화 된다.

 e. ticket(Ticket Granting Ticket)은 서버의 비밀키를 이용하여 암호화 한다.


(3) TGS Exchange (TGS는 서버로 연결하기 위한 Service Ticket을 얻는 과정)

 a. Client는 TGT를 인정서버로 보내 Server에 접속하기 위한 Service Ticket을 요청한다.

 b. KDC에서는 Server에 접속하기 위한 Service Ticket을 첨부하여 답변해준다.


(4) CS Exchange (Service Ticket을 통하여 Server로 접속하는 과정)

 a. Client는 Service Ticket을 Server로 전송하여 인증을 요청한다.

 b. Server는 Client ticket의 비밀번호와 session key를 복호화하여 Client를 검증한다

 c. 인증 절차가 성공일 경우  Client와 Server가 연결 되어진다.


4. Kerberos 기반 원격 응용프로그램

 - ftp

 - rcp

 - rlogin

 - rsh

 - ssh 

 - telnet


5. Kerberos 주체

kerberos 서비스의 클라이언트는 주체로 식별된다. 주체는 KDC가 티켓을 지정할 수 있는 고유 ID이다. 주체는 사용자 또는 서비스일 수 있다.

주체 이름은 기본요소, 인스턴스, 영역이라는 세가지 구성요소로 구분된다. 예를 들어 Kerberos주체는 foo/admin@ENG.EXAMPLE.COM이다. 위 예에서 각 요소의 역할은 다음과 같다.

 - foo는 기본요소. 기본요소는 사용자 이름 또는 서비스(예 : nfs)일 수 있다. 기본요소는 host라는 단어일 수 도 있다. 단어의 주체는 다양한 네트워크 서비스 ftp, rcp, rlogin등을 제공하도록 설정된 서비스 주체임을 의미한다.

- admin은 인스턴스. 인스턴스는 사용자 주체의 경우 선택적이지만, 서비스 주체의 경우에는 필수이다. 예를 들어 사용자 foo가 가끔 시스템 관리자 역할을 수행하는 경우 foo/admin을 사용하여 자신과 자신의 일반적인 사용자 ID를 구별할 수 있다. 즉 Kerberos는 foo와 foo/admin을 다른 두 주체로 취급한다.


6. Kerberos 영역

영역은 도메인과 유사한 논리적 그룹. 동일한 마스터 KDC아래에 있는 시스템 그룹을 정의한다. 일부 영역은 계층형으로, 한 영역이 다른 영역의 수퍼 세트이다. 또 다른 영역은 비계층형으로, 두영역간의 매핑을 정의해야 한다. Kerberos서비스의 특징은 영역간 인증을 허용한다는 점이다. 이 Kerberos 기능을 영역간 인증이라고 한다.


7.Kerberos 서버

각 영역에는 주체 데이터베이스의 마스터 복사본을 유지관리 하는 서버가 있어야 한다. 이서버를 마스터 KDC서버라고 한다. 또한 각 영역에는 주체 데이터베이스의 복제 복사본을 포함하는 슬레이브 KDC서버도 한개이상 있어야 한다.

마스터 KDC서버와 슬레이브 KDC서버모두 인증을 설정하는데 사용되는 티켓을 만든다.

이서버는 Kerberos화된 서비스에 대한 액세스를 제공한다.


8.Kerberos 제어를 위한 API

http://web.mit.edu/kerberos/krb5-current/doc/users/user_commands/kinit.html

참조해보자... 




'Cloud Service > Kerberos' 카테고리의 다른 글

Hadoop과 Kerberos  (3) 2016.05.10
CentOS6.6환경 Kerberos 설치 및 HDFS 연동  (1) 2016.05.09
Posted by MIDDLE
,