From: omer.uyar@denizbank.com
Date: Wed 26 May 2004 - 18:12:08 EEST
Selamlar,
Mailin uzunluğu için şimdiden özür dilerim ama problemi bir kerede detaylı bir şekilde paylaşmak istedim.
2003 Active Directory kurulu bir ortama RH 9.0 makinayı SSO için entegre etmeye çalışıyorum. Büyük bir çoğunluğunu hallettim sayılır ama en can alıcı noktasında problem çıktı. Yapmak istediğim User Authentication' ı Kerberos üzerinden yapmak User Information ı LDAP ile çekmek. Bunun için 2003 DC' ye MKSAD4Unix Schema Extensionlarını ve GUI' yi yükledim. 2003 DC de bir user açıp Unix Settings' den ayarlarını yaptıktan sonra RH 9.0' dan 2003 DC de açılan user ile login olabiliyorum.
Bu da bana
RH9.0' dan pam_krb5 ile Kerberos Authentication yapabildiğimi ve User bilgilerini Active Directory den nss_ldap ile alabildiğimi gösteriyor.
Buraya kadar herşey normal ama benim istediğim, Aynı REALM de bulunan Windows XP' ye login olan bir kişinin aldığı Kerberos ticketını forward ederek ssh veya telnet ile RH 9.0' a username ve password girmeden bağlanabilmesi. Bunun için XP üzerinde Microsoft Ticket Store da cachelenmiş ticketları görüp forward edebilen bir programı da ayrıca arıyorum. Hummingbird Connectivity Kerberos Client ve Hummingbird Hostexplorer 9.0 ile bunlar yapılabiliyor. Burada başka bir ürün varsa önerilerinizi de almak isterim.
Bunu yapmaya kalktığımda mutual authentication yapılması gerekiyor.
Client hostu kerberosdan kontrol edecek
Host da clientı kerberos dan authenticate edecek.
Clientın hostu authenticate edebilmesi için Kerberos Databasede(Active Directory) hosta ait host/c0134lnx01.sso.test@SSO.TEST diye bir hayıt olması gerekiyor bunun için aşağıdaki işlemleri yapıyorum. (bunlar Microsoft ' un Solution Guide for Windows Security and Directory Services for UNIX http://www.microsoft.com/downloads/details.aspx?FamilyId=144F7B82-65CF-4105-B60C-44515299797D&displaylang=en dökümanını takip ederek aşağıdaki işlemleri yaptım.
1-2003 DC de bir user açtım, password verdim, Change password at next logon seçeneğini kaldırdım.
2-2003 DC de ktpass -princ host/c0134lnx01.sso.test@SSO.TEST -mapuser kullanıcı_adı -pass şifre -out keytab.txt komutunu çalıştırdım.
3-RH 9.0' a keytab.txt' yi transfer edip sırasıyla şu komutları çalıştırdım.
$ ktutil
ktutil: list
slot KVNO Principal ---- ---- ---------------------------------------------------------------------
ktutil: rkt keytab.txt
ktutil: list
slot KVNO Principal ---- ---- ---------------------------------------------------------------------
1 3 host/c0134lnx01.sso.test@SSO.TEST
ktutil: wkt /etc/krb5.keytab
ktutil: q
4-Bunun sonucuda hosta ait keytableri RH 9.0' a aktardığımı düşünüyorum ve bunu da aşağıdaki gibi kontrol ediyorum.
$klist -k
KVNO Principal ---- --------------------------------------------------------------------------
3 host/c0134lnx01.sso.test@SSO.TEST
Gelelim soruna; (Yapmak istediğimi öncelikle sadece RH 9.0 ' ı kullanarak yapmaya çalıştım. En azından problem çıkma ihtimalini azalttığımı düşünmüştüm :-) )
Bahsettiğim şeyi yapabilmek için krb5-workstation paketi ile gelen kerberized telnet client ve kerberized telnet daemonı kullanıyorum. Debug yapmak için /etc/xinetd.d/krb5-telnet dosyasını aşağıdaki hale getirdim.
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/kerberos/sbin/telnetd
server_args =-D report
log_on_failure += USERID
disable = no
Daha sonra sırası ile aşağıdakileri yaptım.
1- XP' den SSH ile bağlandım (username omer@SSO.TEST)
2- $omer: klist -f
Ticket cache: FILE:/tmp/krb5cc_1003_Ig5161
Default principal: omer@SSO.TEST
Valid starting Expires Service principal
05/26/04 16:53:15 05/27/04 02:53:15 krbtgt/SSO.TEST@SSO.TEST
Flags: IA
----> Flags kısmında F(Forwardable) olması gerekiyor. Bunun için 3 nolu işlemi yapıyorum. Bu da diğer bir problem aslında. Sisteme ilk bağlandığımda aldığım ticketı Forwardable alabilmek.
Kerberos 4 ticket cache: /tmp/tkt1003
klist: You have no tickets cached
3- $omer: kinit -f (Forwardable ticket almak için)
4- $omer: klist -f
Ticket cache: FILE:/tmp/krb5cc_1003_Ig5161
Default principal: omer@SSO.TEST
Valid starting Expires Service principal
05/26/04 16:53:15 05/27/04 02:53:15 krbtgt/SSO.TEST@SSO.TEST
Flags: FIA
---> Flag istediğim hale geldi.
Kerberos 4 ticket cache: /tmp/tkt1003
klist: You have no tickets cached
5- $omer: telnet -a -f -x c0134lnx01 (Username, password girmeden Kerberos ticketı forward ederek login olmaya çalışıyorum)
Trying 10.150.5.240...
auth debugging enabled
Connected to c0134lnx01 (10.150.5.240).
Escape character is '^]'.
>>>TELNET: I support auth type 2 6
>>>TELNET: I support auth type 2 2
>>>TELNET: I support auth type 2 0
>>>TELNET: I support auth type 1 2
>>>TELNET: I support auth type 1 0
Waiting for encryption to be negotiated...
>>>TELNET: auth_send got: 02 06 02 02 02 00
>>>TELNET: He supports 2
>>>TELNET: Trying 2 6
telnet: Kerberos V5: failure on credentials(Server not found in Kerberos database)
>>>TELNET: He supports 2
>>>TELNET: Trying 2 2
telnet: Kerberos V5: failure on credentials(Server not found in Kerberos database)
>>>TELNET: He supports 2
>>>TELNET: Trying 2 0
telnet: Kerberos V5: failure on credentials(Server not found in Kerberos database)
>>>TELNET: Sent failure message
td: send do AUTHENTICATION
td: ttloop
td: netflush 43 chars
td: ttloop read 33 chars
td: recv will AUTHENTICATION
td: send suboption AUTHENTICATION SEND KERBEROS_V5 CLIENT|MUTUAL|ENCRYPTKERBEROS_V5 CLIENT|MUTUAL|ENCRYPTKERBEROS_V5 CLIENT|ONE-WAY|ENCRYPT
td: recv do ENCRYPT
td: send will ENCRYPT
td: recv will ENCRYPT
td: send do ENCRYPT
td: send suboption ENCRYPT SUPPORT DES_CFB64 DES_OFB64
td: recv do SUPPRESS GO AHEAD
td: send will SUPPRESS GO AHEAD
td: recv will TERMINAL TYPE
td: send do TERMINAL TYPE
td: recv will NAWS
td: send do NAWS
td: recv will TSPEED
td: send do TSPEED
td: recv will LFLOW
Authentication negotation has failed, which is required for
encryption. Good bye.
td: send do LFLOW
td: recv will LINEMODE
td: send dont LINEMODE
td: recv will NEW-ENVIRON
td: send do NEW-ENVIRON
td: recv do STATUS
td: send will STATUS
td: ttloop
td: netflush 786 chars
Görüldüğü üzere "telnet: Kerberos V5: failure on credentials(Server not found in Kerberos database)" hatası alıyorum. Internet üzerinden araştırdım. Bulduğum örnekleri inceledim. Ve daha öteye gidemedim. Yardımlarınız için şimdiden teşekkür ederim.
/etc/krb5.conf içeriği
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
ticket_lifetime = 24000
default_realm = SSO.TEST
dns_lookup_realm = false
dns_lookup_kdc = false
default_tkt_enctypes = des-cbc-md5 ; or des-cbc-crc
default_tgs_enctypes = des-cbc-md5 ; or des-cbc-crc
[realms]
SSO.TEST = {
kdc = SSOTEST1.SSO.TEST:88
default_domain = SSO.TEST
}
[domain_realm]
.sso.test=SSO.TEST
sso.test=SSO.TEST
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
telnet = {
forward = true
}
/etc/ldap.conf içeriği
host ssotest1.sso.test
base dc=SSO,dc=TEST
ldap_version 3
binddn cn=ldapsearch,cn=Users,dc=sso,dc=test
bindpw xxx
nss_map_objectclass posixAccount User
nss_map_attribute uid sAMAccountName
nss_map_attribute uniqueMember Member
nss_map_attribute homeDirectory msSFUHomeDirectory
nss_map_objectclass posixGroup Group
pam_login_attribute sAMAccountName
pam_filter objectclass=User
pam_password crypt
ssl no