NDS felhasználók beléptetése Linux operációs rendszerbe


Készítette: Bődi Zoltán



Tartalom

Szükséges technológiák
Szükséges szoftverek
A konfigurálás folyamata

NDS
Linux
Hasznos linkek, dokumentumok a témában


 

Ismertető arról, hogyan tudjuk az NDS-beli felhasználókat egy ütemben beléptetni Linux operációs rendszerbe, anélkül, hogy a felhasználónak lenne külön Linuxos azonosítója. Miért fontos ez?

Fontos megjegyzés, hogy e helyen nem foglalkozok NetWare szerver szolgáltatásainak igénybe vételével. Tehát nem akarjuk a szerver köteteit bekapcsolni a Linux fájlrendszerébe, vagy NetWare nyomtatási sorokat használni. A felhasználó a belépés után a Linux szolgáltatásait, fájlrendszerét használja Linuxos jogok, fájlattribútumok adta lehetőségeken belül. A gyakorlatban mindez azt jelenti, hogy egy NDS névvel rendelkező felhasználó a hálózat egy Linux munkaállomásán a login prompt után az NDS-beli nevét, majd az NDS-beli jelszavát adja meg.

A probléma megoldására két lehetőségünk van:

  1. Novell eDirectory Corporate Edition for Linux
  2. LDAP-n keresztüli autentikáció


Az első a Novell terméke, mellyel egy Linux szerveren NDS adatbázist lehet létrehozni, tárolni. Az NDS átveszi a passwd, groups, stb fájlok szerepét. A probléma megoldásához azonban ingyenes szoftverekre volt szükség, ezért a második lehetőséget választottam, és azt ismertetem.
 

Szükséges technológiák


A Linuxon két API telepítésére van szükség, melyek a következők:
PAM
A PAM a Pluggable Authentication Module rövidítése, melynek segítségével bármilyen autentikációs sémát meg lehet oldani, és ezeket a rendszergazda szabályozza.
NSS
Az NSS a Name Service Switch rövidítése. Az NSS lecseréli a tradícionális információkérő szervízeket, tehát a passwd, groups stb fájlok helyett (vagy akár azokból igény szerint) a rendszergazda által kontrollált helyről olvassák az alkalmazások a szükséges információkat.

E két API segítségével lehetséges, hogy a felhasználók teljes egészében, minden tulajdonságukkal az NDS-ben létezzenek. Természetesen a Linuxos alkalmazásokat az APIk támogatására fel kell készíteni, ez a SuSE és RedHat disztribúciókban meg is történt (a többiről nincs információm).

LDAP
Az LDAP a Lightweight Directory Access Protocol rövidítése. E protokoll segítségével bármilyen X.500 alapú címtárhoz hozzáférhetünk egységes felületen. Legtöbbször e-mail kliensekben használják címjegyzék megvalósítására, de több más célra is alkalmas. Esetünkben ennek segítségével kérdezzük le a felhasználók adatait az NDS-ből (név, login-név, home könyvtár, stb).
 

Szükséges szoftverek


Linux
Az említett linuxos technológiát a pam_ldap és az nss_ldap modul valósítja meg. Ha a használt disztribúcióban nincs benne, akkor az Internetről ezeket le kell tölteni, és a csomagban írtak szerint azokat lefordítani és feltelepíteni szükséges.

NetWare
Az NDS felkészítéséhez szükségünk lesz egy szoftverre, amellyel kibővítjük a sémát, és az új attribútumokat ki tudjuk tölteni. A séma bővítéséhez az ndsmgr32 programot javaslom, mely a sys:public\win32 könyvtárban található. Az attribútumok kitöltéséhez a dssnoop vagy a ScheMax szoftver javasolható Windows felületen, míg linux alatt az OpenLdap csomagban megtalálható ldapmodify használható.
intraNetware esetén még szükségünk van egy LDAP szerverre, mely a Novelltől letölhető. A NetWare 5-ben már natív LDAP támogatás található, így ez benne van az operációs rendszerben. (Az LDAP szerver beálítására nem térek ki, a dokumentációban elolvasható. A leírás folyamán az LDAP-t működőképesnek feltételezem.)
 

A konfigurálás folyamata

 

NDS


A linuxnak tudnia kell egy felhasználóról a következő adatokat minimálisan ahhoz, hogy be tudja léptetni:

A probléma az, hogy ezek az információk (jellegükből adódóan) nem találhatók meg az NDS-ben. Hasonló tulajdonságok vannak, de azok nem használhatók erre a célra (A jelszóra is szükség van, de azt NDS-beli jelszót kezeli az LDAP szerver).

Ahhoz, hogy az LDAP szerver ezeket az adatokat szolgáltatni tudja, be kell írnunk azokat az NDS-be, majd az LDAP szervernek meg kell adni az összerendeléseket. Ennek menete a következő:

1. Indítsuk el az ndsmgr32 programot. Itt az NDS partíciónkra kattintunk, és a File menüből el kell indítani a Schema Administratort. Ekkor egy kéthasábos keret jelenik meg, melynek első hasábjában a már meglévő objektum osztályok, a másodikban a meglévő attribútumok láthatók. Indítsuk el az attribútum készítő varázslót, és hozzunk létre négy attribútumot a következő tulajdonságokkal:
Syntax: Case Ignore String
Single Valued, Sized (1..64), String, Synchronize
A neve bármi lehet, de azt javaslom, hogy az első pár karakter utaljon a linuxra (pl LNX), a többi pedig természetesen a tartalmára. Ha a létrehozás után valamit elrontottunk, akkor most még ki tudjuk törölni az attribútumot, később már nem.
Ezután az első oszlopban kattintsunk duplán a User osztályra, majd az Add attribute gombra, és itt az újonnan létrehozott attribútumokat adjuk hozzá a jobb oldali listához. Ezután az attribútumokat nem lehet törölni.

2. A dssnoop programban az NDS browser lapon navigáljunk egy olyan szervezeti egységre, ahol felhasználók vannak, majd az Object Editor lapon válasszunk ki egy teszt felhasználót. Az Attribute listából válasszuk ki az egyik attribútumunkat, a jobb oldali sorba írjuk be az értékét, majd kattintsunk az Add Criteria gombra. Mind a négy attribútum kitöltése után a Modify Object gombra kattintással íródnak be az NDS-be az adatok.

3. Indítsuk el valamelyik Nwadmn programot, és az LDAP telepítése során létrejött LDAP Group - <szerver> objektumra kattintsunk duplán. Itt be kell pipálni az Allow Clear Text Password, vagy Allow NDS user binds sort, verziótól függően. A Class Map lapon létre kell hozni egy “posixAccount” (idézőjel nélkül) LDAP osztályt, majd hozzá kell rendelni a User NDS osztályt. Az Attribute Map lapon hozzuk létre a következő négy attribútumot: uidNumber, gidNumber, loginShell, homeDirectory, majd rendeljük hozzájuk az általunk, az első pontban létrehozott NDS attribútumokat. Az OK-ra kattintva újra kell indítani az NLDAP szervert, és ha nem hibáztunk, akkor az NDS-beli felhasználó elkészült.

4. A következőképpen tesztelhetjük, hogy jól dolgoztunk-e:
A NetScape Communicator címsorába írjuk be a következő URL-t (természetesen a megfelelő adatokkal):
ldap://10.1.1.1/o=iskola??sub?(cn=<teszt user>)
Ekkor a következő sorokat kell minimálisan kapnunk (a megfelelő adatokkal), hogy a dolog működjön (természetesen ettől több is lehet, és a sorrend nem fontos):

gidNumber         100
uidNumber         502
loginShell        /bin/bash
homeDirectory     /home/bude
Last Name         Bodi Zoltan
Object Class      posixAccount
                  organizationalPerson
                  person
                  top
Name              bude

Ha nem ilyen az eredmény, akkor nézzük át az LDAP beállításokat, valószínűleg abban van a hiba.
 

Linux


Hogy az LDAP-n keresztüli belépés működjön, fel kell telepítenünk az nss_ldap, és a pam_ldap csomagokat. Az újabb disztribúciókban ezek már rpm csomagként benne vannak. Ezekkel kapunk minta konfigurációs állományokat. Egy gépre javaslom feltenni az openldap csomagot is, mert ebben van az ldapmodify program, amellyel később automatizálhatjuk az NDS felhasználók adatainak kitöltését.

A konfiguráció menete a következő:

1. Az /etc/openldap/ldap.conf –ban ki kell töltenünk az LDAP szerver adatait. A mintaadatok útmutatást adnak, az értelemszerű kitöltés egyszerű. Ha még nincs ilyen állományunk, az nss_ldap csomagban van minta.

2. Ha feltelepítettük az nscd csomagot (Name Service Cache Daemon, amely mint a nevéből is kitűnik, a Name Service kéréseket cache-eli), akkor a következő sorokat módosítsuk az /etc/nscd.conf -ban:
suggested-size passwd 9973
keep-hot-count passwd 200
Erre azért van szükség, mert előfordulhat, hogy a kis cache miatt nem megfelelő értékeket kap vissza az NSS, és emiatt nem fog megfelelően működni. (A tesztelés folyamán le is állíthatjuk ezt a démont, hogy biztosan ne zavarjon.)

3. Az /etc/nsswitch.conf –ban a passwd sorba a többi paraméter elé írjuk be az “ldap”-t. Ez azt jelenti, hogy a passwd fájl előtt (helyett) az LDAP szervertől kérjük a felhasználók adatait. A fájl tartalmának magyarázatát a “man nsswitch.conf” paranccsal tudhatjuk meg részletesen.

Ezután megint tesztelhetjük munkánk eredményét. Az ldap kérések működését az ldapsearch paranccsal próbálhatjuk ki, amely parancsról szintén van man oldal. A fenti URL-lel egyező parancs:
ldapsearch –h 10.1.1.1 –b o=iskola –s sub “cn=bude”
Itt ugyanolyan eredményt kell kapnunk, mint a már bemutatott böngészős próba szerint.
Az NSS működését az nss_ldap csomagban található ldaptest.pl perlben íródott programmal próbálhatjuk ki. Nyissuk meg a programot szerkesztésre, és a “root” felhasználó helyett írjuk be az NDS-beli teszt-felhasználónk nevét, kontextus nélkül, a 0 UID szám helyére a felhasználónak általunk adott számát. A program kimenetét irányítsuk át logfájlba, és ehhez hasonló sorokat kell látnunk az elején:

*** getpwnam ***
bude x 502 100   bude /home/bude /bin/bash
*** getpwuid ***
bude x 502 100   bude /home/bude /bin/bash
*** setpwent ***
*** getpwent ***
bude x 502 100   bude /home/bude /bin/bash

A lista még folytatódik, a lényeg, hogy a teszt felhasználónk benne legyen. Láthatjuk, hogy itt már a passwd fájl tartalmához nagyon hasonló kimenetet kaptunk.
Ezután, ha létrehozzuk a teszt-felhasználónk részére a linuxos home könyvtárát, akkor megpróbálhatunk bejelentkezni is vele, jó eséllyel sikerülni fog. A bejelentkezés során a login nevet kontextus nélkül kell megadni, jelszónak természetesen az NDS-beli jelszót szükséges megadni.

4. Ezután a PAM segítségével beállíthatjuk az autentikációs sémát. Ehhez érdemes elolvasni a PAM dokumentációját. Egy általam használt login fájl:

#%PAM-1.0
auth       required     /lib/security/pam_securetty.so
auth       required     /lib/security/pam_nologin.so
auth       sufficient   /lib/security/pam_ldap.so
auth       required     /lib/security/pam_unix_auth.so try_first_pass
account    sufficient   /lib/security/pam_ldap.so
account    required     /lib/security/pam_unix_acct.so
password   required     /lib/security/pam_cracklib.so
password   required     /lib/security/pam_ldap.so
password   required     /lib/security/pam_unix.so strict=false
session    required     /lib/security/pam_mkhomedir.so
session    required     /lib/security/pam_unix_session.so

Természetesen a pam_ldap csomagban találunk példákat, amit bemásolva az /etc/pam.d könyvtárba, majdnem készen is vagyunk. érdemes jól betesztelni a különböző programokat (ftp, xdm, stb), nehogy később meglepetés érjen.
Fehívom a figyelmet az mkhomedir-t tartalmazó sorra. Ez a modul automatikusan létrehozza a felhasználó home könyvtárát, ha az nem létezik. Alapértelmezésként az /etc/skel könyvtárat másolja át, de paraméterként mást is adhatunk neki. így a könyvtárlétrehozás elég nagy terhe sem nehezedik a vállunkra.

Ha az egész procedúrát végigküzdöttük, akkor elértük a kitűzött célt: az NDS-beli felhasználók be tudnak Linux operációs rendszerbe a jelszavukkal. Probléma lehet még a több száz felhasználó adatait kitölteni az NDS-ben. Ehhez a már említett ldapmodify programot javaslom. Megfelelő szkriptekkel készíthetünk olyan bemeneti fájlokat, melyből a ldapmodify kitölti a megfelelő attribútumokat. Ehhez javaslom elolvasni az ldapmodify dokumentációját. Ezzel a lépéssel tulajdonképpen más, NDS-sel kapcsolatos adminisztrációs munkát is jelentősen le tudunk rövidíteni, ha nagy tömegben kell adatokat változtatni, gondoljunk például a tanév eleji felhasználói objektumok létrehozására. (Lehetőség van az attribútumokat kitölteni az nwadmin-nal, ha feltelepítjük a ScheMax szoftvert.)
 

Hasznos linkek, dokumentumok a témában


LDAP:
http://www.ldapcentral.com/
http://www.kingsmountain.com/ldapRoadmap.shtml
http://www.innosoft.com/ldapworld/
RFC 2307, 2251, 2252, 2254, 2256, 1558