For actuality here a example how to enable an MiTv5 Kerberos <=> Active Directory trust just from scratch. Should work out of the box, just replace the realms:
with your servers. The KDC should be inside your hadoop network, the remote AD can be somewhere.
1. Install the bits
At the KDC server (CentOS, RHEL - other OS' should have nearly the same bits):
yum install krb5-server krb5-libs krb5-workstation -y
At the clients (hadoop nodes):
yum install krb5-libs krb5-workstation -y
Install Java's JCE policy (see Oracle documentation) on all hadoop nodes.
2. Configure your local KDC
[libdefaults]
dns_lookup_realm = false
dns_lookup_kdc = false
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
fcc-mit-ticketflags = true
max_life = 1d
max_renewable_life = 7d
renew_lifetime = 7d
default_tgs_enctypes = aes128-cts arcfour-hmac
default_tkt_enctypes = aes128-cts arcfour-hmac
[realms]
ALO.LOCAL = {
kdc = hadoop1.internal:88
admin_server = hadoop1.internal:749
max_life = 1d
max_renewable_life = 7d
}
AD.REMOTE = {
kdc = ad.remote.internal:88
admin_server = ad.remote.internal:749
max_life = 1d
max_renewable_life = 7d
}
[domain_realm]
alo.local = ALO.LOCAL
.alo.local = ALO.LOCAL
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmin.log
default = FILE:/var/log/krb5lib.log
[kdcdefaults]
kdc_tcp_ports = 88
#master_key_type = aes256-cts
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}
Create the realm on your local KDC and start the services
kdb5_util create -s -r ALO.LOCALservice krb5kdc restart
chkconfig kadmin on
chkconfig krb5kdc on
Create the admin principal
kadmin.local -q "addprinc root/admin"3. Create the MiTv5 trust in AD
ksetup /addkdc ALO.LOCAL HADOOP1.INTERNAL
ksetup /SetEncTypeAttr ALO.LOCAL RC4-HMAC-MD5 AES128-CTS-HMAC-SHA1-96 AES256-CTS-HMAC-SHA1-96 DES-CBC-CRC DES-CBC-MD5
ktpass /ALO.LOCAL /DOMAIN:AD.REMOTE /TrustEncryp aes128-cts arcfour-hmac
ksetup /SetEncTypeAttr ALO.LOCAL aes128-cts arcfour-hmac
4. Create the AD trust in MiTv5
kadmin.local: addprinc krbtgt/ALO.LOCAL@AD.REMOTE5. Configure hadoop's mapping rules
<property>
<name>hadoop.security.auth_to_local</name>
<value>RULE:[1:$1@$0](.*@\QAD.REMOTE\E$)s/@\QAD.REMOTE\E$//
RULE:[2:$1@$0](.*@\QAD.REMOTE\E$)s/@\QAD.REMOTE\E$//
DEFAULT</value>
</property>
Done. Now you should be able to get an ticket from your AD which let you work with your hadoop installation:
#> kinit alo.alt@AD.REMOTE#> klist
Ticket cache: FILE:/tmp/krb5cc_500
Default principal: alo.alt@AD.REMOTE
Nice blog thanks for sharing.
ReplyDelete