Az adatbázis feltöltése
Kezdjük el feltölteni az adatbázisunkat. Ehhez .ldif
fájlokat fogunk írni, amelyeket egyesével fogunk betölteni.
Természetesen lehetséges egyetlen menetben is elvégezni a
feltöltést, egyetlen .ldif fájlt használva, de most az
átláthatóság kedvéért csináljuk egyesével. Nem fogom minden
betöltéshez leírni a szükséges parancsot, a Groups rész
betöltésénél bemutatott parancsot (és jelszót) kell mindig
használni, csak a betöltendő fájl nevét kell változtatni
értelemszerűen.
Először a csoportok tárolására szolgáló ágat hozzuk létre
(a groups.ldif nevű fájlba).
dn: ou=Groups,dc=akarmi,dc=intra objectClass: top objectClass: organizationalUnit ou: Groups
És maga a betöltés:
ldapmodify -a -x -D 'cn=admin,dc=akarmi,dc=intra' -W -f groups.ldif Enter LDAP Password: adding new entry "ou=Groups,dc=akarmi,dc=intra"
A windowsos tartományvezérlő miatt van erre szükség, itt fognak
tárolódni a tartományba belépett számítógépek
(a computers.ldif nevű fájlba).
dn: ou=Computers,dc=akarmi,dc=intra objectClass: top objectClass: organizationalUnit ou: Computers
A felhasználók tárolására szolgáló ágat hozzuk létre (a
users.ldif nevű fájlba).
dn: ou=Users,dc=akarmi,dc=intra objectClass: top objectClass: organizationalUnit ou: Users
Mivel sambát szeretnénk használni, kénytelenek vagyunk
átnyúlni a samba telepítéséhez, és onnan kiszedni
bizonyos információkat, illetve figyelembe venni a sambával
kapcsolatos dolgokat. Ugyanis ezeket az információkat is
szerepeltetni kell az adatbázisban.
Itt
láthatóak a lekérdezéshez szükséges parancsok és az általuk
visszaadott eredmények.
Hogy ketté tudjuk választani az LDAP-ban és az esetlegesen a
passwd fájlban lévő felhasználókat, hozzunk létre egy
csoportot (az ldapusers.ldif
fájlba).
dn: cn=ldapusers,ou=Groups,dc=akarmi,dc=intra objectClass: top objectClass: posixGroup cn: ldapusers gidNumber: 20000 description: Domain Users group
A tartományi rendszergazdáknak hozzunk létre külön csoportot (a
ntadmins.ldif fájlba).
dn: cn=ntadmins,ou=Groups,dc=akarmi,dc=intra objectClass: top objectClass: posixGroup cn: ntadmins gidNumber: 20001 description: Domain Admins group
A tartományi vendég usereknek hozzunk létre külön csoportot (az
ldapguests.ldif fájlba).
dn: cn=ldapguests,ou=Groups,dc=akarmi,dc=intra objectClass: top objectClass: posixGroup cn: ldapguests gidNumber: 20002 description: Domain Guests group
Ebbe a csoportba fognak tartozni a tartományba belépő gépek (az
ldapmachine.ldif fájlba).
dn: cn=ldapmachine,ou=Computers,dc=akarmi,dc=intra objectClass: top objectClass: posixGroup cn: ldapmachine gidNumber: 20003 description: Domain Computers group
Igaz, hogy van nobody felhasználónk, de a samba nem
tud róla (mivel az LDAP-ban nincs, és a samba csak az
LDAP-val kommunikál). Ezért létre kell hoznunk egy nobody
felhasználót az LDAP adatbázisában is, de unixos dolgokat (mint
például home könyvtár, shell) nem kell neki beállítanunk, az
alábbiak elegendőek (a nobody_user.ldif
fájlba).
dn: uid=nobody,ou=Users,dc=akarmi,dc=intra objectClass: inetOrgPerson objectClass: sambaSamAccount uid: nobody cn: nobody sn: nobody sambaLogonTime: 0 sambaLogoffTime: 0 sambaKickoffTime: 0 sambaPwdCanChange: 0 sambaPwdMustChange: 0 sambaPwdLastSet: 0 sambaBadPasswordCount: 0 sambaAcctFlags: [UX ] sambaSID: S-1-5-21-3140357665-410036179-3970665752-501 sambaPrimaryGroupSID: S-1-5-21-3140357665-410036179-3970665752-514 sambaLMPassword: NO PASSWORDXXXXXXXXXXXXXXXXXXXXX sambaNTPassword: NO PASSWORDXXXXXXXXXXXXXXXXXXXXX
És most adjuk hozzá az első felhasználónkat (de előtte
mindenképpen állítsuk be a tartományvezérlőn a tartományra
vonatkozó alapbeállításokat -
lásd itt.
Ezek az adatok kerüljenek az atkosa_user.ldif nevű
fájlba.
dn: uid=atkosa,ou=Users,dc=akarmi,dc=intra
objectClass: top
objectClass: shadowAccount
objectClass: posixAccount
objectClass: person
objectClass: inetOrgPerson
objectClass: sambaSamAccount
objectClass: MailAlias
uid: atkosa
description: Kosa Attila
cn: Kosa Attila
sn: Kosa
givenName: Attila
mail: atkosa
alias: kosa.attila
alias: attila.kosa
uidNumber: 20000
gidNumber: 20000
homeDirectory: /home/atkosa
loginShell: /bin/bash
shadowMin: 0
shadowMax: 9999
shadowWarning: 7
shadowExpire: 0
shadowLastChange: 13598
sambaLogonTime: 0
sambaLogoffTime: 0
sambaKickoffTime: 0
sambaPwdCanChange: 0
sambaPwdMustChange: 0
sambaPwdLastSet: 0
sambaBadPasswordCount: 0
sambaLogonHours: -1
displayName: Kosa Attila
sambaPasswordHistory: 0000000000000000000000000000000000000000000000000000000000000000
sambaAcctFlags: [U ]
sambaSID: S-1-5-21-3140357665-410036179-3970665752-41000
sambaPrimaryGroupSID: S-1-5-21-3140357665-410036179-3970665752-41001
sambaLMPassword: 0
sambaNTPassword: 0
userPassword: {SMD5}0
A használt attribútumok magyarázata:
- dn - Annak leírása, hogy a ,,fában'' hová kerül a
bejegyzés.
- objectClass - Az alkalmazni kívánt osztályok.
- uid - A felhasználói név, amely a belépésre (a
szolgáltatások igénybevételére) használható.
- description - Egy egyszerű leírás mező.
- cn - A felhasználó teljes neve.
- sn - A felhasználó vezetékneve.
- givenName - A felhasználó keresztneve.
- mail - A felhasználó elsődleges e-mail címe. Azért nem
szerepel benne a
@domain.név, hogy bármilyen domainnek szóló levelet fogad is el a levelezőszerver, abban a domain-ben érvényes név lesz. Ez gondot okozhat, ha virtuális domain-eket is kell kezelnünk, ekkor ajánlott a teljes (domainnévvel kiírt) e-mail cím használata. - alias - A felhasználó összes olyan neve, amelyre leveleket
szeretne kapni. Ugyanazért nem tartalmazza a domain részt, mint
a mail változó.
- uidNumber - A felhasználó azonosítási száma.
- gidNumber - A felhasználó csoportazonosító száma.
- homeDirectory - A felhasználó home könyvtára. Ne
felejtkezzünk el arról, hogy a felhasználó létrehozásakor nem jön
létre automatikusan a home könyvtára! Valahogyan létre kell
hoznunk az összes gépen, amelyeken home könyvtárra van szüksége.
Ebből a szempontból egyedül a levelezőszerver a kritikus. A
többi gépen elégséges, ha a
pam_mkhomedirbeállításával akkor jön létre a home könyvtár, ha a felhasználó belép. De levelek érkezhetnek számára azelőtt is, mielőtt belépne a levelezőszerverre. Apostfixképes a levelek tárolásához szükségesMaildirkönyvtár létrehozására a felhasználó home könyvtárában, de a biztonság kedvéért beletehetjük a/etc/skelkönyvtárba is aMaildirkönyvtárat (a levelezőszerveren).# mkdir /etc/skel/Maildir && chmod 0700 /etc/skel/Maildir
Természetesen az is megoldást jelenthet, ha azokra a szerverekre, amelyeken fontos, hogy a felhasználónak létrejöjjön a home könyvtára, mi magunk ssh-zunk be a felhasználó nevében (hiszen ismerjük a kezdeti jelszavát), így a
pam_mkhomedirlétrehozza a megfelelő jogosultságokkal és tartalommal (a/etc/skelkönyvtár megfelelő ,,feltöltése'' esetén) a felhasználó home könyvtárát. Ehhez persze az kell, hogy minden szükséges gépen azsshúgy legyen beállítva, hogy az LDAP-t használja a felhasználók azonosítására. - loginShell - A felhasználó shell-je. Nem kell, hogy
feltétlenül valódi shell-je legyen a felhasználónak, a
/bin/falseis megteszi. A használni kívánt szolgáltatások függvénye (és a saját döntésünk), hogy adunk-e a felhasználónak shell-t vagy sem. - shadowMin - Két jelszóváltoztatás között minimum ennyi
napnak kell eltelnie. A unixos jelszóra vonatkozik, a sambás
jelszóra nincs hatással.
- shadowMax - Két jelszóváltoztatás között maximum ennyi nap
telhet el.
Tekintve, hogy az utolsó jelszócserétől (shadowLastChange változó) a megengedett leghosszabb ideig (shadowMax változó) érvényes a unixos jelszó, ezért ezek értékét úgy kell megválasztani, hogy az aktuálisan számolt időérték (az 1970. január 01-től eltelt napok száma) kisebb vagy egyenlő legyen, mint a fent említett két változó összege. Egyszerűen a következő parancs segítségével számolható ki ez az összeg:
# echo $[`date +%s` / (60*60*24)]
Ha az így kapott összegnél nagyobb az eltelt napok száma, akkor a felhasználó nem tudja használni a unixos jelszavát, mert lejártnak tekinti a rendszer. Sajnos ebben az esetben az
smbpasswdparancs sem segít (mert az nem változtatja a shadowLastChange mező tartalmát, csak a userPassword mezőét - magyarul a unixos jelszavát), egyedül aroottudja apasswdparancs segítségével megváltoztatni a felhasználó jelszavát.Másképpen mondva: ha a shadowLastChange változó értékét a létrehozásakor beállítjuk a fenti parancs által megadott számra, a shadowMax változóban megadott napig lesz érvényes a unixos jelszava. Persze ha a felhasználónak lehetősége van rá, akkor saját maga is megváltoztathatja a
passwdparancs segítségével a jelszavát6.3, de ehhez először be kell tudnia jelentkezni. - shadowWarning - Ennyi nappal a jelszó lejárata előtt
figyelmezteti a rendszer a felhasználót.
- shadowExpire - Ha nem 0, akkor maximum addig érvényes a
jelszó (1970-01-01-től számolva napokban értendő).
- shadowLastChange - Az utolsó jelszóváltoztatás időpontja
(1970-01-01-től számolva napokban értendő). Értékének
mindenképpen nagyobbnak kell lennie nullánál.
- sambaLogonTime - Jelenleg nem használt mező.
- sambaLogoffTime - Jelenleg nem használt mező.
- sambaKickoffTime - Azt az időt határozhatjuk meg (Unix idő
formátumban), amikor a felhasználó zárolva van és nem tud
belépni. Ha ezt az attribútumot elhagyjuk, akkor a felhasználó
account-ja soha nem jár le. Ha együtt használjuk ezt a
shadowAccount osztály shadowExpire attribútumával,
akkor teljesen pontos dátummal határozhatjuk meg az account
lejáratát.
- sambaPwdCanChange - Azt az időt határozhatjuk meg (Unix
idő formátumban), amikor a felhasználó megváltoztathatja a
jelszavát. Ha ez az attribútum nincs beállítva, akkor a
felhasználó bármikor megváltoztathatja a jelszavát.
- sambaPwdMustChange - Azt az időt határozhatjuk meg (Unix
idő formátumban), amikor a felhasználónak kötelező
megváltoztatnia a jelszavát. Ha ez az érték 0, akkor a
felhasználónak az első belépéskor meg kell változtatnia a
jelszavát. Ha az attribútumot nem használjuk, akkor a
felhasználó jelszava soha nem jár majd le.
- sambaPwdLastSet - Az 1970.1.1-től eltelt időt
tartalmazza másodpercekben, amikor a sambaLMPassword és a
sambaNTPassword attribútumok utoljára változtak.
- sambaBadPasswordCount - A hibás bejelentkezéseket számolja
ebben a mezőben a
samba. Az itt látható bad lockout attempt beállításával lehet meghatározni, hogy hány hibás bejelentkezés után zárolódjon az account. - sambaLogonHours - Ezzel szabályozhatjuk, hogy a
felhasználó mely napokon, és mettől meddig terjedő időszakban
léphet be a tartományba. A bitek jelentéséről részletes leírás
található a
http://pdbsql.sourceforge.net/field-descriptions-passdb.txt fájlban.
- displayName - Windows XP kliens esetén az itt megadott név
fog látszani a Start menü tetején.
- sambaPasswordHistory - A felhasználó által korábban
használt jelszavak MD4 hash-ét tartalmazza.
- sambaAcctFlags - Az account jellemzőit tartalmazó mező. A
lehetséges tartalmát
ebben a fejezetben
láthatjuk. Egyszerre több jelzőt is lehet használni.
- sambaSID - A felhasználó azonosítási száma windowsos
oldalon.
Az itt
látható módon lehet kiszámolni az értékét.
- sambaPrimaryGroupSID - A felhasználó elsődleges
csoportjának Windows oldali azonosítási száma.
Az itt
látható módon lehet kiszámolni az értékét.
- sambaLMPassword - A felhasználó LANMAN windowsos jelszava
16 byte-on tárolva.
- sambaNTPassword - A felhasználó NT windowsos jelszava 16
byte-on tárolva.
- userPassword - A felhasználó unixos jelszava.
Mivel nem írtunk jelszót a felhasználónak, ezért interaktívan kell jelszóval ellátnunk. Ez (a samba ldap passwd sync = yes opciójának köszönhetően) megváltoztatja a unixos és a windowsos jelszavát is a felhasználónak.
# smbpasswd atkosa
Ha úgy szeretnénk generálni a .ldif fájlt, hogy már a
jelszó eleve belekerüljön, akkor szükségünk lesz az
mkntpwd programra
(itt
látható a beszerzése és a fordítása), illetve
az itt
látható slappasswd parancsot kell használnunk. Ebben
az esetben viszont figyelnünk kell rá, hogy mindkét
jelszónak azonosat generáljunk, hogy a felhasználónak ne
legyenek problémái6.4.
Adjuk hozzá az új felhasználónkat az ldapusers csoporthoz.
Ezt az alábbi .ldif fájl segítségével tehetjük meg.
dn: cn=ldapusers,ou=Groups,dc=akarmi,dc=intra changetype: modify add: memberUid memberUid: atkosa
Adjuk hozzá az új felhasználónkat az ntadmins csoporthoz,
hogy adminisztrátori jogokat biztosítsunk számára a windowsos
gépeken. Ezt az alábbi .ldif fájl segítségével tehetjük
meg.
dn: cn=ntadmins,ou=Groups,dc=akarmi,dc=intra changetype: modify add: memberUid memberUid: atkosa
Kosa Attila
2009-03-23