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. azlp
(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?