[[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)