5. A rendszer felhasználói
 
Az előző fejezetekben telepítettünk egy GNU/Linux operációs rendszert. Rendszerünk Internet kapcsolattal és nagy tárhellyel is rendelkezik. Elsősorban ezeket szeretnénk a hálózatba kapcsolt többi számítógépen felhasználóink számára elérhetővé tenni. Mielőtt további programokat telepítenénk, oldjuk meg, hogy a hálózatba kapcsolt többi munkaállomáson felhasználói név és jelszó megadásával elérhető legyen az Internet. Ehhez létre kell hozni a felhasználókat a rendszeren.
Felhasználók létrehozása előtt ejtsünk néhány szót a Linux operációs rendszer felhasználó-kezeléséről. A Linux a felhasználói azonosítókat az /etc/passwd állományban tárolja. Ez egy szöveges állomány, minden sora egy felhasználó adatait tartalmazza. A következő bekezdés a passwd állomány egy lehetséges sorát mutatja.
 
atti44:x:509:510:Kovacs Attila:/home/atti44:/bin/bash
 
A kettősponttal elválasztott mezők jelentése a következő:
 
1.  Felhasználói név
2.  Régebben a kódolt jelszót tárolta a rendszer ebben a mezőben. Shadow password használata esetén (napjainkban szinte minden Linux használja) itt egy x karaktert látunk.
3.  Felhasználói azonosító (UID)
4.  A felhasználó elsődleges csoportazonosítója (GID)
5.  A felhasználó neve
6.  A felhasználó saját könyvtára
7.  A felhasználó által használt héjprogram
 
A passwd állomány első sorában a root felhasználó adatait tartalmazó sort találjuk, az 500-nál alacsonyabb felhasználói azonosítóval a rendszerfelhasználók rendelkeznek. Az első felhasználó, aki azonosítót kap a rendszerhez 500-as UID-et kapja, a második 501-et és így tovább.
A felhasználói csoportok nyilvántartására szolgáló /etc/group állomány is hasonló felépítésű: az első mezőben a csoport nevét látjuk, a negyedikben csoporthoz tartozó összes felhasználói nevet, vesszővel elválasztva. Mindkét állomány minden felhasználó számára olvasható, de módosítani csak a root tudja őket.
A jelszavakat a rendszer titkosítva tárolja az /etc/shadow állományban. Ez csak a root számára olvasható. A következő három parancs a három állomány tulajdonságait mutatja.
 
[root@server etc]# ls -l /etc/passwd
-rw-r--r--  1 root root 1851 Dec  2 18:04 /etc/passwd
[root@server etc]# ls -l /etc/group
-rw-r--r--  1 root root 706 Dec  2 18:04 /etc/group
[root@server etc]# ls -l /etc/shadow
-r--------  1 root root 1261 Dec  2 18:04 /etc/shadow
 
 
    5.1. Felhasználói csoportok létrehozása
 
A felhasználók létrehozása előtt tervezzük meg, hogy milyen csoportokba rendezzük felhasználóinkat. A tanulókat érdemes osztályonként csoportokba foglalni. Csoportneveknek ne használjuk az osztályazonosítókat, hiszen akkor a 8b csoportot jövőre át kellene nevezni 9b-re. Szerencsésebb, ha olyan csoportazonosítókat használunk, ami egyértelműen azonosítja az osztályt tanulmányaik évei alatt. Például a g1998b csoport jelentheti azt az osztályt, amelyik 1998-ban kezdte meg tanulmányait.
Indítsuk el a Terminal programot (Alkalmazások / Kellékek / Terminál) és kérjünk root jogosultságot a "su –" paranccsal:
 
[pferi@centos5 ~]$ su -
Jelszó:
[root@centos5 ~]#
 
Hozzuk létre a tanár csoportot és az osztályok csoportjait a groupadd paranccsal.
 
[root@centos5 ~]# groupadd tanar
[root@
centos5 ~]# groupadd g2002a
[root@
centos5 ~]# groupadd g2001b
 
Más módon is azonosíthatjuk a csoportokat, de ebben a jegyzetben tárgyalt több funkció csak akkor fog megfelelően működni, ha a tanárok csoportjának a neve tanar, az osztályok csoportnevei g betűből, évszámból és egy betűből (a, b, c vagy d) állnak. Más csoportnevek esetén módosítani kell a felhasználók létrehozását és törlését megvalósító szkripteket.
 
 

    5.2. Felhasználók létrehozása
 

Minden osztályt és a tanárok csoportját létrehozva, hozzákezdhetünk a felhasználói azonosítók létrehozásához. Szerencsés, ha felhasználók egyedül választhatnak azonosítót, és nem mi határozzuk meg önkényesen azokat. Az alapvető szabályokat elmagyarázva a felhasználóknak (max. 12 karakter, az angol ábécé kisbetűi és számok) kitöltik a jelentkezési ívet, beírva nevüket és az igényelt felhasználói nevet. Gyakran hasznos, ha tanárok ás a tanulók azonosítói formailag is különböznek, például a tanulói azonosító utolsó karaktere lehet szám.

A szerver üzembe helyezésekor a csoportok és a felhasználók létrehozása nagy odafigyelést és sok munkát igényel a rendszergazdától, de a következő évben már csak az új csoportokat kell felvenni. A jelentkezési ívek alapján létrehozzuk a felhasználókat.

Grafikus felületen is létrehozhatunk felhasználókat, de én inkább az alábbi programot javaslom a felhasználók létrehozására. Ebben a jegyzetben bemutatott szerver funkciók nagy része csak akkor fog megfelelően működni, ha ezt használjuk. A program a felhasználók létrehozása mellett a több később tárgyalt állományt létrehoz és beállítást végrehajt.

A program bekéri a felhasználó csoportját majd a teljes nevét és a felhasználói nevet. Természetesen a felhasználói névnek egyedinek kell lennie, ha már létezik a rendszeren a beírt felhasználó, figyelmeztet erre és kilép. A belépési jogot a szerverre csak az informatika tanároknak adjunk, egyszerű felhasználóknak nem!

A program (valójában egy egyszerű bash script) könnyen megérthető és igény szerint módosítható. Töltsük le az Internetről a következő  állományt: http://kmf.uz.ua/centos/gui/server5.zip

Indítsuk el a teminált és kérjünk root jogosultságot ("su -" parancs). A Midnight Commander segítségével másoljuk a server5.zip csomagból az uj_felhasználo.scp állományt a /root könyvtárba (Enter-el beléphetünk a zip állományba, mint könyvtárba, 5.1. ábra)

 

uf
5.1. ábra
 
A bal Ctrl+O billentyűkombinációval elrejthetjük az mc ablakát. Ismételten alkalmazva visszaválthatunk a Midnight Commander-be. Adjuk ki a következő parancsot :

 
[root@centos5 ~]# chmod u+x uj_felhasznalo.scp
 
Ezzel futási jogot biztosítottunk magunknak, vagyis a program futtatható. Elindításához a teljes elérési útját ki kell adni. Esetünkben ez a /root/uj_felhasznalo.scp, vagy a ./uj_felhasznalo.scp, amennyiben az aktuális könyvtár a /root.
Hozzuk létre a következő két felhasználót az uj_felhasznalo.scp program segítésével:
 
Csoport Név Felhasználói név Belépési jog
tanar Proba User1 proba2 N
tanar Proba User2 proba5 N
 
Az első felhasználó létrehozásakor különböző angol nyelvű figyelmeztető üzenetek jelennek meg a terminál ablakában, a második esetében viszont már nincsenek ilyenek (5.2. ábra).
 

pf
5.2. ábra
 
A képen kerettel vannak jelölve azok az adatok, amelyeket nekünk kell megadni. Ezek a következők: csoport, teljes név, felhasználói név és belépési jogosultság. A belépési jog ebben az esetben azt jeleni, hogy a felhasználó magán a kiszolgálón be tud jelentkezni. Ezt a jogot csak azoknak a tanároknak biztosítsuk, akiknek erre valóban szükségük van.
A felhasználói adatokat a program beírja a /root/felhasznalok.txt állományba, minden felhasználót egy új sorba, a mezőket egymástól ” | ” jellel elválasztva. Listázzuk ki a /root/felhasznaluk.txt állományt:
 
[root@centos5 ~]# cat felhasznalok.txt
tanar | Proba User1 | proba2 | 09 aug 08 | /bin/false | 501 | Wufjx8
tanar | Proba User2 | proba5 | 09 aug 08 | /bin/false | 502 | 64RqMa
 

A mezők jelentése sorrendben a következő: csoport, név, felhasználói név, létrehozás dátuma, héjprogram, azonosító, jelszó. Ez a fájl majd megkönnyíti számunkra a jelszavak kiosztását: kinyomtatva, a papírt sorokra vágva a felhasználóknak az utolsó, jelszó mezőt átadva. Természetesen minden felhasználónak csak a saját jelszavát. Biztonsági szempontból nem szerencsés, ha a felhasználói név és a jelszó együtt szerepel, tehát az egész sort ne adjuk át a felhasználónak. A jelszavak átadásánál hívjuk fel a felhasználók figyelmét arra, hogy azt tartsák titokban, soha senkinek ne mondják meg.

A proba2 és a proba5 felhasználónak speciális szerepe van a rendszerünkön. A további felhasználók létrehozása előtt állítsuk be tárkorlátot a /home könyvtárat tartalmazó lemezrészen.
 
    5.3. Tárkorlátok beállítása: a quota
 
A felhasználók által felhasznált lemezterület célszerű korlátozni. Ha nem korlátoznánk a lemezterületet, egyes felhasználók elfoglalhatnák az egész lemezrészt, lehetetlenné téve a többi felhasználó munkáját. Mivel a felhasználók csak a saját könyvtárukba írhatnak adatokat, a /home könyvtárra fogunk tárkorlátot, kvótát (angolul quota) alkalmazni.
Indítsuk el root-ként a Midnight Commander-t és nyissuk meg szerkesztésre az /etc/fstab állományt. Keressük meg a /home lemezrészt meghatározó sort:

LABEL=/home     /home    ext3    defaults        1 2

A defaults szó után írjuk a userquota,grpquota szavakat vesszővel elválasztva:

LABEL=/home     /home    ext3    defaults,usrquota,grpquota       1 2

Mentsük az állományt, aztán adjuk ki a következő parancsokat:

[root@centos5 etc]# touch /home/aquota.user /home/aquota.group
[root@centos5 etc]# chmod 600 /home/aquota.*
[root@centos5 etc]# mount -o remount /home
[root@centos5 etc]# quotacheck -avugm

Az elsővel létrehozzuk a quota adatokat tároló állományokat. A jogosultságok beállítása után újracsatoljuk a lemezrészt. A negyedik parancs lemezkorlát-nyilvántartás ellenőrzését végzi. Ilyenkor a rendszer kigyűjti a felhasználók által használt területek nagyságát. A parancs kiadása után különböző figyelmeztetések jelennek meg a képernyőn, majd a következő szöveg:

quotacheck: Scanning /dev/hda7 [/home] done
quotacheck: Checked 142 directories and 560 files

(természetesen a számok különbözhetnek)
Kapcsoljuk be a kvótát:

[root@centos5 ~]# quotaon -avug
/dev/hda7 [/home]: group quotas turned on
/dev/hda7 [/home]: user quotas turned on

A rendszer kész tárkorlátok kezelésére, minden felhasználóhoz lemezkorlátot rendelhetünk. A kiszolgálónkon tanároknak 500 Mb-ot, tanulóknak 200 Mb-ot fogunk biztosítani.
(A felhasználók számának és a /home partíció méretének függvényében ettől eltérő értékeket is meghatározhatunk.)
Ezeket az értékeket is az uj_felhasznalo.scp program fogja beállítani, úgy, hogy minden tanulónak olyan tárkorlátot állít be mint proba2-nek van, és minden tanárnak olyat mint proba5-nek. Ehhez először a proba2 és a proba5 felhasználóknhoz kell tárkorlátot rendelni. Adjuk ki a következő parancsot:


[root@centos5 ~]# setquota -u proba2 200000 250000 0 0 -a

Ezzel beállítottuk proba2 nevű felhasználónak 200 Mb-os kvótát amit egy bizonyos ideig átléphet 250 Mb-ig. Ezt az időt türelmi vagy méltányossági időnek nevezhetjük (grace period). Alapértéke hét nap.
Állítsuk be proba5 felhasználó tárkorlátait hasonlóképpen:
 
[root@centos5 ~]# setquota -u proba5 500000 550000 0 0 -a

 A repquota -a paranccsal lekérdezzük a beállított értékeket:
 
[root@centos5 ~]# repquota -a
*** Report for user quotas on device /dev/sda7
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --  197980       0       0              8     0     0
pferi     --   56884       0       0            675     0     0
proba2    --      32  200000  250000              8     0     0
proba5    --      36  500000  550000              9     0     0
 
Látjuk, hogy a proba userek megkapták a korlátozott értékeket. A root és pferi sorokban a 0 azt jeleni, hogy rájuk semmilyen tárkorlátozás nem vonatkozik. Ők a lemezterület tetszőleges részét elfoglalhatják.
Természetesen a
/home lemezrész méretétől és a felhasználók számától függően más kvótaértékeket is meghatározhatunk.

 
    5.4. A tesztkörnyezet felhasználóinak létrehozása
 
A rendszer működésének ellenőrzéséhez a próbaszerveren létrehoztam három csoportot: tanar, g2002a, g2001a. Értelemszerűen a tanar csoportban tanárok vannak, a két g-vel kezdődő csoport két osztály tanulóit tartalmazza. A minden csoportba 4-4 felhasználót vettem fel. A szerver beállításakor, természetesen, nem szükséges ezt a mintát pontosan követni, létrehozhatunk valódi csoportokat és felhasználókat, de az éles üzemmód előtt mindenképp javaslok egy próbát.
Az uj_felhasznalo.scp programmal felvettem az alábbi 12 felhasználót:
 
tanar g2002a g2001b
Kovacs Lajos kovacslajos Szabo Hajnalka hajni04 Sinko Lajos sini55
Nagy Peter nagypeti Szegedi Pál szepi3 Solymos Kata lala4
Hideg Robert hrobi Ligeti Lajos lajcsi5 Nagy Aladar ala15
Biro Anna biroanna Nagy Piroska piri14 Molnar Istvan isti8
 
Nézzük meg, hogy a quota beállítások megfelelőek-e:
 
rq
5.3. ábra
 
Látjuk, hogy a tanárok 500, a diákok 200 Mb-os tárkorlátot kaptak. A program elkészített néhány szöveges állományt az /etc/squid/csoportok könyvtárba.
Minden létrehozott csoport nevével létrejött egy txt állomány, amelyek a felhasználói neveket tartalmazzák. A tanulok.txt minden tanuló felhasználói nevét tartalmazza. Ellenőrizzük az állományokat kiadva a következő parancsokat (5.4. ábra):
 
sqcs
5.4. ábra

Ezek a fájlok megkönnyítik a későbbi munkánkat a csoportokkal.
Listázzuk ki a felhasznalok.txt állományt (5.5. ábra):
 
catfelh
5.5. ábra
 
Figyeljük meg, hogy a próbarendszeren senki sem kapott jogot a belépésre a kiszolgálón (/bin/false oszlop). Az utolsó oszlopban látjuk a generált jelszavakat.
 
    5.5. Jelszavak módosítása
 
A rendszergazda bárki jelszavát megváltoztathatja a passwd paranccsal. Változtassuk meg isti8 felhasználó jelszavát:
 
[root@centos ~]# passwd isti8
Changing password for user isti8.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
 
Az új jelszót kétszer be kell írni. A későbbiekben látni fogjuk, hogy a passwd paranccsal meghatározott jelszó az Internet hozzáférést biztosítja a felhasználóknak, az smbpasswd -a paranccsal pedig azt a jelszót határozzuk meg, amivel a saját HOME könyvtárukhoz férhetnek hozzá. Alapértelmezés szerint ez a két jelszó megegyezik. Módosítsuk isti8 samba jelszavát:
 
[root@centos ~]# smbpasswd -a isti8
New SMB password:
Retype new SMB password:
[root@centos ~]#
 
Egy felhasználó hozzáférését a rendszerhez ideiglenesen kikapcsolhatjuk, ha megváltoztatjuk a jelszavát.
Később telepítünk egy programot, amivel a felhasználók önállóan módosíthatják jelszavaikat webes felületen.
 
    5.6. Az uj_felhasznalo.scp szkript
 

Ebben a részben részletesebben tárgyaljuk az uj_felhasznalo.scpszkript működését. A kiszolgáló megvalósításához nem feltétlen szükséges ennek az ismerete. Mégis azt javaslom, hogy tekintsük át a működésének lépéseit.

A szkript lényegében egy futási tulajdonsággal rendelkező szöveges állomány, amelynek minden sora parancsot vagy parancsokat tartalmaz. A # karakterrel kezdődő sorok magyarázószövegek, azokat a rendszer nem dolgozza fel. Ez alól kivétel az első sor, itt a kettős kereszt és a felkiáltójel után az értelmező program teljes elérési útját adjuk meg, ami végrehajtja a parancsokat. Esetünkben ez a BASH.

A Midnight Commander editorában megnyitott szkripet könnyebb elemezni, hiszen a parancsok és a speciális sorok eltérő színnel vannak megjelenítve. A parancsok sárga színnel és félkövéren, a megjegyzések pirosan, a változók pedig zölden jelennek meg (5.6. ábra).

mcedit bash

5.6. ábra

A clear parancs letörli a terminal ablak tartalmát, az echo pedig - ha paraméter nélkül használjuk - egy üres sort jelenít meg. Ez után a három echo parancs három sorban szöveget jelenít meg a képernyőn.

A read parancs segítségével a program bekéri a csoport nevét, ekkor a képernyőn villog a kurzor és a beírt karaktereket - az Enter leütése után - a program GP váltózóként jegyzi meg. A programban ezután a csoport nevét $GP –ként használhatjuk.

A program ezután leellenőrzi, hogy az általunk megadott csoport valóban létezik. Ehhez a GFOG változót vezeti be. Ez a változó olyan értéket fog felvenni, ami annak a parancsnak végrehajtásaként létrejön, ami a két fordított idézőjel között található. Látjuk, hogy az mc belső szerkesztője, az mcedit az ilyen programrészletet fekete háttérszínnel jelöli. Vizsgáljuk meg ezt a parancsot részletesebben:

 
grep -w '^g[1-2][0-9][0-9][0-9][a-z]\|^tanar' /etc/group | grep -w ^$GP | wc -c
 
Valójában itt három parancsot látunk, egymástól ” | ”  karakterrel elválasztva. Mint már említettem az előző fejezetben, ez azt jelenti, hogy az első parancs eredménye ahelyett, hogy a képernyőn jelenne meg, a második parancs bemenete lesz. Ezt a megoldást csővezetéknek vagy pipe-nak szokták nevezni. Esetünkben még egy harmadik parancs is van, tehát a második eredménye lesz a harmadik bemenete.

A grep parancs egy szűrőt valósít meg. Itt a w paraméterrel kiadva (w – teljes szóegyezés) csak olyan sorokat enged át az /etc/group állományból, amelyek a g betűből, évszámból és egy tetszőleges betűből álló kifejezéssel kezdődnek, vagy a tanar kifejezéssel. A második szűrő csak akkor engedi át a kifejezést, ha a beírt csoportnévvel kezdődnek (^$GP – a GP változó értékével kezdődő sorok). Az utolsó parancs (wc -c) pedig megszámolja az átjutott kifejezés hosszát. Tehát ha létező, és a fentebb leírtaknak megfelelő csoportnevet adtunk meg egy nullától nagyobb számot kapunk eredményül. Minden más esetben nullát.

Próbáljuk a parancs működését feltételezve, hogy már létrehoztuk a tanar, g2001b és a g2002a csoportokat:
 
[root@centos5 ~]# grep -w '^g[1-2][0-9][0-9][0-9][a-z]\|^tanar' /etc/group | grep -w ^tanar | wc -c
79
[root@centos5 ~]# grep -w '^g[1-2][0-9][0-9][0-9][a-z]\|^tanar' /etc/group | grep -w ^g2001b | wc -c
26
[root@centos5 ~]# grep -w '^g[1-2][0-9][0-9][0-9][a-z]\|^tanar' /etc/group | grep -w ^g2002a | wc -c
28
[root@centos5 ~]# grep -w '^g[1-2][0-9][0-9][0-9][a-z]\|^tanar' /etc/group | grep -w ^tanor | wc -c
0
[root@centos5 ~]# grep -w '^g[1-2][0-9][0-9][0-9][a-z]\|^tanar' /etc/group | grep -w ^pferi | wc -c
0

 
Láthatjuk, hogy létező és megfelelő csoportneveket megadva (1-3 parancsok) a GP változó helyett, nullától nagyobb számokat kapunk eredményül. A csoport nevét hibásan írva vagy a csoport helyett felhasználói nevet megadva (4-5 parancsok) a parancs nullát eredményez.

Megállapíthatjuk, hogy a GFOG változó értéke nulla lesz, ha nem megfelelő csoportnevet írunk be. Az ezután következő if / then / fi programszerkezet ellenőrzi e változó érékét, és ha nullával egyenlő (test $GFOG -eq 0), a then és a fi sorok közötti parancsok hajtódnak végre: megjelenik egy figyelmeztető üzenet, hogy a csoport nem létezik és az exit 0 parancs kilép a programból. A GFOG változó nullától eltérő értéke esetén az említett sorokat nem hajtja végre a program.

A PASS=”” és az echo $PASS sorok közötti programrész létrehoz egy véletlen jelszót 6 karakterből, ami angol ábécé kis- és nagybetűiből, valamint néhány speciális karakterből állhat. A karakterek az array1 tömbből választódnak. A tömbben nem szerepelnek a z és az y, valamint az O és a 0 karakterek, mert ezeket a felhasználók gyakran felcserélik a jelszó begépelésénél. A program megjeleníti a jelszót a képernyőn, ezt kikapcsolhatjuk, kitörölve az echo $PASS sort.

Amennyiben nem szeretnénk, hogy a beépített jelszógenerátor hozza létre a felhasználók jelszavát, töröljük ki a PASS="" és az echo $PASS sorokat és a közöttük lévőket. Helyettük a következő három sort írjuk:

echo "Irja be $NEV jelszavat:"
echo
read PASS

Ezzel a módosítással a felhasználó jelszavát nekünk kell megadni a program futása közben.

A belépési jog meghatározása következik. Csak azoknak a felhasználóknak biztosítsunk belépési jogot, akiknek erre valóban szükségük van és rendelkeznek alapvető ismeretekkel. Jellemzően azoknak a kollégáknak, akik vállalják az ezzel járó felelősséget és odafigyelést.

echo "Kap belepesi jogot $NEV a serverre? (y/n)"
read SH0
    if test $SH0 = y
      then
      SH1=/bin/bash
      else
    SH1=/bin/false
    fi
 
Ebben a programrészben az SH1 változónak /bin/bash értéket adunk „y” válasz esetén és /bin/false -t minden más esetben, tehát „n” válasz esetén is.
Három könyvtárat hozunk létre a következő részben:
 
/root/tmp
/etc/skel/Dokumentumok
/etc/squid/csoportok
 
A program ellenőrzi a könyvtárak meglétét és szükség esetén létrehozza őket. A /root/tmp könyvtárba ideiglenes állományok kerülnek. Az /etc/skel könyvtár a felhasználók home könyvtárának váza, tehát ha itt létrehozunk egy könyvtárat, az minden újonnan létrejövő felhasználó home könyvtárában ott lesz. A Dokumentumok könyvtárra azért van szükség, mert azt fogjuk megosztani a hálózaton, a felhasználók azt érhetik el a munkaállomásokról. Az /etc/squid/csoportok könyvtár szöveges állományait az 5.4. részben már tárgyaltuk.
A felhasználó létrehozása következik a useradd paranccsal:
 
useradd -G $GP -c "$NEV" -s $SH1 $UNEV
 
A változók sorrendben a következő értékeket tartalmazzák: a felhasználó csoportja, teljes neve, login shell és felhasználói név.
Az IDS változó a felhasználói azonosítót fogja tartalmaznia következő parancs végrehajtásával:
 
IDS=`grep -w $UNEV /etc/passwd | cut -d":" -f3`
 
A parancs az /etc/passwd állományból azt a sort szűri ki, amelyik tartalmazza az aktuális felhasználói nevet, a cut parancs a pontosvesszőkkel elválasztott (-d":") részek közül csak a harmadikat (-f3) hagyja meg.
Az aktuális dátum rögzítése után a /root/felhasznalok.txt állományhoz hozzáír a program egy új sort, ami a felhasználó fentebb tárgyalt adatait tartalmazza:
 
echo "$GP | $NEV | $UNEV | $DM | $SH1 | $IDS | $PASS " >> /root/felhasznalok.txt

Ezután a felhasználó jelszavát és a samba programcsomag jelszavát állítja be a program.

A következő részben a tanar csoportba tartozó felhasználók home könyvtárain olyan jogosultságokat állít be, ami teljes hozzáférést biztosít az adott felhasználónak, mindenki mástól pedig mindent megvon (chmod -R 700). Mindenki másnak (vagyis a tanulóknak) a home könyvtárak jogosultsága 755 lesz.

Ezután az /etc/squid/csoportok könyvtár szöveges állományainak létrehozása következik. Minden csoport felhasználóinak listája létrejön szöveges állományként, amelyek a felhasználói neveket soronként tartalmazzák. Ezen kívül létrejön a tanulok.txt állomány is, ami minden tanuló felhasználói nevét tartalmazza.

A quota beállítása csak akkor történik meg, amennyiben a felhasznalok.txt állomány sorainak száma több mint kettő. Ebben az esetben a tanároknak olyan kvótát állít be, mint proba5 felhasználónak van. Mindenki másnak (tehát a tanulóknak), pedig olyat, mint proba2-nek. Ha valamelyik felhasználó nagyobb tárhelyet szeretne, akkor azt a proba2 felhasználóhoz hasonlóan módosíthatjuk, de általában a program által beállított lemezterületek elegendőek.

Az utolsó részben a program ellenőrzi, hogy squid nevű szolgáltatás fut-e. Amennyiben igen, újrakonfigurálja azt. Ez a szolgáltatás biztosítja majd az Internethasználatot a felhasználóknak. Ahhoz, hogy az Internetet az újonnan létrejött felhasználó is használhassa szükséges az újrakonfigurálás.

Az uj_felhasznalo.scp program:

#!/bin/bash
# Felhasznalo letrehozasa
clear;echo
echo "  Milyen csoportba fog tartozni a felhasznalo?"
echo "          (tanulo eseten: g2004a, pl.)"
echo "          (tanaroknak: tanar)"
read GP
# Ellenorzi, hogy a csoport letezik-e
GFOG=`grep -w '^g[1-2][0-9][0-9][0-9][a-z]\|^tanar' /etc/group | grep -w ^$GP | wc -c`
if test $GFOG -eq 0
    then
    echo "A $GP csoport nem letezik !!!"
    exit 0
fi
#
echo "A felhasznalo teljes neve:"
read NEV
echo "Felhasznalo user neve:"
read UNEV
# Leellenorzi, hogy a felhasznaloi nev foglalt-e
FOG=`grep -w ^$UNEV /etc/passwd | wc -c`
if test $FOG -gt 0
    then
    echo "A $UNEV felhasznaloi nev mar foglalt!!!"
    exit 0
fi
PASS=""
PASSLEN=6
array1=( q w e r t u i o p a s d f g h j k l x c v b \
n m Q W E R T U I P A S D F G H J K L X C V B N M \
1 2 3 4 5 6 7 8 9 \, \. \? \! )
MODNUM=${#array1[*]}
count=0
  while [ ${count:=0} -lt $PASSLEN ]
  do
    number=$(($RANDOM%$MODNUM))
    PASS="$PASS""${array1[$number]}"
    ((count++))
  done
echo $PASS
#
echo "Kap belepesi jogot $NEV a serverre? (y/n)"
read SH0
    if test $SH0 = y
    then
    SH1=/bin/bash
    else
    SH1=/bin/false
    fi
# Letrehozzuk a /root/tmp konyvtarat ha nincs olyan
if test ! -d /root/tmp
then
mkdir /root/tmp
fi
# Létrehozzuk az /etc/skel/Dokumentumok konyvtarat ha nincs olyan
if test ! -d /etc/skel/Dokumentumok
then
mkdir /etc/skel/Dokumentumok
fi
# Letrehozzuk az /etc/squid/csoportok konyvtarat ha nincs
if test ! -d /etc/squid/csoportok
then
mkdir /etc/squid/csoportok
fi
# -------------- letrehozzuk a felhasznalot --------------------
useradd -G $GP -c "$NEV" -s $SH1 $UNEV
# A felhasznalo azonositoszama
IDS=`cat /etc/passwd | grep -w $UNEV | cut -d":" -f3`
# a felhasznaloi adatait beirjuk egy szoveges allomanyba:
DM=`date '+%y %b %d'`
echo "$GP | $NEV | $UNEV | $DM | $SH1 | $IDS | $PASS " >> /root/felhasznalok.txt
# letrehozzuk a jelszot:
echo $PASS | passwd $UNEV --stdin
# SAMBA jelszo letrehozasa
(echo $PASS; echo $PASS) | smbpasswd -s -a $UNEV
# Tanaroknak 700, mindenki masnak 755
if test $GP = "tanar"
then
chmod -R 700 /home/$UNEV
else
chmod -R 755 /home/$UNEV
fi
# Letrehozzuk a csoportlistakat
grep -w '^g[1-2][0-9][0-9][0-9][a-z]\|^tanar' /etc/group > /etc/squid/csoportok/csoportok.txt
#
CR='\012'
for i in `cat /etc/squid/csoportok/csoportok.txt`
do
f=`echo $i | cut -d":" -f1`
touch /etc/squid/csoportok/$f.txt
echo $i | tr [=,:] $CR > /root/tmp/$f.tmp
cat /root/tmp/$f.tmp | sed '1,3 d' > /etc/squid/csoportok/$f.txt
done
#
# a tanulo.txt allomanyba minden tanulot
  if test -f /etc/squid/csoportok/tanulok.txt
  then
  rm /etc/squid/csoportok/tanulok.txt
  fi
for j in `ls /etc/squid/csoportok/g[1-2][0-9][0-9][0-9][a-d].txt`
do
cat $j >> /etc/squid/csoportok/tanulok.txt
done
# Ha tobb mint 2 sor van a felhasznalok.txt allomanyban
# beallitja a quota-t
# a tanaroknak 500 Mb, tanulokank 200 Mb
SOR=`wc -l /root/felhasznalok.txt | cut -d" " -f1`
if test $SOR -gt 2
    then
    if test $GP = "tanar"
    then
    edquota -p proba5 $UNEV
    echo "quota 500 Mb"
    else
    edquota -p proba2 $UNEV
    echo "quota 200 Mb"
    fi
fi
# a proxy server ujrakonfiguralasa ha fut
SR=`/sbin/service squid status | grep fut | wc -c`
if test $SR -gt 0
then
/usr/sbin/squid -k reconfigure
fi
 
 
    5.7. Felhasználók törlése

A felhasználók törlésére a torol_felhasznalo.scp programot használhatjuk.

FIGYELEM! A program nem csak az azonosítót, hanem a felhasználó home könyvtárát is törli! Csak akkor használjuk, ha a felhasználó már mentette adatait. Törli a felhasználó sorát a felhasznalok.txt állományból és az újraépíti a /etc/squid/csoportok könyvtár állományait is. A squid szolgáltatást újrakonfigurálja.

Amennyiben ezt a két programot használjuk felhasználók létrehozására és törlésére, akkor az /etc/squid/csoportok könyvtár szöveges állományai és a felhasznalok.txt mindig az aktuális állapotot fogják mutatni. A programot tartalmazza a http://kmf.uz.ua/centos/gui/server5.zip állomány.


A torol_felhasznalo.scp program:

 

#!/bin/bash
clear;echo
echo " F e l h a s z n a l o  t o r l e s e !"
echo
echo " Irja be a felhasznaloi nevet:"
read UNEV
# Leellenorzi, hogy a felhasznaloi letezik-e
FOG=`grep -w $UNEV /etc/passwd | cut -d":" -f1 | wc -c`
if test $FOG -lt 1
    then
    echo "  Nincs ilyen felhasznalo: $UNEV  !!!"
    exit 0
fi
echo "Biztosan letorli a kovetkezo felhasznalot? (y/n)"
echo "A felhasznalo HOME konyvtara is torlodik"
echo
echo $UNEV ---- `grep -w $UNEV /etc/passwd | cut -d":" -f5`
echo
read Y1
if test $Y1 = y
then
    smbpasswd -x $UNEV
    userdel -r $UNEV
    sed -i '/ '$UNEV' /d' /root/felhasznalok.txt
fi
# Frissitjuk a csoportlistakat
grep -w '^g[1-2][0-9][0-9][0-9][a-z]\|^tanar' /etc/group > /etc/squid/csoportok/csoportok.txt
#
CR='\012'
for i in `cat /etc/squid/csoportok/csoportok.txt`
do
f=`echo $i | cut -d":" -f1`
touch /etc/squid/csoportok/$f.txt
echo $i | tr [=,:] $CR > /root/tmp/$f.tmp
cat /root/tmp/$f.tmp | sed '1,3 d' > /etc/squid/csoportok/$f.txt
done
#
# a tanulo.txt allomanyba minden tanulot
  if test -f /etc/squid/csoportok/tanulok.txt
  then
  rm /etc/squid/csoportok/tanulok.txt
  fi
for j in `ls /etc/squid/csoportok/g[1-2][0-9][0-9][0-9][a-d].txt`
do
cat $j >> /etc/squid/csoportok/tanulok.txt
done
#
# a proxy server ujrakonfiguralasa ha fut
SR=`/sbin/service squid status | grep fut | wc -c`
if test $SR -gt 0
then
/usr/sbin/squid -k reconfigure
fi