14. Felhasználó- és csoportkezelés

A unix rendszerek felhasználó- és csoportkezeléséről már tanultál a Felhasználók és csoportok fejezetben. Ha nem emlékszel a /etc/passwd, a /etc/shadow és a /etc/group fájlok feladatára, szerkezetére, nézz vissza abba a fejezetbe.

Megjegyzés

Ebben a fejezetben a felhasználó- és csoportkezelés alap (POSIX) változatát ismered meg. Nem lesz szó címtárról, más szerverek által történő azonosítási módokról, amelyek több-kevésbé könnyen megvalósíthatók a Linux rendszerekben. Csak erre koncentrálunk, így előfordulhat, hogy a későbbiekben olyan rendszerrel találkozol, ahol a felhasználókat nem az itt tanult módon kezelik.

14.1. Felhasználók kezelése

Egy felhasználó csoport információinak megjelenítésére az id parancs használható. Ha paraméterként megadsz egy felhasználó nevet, akkor annak adatait, ha nem, akkor a bejelentkezett felhasználóét jeleníti meg.

feri@columbo:~$ id
uid=1158(feri) gid=1158(feri) csoportok=1158(feri),27(sudo),104(fuse),106(whoopsie)

A parancs kimentében leolvasható, hogy a feri felhasználó belső azonosítója ezen a gépen az 1158, az elsődleges csoportja szintén feri nevű, az 1158-as azonosítóval. További csoportoknak is tagja, a 27-es azonosítójú sudo-nak, a 104-es fuse-nak, és a 106-os whoopsie-nak.

Tipp

A finger <felhasználó> a felhasználóról további adatokat jelenít meg. Ezek között szerepel a home könyvtárának helye, a neve és több más adat is.

Új felhasználó felvételére az adduser vagy a useradd parancs szolgál. Ezek eltérő szintaxisúak, válaszd azt, amelyik jobban tetszik neked. Én az adduser-t fogom megmutatni. Gondolom, nem kell nagyon hangsúlyoznom, de ezt a parancsot, mint ahogyan a továbbiakat is, a root jogosultságú felhasználók számára teszi elérhetővé a rendszer.

A parancs képes interaktív és parancssori módban is működni. Lássunk egy példát az elsőre, vegyünk fel egy lajos nevű felhasználót!

root@columbo:~# adduser lajos
"lajos" felhasználó létrehozása...
"lajos" (1010) új csoport létrehozása...
"lajos" (1010) felhasználó létrehozása "lajos" csoporttal...
A(z)'/home/lajos' saját könyvtár létrehozása...
Fájlok másolása innen: '/etc/skel'
Adja meg az új UNIX jelszót:
Írja be újra a UNIX jelszót:
passwd: password updated successfully
Changing the user information for lajos
Enter the new value, or press ENTER for the default
        Full Name []: Szabó Lajos
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
chfn: name with non-ASCII characters: 'Szabó Lajos'
Az adatok helyesek? [I/n] y

Lássuk, mi is történt!

„lajos” (1010) új csoport létrehozása…:

Minden felhasználónak tartoznia kell valamelyik csoportba, ez az elsődleges csoport. A rendszerünk jelenlegi beállítása mellett az adduser minden új felhasználó felvételekor létrehoz egy egyedi csoportot, ennek neve megegyezik a felhasználó nevével, és elsődleges csoportként ezt állítja be.

A(z)»/home/lajos» saját könyvtár létrehozása…:

a parancs létrehozza az új felhasználó home könyvtárát szintén az alapbeállítások alapján.

Fájlok másolása innen:

«/etc/skel»: A /etc/skel könyvtár tartalmát bemásolja az új felhasználó home könyvtárába. Ez nagyon hasznos lehetőség, hiszen így nem kell minden egyes felhasználó home könyvtárának tartalmát külön-külön kialakítanod. Ha a felhasználók számára azonnal elérhetővé akarsz tenni valamit, tedd a /etc/skel könyvtárba, a felhasználó létrehozásakor a home könyvtárában találja mindazt, amit ide tettél.

Adja meg az új UNIX jelszót:

A felhasználó kezdeti jelszavát kell itt begépelned. Kétszer.

Full Name []:

Add meg a felhasználó eljes nevét! A többi adatot (Room number stb.) nyugodtan hagyd üresen, ma már nemigen használjuk ezeket. Ha van kedved nyilvántartást vezetni a felhasználókról, akkor használhatod, de nem ez a legjobb eszköz erre.

A fenti adatok megadása után a felhasználó létrejött. Most készítek egyet úgy, hogy az interaktivitás a minimális legyen. A parancsnak minden lehetséges paraméter megadok:

root@columbo:~# adduser --home /home/ildiko --shell /bin/bash --ingroup users --gecos "Szabó Ildikó" --force-badname szabo.ildiko
Kompatibilitás szempontjából problémás felhasználónevek engedélyezése.
"szabo.ildiko" felhasználó létrehozása...
"szabo.ildiko" (1011) felhasználó létrehozása "users" csoporttal...
A(z)'/home/ildiko' saját könyvtár létrehozása...
Fájlok másolása innen: '/etc/skel'
Adja meg az új UNIX jelszót:
Írja be újra a UNIX jelszót:
passwd: password updated successfully
chfn: name with non-ASCII characters: 'Szabó Ildikó'
–home /home/ildiko:

a felhasználó home könyvtára a /home/ildiko legyen.

–shell /bin/bash:

a shellje a /bin/bash legyen (ez a program indul el a sikeres bejelentkezés után).

–ingroup users:

a felhasználó elsődleges csoportja a users legyen.

–gecos „Szabó Ildikó”:

Ildikó adataihoz a nevét jegyezzük be a /etc/passwd fájlba.

–force-badname:

alapesetben a felhasználó neve nem tartalmazhat pontot, ezért használtam ezt a paramétert, ami engedélyezi a hibás nevek megadását. A pont tapasztalataim szerint nem okoz zavart a rendszer működésében.

De miért nem adtam meg a jelszót paraméterként?

Tanultunk a w parancsról, amely megjeleníti a bejelentkezett felhasználókat, többek közt azt is, hogy éppen milyen parancsot futtatnak.

feri@columbo:~$ w
18:04:48 up 1 day,  9:52,  2 users,  load average: 0,01, 0,02, 0,05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
E3X72Z   pts/0    netacc-gpn-204-2 16:10   14:02   0.20s  0.20s -bash
root     pts/1    193.225.33.5     18:03    0.00s  0.05s  0.00s adduser --password alma bela

Bár a fenti képernyőn a cél kedvéért csaltam kicsit, a veszély lehetősége látszik: a w parancs kimenetében látszódhat egy másik felhasználó által kiadott parancs és a paramétere is! Ezért magát a jelszót nem adom meg a parancssorban, hiszen az ebben a helyzetben más felhasználók számára látható lenne.

Az adduser parancs sok-sok paraméterrel rendelkezik, nézd meg a man adduser paranccsal. Nagyon kellemetlen lenne ezeket mindig megadni, ezért sok paraméternek alapértelmezett értéke van, amelyeket az /etc/adduser.conf fájl tartalmaz. Ezek tulajdonképpen változó=érték alakúak, ahol az egyes változók az egyes paraméterek alapértelmezett értékeit írják le. (Más változók is vannak ebben a fájlban, amelyek további beállításokat tesznek lehetővé.) Lássunk néhány fontosabbat ezek közül, és ismerjünk meg egy-két stratégiát, amelyeket nagyszámú felhasználói tábor esetén érdemes alkalmazni! (A fájl minden beállításhoz egy-egy leírást is tartalmaz, ezeket, és az üres sorokat egy-egy grep paranccsal eldobáltam.)

feri@columbo:~$ cat /etc/adduser.conf | grep -v ^# | grep -v ^$
      DSHELL=/bin/bash
      DHOME=/home
      GROUPHOMES=no
      LETTERHOMES=no
      SKEL=/etc/skel
      FIRST_SYSTEM_UID=100
      LAST_SYSTEM_UID=999
      FIRST_SYSTEM_GID=100
      LAST_SYSTEM_GID=999
      FIRST_UID=1000
      LAST_UID=29999
      FIRST_GID=1000
      LAST_GID=29999
      USERGROUPS=yes
      USERS_GID=100
      DIR_MODE=0755
      SETGID_HOME=no
      QUOTAUSER=""
      SKEL_IGNORE_REGEX="dpkg-(old|new|dist|save)"

Az egyes beállítások jelentése:

DSHELL:

A default shell. Ha az adduser parancsnak nem adod meg, hogy a létrejövő felhasználónak mi legyen a shellje, akkor ez itt megadottat állítja be a rendszer. A jelentése: default shell.

DHOME:

Default home. A felhasználók home könyvtárai ebből a könyvtárból nyílnak majd.

GROUPHOMES:

Bekapcsolt állapota mellett a home könyvtárak kialakítását a parancs a csoportok szerinti bontásban végzi. Ha nagy.agnes felhasználó elsődleges csoportja a users, akkor a home könyvtára a fenti beállítás mellett a /home/users/nagy.agnes lesz.

LETTERHOMES:

Ha nagyon sok felhasználód van, akkor nem érdemes a home könyvtáraikat egyetlen könyvtárból nyitni, mert az a rendszer teljesítményét érezhetően visszavetheti, és keresni sem könnyű köztük. Ha a LETTERHOMES beállítása YES, akkor a home könyvtárakat kezdőbetűjük alapján csooportosítva hozza létre a parancs, tehát szabo.lajos home könyvtára a /home/s/szabo.lajos, az enyém /home/k/koczka.ferenc lesz.

SKEL:

A skeletion könyvtár helye. Ha akarod, lecserélheted, bár nem hiszem, hogy szükséged lenne erre.

FIRST_SYSTEM_UID:

és LAST_SYSTEM_UID. A /etc/passwd fájlban ezen beállítások szerint a rendszer felhasználók az itt megadott azonosító tartományt használják. Ennek a 0-999 intervallum a szokásos értéke. A rendszer felhasználók olyan felhasználók, akik nem személyhez, hanem valamilyen folyamathoz kötődnek, ilyen pl. az lp (line printer). A nyomtatási feladatokat ez a user hajtja végre. Ennek azért van jelentősége, mert a jogosultsági rendszerben a felhasználókon keresztül a folyamat jogköre is jól beállítható, másrészt így a felhasználóknak nem kell közvetlen hozzáférést adni az eszközökhöz, pl. a nyomtatókhoz.

FIRST_SYSTEM_GID:

és LAST_SYSTEM_GID. A rendszerfelhasználók csoport azonosítóinak tartománya.

FIRST_UID:

LAST_UID. A „valódi” felhasználók UID tartományát lehet itt megadni. Ez a legtöbb esetben a [1000-65535] intervallum.

FIRST_GID:

LAST_GID. A valódi felhasználók csoport azonosítóinak tartománya.

USERGROUPS:

Bekapcsolt állapotában az adduser automatikusan létrehoz egy új csoportot is, ez lesz a felhasználó elsődleges csoportja. Az új csoport neve megegyezik a felhasználó nevével. Ezt abban az esetben szokás így csinálni, ha nem szeretnénk az összes felhasználót egy közös csoportba sorolni.

USERS_GID:

Ha nem használod az USERGROUPS funkciót, itt adhatod meg, hogy az új felhasználók elsődleges csoportja melyik legyen.

DIR_MODE:

A home könyvtár létrehozásakor az itt megadott hozzáférési módot állítja be a parancs. (Ha ezt sem adod meg, akkor 0755 lesz ez az érték.)

SETGID_HOME:

Ha bekapcsolod, a home könyvtáron bekapcsolt állapotban lesz a setGID bit. A jelentését nézd meg a setGID fejezetben.

Tipp

az adduser parancs mellett létezik egy másik, ugyanezt a feladatot ellátó useradd is. Nézd meg a kézikönyvét, bizonyos esetekben az jobban használgató, mint az adduser.

Egy felhasználó törlésére a userdel parancs szolgál. Paraméterként meg kell adni a törlendő felhasználó nevét, valamint azt, hogy a törlés során a home könyvtárát is törölni akarjuk-e. A gyakorlatban itt lehetnek olyan fájlok, amelyek a felhasználó munkaköréhez kötődnek, ezeket a felhasználó távozásával nem akarjuk törölni, hiszen a cégnek szüksége van azokra.

Az alábbi példában törlöm nagy.agnes felhasználót úgy, hogy a home könyvtárát is eltávolítom a rendszerből. (A /var/mail/nagy.agenes könyvtárban az elektronikus leveleit tárolja a rendszer, mivel egy levele sem érkezett, ezért az a könyvtár nem is jött létre, így nem törölhető, amit egy üzenet jelez.)

root@columbo:~# userdel -r nagy.agnes
userdel: nagy.agnes mail spool (/var/mail/nagy.agnes) not found

Egy felhasználó beállításait módosítani a usermod paranccsal lehet. (Ha van kedved, a módosítások többségét kézzel, a megfelelő fájlokban is elvégezheted). A parancs az egyes beállításokra egy-egy paramétert használ, így ezeket nem veszem most sorra, bízom benne, hogy már érted a parancsok paraméterezését annyira, hogy önállóan is használatba tudd venni ezeket.

Az alábbi példában nagy.agnes felhasználói fiókjának érvényességi idejét 2017. december 31-re állítom be. A felhasználói fiók ez után is létezni fog, de bejelentkezni már nem lehet abba.

root@columbo:~# usermod nagy.agnes --expiredate '2017/12/31'

14.2. Csoportok kezelése

A csoportkezeléshez nem feltétlenül kell parancsokat használnod (kivételt jelent persze az, ha scriptekben szeretnéd az azokhoz kapcsolódó műveleteket elvégezni). A /etc/passwd és az /etc/group fájl tartalma egyszerűen megérthető, és azok szerkesztésével is el lehet érni a kívánt eredményt.

Egy csoport felvételére a groupadd parancs szolgál. Paraméterként legalább a nevét meg kell adni, de további paraméterekkel további finomítások is végezhetők (részletek a kézikönyvben). Az alábbi parancs felveszi a horgaszok csoportot:

root@columbo:~# groupadd horgaszok

A csoport megváltoztatására a groupmod parancs szolgál, az alábbi példában átnevezem a horgaszok csoportot pecasok-ra.

groupmod horgaszok -n pecasok

Egy felhasználó egy adott csoportba léptetése szintén az adduser paranccsal történik. Ebben az esetben két paramétert, a felhasználó nevét és a csoport nevépt kell megadni. Feri legyen a pecások csoport tagja!

root@columbo:~# adduser feri pecasok
A(z) 'feri' felhasználó hozzáadása a(z) 'pecasok' csoporthoz...
Adding user feri to group pecasok
Kész.

Egy ellenőrzés: az id parancs megadja, hogy a paraméterként megadott felhasználó mely csoportoknak tagja. (Az uid a saját user azonosítója, a gid az elsődleges csoportja, a továbbiak pedig az egyéb csoporttagságai. Ha ez nem világos, nézz vissza a Felhasználók és csoportok fejezetbe.)

root@columbo:~# id feri
uid=1158(feri) gid=1158(feri) csoportok=1158(feri),27(sudo),104(fuse),106(whoopsie),2306(pecasok)

Végül, a csoportok törlésére a groupdel parancs szolgál. Használata egyszerű, paraméterként a törlendő csoport nevét kell megadnod.

root@columbo:~# groupdel pecasok

A parancs eredménye a csoport törlése, és minden tagság megszűnése lesz. Mivel ezt nem lehet meg nem történtté tenni, óvatosan járj el ezzel kapcsolatban.

Mi történik abban az esetben, ha a groupdel parancsot egy olyan csoportra adod ki, amely valamelyik felhasználó elsődleges csoportja? Mivel minden felhasználónak kell, hogy elsődleges csoportja legyen, ezért ez így nem törölhető:

root@columbo:~# groupdel feri
groupdel: cannot remove the primary group of user 'feri'

14.3. A bashrc

A gyakorlatban, amikor egy felhasználó bejelentkezik a rendszerbe, sok-sok beállítást kellene elvégezni ahhoz, hogy a parancssori környezete olyan legyen, mint amilyennek eddig láttad. Színes tartalomjegyzék, informatív prompt, ezek egyike sem „magától” ilyen, hanem több beállítás eredménye. Ezeket a beállításokat közvetlenül a bejelentkezés után lefutó parancsok végzik el, amelyeket minden felhasználó saját maga is szerkeszthet, mert a home könyvtárukban levő .bashrc tartalmazza őket. Lássunk ebből egy-két részletet!

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

Ezek a sorok három aliast hoznak létre, tehát ezért működnek az ll, la és a l parancsok, valójában ezek a sikeres bejelentkezés után a .bashrc lefutása során beállított aliasok.

De a parancssorban levő prompt is egy beállítás eredménye. A .bashrc tartalmaz erre vonatkozó beállítást, amikor a PS1 nevű környezeti változót állítja be.

Tipp

A pontosság kedvéért, van egy másik ilyen célú fájl is, a /etc/bash.bashrc, amely a home könyvtár .bashrc fájlja előtt fut le, és ennek tartalmát a rendszergazda szerkesztheti.

A prompt a parancssor elején megjelenő szöveg, amely alapesetben az épp bejelentkezett felhasználó nevét és az aktuális könyvtár nevét tartalmazza. Ez nem szükségszerűen van így (bár a gyakorlatban ez egy célszerű beállítás), a prompt tartalmát a .bashrc fájlban leírt sor állítja be.

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

Hát, ez elég bonyolultnak tűnik, ezért egy egyszerűbb példán keresztül nézzük meg a működését. A PS1 egy környezeti változó, erről a környezeti változók c. részben már volt szó. A PS1-et a parancsértelmező használja, ennek tartalmát jeleníti meg minden alkalommal, amikor a promptot kiírja. Az alábbi példában a promptot egy egyszerű szövegre cserélem úgy, hogy a PS1 értékét átírom:

feri@columbo:~$ PS1='Üdvözöllek>'
Üdvözöllek>

A prompt beállításakor változókat is használhatsz. A u karakterek helyére az épp bejelentkezett felhasználó nevét helyettesíti be a shell, a h helyére a gép nevét, a w helyére pedig az aktuális könyvtárat. Az alábbi példában ezek is szerepelnek a promptban:

Üdvözöllek>PS1="\u@\h \w> "
feri@columbo ~>

Tipp

  • Ne feledd, hogy ha egy új shellt indítasz, a környezeti változók értéke nem kerül át abba csak akkor, ha a változónak az export paranccsal adtál értéket. A fenti példa a gyakorlatban ezért inkább így helyes: export PS1="\u@\h \w> ".

  • A promptban számos más, jelentéssel bíró speciális karakter is használható, ezek megkeresését rád bízom.

14.4. Ellenőrző kérdések

  • Mely fájlok játszanak szerepet a Unix felhasználó- és csoportkezelésében? Mi ezek felépítése és funkciója?

  • Mi azonosítja a felhasználót egy Unix rendszerben?

  • Miért nem adható meg a jelszó paraméterként a passwd parancs számára?

  • Hogyan állíthatók be az adduser parancs alaprtelmezett paraméterei?

  • Milyen parancsok használhatók a csoport- és csoport tagság kezelésére?

  • Mi a bashrc és mi a szerepe?