TESTOMGIVNING

 

ALLMÄNT

LDAP katalogtjänsten kan användas för många olika syften i ett Unix nät. Mycket vanligt är att den används som autenikeringsserver för någon typ av inloggningstjänst,  t.ex. SSH. Inför vår muntliga presentation av detta arbete bestämde vi oss för att lite nogrannare ta reda på hur man hanterar en Linux LDAP server genom att sätta upp en testserver och konfigurera den att fungera som en autentikeringsserver för just SSH-inloggning. Bilden nedan är visar en karta över vår testomgivningen.

I testomgivningen ligger SSH- och LDAP servern fysiskt på en och samma dator i Arcadas studentnät men fungerar logiskt som om de vore åtskilt. Som SSH klient använde vi flera olika datorer i studentnätet, bl.a. penti.sit.fi.
 
 
 

INSTALLATION AV PROGRAMVARA

Inledningsvis måste behövlig mjukvara för att kunna hantera och sätta upp en LDAP databas installeras. På serverdatorn använde vi operativsystemet Redhat 9.0. En gratis programvara, Openldap, kan laddas ner från www.openldap.org , varifrån vi laddade ner den för tillfället nyaste versionen, Openldap 2.1.23. Förutöver LDAP programvara behöver också databasprogramvara laddas ner och installeras som LDAP katalogtjänsten kan använda för att lagra information i. Vi laddade ner BerkeleyDB 4.2.50 från www.sleepycat.com.
 

Installation av BerkeleyDB-4.2.50

Packar upp programpaketet 
/root/  tar -zxf db-4.2.50.tar.gz

Kompilerar och installerar programpaketet: 
/root/db-4.2.50/dist/   ./configure
/root/db-4.2.50/dist/   ./make
/root/db-4.2.50/dist/   ./make install
 

Installation av Openldap-2.1.23

Packar upp programpaketet 
/root/  tar -zxf openldap-2.1.23.tgz
 
 

Konfigurera paketet för kompilering 
/root/openldap-2.1.23/   ./configure

OBS! Om en föråldrad version av BerkeleyDB finns installerad från tidigare måste man berätta för configure kommandot var den skall hämta behövliga biblioteks- och källfiler för den rätta version en av BerkeleyDB 
root/db-4.2.50/dist/   env CPPFLAGS="-I/usr/local/BerkeleyDB/include" \
LDFLAGS="-L/usr/local/BerkeleyDB/lib" ./configure 

Kompilera och installera 
/root/openldap-2.1.23/   ./make depend
/root/openldap-2.1.23/   ./make
/root/openldap-2.1.23/   ./make install
 
 
 
 

KONFIGURATIONER

LDAP servern 

Innan ett katalogträd/en databas kan börja byggas upp måste LDAP servern konfigureras. Den viktigaste och den enda konfigureringsfil vi konfigurerade på vår testserver heter slapd.conf i vilken man bl.a. specificerar hur LDAP klienter skall kunna kommunicera med LDAP servern. 

/usr/local/etc/openldap/slapd.conf:
-----------------------------------------------------------------------------------------------------------------
.
.
#Inkluderingsfiler där objektklasserna bl.a. PosixAccount, PosixGroup och InetOrgPerson
#definieras
include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
include         /usr/local/etc/openldap/schema/nis.schema
.
.
#######################################################################
# ldbm database definitions
#######################################################################

database        bdb

#Landssuffix, och domännamn för databasen
suffix            "dc=arcada,dc=fi"

#Managern/ägeren av databasen
rootdn          "cn=Manager,dc=arcada,dc=fi"

# Cleartext passwords, especially for the rootdn, should
# be avoid.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.

#Lösenord för LDAP servern (behövs av klienter vid modifiering av data i katalogträdet)
rootpw          losen

# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory       /usr/local/var/openldap-data
# Indices to maintain
index   objectClass     eq
-----------------------------------------------------------------------------------------------------------------

Raderna ovan är endast delar av konfigureringsfilen slapd.conf. De rader vi modifierat är kommenterade med svensk text. 
 

SSH servern/LDAP klienten

LDAP klienten och SSH servern måste konfigureras så att de kan hämta användarinformation ur databasen på LDAP servern i stället för ur det lokala systemet. För att göra detta måste följande konfigureringsfiler modifieras: 

Konfigurationsfilen /etc/nsswitch.conf berättar för namnservicen på en Linux dator varifrån den skall hämta användarinfo såsom: användarnamn, lösenord, användargrupper m.m. De attribut som i standard nsswitch.conf ser ut så här... 

passwd:     files 
shadow:     files
group:      files 
protocols:  files 
services:   files 
netgroup:   files 
automount:  files 

...bör ändras till: 

passwd:     files ldap
shadow:     files ldap
group:      files ldap
protocols:  files ldap
services:   files ldap
netgroup:   files ldap
automount:  files ldap
 

Konfigurationsfilen /etc/ldap.conf definierar för LDAP klienten LDAP serverns ip-adress samt hur kommunikation skall ske med servern. Följande rader modifierades för testomgivningen: 

host 193.167.32.168 #ipadress för LDAP server
base dc=arcada,dc=fi #huvudingångeh till katalogträdet
rootbinddn cn=Manager,dc=arcada,dc=fi #katalogtjänstens 'ägare'
port 389 #standardport för LDAP server

Konfigurationerna ovan (nsswitch.conf och ldap.conf) kan i operativsystemet, Redhat 9.0, också göras via ett grafiskt gränssnitt som startas från en konsol med kommandot authconfig
 

Modulen pam_ldap.so behövs för att olika services skall kunna utföra autentikering mot en LDAP server. Denna modul skall konfigureras skilt för varje service. I vår testomgivning konfigurerade vi denna modul för SSH serverdemonen (SSHD) via konfigurationsfilen /etc/pam.d/sshd genom att tillsätta följande rader: 

auth       sufficient   pam_ldap.so
account    sufficient   pam_ldap.so
 
 
 

DATABASEN UPPBYGGNAD

När alla konfigurationer är gjorda gäller det att börja fundera på hur man kan bygga upp en lämplig databas i vilken man kan lagra användarkonton och användargrupper. Trädstrukturen nedan visar hur vi för vår testomgivning byggt upp databasen. Huvudingången är landssuffixet (fi) och så har vi en demo organisation som heter Arcada. Arcada är uppdelad i tre organisationsenheter: studenter, personal och användargrupper. I organisationsenheten finns två användarkonton och under personal finns ett användarkonto registrerat. Organisationsenheten, användargrupper, består av grupperna IT, och EL. 

Kalalogstrukturen som bilden visar byggs upp på följande sätt: 

För att kunna skapa ingångar (entries) i ett LDAP katalogträd måste man först skapa en s.k. "ldif fil" vilken man sedan använder som argument till kommandot ldapadd. Denna fil ser för vår testomgivning ut så här: 
 

-----------------------------------------------------------------------------------------------------------------
demo.ldif

#Huvudingång till katalogtjänsten: Organisation Arcada i domänen 
#arcada.fi
dn: dc=arcada, dc=fi
objectClass: dcObject
objectClass: Organization
dc: arcada
o: Arcada

#Manager för Katalogtjänsten
dn: cn=Manager,dc=arcada,dc=fi
objectClass: organizationalRole
cn: Manager

#Organisationsenhet: studenter
dn: ou=studenter,dc=arcada,dc=fi
objectClass: organizationalUnit
ou: studenter

#Organisationsenhet: personal
dn: ou=personal,dc=arcada,dc=fi
objectClass: organizationalUnit
ou: personal

#Organisationsenhet: grupper
dn: ou=grupper, dc=arcada, dc=fi
objectClass: organizationalUnit
ou: grupper

#En användargrupp: IT 
dn: cn=it,ou=grupper,dc=arcada,dc=fi
objectClass: posixGroup
cn: IT
gidNumber: 755
memberUid: jonny
memberUid: karlssoh

#En användargrupp: EL
dn: cn=el,ou=grupper,dc=arcada,dc=fi
objectClass: posixGroup
cn: EL
gidNumber: 756
memberUid: kalle

#Användarkonto för person som tillhör organisationsenheteten: studenter 
#och 
#användargruppen: IT
dn: uid=jonny, ou=studenter, dc=arcada, dc=fi
objectClass: inetOrgPerson
objectClass: posixAccount
uid: jonny
sn: Karlsson
loginShell: /bin/bash
uidNumber: 1055
gidNumber: 755
homeDirectory: /home/jonny
userPassword: Anvandare1
cn: Jonny Karlsson

#Användarkonto för person som tillhör organisationsenheteten: studenter
#och
#användargruppen: EL
dn: uid=kalle,ou=studenter,dc=arcada,dc=fi
objectClass: inetOrgPerson
objectClass: posixAccount
uid: kalle
sn: Elstolpe
loginShell: /bin/bash
uidNumber: 1056
gidNumber: 756
homeDirectory: /home/kalle
userPassword: Anvandare2
cn: Kalle Elstolpe

#Användarkonto för person som tillhör organisationsenheteten: personal
#och
#användargruppen: IT 
dn: uid=karlssoh, ou=personal,dc=arcada,dc=fi
objectClass: inetOrgPerson
objectClass: posixAccount
uid: karlssoh
sn: Karlsson
loginShell: /bin/bash
uidNumber: 1057
gidNumber: 755
homeDirectory: /home/karlssoh
userPassword: Anvandare3
cn: Hanne Karlsson
-----------------------------------------------------------------------------------------------------------------

När "ldif filen" är klar kan man sätta in strukturen i databasen med kommandot: 
ldapadd -x -D "cn=Manager, dc=arcada, dc=fi" -f demo.ldif -w ldaplosenord

Men före det måste LDAP serverdemonen startas med kommandot: 
/usr/local/etc/libexec/slapd

I det här skedet är databasen redo för testning. Man kan göra en lokal sökning i databasen, t.ex. med kommandot: 
ldapsearch -x -b "dc=arcada, dc=fi" Vilket listar alla ingångar i databasen som hör till landssuffixet "fi" och organisationen Arcada. 
 
 
 

NOTERINGAR

Värt att notera är att denna testomginving är ofullständig på så sätt att hemkataloger fattas på  SSH servern. Dessa kan givetvis skapas manuellt på servern men meningen var att även dessa skulle specificeras i LDAP databasen. Attributet homeDirectory (se "ldif-filen") antar att den givna hemkatalogen redan finns skapad på SSH servern i fråga och skapar inte ny ifall denna fattas. Om hemkatalogen kunde skapas via LDAP servern kunde samma LDAP server med samma användarkonton kunna fungera som autentikeringsserver för flera SSH servrar. Vi har läst att man kan förverkliga detta men hittade ingen information om HUR det skall förverkligas. 
 


<<   >>