Na internetu je mnoho návodů na zprovoznění Kerbera. V tomto článku přikládám funkční konfigurační postup pro Ubuntu 14.04 a MIT Kerberos.
V /etc/hosts mít (FQDN musí být první):
127.0.0.1 localhost 10.1.8.17 ldap.cesal.cz ldap V /etc/hostname mít jen hostname, např. ldap (bez FQDN). put "dns" first on the "hosts" line in /etc/nsswitch.conf
Nejprve si nainstalujeme LDAP
sudo apt-get update sudo apt-get --purge remove
slapd ldap-utils
&& apt-get autoremove sudo apt-get install slapd ldap-utils rm -r /etc/ldap
rm -r /var/lib/ldap
Smazání instalace Kerbera
sudo apt-get –purge remove krb5-{admin-server,kdc,user} libpam-krb5 krb5-kdc-ldap && apt-get autoremove
rm -r /var/lib/krb5kdc
rm -r /etc/krb5kdc
rm /etc/krb5*
rm -r /var/log/kerberos
rm -r /var/log/krb*
rm -r /usr/share/doc/krb5-kdc-ldap
Instalace LDAP
sudo apt-get install
slapd ldap-utils libpam-ldap
sudo dpkg-reconfigure slapd
Kontrola:
sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config Přidání organizačních jednotek: containers.ldif:
dn: ou=Users,dc=cesal,dc=cz objectClass: top objectClass: organizationalUnit ou: Users description: Uživatelské účty dn: ou=Groups,dc=cesal,dc=cz objectClass: top objectClass: organizationalUnit ou: Groups description: Uživatelské skupiny
ldapadd -x -D cn=admin,dc=cesal,dc=cz -W -f containers.ldif Logování - logging.ldif:
dn: cn=config changetype: modify add: olcLogLevel olcLogLevel: stats sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f logging.ldif Indexování - index_ldap.ldif - možná používáte MDB, tak změnit na mdb:
dn: olcDatabase={1}mdb,cn=config changetype: modify replace: olcDbIndex olcDbIndex: uid,uidNumber,gidNumber,memberUid,uniqueMember,objectClass,cn eq sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f index_ldap.ldif Přístup administrátora
echo "dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcAccess
olcAccess: to * by dn="cn=admin,dc=cesal,dc=cz" write" > /var/tmp/access.ldif
sudo ldapmodify -c -Y EXTERNAL -H ldapi:/// -f /var/tmp/access.ldif
sudo service slapd stop sudo su - openldap -c slapindex sudo service slapd start
Instalace Kerbera
sudo apt-get install krb5-{admin-server,kdc,user} libpam-krb5 krb5-kdc-ldap
zcat /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz >/etc/ldap/schema/kerberos.schema
Vytvořit soubor schema_convert.conf: include /etc/ldap/schema/kerberos.schema
mkdir /tmp/ldif_output
slaptest -f schema_convert.conf -F /tmp/ldif_output/
Edit the file /tmp/ldif_output/cn\=config/cn\=schema/cn\=\{0\}kerberos.ldif .
V /etc/ldap/ldap.conf napsat (na klientovi i serveru):
BASE dc=cesal,dc=cz URI ldap://ldap.cesal.cz/ SASL_MECH GSSAPI TLS_REQCERT allow TLS_CACERT /etc/ssl/certs/ca-certificates.crt
Add the polished LDIF to the LDAP:
sudo ldapadd -Y EXTERNAL -f /tmp/ldif_output/cn\=config/cn\=schema/cn\=\{0\}kerberos.ldif Vypsat přidaný kerberos:
sudo ldapsearch -Q -LLL -Y EXTERNAL -b cn=schema,cn=config dn
Editujte /etc/krb5.conf:
[libdefaults] default_realm = CESAL.CZ noaddresses = true
[realms] CESAL.CZ = { kdc = ldap.cesal.cz admin_server = ldap.cesal.cz default_domain = cesal.cz database_module = openldap_cesal.cz } [domain_realm] .cesal.cz = CESAL.CZ cesal.cz = CESAL.CZ [dbdefaults] ldap_kerberos_container_dn = cn=krbcontainer,dc=cesal,dc=cz [dbmodules] openldap_cesal.cz = { db_library = kldap ldap_kdc_dn = "cn=admin,dc=cesal,dc=cz" ldap_kadmind_dn = "cn=admin,dc=cesal,dc=cz" ldap_service_password_file = /etc/krb5kdc/service.keyfile ldap_servers = ldap://ldap.cesal.cz ldap_conns_per_server = 5 } [logging] kdc = SYSLOG:info:local1 admin-server = SYSLOG:info:local2 default = SYSLOG:err:auth
sudo kdb5_ldap_util -D cn=admin,dc=cesal,dc=cz create -subtrees dc=cesal,dc=cz -r CESAL.CZ -s
Co jsme zatím udělali:
sudo ldapsearch -Y EXTERNAL -b cn=CESAL.CZ,cn=krbcontainer,dc=cesal,dc=cz dn -Q -LLL
Nyní nastavíme jméno a heslo, které bude Kerberos používat pro přístup k LDAPu. Bude v souboru uvedeném v /etc/krb5.conf (ldap_service_password_file):
sudo kdb5_ldap_util -D cn=admin,dc=cesal,dc=cz stashsrvpw -f /etc/krb5kdc/service.keyfile cn=admin,dc=cesal,dc=cz
sudo service krb5-kdc restart sudo service krb5-admin-server restart V syslogu budou hlášky o neindexovaném krb, proveďte indexaci:
sudo service slapd stop sudo su - openldap -c slapindex sudo service slapd start Pořadí spouštění: root@ldap:/etc/rc2.d# mv S02krb5-kdc S03krb5-kdc update-rc.d krb5-kdc defaults V DNS vytvořit záznamy:
_kerberos._udp SRV 0 0 88 ldap.cesal.cz
_kerberos._tcp SRV 0 0 88 ldap.cesal.cz
_kerberos-master._udp SRV 0 0 88 ldap.cesal.cz
_kerberos-master._tcp SRV 0 0 88 ldap.cesal.cz
_kpasswd._udp SRV 0 0 464 ldap.cesal.cz
Nezapomenout také na DNS TXT záznamy s obsahem "CESAL.CZ" - For the hostnameboston.engineering.example.com, the names looked up would be:
_kerberos.boston.engineering.example.com
_kerberos.engineering.example.com
_kerberos.example.com
_kerberos.com
Celkově by tam mělo být
_kerberos._udp SRV 0 0 88 daisy
SRV 0 0 88 use-the-force-luke
SRV 0 0 88 bunny-rabbit
_kerberos-master._udp SRV 0 0 88 daisy
_kerberos-adm._tcp SRV 0 0 749 daisy
_kpasswd._udp SRV 0 0 464 daisy
Přidat skupinu do LDAP groups.ldif
dn: cn=Administrators,ou=Groups,dc=cesal,dc=cz objectClass: posixGroup cn: Administrators gidNumber: 5000 dn: cn=Users,ou=Groups,dc=cesal,dc=cz objectClass: posixGroup cn: Users gidNumber: 5001
ldapadd -x -D cn=admin,dc=cesal,dc=cz -W -f groups.ldif
Přidat uživatele dn: uid=tester,ou=Users,dc=cesal,dc=cz cn: David Testovací givenName: David sn: Testovací uid: tester uidNumber: 10000 gidNumber: 5001 homeDirectory: /home/tester mail: tester@dev.cesal.cz objectClass: top objectClass: posixAccount objectClass: shadowAccount objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person loginShell: /bin/bash userPassword: ahoj Přidat uživatele do kerberosu (principal): addprinc -x dn="uid=tester,ou=Users,dc=cesal,dc=cz" tester Povolit kadmin:
sudo cat /etc/krb5kdc/kdc.conf|grep acl_file v tom acl souboru: */admin * kerbadm@CESAL.CZ * */admin@CESAL.CZ * */*@CESAL.CZ i *@CESAL.CZ i
kadmin.local pravidla: add_policy -minlength 8 -minclasses 2 admin add_policy -minlength 8 -minclasses 2 host add_policy -minlength 8 -minclasses 2 service add_policy -minlength 8 -minclasses 2 user Vytvořit admin uživatele v Kerberosu: kadmin.local addprinc -policy admin kerbadmin/admin
sudo service krb5-admin-server restart
kadmin -p kerbadmin/admin
Na serveru i klientovi nainstalovat a nastavit:
sudo apt-get install sasl2-bin libsasl2-2 libsasl2-modules libsasl2-modules-gssapi-mit libpam-krb5libpam-ldapd nslcd auth-client-config
ldap-utils
/etc/pam.d/common-auth pam_krb5.so minimum_uid=1000 use_first_pass ignore_root forwardable
/etc/pam.d/common-session
minimum_uid=1000 ignore_root
/etc/ssh/sshd_config
GSSAPIAuthentication yes GSSAPIKeyExchange yes GSSAPICleanupCredentials yes UsePAM yes
You can ignore the Kerberos* options; those are for an older version of Kerberos support that’s not recommended or particularly useful
/etc/ssh/ssh_config
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes
Na serveru přidat LDAP do Kerberosu:
addprinc -randkey ldap/ldap.cesal.cz ktadd -k /etc/ldap/ldap.keytab ldap/ldap.cesal.cz
Do /etc/default/slapd:
export KRB5_KTNAME=/etc/ldap/ldap.keytab
Změnit práva – pro ldap uživatele:
chown openldap:openldap /etc/ldap -R && chown openldap:openldap /etc/ldap.conf
service slapd restart
Na serveru do /etc/nsswitch.conf přidat ldap
passwd: compat ldap
group: compat ldap
shadow: compat ldap
service nscd restart && service nslcd restart
U klienta:
apt-get install
libpam-ccreds Do/etc/pam.d/common-session:
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
/etc/krb5.conf: [libdefaults] default_realm = CESAL.CZ dns_lookup_realm = true dns_lookup_kdc = true noaddresses = true
nebo spíš tohle:
[libdefaults] default_realm = CESAL.CZ noaddresses = true [realms] CESAL.CZ = { admin_server = ldap.cesal.cz }
Přidat host keytab klienta do Kerberosu: na klientovi:
kadmin -p kerbadmin/admin
addprinc -policy service -randkey
host/dns.cesal.cz
ktadd -k /etc/krb5.keytab
host/dns.cesal.cz
na serveru taky:
kadmin -p kerbadmin/admin
addprinc -policy service -randkey
host/ldap.cesal.cz
ktadd -k /etc/krb5.keytab
host/ldap.cesal.cz
Vytvořit uživatele a pak vyzkoušejte login přes něj:
addprinc testomato@CESAL.CZ
Tamto už ne:
Přidání keytab pro klientský přístup
mkdir /etc/krb5kdc/clients
kadmin -p kerbadmin/admin
# addprinc -randkey ssh/dns.cesal.cz@CESAL.CZ
# ktadd -k /etc/krb5kdc/clients/ssh-dns.cesal.cz.keytab ssh/dns.cesal.cz@CESAL.CZ
addprinc -randkey host/dns.cesal.cz@CESAL.CZ
ktadd -k /etc/krb5kdc/clients/dns.cesal.cz.keytab host/dns.cesal.cz@CESAL.CZ
chmod 0700 /etc/krb5kdc/clients -R
copy dns.cesal.cz.keytab na hosta do /etc/krb5.keytab
vi /etc/ssh/sshd_config
GSSAPIAuthentication yes
sudo dpkg-reconfigure krb5-kdc
sudo krb5_newrealm
# kdb5_util create -s -r CESAL.CZ
Vytvoření složky pro logování
sudo mkdir /var/log/kerberos
sudo touch /var/log/kerberos/{krb5kdc,kadmin,krb5lib}.log
sudo chmod -R 750 /var/log/kerberos
Restart služeb
sudo invoke-rc.d krb5-admin-server restart
sudo invoke-rc.d krb5-kdc restart
Vytvoření politiky pro hesla
addpol -minlength 8 -minclasses 2 admin
addpol -minlength 8 -minclasses 2 host
addpol -minlength 8 -minclasses 2 service
addpol -minlength 8 -minclasses 2 user
Vytvoření uživatele ve skupině admin
addprinc root/admin@CESAL.CZ
Další
LDAP: by default on TCP and UDP port 389, or on port 636 for LDAPS.[8] Global Catalog is available by default on ports 3268, and 3269 for LDAPS
Ports TCP/UDP both
88 for KDC
749 for Admin Server
464 kpasswd port
754 – krb5_prop (only TCP)
kerberos 88/udp kdc # Kerberos V5 KDC
kerberos 88/tcp kdc # Kerberos V5 KDC
klogin 543/tcp # Kerberos authenticated rlogin
kshell 544/tcp cmd # and remote shell
kerberos-adm 749/tcp # Kerberos 5 admin/changepw
kerberos-adm 749/udp # Kerberos 5 admin/changepw
krb5_prop 754/tcp # Kerberos slave propagation
eklogin 2105/tcp # Kerberos auth. & encrypted rlogin
krb524 4444/tcp # Kerberos 5 to 4 ticket translator
750 is used by old Kerberos V4 only
# LDAP
-A INPUT -p tcp –dport 389 -j ACCEPT
-A INPUT -p udp –dport 389 -j ACCEPT
-A INPUT -p tcp –dport 636 -j ACCEPT
-A INPUT -p udp –dport 636 -j ACCEPT
-A INPUT -p tcp –dport 3268 -j ACCEPT
-A INPUT -p udp –dport 3268 -j ACCEPT
-A INPUT -p tcp –dport 3269 -j ACCEPT
-A INPUT -p udp –dport 3269 -j ACCEPT
# Kerberos
-A INPUT -p tcp –dport 88 -j ACCEPT
-A INPUT -p udp –dport 88 -j ACCEPT
-A INPUT -p tcp –dport 464 -j ACCEPT
-A INPUT -p tcp –dport 543 -j ACCEPT
-A INPUT -p tcp –dport 544 -j ACCEPT
-A INPUT -p tcp –dport 749 -j ACCEPT
-A INPUT -p udp –dport 749 -j ACCEPT
-A INPUT -p tcp –dport 754 -j ACCEPT
-A INPUT -p tcp –dport 2105 -j ACCEPT
-A INPUT -p tcp –dport 4444 -j ACCEPT
Odkazy
http://blog.manula.org/2012/04/setting-up-kerberos-server-with-debian.html
http://www.abclinuxu.cz/clanky/bezpecnost/kerberos-prihlasovani-snadno-a-rychle#krok-1-instalace-software
http://techpubs.spinlocksolutions.com/dklar/kerberos.html
http://web.mit.edu/kerberos/www/krb5-1.2/krb5-1.2.6/doc/install.html
http://web.mit.edu/kerberos/krb5-1.5/krb5-1.5/doc/krb5-install/Create-a-kadmind-Keytab–optional-.html
http://blog.godatadriven.com/kerberos_kdc_install.html
http://web.ornl.gov/~jar/HowToKerb.html
http://blog.godatadriven.com/kerberos_kdc_install.html
https://wiki.debian.org/LDAP/Kerberos
kprop nefunguje za NATem
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-a-basic-ldap-server-on-an-ubuntu-12-04-vps
http://web.mit.edu/kerberos/krb5-1.5/krb5-1.5.4/doc/krb5-admin/Restoring-a-Kerberos-Database-from-a-Dump-File.html
http://research.imb.uq.edu.au/~l.rathbone/ldap/kerberos.shtml
http://web.mit.edu/kerberos/krb5-1.5/krb5-1.5.4/doc/krb5-admin/Creating-a-Stash-File.html
http://web.mit.edu/kerberos/krb5-devel/doc/admin/troubleshoot.html#kprop-sendauth-exchange
http://research.imb.uq.edu.au/~l.rathbone/ldap/kerberos.shtml
http://web.mit.edu/kerberos/krb5-1.12/doc/admin/admin_commands/kpropd.html