[[oktatas:linux|< Linux]] ====== Felhasználókezelés ====== * **Szerző:** Sallai András * Copyright (c) 2012, Sallai András * Szerkesztve: 2012, 2013, 2017, 2020, 2021 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|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::: {{:oktatas:linux:shadowfile.png|}} - 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 [[oktatas:linux:apró_debianos_tippek#kódolók|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 \ -w \ -i 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 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 ===== Forrás ===== * https://en.wikipedia.org/wiki/General_Comprehensive_Operating_System (2019) * https://en.wikipedia.org/wiki/Gecos_field (2019)