Installera Kerberos och LDAP server i Debian Jessie: Difference between revisions

From Peters wiki
Jump to navigation Jump to search
mNo edit summary
 
(34 intermediate revisions by the same user not shown)
Line 7: Line 7:
== Förberedelser ==
== Förberedelser ==
Kerberos kräver att klockan går rätt, så se till att ha fungerande NTP server. Kerberos kräver också både uppslagning via IP adress och via namn, så se till att ditt nätverk funkar tillfredsställande innan du börjar. I Debian kan denna rad i /etc/hosts med fördel kommenteras bort:
Kerberos kräver att klockan går rätt, så se till att ha fungerande NTP server. Kerberos kräver också både uppslagning via IP adress och via namn, så se till att ditt nätverk funkar tillfredsställande innan du börjar. I Debian kan denna rad i /etc/hosts med fördel kommenteras bort:
{{bc|127.0.1.1    server.example.com    server}}
{{bc|127.0.1.1    ns.example.com    ns}}
 
== Name server ==
 
=== Installera LDAP server med Kerberos schema ===


== Installera LDAP server med Kerberos schema ==
Installera:
Installera:
{{RootCmd|apt-get install slapd ldap-utils libsasl2-modules-gssapi-mit krb5-kdc-ldap}}
{{RootCmd|apt-get install slapd ldap-utils krb5-kdc-ldap}}


Ange LDAP administrator lösenord, realm EXAMPLE.SE och ns.example.com både som din key admin server och KDC. Kontrollera efteråt att du kan köra kommandot:
Ange LDAP administrator lösenord, realm EXAMPLE.SE och ns.example.com både som din key admin server och KDC. Kontrollera efteråt att du kan köra kommandot:
Line 80: Line 83:
LDAP är nu redo att agera backend åt Kerberos.
LDAP är nu redo att agera backend åt Kerberos.


== Installera Kerberos ==
=== Installera Kerberos ===
 
Installera Kerberos:
Installera Kerberos:
{{RootCmd|apt-get install krb5-admin-server krb5-kdc}}
{{RootCmd|apt-get install krb5-admin-server krb5-kdc}}
Editera /etc/krb5.conf så att den innehåller:
Editera /etc/krb5.conf så att den innehåller:
{{bc|<nowiki>[libdefaults]
{{bc|<nowiki>[libdefaults]
default_realm = EXAMPLE.COM
    default_realm = EXAMPLE.COM


[realms]
[realms]
EXAMPLE.COM = {
    EXAMPLE.COM = {
kdc = ns.example.com
        kdc = ns.example.com
admin_server = ns.example.com
admin_server = ns.example.com
default_domain = example.com
default_domain = example.com
database_module = openldap_ldapconf
database_module = openldap_ldapconf
}
    }


[domain_realm]
[domain_realm]
.example.com = EXAMPLE.COM
    .example.com = EXAMPLE.COM
        example.com = EXAMPLE.COM
    example.com = EXAMPLE.COM


[dbdefaults]
[dbdefaults]
        ldap_kerberos_container_dn = cn=krbcontainer,dc=example,dc=com
    ldap_kerberos_container_dn = cn=krbcontainer,dc=example,dc=com


[dbmodules]
[dbmodules]
        openldap_ldapconf = {
    openldap_ldapconf = {
                db_library = kldap
        db_library = kldap
        ldap_kdc_dn = "cn=admin,dc=example,dc=com"
        ldap_kdc_dn = "cn=admin,dc=example,dc=com"
        ldap_kadmind_dn = "cn=admin,dc=example,dc=com"
        ldap_kadmind_dn = "cn=admin,dc=example,dc=com"
        ldap_service_password_file = /etc/krb5kdc/service.keyfile
        ldap_service_password_file = /etc/krb5kdc/service.keyfile
        ldap_servers = ldapi://
        ldap_servers = ldapi://
        ldap_conns_per_server = 5
        ldap_conns_per_server = 5
}
    }
</nowiki>}}
</nowiki>}}
Editera /etc/krb5kdc/kdc.conf och lägg till raderna:
Editera /etc/krb5kdc/kdc.conf och lägg till raderna:
Line 140: Line 144:
}}
}}


== Autentisering mot LDAP via Kerberos ==
=== Autentisering mot LDAP via Kerberos ===
 
Installera SASL:
Installera SASL:
{{RootCmd|apt-get install sasl2-bin}}  
{{RootCmd|apt-get install sasl2-bin libsasl2-2 libsasl2-modules libsasl2-modules-gssapi-mit}}
Skapa först en Kerberos principal för vår LDAP server:
Skapa först en Kerberos principal för vår LDAP server:
{{RootCmd|kadmin.local}}
{{RootCmd|kadmin.local}}
Line 184: Line 189:
}}
}}
Lägg till SASL inställningarna till LDAP:
Lägg till SASL inställningarna till LDAP:
{{RootCmd|<nowiki>ldapmodify -Y EXTERNAL -H ldapi:// -f /root/sasl.ldif</nowiki>
{{RootCmd|<nowiki>ldapmodify -Y EXTERNAL -H ldapi:// -f /root/sasl.ldif</nowiki>}}
Skapa en Kerberos principal för vår ldap/admin användare som kommer att mappas mot cn=admin,dc=example,dc=com. Kör:
{{RootCmd|kadmin.local}}
Och kör sen kommandot: addprinc ldap/admin@EXAMPLE.COM. Avsluta kadmin.local.
{{Note|Detta Kerberoslösenord för LDAP admin användaren behöver inte vara samma som det vanliga LDAP admin lösenordet.}}
Innan vi testar att vi kan "logga in" som ldap/admin via Kerberos, editera LDAP klient-filen /etc/ldap/ldap.conf och se till att dessa två rader finns:
{{bc|1=
BASE    dc=example,dc=com
URI    ldap://ns.example.com
}}
Skaffa en Kerberos biljett:
{{RootCmd|kinit ldap/admin}}
Kolla sedan vem du är enligt LDAP:
{{RootCmd|ldapwhoami}}
Om allt går bra kommer du se:
{{bc|1=
SASL/GSSAPI authentication started
SASL username: ldap/admin@EXAMPLE.COM
SASL SSF: 56
SASL data security layer installed.
dn:cn=admin,dc=example,dc=com
}}
 
=== Lägga till användare ===
 
Om vi vill lägga till en användare så adderar man den först till LDAP. Typiskt kan informationen för en användare se ut så här:
{{bc|1=
dn: uid=anna,ou=people,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
sn: Svensson
cn: Anna Svensson
loginShell: /bin/bash
homeDirectory: /home/anna
givenName: Anna
uidNumber: 5000
gidNumber: 5000
gecos: Anna Svensson
}}
{{Tip|Det kan vara lämpligt att skilja på lokala användare och användare i Kerberos/LDAP. Därför låter vi UID och GID börja på 1000 för lokala användare och på 5000 för användare i LDAP.}}
För att sedan addera på Kerberos informationen till denna användare, kör kadmin.local och sedan kommandot:
{{bc|1=
addprinc -x dn="uid=anna,ou=people,dc=example,dc=com" anna@EXAMPLE.COM
}}
 
Testa sedan att skaffa en Kerberos ticket som anna och kolla informationen från LDAP:
{{Cmd|kinit anna
|ldapwhoami
}}
 
Om allt fungerar ska du få tillbaka:
{{bc|1=
SASL/GSSAPI authentication started
SASL username: anna@EXAMPLE.COM
SASL SSF: 56
SASL data security layer installed.
dn:uid=anna,ou=people,dc=example,dc=com
}}
 
Gör även en ldapsearch på din nya användare och kontrollera att en del Kerberosspecifik information har lagts till:
{{RootCmd|kinit ldap/admin
|<nowiki>ldapsearch -b dc=example,dc=com "(uid=anna)"</nowiki>
}}
 
=== SASL passthrough ===
 
När vår LDAP databas har blivit ''Kerberized'', krävs det Kerberos tickets för att kunna autentisera mot den. Men för att ha stöd för att kunna autentisera direkt mot LDAP utan ticket behöver vi SASL passthrough. Editera filen /etc/default/saslauthd och ändra 2 rader till:
{{bc|1=
START=yes
MECHANISMS="kerberos5"
}}
 
Skapa sedan filen /usr/lib/sasl2/slapd.conf med innehållet:
{{bc|
pwcheck_method: saslauthd
saslauthd_path: /var/run/saslauthd/mux
}}
 
Lägg till openldap till gruppen sasl:
{{RootCmd|gpasswd -a openldap sasl}}
 
Starta sedan om LDAP servern och saslauthd:
{{RootCmd|service slapd restart
|service saslauthd restart
}}
 
För att kunna autentisera direkt mot LDAP som vår användare anna måste, måste följande attribut adderas till ''dn: uid=anna,ou=people,dc=example,dc=com'':
{{bc|userPassword: {SASL}anna@EXAMPLE.COM}}
 
När det är gjort, testa att du kan autentisera utan Kerberos ticket:
{{Cmd|kdestroy
|ldapwhoami
|<nowiki>ldapwhoami -D uid=anna,ou=people,dc=example,dc=com -W</nowiki>
}}
Första ldapwhoami ska misslyckas med:
{{bc|1=
SASL/GSSAPI authentication started
ldap_sasl_interactive_bind_s: Local error (-2)
additional info: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure.  Minor code may provide more information (No Kerberos credentials available)
}}
Medan andra ska ge svaret:
{{bc|1=
dn:uid=anna,ou=people,dc=example,dc=com
}}
 
== Övriga servrar / klienter ==


[[Category:Guide]]
[[Category:GammalGuide]]

Latest revision as of 19:46, 12 August 2023

Denna artikel beskriver hur man installerar Kerberos och OpenLDAP i Debian Jessie. Kerberos kommer att använda LDAP som backend. Vi kommer använda ns.example.com som FQDN för vår server och vår Kerberos realm EXAMPLE.COM i exemplen.

Målet är att kunna autentisera sig mot Kerberos och hämta användaruppgifter ifrån LDAP.

Förberedelser

Kerberos kräver att klockan går rätt, så se till att ha fungerande NTP server. Kerberos kräver också både uppslagning via IP adress och via namn, så se till att ditt nätverk funkar tillfredsställande innan du börjar. I Debian kan denna rad i /etc/hosts med fördel kommenteras bort:

127.0.1.1    ns.example.com    ns

Name server

Installera LDAP server med Kerberos schema

Installera:

root # apt-get install slapd ldap-utils krb5-kdc-ldap

Ange LDAP administrator lösenord, realm EXAMPLE.SE och ns.example.com både som din key admin server och KDC. Kontrollera efteråt att du kan köra kommandot:

root # ldapsearch -Y EXTERNAL -H ldapi:// -b cn=config

Och att uppgifterna stämmer. Bl.a. ska du se:

# {1}mdb, config
dn: olcDatabase={1}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {1}mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=example,dc=com
olcRootDN: cn=admin,dc=example,dc=com
...

Kopiera och packa upp Kerberos schemat:

root # cp /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz /etc/ldap/schema
root #
gunzip /etc/ldap/schema/kerberos.schema.gz

För att konvertera schemat till en LDIF fil, skapa filen /root/schema_convert.conf med innehållet:

include /etc/ldap/schema/kerberos.schema

Kör sedan kommandona:

root # mkdir /tmp/ldif_output
root #
slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s "cn={0}kerberos,cn=schema,cn=config" > /tmp/cn=kerberos.ldif

Editera sedan filen /tmp/cn=kerberos.ldif och ta bort {0}kerberos på de 2 ställen i början så filen ser ut så här:

dn: cn=kerberos,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: kerberos

Och ta bort raderna på slutet som ser ungefär ut så här:

structuralObjectClass: olcSchemaConfig
entryUUID: 56a8f4dc-9010-1034-8ba0-a1e47b1e0717
creatorsName: cn=config
createTimestamp: 20150516121051Z
entryCSN: 20150516121051.173689Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20150516121051Z

Addera schemat till LDAP:

root # ldapadd -Y EXTERNAL -H ldapi:// -f /tmp/cn\=kerberos.ldif

Sista steget blir att addera ett index för krbPrincipalName attributet och justera ACL (Access Control List). Skapa en fil som t.ex heter /root/krb5.ldif med innehållet:

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: krbPrincipalName eq,pres,sub
-
replace: olcAccess
olcAccess: to attrs=userPassword,shadowLastChange,krbPrincipalKey by dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none
-
add: olcAccess
olcAccess: to dn.base="" by * read
-
add: olcAccess
olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * read

Kör kommandot:

root # ldapmodify -Y EXTERNAL -H ldapi:// -f /root/krb5.ldif

Starta sen om LDAP servern:

root # service slapd restart

LDAP är nu redo att agera backend åt Kerberos.

Installera Kerberos

Installera Kerberos:

root # apt-get install krb5-admin-server krb5-kdc

Editera /etc/krb5.conf så att den innehåller:

[libdefaults]
    default_realm = EXAMPLE.COM

[realms]
    EXAMPLE.COM = {
        kdc = ns.example.com
	admin_server = ns.example.com
	default_domain = example.com
	database_module = openldap_ldapconf
    }

[domain_realm]
    .example.com = EXAMPLE.COM
    example.com = EXAMPLE.COM

[dbdefaults]
    ldap_kerberos_container_dn = cn=krbcontainer,dc=example,dc=com

[dbmodules]
    openldap_ldapconf = {
        db_library = kldap
        ldap_kdc_dn = "cn=admin,dc=example,dc=com"
        ldap_kadmind_dn = "cn=admin,dc=example,dc=com"
        ldap_service_password_file = /etc/krb5kdc/service.keyfile
        ldap_servers = ldapi://
        ldap_conns_per_server = 5
    }

Editera /etc/krb5kdc/kdc.conf och lägg till raderna:

[realms]
    EXAMPLE.COM = {
        ...
        database_module = openldap_ldapconf
    }

[dbmodules]
    openldap_ldapconf = {
        db_library = kldap
        ldap_kdc_dn = "cn=admin,dc=example,dc=com"
	ldap_kadmind_dn = "cn=admin,dc=example,dc=com"
        ldap_service_password_file = /etc/krb5kdc/service.keyfile
        ldap_servers = ldapi://
        ldap_conns_per_server = 5
    }

Skapa din realm EXAMPLE.COM:

root # kdb5_ldap_util -D cn=admin,dc=example,dc=com create -subtrees dc=example,dc=com -r EXAMPLE.COM -s -H ldapi://

Ange ditt LDAP admin lösenord och ange välj sedan ett KDC master-key lösenord. Skapa sen en gömma med LDAP admin lösenordet så Kerberos kan ansluta till LDAP servern:

root # kdb5_ldap_util -D cn=admin,dc=example,dc=com stashsrvpw -f /etc/krb5kdc/service.keyfile cn=admin,dc=example,dc=com

Här behöver du först ange ditt LDAP admin lösenord och sen för att allt ska fungera, så ska du igen ange samma lösenord till gömman. Starta nu om Kerberos:

root # service krb5-admin-server restart
root #
service krb5-kdc restart

Autentisering mot LDAP via Kerberos

Installera SASL:

root # apt-get install sasl2-bin libsasl2-2 libsasl2-modules libsasl2-modules-gssapi-mit

Skapa först en Kerberos principal för vår LDAP server:

root # kadmin.local

Kör sedan dessa 2 kommandon:

addprinc -randkey ldap/ns.example.com@EXAMPLE.COM
ktadd -k /root/ldap.keytab ldap/ns.example.com@EXAMPLE.COM

Avslut kadmin med kommandot q. Flytta keytab filen och se till att den bara kan användas av openldap användaren:

root # mv /root/ldap.keytab /etc/ldap
root #
chown openldap:openldap /etc/ldap/ldap.keytab
root #
chmod 640 /etc/ldap/ldap.keytab

Editera /etc/default/slapd och lägg till:

export KRB5_KTNAME=/etc/ldap/ldap.keytab

Starta om LDAP servern:

root # service slapd restart

Skapa en fil som heter /root/sasl.ldif med följande innehåll:

dn: cn=config
changetype: modify
add: olcSaslHost
olcSaslHost: ns.example.com
-
add: olcSaslRealm
olcSaslRealm: EXAMPLE.COM
-
add: olcSaslSecProps
olcSaslSecProps: noplain,noanonymous
-
add: olcAuthzRegexp
olcAuthzRegexp: uid=([^/]*),cn=example.com,cn=gssapi,cn=auth uid=$1,ou=people,dc=example,dc=com
-
add: olcAuthzRegexp
olcAuthzRegexp: uid=host/([^/]*).example.com,cn=example.com,cn=gssapi,cn=auth cn=$1,ou=hosts,dc=example,dc=com
-
add: olcAuthzRegexp
olcAuthzRegexp: uid=ldap/admin,cn=example.com,cn=gssapi,cn=auth cn=admin,dc=example,dc=com

Lägg till SASL inställningarna till LDAP:

root # ldapmodify -Y EXTERNAL -H ldapi:// -f /root/sasl.ldif

Skapa en Kerberos principal för vår ldap/admin användare som kommer att mappas mot cn=admin,dc=example,dc=com. Kör:

root # kadmin.local

Och kör sen kommandot: addprinc ldap/admin@EXAMPLE.COM. Avsluta kadmin.local.

Notering: Detta Kerberoslösenord för LDAP admin användaren behöver inte vara samma som det vanliga LDAP admin lösenordet.

Innan vi testar att vi kan "logga in" som ldap/admin via Kerberos, editera LDAP klient-filen /etc/ldap/ldap.conf och se till att dessa två rader finns:

BASE    dc=example,dc=com
URI     ldap://ns.example.com

Skaffa en Kerberos biljett:

root # kinit ldap/admin

Kolla sedan vem du är enligt LDAP:

root # ldapwhoami

Om allt går bra kommer du se:

SASL/GSSAPI authentication started
SASL username: ldap/admin@EXAMPLE.COM
SASL SSF: 56
SASL data security layer installed.
dn:cn=admin,dc=example,dc=com

Lägga till användare

Om vi vill lägga till en användare så adderar man den först till LDAP. Typiskt kan informationen för en användare se ut så här:

dn: uid=anna,ou=people,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
sn: Svensson
cn: Anna Svensson
loginShell: /bin/bash
homeDirectory: /home/anna
givenName: Anna
uidNumber: 5000
gidNumber: 5000
gecos: Anna Svensson
Tips: Det kan vara lämpligt att skilja på lokala användare och användare i Kerberos/LDAP. Därför låter vi UID och GID börja på 1000 för lokala användare och på 5000 för användare i LDAP.

För att sedan addera på Kerberos informationen till denna användare, kör kadmin.local och sedan kommandot:

addprinc -x dn="uid=anna,ou=people,dc=example,dc=com" anna@EXAMPLE.COM

Testa sedan att skaffa en Kerberos ticket som anna och kolla informationen från LDAP:

user $ kinit anna
user $
ldapwhoami

Om allt fungerar ska du få tillbaka:

SASL/GSSAPI authentication started
SASL username: anna@EXAMPLE.COM
SASL SSF: 56
SASL data security layer installed.
dn:uid=anna,ou=people,dc=example,dc=com

Gör även en ldapsearch på din nya användare och kontrollera att en del Kerberosspecifik information har lagts till:

root # kinit ldap/admin
root #
ldapsearch -b dc=example,dc=com "(uid=anna)"

SASL passthrough

När vår LDAP databas har blivit Kerberized, krävs det Kerberos tickets för att kunna autentisera mot den. Men för att ha stöd för att kunna autentisera direkt mot LDAP utan ticket behöver vi SASL passthrough. Editera filen /etc/default/saslauthd och ändra 2 rader till:

START=yes
MECHANISMS="kerberos5"

Skapa sedan filen /usr/lib/sasl2/slapd.conf med innehållet:

pwcheck_method: saslauthd
saslauthd_path: /var/run/saslauthd/mux

Lägg till openldap till gruppen sasl:

root # gpasswd -a openldap sasl

Starta sedan om LDAP servern och saslauthd:

root # service slapd restart
root #
service saslauthd restart

För att kunna autentisera direkt mot LDAP som vår användare anna måste, måste följande attribut adderas till dn: uid=anna,ou=people,dc=example,dc=com:

userPassword: {SASL}anna@EXAMPLE.COM

När det är gjort, testa att du kan autentisera utan Kerberos ticket:

user $ kdestroy
user $
ldapwhoami
user $
ldapwhoami -D uid=anna,ou=people,dc=example,dc=com -W

Första ldapwhoami ska misslyckas med:

SASL/GSSAPI authentication started
ldap_sasl_interactive_bind_s: Local error (-2)
	additional info: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure.  Minor code may provide more information (No Kerberos credentials available)

Medan andra ska ge svaret:

dn:uid=anna,ou=people,dc=example,dc=com

Övriga servrar / klienter