리눅스는 쥐뿔도 모르지만.. 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와의 연동을 진행 해보자.