Tartalomjegyzék
Felhasználókezelés
- Szerző: Sallai András
- Copyright © 2012, Sallai András
- Szerkesztve: 2012, 2013, 2017, 2020, 2021
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
Bevezetés
Ebben a részben felhasználókezeléssel foglalkozunk. Lesz néhány parancs, amely csak a Debian GNU/Linux rendszerben létezik, vagy mást csinál, mint a nem Debian alapú Linuxok. Ilyen az adduser vagy addgroup parancs.
Az adduser például, Debian GNU/Linuxon interaktív, ami bekéri a felhasználó jelszavát és más adatait, majd egy alapértelmezett könyvtárnévvel és parancsértelmezővel létrehozza a felhasználót.
Előfordulhatnak azonban olyan helyzetek, ahol az alapértelmezések helyett valami más szeretnénk beállítani, ilyenkor a minden Linuxon megtalálható useradd parancsot használjuk.
A felhasználók adatai
A felhasználók és csoportok adatai három helyen tárolódnak:
- /etc/passwd
- /etc/shadow
- /etc/group
A passwd fájlban kerül tárolásra a felhasználó neve, könyvtára, a belépés után induló programja; itt találhatók még a GECOS vagy finger adatok.
A GECOS mezőben a következő tulajdonságokat tárolhatjuk:
- teljes név
- szoba száma, vagy kapcsolattartó személy
- hivatali telefon
- otthoni telefon
- egyéb információk (fax, más e-mail, sorszám, foglalkozás)
A GECOS adatokat vesszővel szeparálva adjuk meg. A felhasználók ha engedélyezve számukra, a chfn paranccsal változtathatják meg ezeket az információkat.
A Bell laboratóriumban, a korai Unix rendszerek közül néhány GECOS gépeket használt a nyomtatáshoz és más szolgáltatásokhoz; így ezt az információt is hozzáadták a felhasználói információkhoz.
A GECOS lehet General Comprehensive Operating System (GCOS, [ˈdʒiːkoʊs], vagy eredetileg: GECOS, General Electric Comprehensive Operating Supervisor. Egy operációs rendszer család, amely 36-bit GE/Honeywell nagygépeken volt használatos. Az eredeti változatát a General Electric készítette 1962-ben. Ma is használják, GCOS 7 és GCOS 8 verziók az aktuálisak.
A finger adatokat régebben finger kiszolgáló programokkal közzé tették az Interneten. Ma is léteznek ilyen kiszolgáló programok: cfingerd, efingerd, fingerd. A kiszolgáló programokat ma már nem, de a kliens programot szoktuk még használni, ami egy gépen megmutatja a finger adatokat. Utóbbihoz a finger csomag telepítése szükséges, miután kapunk egy finger parancsot.
A GECOS, finger és „comment” előfordulása:
man adduser man chfn man useradd
A felhasználók kezelése
Felhasználót két paranccsal vehetünk fel:
- adduser
- useradd
A useradd egy natív ELF bináris, minden linuxos rendszeren jelen van. Az adduser egy Perl script, ami használja a useradd parancsot.
A useradd egy alacsony szintű eszköz a felhasználók felvételéhez, szemben az adduser script, amely egy magasabb szintű, interaktív felhasználókezelést tesz lehetővé.
Az adduser a useradd program mellett használja a chfn és passwd parancsokat is, a jelszó és GECOS adatok bekérésére.
Mivel az adduser így többféle információit is interaktívan kér be, ezért nem alkalmas parancsállományokban való használatra. Parancs állományokban való használatra a useradd parancs alkalmas.
Az adduser parancs működése Linux terjesztésenként változik. Debian és Debian alapú rendszereken bekéri a felhasználó jelszavát, és a gecos információkat.
adduser
Az adduser csak Debian alapú rendszereken létezik (az rpm alapú rendszereknél a useradd aliasa szokott lenni). Egy felhasználót interaktívan vehetünk fel vele. A következő példában egy kati nevű felhasználót veszünk fel:
adduser kati Adding user `kati' ... Adding new group `kati' (1002) ... Adding new user `kati' (1002) with group `kati' ... Creating home directory `/home/kati' ... Copying files from `/etc/skel' ... Adja meg az új UNIX jelszót: Írja be újra a UNIX jelszót: passwd: a jelszó sikeresen frissült kati felhasználói információinak cseréje Add meg az új értéket vagy üss ENTER-t az alapértelmezetthez TELJES Név []: Teszt Katalin Szobaszám []: Munkahelyi telefon []: Otthoni telefon []: Egyéb []: Is the information correct? [Y/n] y
A program elsőként megáll a jelszóbekérésnél, majd az egyéb adatok bekérésénél, a végén rákérdez, hogy az adatok rendben vannak-e. Az y vagy egy Enter lenyomása után a felhasználó létrejön könyvtárával együtt. Sőt a /etc/skel könyvtár tartalmát is megkapta.
Így is használhatjuk:
adduser --home /home/kati --shell /bin/bash --gecos "Teszt Katalin" -m kati
Részletek adduser(8) kézikönyvben.
Az adduser beállításai:
/etc/adduser.conf
Egy felhasználó betehető az adduser paranccsal egy csoportba:
adduser kati info
A kati felhasználót az info csoportba tesszük; a felhasználónak már léteznie kell.
getent
Információt szolgáltat egy adatbázisból. Olyan adatbázisból mint passwd, group
getent passwd joska
joska:x:1001:1001:Nagy József,,,:/home/joska:/bin/bash
A informatika csoportról szeretnénk informálódni:
getent group informatika
useradd
A useradd parancs minden linuxos rendszer része. Ezzel is felhasználókat tudunk felvenni, de mindent kapcsolókkal kell megadnunk.
useradd -c "Teszt Katalin" -d /home/kati -g users -G info,human,rgazda -k /etc/skel -m -s /bin/bash kati
A useradd kapcsolói | |
---|---|
-c | megjegyzés |
-d | home könyvtár |
-g | elsődleges csoport |
-G | másodlagos csoport vagy csoportok |
-m | hozzuk létre a home könyvtárát |
-s | milyen shellt kapjon |
-u UID | mi legyen a uid-je |
-k | honnan másoljuk alapértelmezett fájlokat |
chage
A chage parancs segítségével lekérdezhetjük, szabályozhatjuk egy-egy felhasználónak mikor jár le a jelszava.
A joska felhasználónak mikor jár le a jelszava?
chage -l joska
chage -l joska Utolsó jelszóváltás : dec 13, 2011 Jelszó lejár : soha Jelszó inaktív : soha Hozzáférés lejár : soha A jelszómódosítások közti legkevesebb na : 0 A jelszómódosítások közti legtöbb nap : 99999 A jelszó lejárata előtt figyelmeztetés napok száma : 7
99999 nap körülbelül: ~273 év
A joska felhasználó jelszava járjon le 10 nap múlva
chage -M 10 joska
Mikor járjon le a hozzáférése?
chage -E "2009-05-31" joska
Inaktív napok után lezárás
Jóskának 10 inaktív nap után lezárjuk a jelszavát.
chage -I 10 joska
chage --inactive 10 joska
Alapértelmezés visszaállítása
Az alábbi kapcsolókat használjuk:
-m 0 A napok minimális száma amíg lejár a jelszó. -M 99999 A jelszó maximum 99999 nap múlva jár le. -I -1 (minusz egy) A jelszó sosem lesz inaktív. -E -1 (minusz egy) A fiók sosem jár le.
chage -m 0 -M 99999 -I -1 -E -1 joska
Figyelmeztetés
Figyelmeztetés mielőtt a jelszó lejár
- -W, --warndays WARN_DAYS
chage -W 7 joska
Jelszó változtatás
A jelszavát nem változtathatja meg:
chage -m 10000 mari
Valójában 10 ezer napig nem változtathatja meg. De azért az elég messze van.
Ugyanezt a passwd paranccsal is beállíthatjuk.
Belépés után kötelező megváltoztatni:
chage -d 0 janos
addgroup
Az addgroup valójában egy link az adduser parancsra. Kézikönyve is megegyezik vele.
Csoport felvétele:
addgroup info
groupadd
Csoport felvétele
Ha egy felhasználót felvettünk egy csoportba, a csoport tagsága csak az újbóli belépés után lesz érvényes.
A groupadd parancs minden linuxos rendszerben megtalálható.
Van egy másik csoportok felvételére kitalált parancs, ez az addgroup. A groupadd parancstól csak annyiban különbözik, hogy tájékoztatást ír a képernyőre két sorban a felvétel sikeréről.
Például a „human” nevű csoport felvétele:
groupadd human
vagy:
addgroup human Adding group `human' (GID 1003) ... Kész.
gpasswd
A gpasswd parancs a /etc/group állomány adminisztrálására lett megalkotva.
A „kati” nevű felhasználó felvétele a „human” csoportba:
gpasswd -a kati human
A „kati” nevű felhasználó törlése a „human” csoportból:
gpasswd -d kati human
usermod
Teljesnév beállítása:
usermod -c "Nagy János" janos
A mari felhasználó felvétele a human csoportba:
usermod -a -G human mari
A -a hatására hozzáfűzés történik, vagyis a többi csoport megmarad. Ha elhagyjuk a -a kapcsolót, akkor a többi csoport törlődik.
usermod -G human,gazdasag,rgazda mari
A joska felhasználó kitiltása:
usermod --lock --expiredate 1970-01-01 joska
usermod -L -e 1970-01-01 joska
Az expiredate értéke bármi lehet ami régebbi mint az aktuális dátum.
A --lock a jelszó használatot tiltja. Azonban nem tiltja a kulcs alapú azonosítást. Ezért vettük vissza lejárati dátumot.
Magunk is letilthatjuk a felhasználó jelszavas bejelentkezését ha egy „!” („felkiáltó jelet”) teszek a jelszó elé:
joska:!$1$R8Z4PoEr$OSi234nDisere2ERda83dD82DSIK8ls:15407:0:99999:7:::
A felhasználó számára új bejelentkezési könyvtárat állítunk be:
usermod -d /home/info/joska joska
usermod --home /home/info/joska joska
usermod --home /home/tanulok/15z/janos janos
Alap csoport beállítása:
usermod -g info mari
Shell beállítása:
usermod -s /bin/ksh mari usermod --shell /bin/ksh kati
Felhasználó kitiltása:
usermod -L mari usermod --lock mari
Felhasználó engedése:
usermod -U mari usermod --unlock mari
Felhasználó kitiltása a másként:
usermod -s /usr/sbin/nologin mari usermod -s /bin/false mari
id
Ha egy felhasználó belépett saját csoporttagságairól az id parancs segítségével tájékozódhat.
A parancs önmagában kiadva is hatásos:
id
De lássuk paraméterezve.
Az aktuális felhasználó milyen csoportokban van benne:
id -nG
Lehetséges kimenet:
$ id -nG mari tanulok 15z
Az adott felhasználó milyen csoportokban van benne:
id -nG mari
Lehetséges kimenet:
$ id -nG mari mari tanulok 15z
groups
Az aktuális felhasználó, milyen csoportokban van benne:
groups
Megadott felhasználó milyen csoportokban van benne:
groups mari
members
apt install members
Adott csoportban, milyen felhasználók vannak:
members informatika
Lehetséges kimenet:
mari bela dani lali
vipw
A passwd, illetve a shadow fájl szerkesztése. Tulajdonképpen a vi szövegszerkesztőben nyitja meg a /etc/passwd fájl tartalmát.
Az EDITOR környezeti változóval más szerkesztő is megadható. Például az mcedit használata:
export EDITOR=mcedit; vipw
vigr
A csoportfájl szerkesztése.
Mint a vipw, csak a csoportfájlt szerkesztjük.
A shadow fájl
A régi unixos rendszerekben a jelszavak a passwd fájlban voltak. Ebben a fájlban vannak tárolva a felhasználók egyéb adatai, mint teljes név, szoba, stb. Ezek nyilvános adatok, így mindenki számára olvashatók. A Linuxokon felmerült az igény a jelszavak külön fájlban való elhelyezésére. Így került az /etc/shadow állományba. Az átlagos felhasználó ezeket nem tudja olvasni.
A /etc/shadow fájl tartalmazza a kódolt jelszót. Például
joska:$6$wR8ZPo/p$.XKKmA9YCSrK5UuA0BV03mUrVyqT7OSl24n4DX5dYDNolZDhD.YfE0Fn.PVzaDDGrxMwK6x4jZVTz9/0R8jQs1:15407:0:99999:7:::
- Felhasználónév
- Jelszó
- Utolsó jelszómódosítás és 1970 január 01-óta eltelt napok száma
- minimum ennyi napnak kell eltelni az újabb jelszómódosításig
- maximum ennyi ideig érvényes a jelszó
- Figyelmeztetés ennyi nappal a jelszó lejárat előtt
- Ha lejár a jelszó, ennyi nap múlva nem léphet be
- 1970 január 01 után ennyi nap letelte után lejár a jelszó
Jelszó generálás
Néha szükségünk lehet arra, hogy új rendszerünkbe a felhasználóknak jelszót generáljunk.
Egyik erre alkalmas program a makepasswd. Használatához telepíteni kell a makepasswd csomagot:
apt-get install makepasswd
A makepasswd alapértelmezetten 8 és 10 karakter közötti jelszót generál. Kapcsolóval szabályozhatjuk hány karakteres legyen. Például nyolc karakteres:
makepasswd --chars 8
Ha több jelszót szeretnénk generálni, a count kapcsolóval megtehetjük.
makepasswd --chars 18 --count 10
A jelszó kódolt formájának generálása az Apró debianos tippek oldalon található.
Másik jelszó generáló program:
apt-get install passwdqc
Jelszó generálása:
pwqgen
Újabb:
apt install whois
/usr/bin/mkpasswd
Titkosított jelszó generálás
Bekérjük a jelszót:
mkpasswd --method=SHA-512
Elérhető metódusok:
mkpasswd -m help mkpasswd --hethod=help
Csővezetéken keresztül, md5 algoritmussal:
echo titok | mkpasswd --method=md5 --stdin $1$nA/Ib1YG$m3pY9ykzz7wkMKM4DcIh5.
Megadhatjuk a sót is:
echo titok | mkpasswd --salt sosososo --method=md5 --stdin $1$sosososo$KfdFXbUsLvw5V32hcacOq0
A parancs bekéri a jelszót, majd kiírja a titkosított jelszót.
Felhasználó felvétele:
useradd -m -s /bin/bash -p $(mkpasswd --method=SHA-512 --stdin) mari
useradd -m \ -s /bin/bash \ -p $(echo titok | mkpasswd --method=SHA-512 --stdin) \ mari
Lehet az openssl paranccsal is:
openssl passwd -1
SHA-512:
openssl passwd -6
echo titok | openssl passwd -6 -stdin
Só megadása:
echo titok | openssl passwd -6 -stdin -salt so
Felhasználó törlése
userdel
Töröljük a felhasználót:
userdel joska
Töröljük a felhasználót és a könyvtára tartalmát:
userdel -r joska
deluser
deluser --remove-home deluser --remove-all-files deluser --backup deluser --backup-to
Az /etc/deluser.conf segítségével érdemes szabályozni. Részletekért nézzük meg a deluser.conf(5) kézikönyvet.
--backup
Minden állomány backupja, ami a home és a mailspool könyvtárban van. Az eredmény:
/$user.tar.bz2 vagy /$user.tar.gz.
--backup-to
A backup fájl helyét is megadhatjuk
--remove-home
A felhasznál mailspool és home könyvtárának törlése. Ha a --backup meg van adva, akkor backup után a fájlok törlésre kerülnek.
--remove-all-files
Minden fájl törlése a rendszerben, amelynek a felhasználó a birtokosa. Ha a --backup meg van adva, a törlés a backup után történik.
chfn
A finger információ (teljes név, iroda, telefon, stb) módosítása.
# chfn -f János janos
# chfn --full-name "Nagy János" janos
$ getent passwd janos
Kapcsolók:
- -f, --full-name FULL_NAME -- Teljes név
- -o, --other OTHER_INFO -- más információ
- -h, --home-phone HOME_PHONE -- otthoni telefonszám
- -r, --room ROOM_NUMBER -- szoba száma
- -w, --work-phone WORK_PHONE-- munka telefonszám
- -R, --root CHROOT_DIR -- munka telefonszám
A gecos információk bekérhetők interaktív módon a következő paranccsal:
chfn janos
root@iskolazo:~# chfn janos janos felhasználói információinak cseréje Add meg az új értéket vagy üss ENTER-t az alapértelmezetthez TELJES Név [Nagy János]: Peres János Szobaszám []: 304 Munkahelyi telefon []: 1154 Otthoni telefon []: Egyéb []: chfn: name with non-ASCII characters: 'Peres János'
A felhasználó saját maga is megváltoztathatja az engedélyezett értékeket.
Hogy a felhasználó mit változtathat meg a chfn paranccsal a /etc/login.defs fájlban szabályozhatjuk.
CHFN_RESTRICT frwh
Ha nincs definiálva semmit nem változtathatunk meg. A yes = „rwh”, a no = „frwh”.
Ha nem adunk meg paramétert, akkor interaktív módban indul a chfn, és bekéri az engedélyezett értékeket.
chfn
finger
apt install finger
finger joska
passwd
Használat például:
passwd \ -x <MAX_D> \ -w <WARN_D> \ -i <INACTIVE_D> felhasználó
A passwd parancs a jelszó beállítására használható.
# passwd
A rendszergazda mások jelszavát is beállíthatja:
# passwd janos
A felhasználó kizárása:
# passwd -l janos
A felhasználó újból engedése:
# passwd -u janos
Jelszó lejárat előtt hány nappal kapjon a felhasználó figyelmeztetést:
# passwd -w 7 janos
A felhasználó jelszavának lejárata előtt figyelmeztetés 7 nappal.
A felhasználó 7 napig nem változtathatja meg a jelszót:
# passwd -n 7
Jelszóbeállítások lekérdezése:
# passwd -S # passwd -S janos
A felhasználó jelszavának azonnali „lejáratása”:
# passwd -e janos
Adott felhasználó jelszavának törlése:
# passwd -d janos
További kapcsolók:
# passwd -h
A jelszót nem lehet lecserélni adott ideig, szintaktika:
- passwd -n MIN <login-name>
Példa:
# passwd -n 10000 janos
login beállítások
Az /etc/login.defs könyvtárban a felhasználók számára beállítható néhány adottság. Ilyen a felhasználók levelei hol tárolódjanak.
MAIL_DIR /var/mail
A sikertelen bejelentkezések naplózása a /var/log/faillog fájlba.
FAILLOG_ENAB yes
Az ismeretlen felhasználónevek naplózása sikertelen bejelentkezés esetén.
LOG_UNKFAIL_ENAB no
A sikeres bejelentkezések naplózása:
LOG_OK_LOGINS no
A su tevékenységek naplózása a syslog naplóba:
SYSLOG_SU_ENAB yes SYSLOG_SG_ENAB yes
A su aktívitás külön naplózása:
SULOG_FILE /var/log/sulog
Alapértelmezett útvonal a rendszergazda számára:
ENV_SUPATH
Alapértelmezett útvonal a felhasználók számára:
ENV_PATH
Jelszavak kontrollálása. Alapértelmezésként, mikor jár le, mikor változtathatja meg, mikor legyen figyelmeztetés.
PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_WARN_AGE 7
Felhasználók minimális azonosítója useradd esetén:
UID_MIN 1000 UID_MAX 60000
Minimális csoportazonosítók:
GID_MIN 1000 GID_MAX 60000
A bejelentkezés visszautasítása ennyi sikertelen próbálkozás után:
LOGIN_RETRIES 5
A maximális sikertelen bejelentkezések után ennyi ideig tiltva:
LOGIN_TIMEOUT 60
További lehetőségek a /etc/login.defs állományban is találhatók, vagy nézzük meg az idevonatkozó kézikönyvet:
man login.defs
A felhasználók a chfn paranccsal milyen értékeket cserélhetnek:
CHFN_RESTRICT rwh
- f - full name
- r - room number
- w - work phone
- h - home phone
Ha a felhasználó nem tud belépni a könyvtárába, akkor legyen egy alapértelmezett könyvtár:
DEFAULT_HOME yes
A felhasználó törlésekor a következő parancs fusson le:
USERDEL_CMD /usr/local/bin/sajtScript.sh
Felhasználónévvel azonos csoport létrehozása useradd, törlése userdel esetén:
USERGROUPS_ENAB yes
Az aktuális shell előtt milyen parancs fusson le:
FAKE_SHELL /bin/fakeshell
Azonosítás algoritmusa:
ENCRYPT_METHOD SHA512
Felhasználócsere
A felhasználót a su paranccsal cserélhetünk. Például mari felhasználóvá válhatunk:
su mari
Ha kötőjelet is használok, akkor a mari felhasználó teljes környezetét kapom:
su - mari
Ehhez a művelethez persze tudni kell a mari felhasználó jelszavát, vagy rendszergazdaként kell végrehajtani.
Egy csoportot is felvehetünk a sg paranccsal. Például az info csoport felvétele:
sg info
A skel könyvtár
Az új felhasználók számára létrejövő állományok és könyvtárak a /etc/skel könyvtárban vannak:
/etc/skel
Hozzuk létre a skel könyvtárban, azokat a fájlokat és könyvtárakat, amelyeket szeretnénk látni minden új felhasználó könyvtárába.
A skel könyvtárba ehhez hasonló könyvtárakat jöhetnek jól:
/ `-etc/ `-skel/ |-ceges/ |-magan/ `-szabalyok.txt
Ezek után a felhasználóktól megköveteljük, hogy minden céges állományt és könyvtárat a ceges könyvtárban hozzanak létre. A magán jellegű fájlokat pedig a magan könyvtáron belül tároljanak. A szabalyok.txt állománybán leírjuk a szabályokat.
Belépések figyelése
Egy felhasználó mikor volt utoljára belépve:
last janos
Mikor lépett be utoljára és egyéb információk:
finger janos
Függelék
Parancsok gyűjteménye
- groupmod
- chfn
- chsh
- finger
- groupdel
- grpck
- newgrp
- id
- login
- su
Felhasználó felvétele
useradd -m mari passwd mari chfn mari
Felhasználó felvétele jelszó megadással:
useradd -d /home/mernokok/gaz/mari -s /bin/bash -G mernokok,gaz -m pali \ --password=$(perl -e 'print crypt("titok","so")')
A sóból csak 2 karakter lesz figyelembe véve.
perl -e 'print crypt("titok","so")' soGxgYrIU3kw6
useradd -d /home/mernokok/gaz/mari -s /bin/bash -G mernokok,gaz -m pali \ --password=soGxgYrIU3kw6
A jelszó legyártáshoz ez is megfelelő:
openssl passwd -1 titok
SHA512-s:
openssl passwd -6 titok
Csoport tagjainak törlése
#!/bin/bash # Függőség: # apt install members tomb=($(members csoport1)) for i in ${tomb[*]} do echo $i done
Csoport felvétele
Beállítottunk egy új csoportot, de nem szeretnénk kilépni, az érvényesítéshez.
Vegyük fel janos felhasználóként az új csoportot:
exec su -l $USER
Ez nem lép ki a terminálból.
Másik két lehetőség, de itt új shell jön létre.
newgrp docker
Vagy:
su - $USER