Felhasználók és csoportok listázása Linuxon

Linux 8 perc olvasás

Kik férnek hozzá a szerverhez, ki van éppen bejelentkezve, és melyik felhasználó melyik csoportba tartozik? Ezekre a kérdésekre egy új szerver átvételekor, egy biztonsági ellenőrzésnél vagy egy jogosultsági hiba keresésekor egyaránt szükség van. Ez a cikk bemutatja, hogyan listázhatod a felhasználókat és a csoportokat, hogyan veheted fel a felhasználót egy csoportba, és milyen buktatókra figyelj közben.

A parancsokat 2026 novemberében AlmaLinux 10.2, AlmaLinux 9.8, Ubuntu 24.04.5 és Debian 13.7 rendszeren próbáltuk ki, a disztribúciók saját cloud image-éből telepített virtuális gépeken; egy KVM VPS-en ugyanígy működnek. A listázáshoz nem kell sudo, a módosításokhoz igen. A példákban a felhasználó neve janos, a csoporté fejlesztok.

A felhasználók listázása

Az /etc/passwd fájl

A helyi felhasználók az /etc/passwd fájlban vannak, soronként egy, kettősponttal elválasztott mezőkkel:

janos:x:1001:1001::/home/janos:/bin/bash
Mező Példa Jelentése
1. janos Felhasználónév
2. x A jelszó helye; a jelszó hash-e valójában az /etc/shadow fájlban van
3. 1001 Felhasználói azonosító (UID)
4. 1001 Az elsődleges csoport azonosítója (GID)
5. (üres) Megjegyzés, például teljes név
6. /home/janos Saját (home) könyvtár
7. /bin/bash Bejelentkezéskor induló shell

A teljes listát a getent passwd adja. Ez az /etc/passwd tartalmát mutatja, de ha a szerver központi címtárat (LDAP, Active Directory, SSSD) is használ, az onnan érkező felhasználókat is:

getent passwd

# Csak a nevek
getent passwd | cut -d: -f1

# Egy felhasználó adatai
getent passwd janos

Valódi felhasználók és rendszerfelhasználók

A lista nagy része nem ember, hanem rendszerfelhasználó: a szolgáltatások (sshd, nginx, mysql, polkitd és társaik) saját fiókkal futnak. A kettőt az UID különbözteti meg, a határokat az /etc/login.defs adja meg:

Rendszer Rendszerfelhasználók Normál felhasználók
AlmaLinux 9 és 10 201–999 (és néhány régi, 200 alatti fiók) 1000–60000
Ubuntu 24.04, Debian 13 100–999 1000–60000 (az adduser 59999-ig oszt ki)

A root UID-ja mindig 0. A normál felhasználók listája az /etc/login.defs határaival:

min=$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)
max=$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)
awk -F: -v min="$min" -v max="$max" '$3 >= min && $3 <= max {print $1}' /etc/passwd

Rövidebben, ha elég a szokásos 1000–60000 tartomány (a második parancs a címtárból érkező felhasználókat is mutatja):

awk -F: '$3 >= 1000 && $3 < 60000 {print $1, $3, $7}' /etc/passwd
getent passwd {1000..60000}

Az awk paranccsal listázott normál felhasználók, a wheel csoport tagjai, valamint a who és a last -n 4 parancs kimenete AlmaLinux 10.2 rendszeren

Ki tud bejelentkezni?

Az utolsó mező, a shell mutatja meg, kaphat-e a felhasználó parancssort. A rendszerfelhasználóknál ez /usr/sbin/nologin vagy /bin/false, így velük nem lehet belépni. Az ettől eltérő shellű fiókok:

grep -Ev '(nologin|false)$' /etc/passwd | cut -d: -f1,7

A teszten ez a root és a normál felhasználók mellett néhány különleges fiókot is kiírt (sync, AlmaLinuxon shutdown és halt): ezek egyetlen parancsot futtatnak, és jelszavuk nincs. Az érvényes shellek listája az /etc/shells fájlban van.

A shell önmagában nem minden: az SSH kulcsos belépéshez nem kell jelszó, a jelszavas belépéshez viszont kell. A jelszó állapotát a passwd -S mutatja:

sudo passwd -S janos

Az L vagy LK a második oszlopban zárolt (vagy be sem állított) jelszót jelent, a P vagy PS beállított jelszót. A teszten a cloud image-ekből telepített gépeken minden fiók jelszava zárolt volt, a belépés csak SSH kulccsal működött.

Ki van bejelentkezve?

# A most bejelentkezett felhasználók
who

# Ugyanez, a futó paranccsal és a terheléssel
w

# Csak a nevek, egy sorban
users

# A korábbi bejelentkezések és újraindítások (a legutóbbi 10)
last -n 10

# A sikertelen bejelentkezési kísérletek
sudo lastb -n 10

# Minden felhasználó legutóbbi bejelentkezése
lastlog

A who és a last a terminálon (TTY, pts/0) vagy SSH-n bejelentkezett felhasználókat mutatja, a távoli gép IP-címével. Az olyan SSH-kapcsolatok, amelyek csak egy parancsot futtatnak terminál nélkül (például scp, rsync vagy ssh szerver parancs), nem jelennek meg a last listájában.

Debian 13-on a last, a lastb és a lastlog hiányzik: a Debian 13 kiadási megjegyzései szerint a régi wtmp és lastlog fájlformátum a 2038-as évnél túlcsordul, ezért a Debian új, SQLite-alapú eszközökre váltott, és a cloud image-en ezek alapból nincsenek telepítve. Telepítsd őket:

sudo apt install wtmpdb libpam-wtmpdb lastlog2 libpam-lastlog2

Ezután a last parancs újra elérhető (a wtmpdb csomagból), a lastlog helyett pedig a lastlog2 parancsot használd. A lastb helyett a kiadási megjegyzések a sudo lslogins --failed parancsot ajánlják. A teszten a last a következő újraindítás után kezdett adatot mutatni, a korábbi bejelentkezések nem kerültek bele. Az AlmaLinux 9 és 10, valamint az Ubuntu 24.04 rendszeren a last, a lastb és a lastlog alapból megvolt.

A bejelentkezések részletesebb naplója az /var/log/secure (AlmaLinux) vagy az /var/log/auth.log (Ubuntu, Debian) fájlban és a journalctl -u sshd (Ubuntun és Debianon -u ssh) kimenetében található, lásd: Naplófájlok olvasása Linuxon.

A csoportok listázása

A csoportok az /etc/group fájlban vannak:

fejlesztok:x:1000:janos,anna

A mezők: a csoport neve, a jelszó helye (gyakorlatilag nem használják), a csoportazonosító (GID), végül a tagok vesszővel elválasztva.

# Az összes csoport
getent group

# Egy csoport adatai és tagjai
getent group fejlesztok

# Egy felhasználó csoportjai
groups janos
id janos

# A saját csoportjaid
id

Az id a legpontosabb: kiírja a felhasználó UID-ját, elsődleges csoportját (gid=) és az összes csoportját számokkal együtt, például uid=1001(janos) gid=1001(janos) groups=1001(janos),1000(fejlesztok). Csak a csoportnevekhez használd az id -nG janos parancsot.

Buktató: az elsődleges csoport tagjai nem látszanak

Minden felhasználónak van egy elsődleges csoportja (az /etc/passwd negyedik mezője), ez általában egy vele azonos nevű csoport. Az elsődleges csoport tagjait az /etc/group nem sorolja fel, ezért a getent group sem mutatja őket. A teszten az admin felhasználó elsődleges csoportja a users volt, a getent group users kimenete mégis üres taglistát mutatott:

users:x:100:

Ha egy csoport összes tagjára kíváncsi vagy, az elsődleges csoportként hozzárendelt felhasználókat is gyűjtsd ki:

g=users
gid=$(getent group "$g" | cut -d: -f3)
{ getent group "$g" | cut -d: -f4 | tr , '\n'
  getent passwd | awk -F: -v gid="$gid" '$4 == gid {print $1}'
} | grep -v '^$' | sort -u

Felhasználó hozzáadása csoporthoz

usermod -aG

sudo usermod -aG fejlesztok janos

# Több csoport egyszerre, vesszővel elválasztva
sudo usermod -aG fejlesztok,docker janos

Az -a kapcsoló kötelező. Az -a (append) nélkül a usermod -G nem hozzáad, hanem lecseréli a felhasználó összes kiegészítő csoportját a megadottra. A teszten a janos felhasználó a fejlesztok csoport tagja volt; egy usermod -G adm janos után már csak az adm csoportban maradt:

Az usermod -G adm parancs az -a kapcsoló nélkül kiveszi a felhasználót a fejlesztok csoportból, az usermod -aG visszateszi; Debian 13

Ez a hiba sudo jogot is elvehet: ha egy rendszergazda felhasználót -a nélkül teszel be egy új csoportba, kikerül a wheel vagy a sudo csoportból. Ezért a módosítás közben mindig hagyj nyitva egy root vagy sudo jogú kapcsolatot. Javítani a hiányzó csoportok újbóli hozzáadásával lehet (usermod -aG).

gpasswd: hozzáadás és eltávolítás

A gpasswd egyszerre csak egy csoportot módosít, így nem lehet vele véletlenül kiüríteni a csoportlistát. Csoportból eltávolítani is ezzel a legegyszerűbb:

# Hozzáadás
sudo gpasswd -a janos fejlesztok

# Eltávolítás
sudo gpasswd -d janos fejlesztok

Ubuntun és Debianon az adduser janos fejlesztok és a deluser janos fejlesztok ugyanezt csinálja. AlmaLinuxon az adduser csak a useradd másik neve, ott ezt a formát ne használd.

Mikor lép életbe?

A csoporttagság a bejelentkezéskor töltődik be. A már futó munkamenetben az új csoport nem látszik: az id janos már mutatja, de a felhasználó saját shelljében kiadott id még nem, és a csoport jogosultságai sem érvényesek. A felhasználónak ki kell lépnie és újra be kell jelentkeznie (SSH esetén egy új kapcsolatot nyitnia).

Ha nem szeretnél kilépni, a newgrp egy új shellt indít, amelyben az új csoport már érvényes:

newgrp fejlesztok

Az usermod -aG után a futó shellben az id -nG még nem mutatja a fejlesztok csoportot, az id -nG admin és a newgrp utáni shell már igen; AlmaLinux 10.2

A newgrp shelljében a megadott csoport lesz az elsődleges, így az ott létrehozott fájlok is ezt a csoportot kapják; az exit visszavisz az eredeti shellbe. A szolgáltatásokra ugyanez vonatkozik: ha egy szolgáltatás felhasználóját tetted be egy új csoportba, indítsd újra a szolgáltatást.

A wheel és a sudo csoport

A sudo használatának joga disztribúciónként más csoporthoz kötődik:

Rendszer Csoport Bejegyzés az /etc/sudoers fájlban
AlmaLinux, Rocky Linux, RHEL wheel %wheel ALL=(ALL) ALL
Ubuntu, Debian sudo %sudo ALL=(ALL:ALL) ALL

Hogy kik kaphatnak rendszergazdai jogot, a getent group wheel vagy a getent group sudo mutatja. Hogy egy adott felhasználó pontosan mit futtathat, azt a sudo -l -U írja ki, a /etc/sudoers.d/ könyvtárban megadott egyedi szabályokkal együtt:

sudo -l -U janos

A teszten egy csoporttag nélküli felhasználónál ez User janos is not allowed to run sudo on ... volt, a sudo csoportba tétele után (ALL : ALL) ALL. A felhasználó létrehozását és a sudo jog megadását lépésről lépésre a Felhasználó létrehozása és sudo jogosultság adása Linuxon cikk mutatja be, a sudo használatát A sudo parancs használata példákkal.

Csoport létrehozása és törlése

# Új csoport (a GID-t a rendszer választja, 1000 felett)
sudo groupadd fejlesztok

# Megadott GID-del
sudo groupadd -g 2000 projekt

# Rendszercsoport egy szolgáltatásnak (GID 1000 alatt)
sudo groupadd -r myapp

# Csoport törlése
sudo groupdel projekt

Egy felhasználó elsődleges csoportját a usermod -g kapcsolóval (kis g) lehet módosítani; ezt ritkán kell. A teszten a usermod -g a felhasználó saját könyvtárában lévő fájlokat átírta az új csoportra, a könyvtáron kívüli fájljai (például a /tmp alatt) viszont a régi csoportnál maradtak. Egy csoport nem törölhető, amíg valakinek az elsődleges csoportja (groupdel: cannot remove the primary group of user 'janos'), előbb a felhasználót kell átállítani vagy törölni.

Közös könyvtárhoz, amelyet a csoport minden tagja írhat, a könyvtár csoportját és jogosultságait is be kell állítani (chgrp, chmod 2775); ennek részleteit a Fájljogosultságok (chmod, chown) Linuxon cikk írja le.

Összefoglaló

Feladat Parancs
Összes felhasználó getent passwd
Normál felhasználók awk -F: '$3 >= 1000 && $3 < 60000 {print $1}' /etc/passwd
Bejelentkezett felhasználók who, w
Korábbi bejelentkezések last, lastlog (Debian 13: lastlog2)
Összes csoport getent group
Egy csoport tagjai getent group fejlesztok (az elsődleges csoport tagjai nélkül)
Egy felhasználó csoportjai id janos, groups janos
Hozzáadás csoporthoz sudo usermod -aG fejlesztok janos vagy sudo gpasswd -a janos fejlesztok
Eltávolítás csoportból sudo gpasswd -d janos fejlesztok
Sudo jogok sudo -l -U janos
Vissza: Linux leírások (76)