Installera Kerberos och LDAP server i Debian Jessie: Difference between revisions
mNo edit summary |
mNo edit summary |
||
(26 intermediate revisions by the same user not shown) | |||
Line 9: | Line 9: | ||
{{bc|127.0.1.1 ns.example.com ns}} | {{bc|127.0.1.1 ns.example.com ns}} | ||
== Installera LDAP server med Kerberos schema == | == Name server == | ||
=== Installera LDAP server med Kerberos schema === | |||
Installera: | Installera: | ||
{{RootCmd|apt-get install slapd ldap-utils | {{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}} | ||
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 188: | Line 193: | ||
{{RootCmd|kadmin.local}} | {{RootCmd|kadmin.local}} | ||
Och kör sen kommandot: addprinc ldap/admin@EXAMPLE.COM. Avsluta kadmin.local. | Och kör sen kommandot: addprinc ldap/admin@EXAMPLE.COM. Avsluta kadmin.local. | ||
{{Note|Detta Kerberoslösenord för LDAP admin | {{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: | 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= | {{bc|1= | ||
Line 207: | Line 212: | ||
}} | }} | ||
== Lägga till användare == | === 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: | 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= | {{bc|1= | ||
Line 217: | Line 223: | ||
loginShell: /bin/bash | loginShell: /bin/bash | ||
homeDirectory: /home/anna | homeDirectory: /home/anna | ||
givenName: Anna | givenName: Anna | ||
uidNumber: 5000 | uidNumber: 5000 | ||
gidNumber: 5000 | gidNumber: 5000 | ||
Line 225: | Line 229: | ||
}} | }} | ||
{{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.}} | {{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: | [[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:
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:
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:
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:
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:
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:
Starta sen om LDAP servern:
LDAP är nu redo att agera backend åt Kerberos.
Installera Kerberos
Installera Kerberos:
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:
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:
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:
Autentisering mot LDAP via Kerberos
Installera SASL:
Skapa först en Kerberos principal för vår LDAP server:
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:
Editera /etc/default/slapd och lägg till:
export KRB5_KTNAME=/etc/ldap/ldap.keytab
Starta om LDAP servern:
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:
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:
Och kör sen kommandot: addprinc ldap/admin@EXAMPLE.COM. Avsluta kadmin.local.
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:
Kolla sedan vem du är enligt LDAP:
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
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:
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:
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:
Starta sedan om LDAP servern och saslauthd:
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:
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