Izpis uporabnikov in skupin v Linuxu

Linux Branje: 8 min

Kdo ima dostop do strežnika, kdo je trenutno prijavljen in kateri uporabnik spada v katero skupino? Ta vprašanja so potrebna ob prevzemu novega strežnika, pri varnostnem pregledu ali pri iskanju napake dovoljenj. Ta članek predstavlja, kako izpišeš uporabnike in skupine, kako uporabnika dodaš v skupino in na katere pasti je treba pri tem paziti.

Ukaze smo novembra 2026 preizkusili v sistemih AlmaLinux 10.2, AlmaLinux 9.8, Ubuntu 24.04.5 in Debian 13.7, na navideznih računalnikih, nameščenih iz lastnih cloud image distribucij; na KVM VPS delujejo enako. Za izpis sudo ni potreben, za spremembe pa. V primerih je ime uporabnika janos, ime skupine pa fejlesztok.

Izpis uporabnikov

Datoteka /etc/passwd

Lokalni uporabniki so v datoteki /etc/passwd, po eden na vrstico, s polji, ločenimi z dvopičjem:

janos:x:1001:1001::/home/janos:/bin/bash
Polje Primer Pomen
1. janos Uporabniško ime
2. x Mesto gesla; razpršeno geslo je v resnici v datoteki /etc/shadow
3. 1001 Identifikator uporabnika (UID)
4. 1001 Identifikator primarne skupine (GID)
5. (prazno) Komentar, na primer polno ime
6. /home/janos Lastni (domači) imenik
7. /bin/bash Lupina, ki se zažene ob prijavi

Celoten seznam da getent passwd. Ta pokaže vsebino /etc/passwd, če pa strežnik uporablja tudi centralni imenik (LDAP, Active Directory, SSSD), tudi uporabnike iz njega:

getent passwd

# Le imena
getent passwd | cut -d: -f1

# Podatki uporabnika
getent passwd janos

Pravi uporabniki in sistemski uporabniki

Velik del seznama niso ljudje, temveč sistemski uporabniki: storitve (sshd, nginx, mysql, polkitd in podobne) tečejo z lastnimi računi. Ločuje ju UID, meje pa določa /etc/login.defs:

Sistem Sistemski uporabniki Navadni uporabniki
AlmaLinux 9 in 10 201–999 (in nekaj starih računov pod 200) 1000–60000
Ubuntu 24.04, Debian 13 100–999 1000–60000 (adduser dodeljuje do 59999)

UID uporabnika root je vedno 0. Seznam navadnih uporabnikov z mejami iz /etc/login.defs:

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

Krajše, če zadošča običajni obseg 1000–60000 (drugi ukaz pokaže tudi uporabnike iz imenika):

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

Navadni uporabniki, izpisani z ukazom awk, člani skupine wheel ter izpis ukazov who in last -n 4 v sistemu AlmaLinux 10.2

Kdo se lahko prijavi?

Zadnje polje, lupina, pove, ali uporabnik lahko dobi ukazno vrstico. Pri sistemskih uporabnikih je to /usr/sbin/nologin ali /bin/false, zato se z njimi ni mogoče prijaviti. Računi z drugačno lupino:

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

V preizkusu je to poleg uporabnika root in navadnih uporabnikov izpisalo tudi nekaj posebnih računov (sync, v AlmaLinuxu shutdown in halt): ti zaženejo en sam ukaz in nimajo gesla. Seznam veljavnih lupin je v datoteki /etc/shells.

Lupina sama ni vse: za prijavo s ključem SSH geslo ni potrebno, za prijavo z geslom pa je. Stanje gesla pokaže passwd -S:

sudo passwd -S janos

L ali LK v drugem stolpcu pomeni zaklenjeno (ali sploh nenastavljeno) geslo, P ali PS pa nastavljeno geslo. V preizkusu so bila na računalnikih, nameščenih iz cloud image, gesla vseh računov zaklenjena, prijava je delovala le s ključem SSH.

Kdo je prijavljen?

# Trenutno prijavljeni uporabniki
who

# Enako, s tekočim ukazom in obremenitvijo
w

# Le imena, v eni vrstici
users

# Prejšnje prijave in ponovni zagoni (zadnjih 10)
last -n 10

# Neuspešni poskusi prijave
sudo lastb -n 10

# Zadnja prijava vsakega uporabnika
lastlog

who in last pokažeta uporabnike, prijavljene na terminalu (TTY, pts/0) ali prek SSH, z naslovom IP oddaljenega računalnika. Povezave SSH, ki zaženejo le en ukaz brez terminala (na primer scp, rsync ali ssh szerver parancs), se na seznamu last ne prikažejo.

V Debianu 13 manjkajo last, lastb in lastlog: po opombah ob izdaji Debian 13 stara oblika datotek wtmp in lastlog leta 2038 prekipi, zato je Debian prešel na nova orodja na osnovi SQLite, ki na cloud image privzeto niso nameščena. Namesti jih:

sudo apt install wtmpdb libpam-wtmpdb lastlog2 libpam-lastlog2

Nato je ukaz last spet na voljo (iz paketa wtmpdb), namesto lastlog pa uporabi ukaz lastlog2. Namesto lastb opombe ob izdaji priporočajo ukaz sudo lslogins --failed. V preizkusu je last začel kazati podatke po naslednjem ponovnem zagonu, prejšnje prijave pa niso bile vključene. V sistemih AlmaLinux 9 in 10 ter Ubuntu 24.04 so bili last, lastb in lastlog na voljo privzeto.

Podrobnejši dnevnik prijav je v datoteki /var/log/secure (AlmaLinux) ali /var/log/auth.log (Ubuntu, Debian) in v izpisu journalctl -u sshd (v Ubuntuju in Debianu -u ssh), glej: Branje dnevniških datotek v Linuxu.

Izpis skupin

Skupine so v datoteki /etc/group:

fejlesztok:x:1000:janos,anna

Polja: ime skupine, mesto gesla (praktično se ne uporablja), identifikator skupine (GID), nazadnje pa člani, ločeni z vejicami.

# Vse skupine
getent group

# Podatki in člani skupine
getent group fejlesztok

# Skupine uporabnika
groups janos
id janos

# Tvoje skupine
id

id je najnatančnejši: izpiše UID uporabnika, njegovo primarno skupino (gid=) in vse njegove skupine s številkami, na primer uid=1001(janos) gid=1001(janos) groups=1001(janos),1000(fejlesztok). Le za imena skupin uporabi ukaz id -nG janos.

Past: člani primarne skupine niso vidni

Vsak uporabnik ima primarno skupino (četrto polje v /etc/passwd), običajno skupino z istim imenom. Članov primarne skupine /etc/group ne navaja, zato jih tudi getent group ne pokaže. V preizkusu je bila primarna skupina uporabnika admin users, izpis getent group users pa je kljub temu pokazal prazen seznam članov:

users:x:100:

Če te zanimajo vsi člani skupine, zberi tudi uporabnike, ki jim je dodeljena kot primarna skupina:

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

Dodajanje uporabnika v skupino

usermod -aG

sudo usermod -aG fejlesztok janos

# Več skupin hkrati, ločenih z vejico
sudo usermod -aG fejlesztok,docker janos

Stikalo -a je obvezno. Brez -a (append) usermod -G ne doda, temveč vse dodatne skupine uporabnika zamenja z navedeno. V preizkusu je bil uporabnik janos član skupine fejlesztok; po usermod -G adm janos je ostal le v skupini adm:

Ukaz usermod -G adm brez stikala -a uporabnika odstrani iz skupine fejlesztok, usermod -aG ga vrne; Debian 13

Ta napaka lahko odvzame tudi pravice sudo: če skrbniškega uporabnika brez -a dodaš v novo skupino, izpade iz skupine wheel ali sudo. Zato med spremembo vedno pusti odprto povezavo s pravicami root ali sudo. Popravi se s ponovnim dodajanjem manjkajočih skupin (usermod -aG).

gpasswd: dodajanje in odstranjevanje

gpasswd naenkrat spremeni le eno skupino, zato z njim seznama skupin ni mogoče pomotoma izprazniti. Tudi odstranitev iz skupine je z njim najpreprostejša:

# Dodajanje
sudo gpasswd -a janos fejlesztok

# Odstranitev
sudo gpasswd -d janos fejlesztok

V Ubuntuju in Debianu adduser janos fejlesztok in deluser janos fejlesztok naredita isto. V AlmaLinuxu je adduser le drugo ime za useradd, tam te oblike ne uporabljaj.

Kdaj začne veljati?

Članstvo v skupini se naloži ob prijavi. V že tekoči seji nova skupina ni vidna: id janos jo že pokaže, id, zagnan v lastni lupini uporabnika, pa še ne, tudi pravice skupine še ne veljajo. Uporabnik se mora odjaviti in znova prijaviti (pri SSH odpreti novo povezavo).

Če se ne želiš odjaviti, newgrp zažene novo lupino, v kateri nova skupina že velja:

newgrp fejlesztok

Po usermod -aG v tekoči lupini id -nG še ne pokaže skupine fejlesztok, id -nG admin in lupina po newgrp pa že; AlmaLinux 10.2

V lupini newgrp navedena skupina postane primarna, zato tudi datoteke, ustvarjene tam, dobijo to skupino; exit te vrne v prvotno lupino. Enako velja za storitve: če si uporabnika storitve dodal v novo skupino, storitev znova zaženi.

Skupini wheel in sudo

Pravica uporabe sudo je v različnih distribucijah vezana na različno skupino:

Sistem Skupina Vnos v datoteki /etc/sudoers
AlmaLinux, Rocky Linux, RHEL wheel %wheel ALL=(ALL) ALL
Ubuntu, Debian sudo %sudo ALL=(ALL:ALL) ALL

Kdo lahko dobi skrbniške pravice, pokaže getent group wheel ali getent group sudo. Kaj natančno sme zagnati določen uporabnik, izpiše sudo -l -U, skupaj s posebnimi pravili v imeniku /etc/sudoers.d/:

sudo -l -U janos

V preizkusu je bilo pri uporabniku brez članstva v skupini to User janos is not allowed to run sudo on ..., po vključitvi v skupino sudo pa (ALL : ALL) ALL. Ustvarjanje uporabnika in dodelitev pravic sudo korak za korakom predstavlja članek Ustvarjanje uporabnika in dodelitev pravic sudo v Linuxu, uporabo sudo pa Uporaba ukaza sudo s primeri.

Ustvarjanje in brisanje skupine

# Nova skupina (GID izbere sistem, nad 1000)
sudo groupadd fejlesztok

# Megadott GID-del
sudo groupadd -g 2000 projekt

# Sistemska skupina za storitev (GID pod 1000)
sudo groupadd -r myapp

# Brisanje skupine
sudo groupdel projekt

Primarno skupino uporabnika je mogoče spremeniti s stikalom usermod -g (mali g); to je redko potrebno. V preizkusu je usermod -g datoteke v uporabnikovem lastnem imeniku prepisal na novo skupino, njegove datoteke zunaj imenika (na primer pod /tmp) pa so ostale pri stari skupini. Skupine ni mogoče izbrisati, dokler je nekomu primarna skupina (groupdel: cannot remove the primary group of user 'janos'), najprej je treba uporabnika prestaviti ali izbrisati.

Za skupni imenik, v katerega lahko pišejo vsi člani skupine, je treba nastaviti tudi skupino in dovoljenja imenika (chgrp, chmod 2775); podrobnosti opisuje članek Dovoljenja datotek (chmod, chown) v Linuxu.

Povzetek

Naloga Ukaz
Vsi uporabniki getent passwd
Navadni uporabniki awk -F: '$3 >= 1000 && $3 < 60000 {print $1}' /etc/passwd
Prijavljeni uporabniki who, w
Prejšnje prijave last, lastlog (Debian 13: lastlog2)
Vse skupine getent group
Člani skupine getent group fejlesztok (brez članov primarne skupine)
Skupine uporabnika id janos, groups janos
Dodajanje v skupino sudo usermod -aG fejlesztok janos ali sudo gpasswd -a janos fejlesztok
Odstranitev iz skupine sudo gpasswd -d janos fejlesztok
Pravice sudo sudo -l -U janos
Nazaj: Linux – članki (76)