LDAP a Kerberos v Ubuntu 15.10

LDAP a Kerberos v Ubuntu 15.10

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 .

  • In the first (if you count the comments then the fourth) line change dn: cn={0}kerberos to dn: cn=kerberos,cn=schema,cn=config .
  • In the third (with comments: fith) line from the line cn: {0}kerberos leave only cn: kerberos .
  • Remove the last seven lines (starting from: structuralObjectClass: olcSchemaConfig)

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-krb5 libpam-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

RootDN ldap_add: Insufficient access (50)

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