atti44:x:509:510:Kovacs Attila:/home/atti44:/bin/bash |
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 |
[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 |
[pferi@centos5 ~]$ su - Jelszó: [root@centos5 ~]# |
[root@centos5 ~]# groupadd tanar [root@centos5 ~]# groupadd g2002a [root@centos5 ~]# groupadd g2001b … |
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)
[root@centos5 ~]# chmod u+x uj_felhasznalo.scp |
Csoport | Név | Felhasználói név | Belépési jog |
tanar | Proba User1 | proba2 | N |
tanar | Proba User2 | proba5 | N |
[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.LABEL=/home /home ext3 defaults 1 2 |
LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2 |
[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 |
quotacheck: Scanning /dev/hda7 [/home] done quotacheck: Checked 142 directories and 560 files |
[root@centos5 ~]# quotaon -avug /dev/hda7 [/home]: group quotas turned on /dev/hda7 [/home]: user quotas turned on |
[root@centos5 ~]# setquota -u proba2 200000 250000 0 0 -a |
[root@centos5 ~]# setquota -u proba5 500000 550000 0 0 -a |
[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 |
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 |
[root@centos ~]# passwd isti8 Changing password for user isti8. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. |
[root@centos ~]# smbpasswd -a isti8 New SMB password: Retype new SMB password: [root@centos ~]# |
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).
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 |
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 |
/root/tmp /etc/skel/Dokumentumok /etc/squid/csoportok |
useradd -G $GP -c "$NEV" -s $SH1 $UNEV |
IDS=`grep -w $UNEV /etc/passwd | cut -d":" -f3` |
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 |
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 |