id-Befehl: UID und Gruppen prüfen, whoami, groups und zusätzliche Gruppen

TestumgebungRHEL-FamilieAlmaLinux 9.8coreutils 8.32root-KontoDebian 12 · coreutils 9.1 normales Konto
Befehle für Benutzer · Gruppenid, whoami, groupsSpeicherort/usr/bin/id

Auf einem Linux-Server werden UID und Gruppen des aktuellen Kontos mit dem id-Befehl geprüft; wird nur der Kontoname gebraucht, dient dazu whoami, für nur die Gruppennamen groups. Auf Servern mit AlmaLinux 9 und Debian 12 wurden die drei Befehle nacheinander ausgeführt und die Ausgaben verglichen: id -un und whoami gaben denselben Kontonamen aus, und groups gab die Gruppenliste von id nur mit den Namen aus.

Die Ausgabe unten stammt von einem AlmaLinux-9.8-Server mit dem root-Konto und von einem Debian-12-Server mit einem normalen Konto. Name und Nummern des Anmeldekontos sowie die zusätzlichen Gruppen wurden durch Beispielwerte (user1, 1000, adm, systemd-journal) ersetzt.

1️⃣ Grundlegende Verwendung des id-Befehls

  • ↪️ Die drei Felder uid, gid und groups lesen

Ohne Optionen gibt id die Informationen des Kontos, das die aktuelle Shell gestartet hat, in einer Zeile aus. Im root-Konto standen alle drei Felder auf 0(root).

id
uid=0(root) gid=0(root) groups=0(root)

Das Feld uid enthält Nummer und Name des Kontos, das Feld gid Nummer und Name der primären Gruppe (primary group). Das Feld groups enthält alle Gruppen, denen das Konto angehört, mit der primären Gruppe an erster Stelle.

Steht hinter id ein Kontoname, werden die Informationen dieses Kontos ausgegeben. Beim normalen Konto user1, das zusätzliche Gruppen hat, folgten im Feld groups auf die primäre Gruppe user1 die Gruppen adm und systemd-journal. Diese Gruppen, denen das Konto neben der primären Gruppe angehört, sind die zusätzlichen Gruppen (supplementary group).

id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1),4(adm),190(systemd-journal)

Bei vielen Konten haben UID und gid dieselbe Nummer, sodass die beiden Zahlen leicht für denselben Wert gehalten werden; das auf dem Server standardmäßig vorhandene Konto adm hatte aber die UID 3 und die Nummer 4 als primäre Gruppe. Das Konto operator hatte root als primäre Gruppe.

id adm
uid=3(adm) gid=4(adm) groups=4(adm)
id operator
uid=11(operator) gid=0(root) groups=0(root)

Werden mehrere Konten angegeben, erscheint je eines pro Zeile.

id root bin
uid=0(root) gid=0(root) groups=0(root)
uid=1(bin) gid=1(bin) groups=1(bin)

Bei einem Konto, das es nicht gibt, erscheint der Fehler [no such user], und der Exit-Code war 1.

id no-such-user9
id: 'no-such-user9': no such user
echo $?
1

Bei einem vorhandenen Konto ist der Exit-Code 0, sodass er sich in einem Skript als Bedingung eignet, um zu prüfen, ob ein Konto existiert.

2️⃣ Optionen des id-Befehls

  • ↪️ -u, -g, -G für Nummern und -n für Namen

Soll aus der gesamten Ausgabe nur eine Nummer an ein Skript übergeben werden, wird mit einer Option ein einzelnes Feld ausgewählt. -u gibt die UID aus, -g die Nummer der primären Gruppe und -G alle Nummern der Gruppen, denen das Konto angehört.

id -u
0
id -u daemon
2
id -G user1
1000 4 190

Zusammen mit -n erscheinen Namen statt Nummern. Die Prüfung der Gruppen von user1 mit [id -Gn] machte aus den drei Nummern drei Namen.

id -Gn user1
user1 adm systemd-journal
id -gn user1
user1

-n und -r werden zusammen mit einer der Optionen -u, -g und -G verwendet. -n allein ergab den Fehler unten.

id -n
id: cannot print only names or real IDs in default format

-r gibt die reale (real) ID statt der effektiven (effective) ID aus. In einer Shell des root-Kontos gab [id -ur] 0 aus. Werden zwei oder mehr Optionen, die eine Nummer auswählen, wie -u und -g zusammen angegeben, erscheint der Fehler [cannot print "only" of more than one choice]. Die Optionen sind unten zusammengefasst.

OptionKopierenBeschreibung
-u--userGibt die UID-Nummer aus
-g--groupGibt die Nummer der primären Gruppe aus
-G--groupsGibt alle Nummern der Gruppen aus, denen das Konto angehört
-n--nameGibt zusammen mit -u, -g oder -G den Namen statt der Nummer aus
-r--realGibt zusammen mit -u, -g oder -G die reale (real) ID statt der effektiven ID aus
OptionKopierenBeschreibung
-Z--contextGibt nur den Sicherheitskontext des Prozesses aus
-z--zeroTrennt die Ausgabeelemente mit NUL-Zeichen statt Leerzeichen; im Standardformat nicht verwendbar
-aWird nur zur Kompatibilität mit anderen Versionen von id angenommen und ignoriert
--helpGibt die Hilfe aus
--versionVersion ausgeben

🔲 Simulator für den id-Befehl

Der Simulator unten startet mit dem Konto user1, das zusätzliche Gruppen hat. Nach dem Hinzufügen der Gruppe wheel mit dem Chip [🖊 Anderes Fenster] lassen sich [id] und [id user1] vergleichen und mit dem Chip [🔁 Erneut anmelden] die Gruppen einer neuen Shell prüfen.

Simulator für den id-Befehlcoreutils 8.32
[root@server work]#
Läuft nur im Browser. Nach dem Ändern der Gruppen mit dem Chip [🖊 Anderes Fenster] werden [id] und [id user1] verglichen und mit dem Chip [🔁 Erneut anmelden] die Gruppen einer neuen Shell geprüft.

3️⃣ Der whoami-Befehl und id -un

  • ↪️ Den aktuellen Kontonamen prüfen und andere Konten prüfen

Wird nur der Kontoname der aktuellen Shell gebraucht, wird whoami ausgeführt. Die man-Seite beschreibt whoami als denselben Befehl wie [id -un]. Im root-Konto gaben beide Befehle root aus.

whoami
root
id -un
root

Auch in einem normalen Konto auf dem Debian-12-Server gaben die beiden Befehle denselben Kontonamen aus.

whoami
user1
id -un
user1

whoami gibt den Kontonamen aus, der zur aktuell effektiven (effective) UID gehört. Der Befehl prüft nur das aktuelle Konto; wird dahinter ein Kontoname angegeben, erscheint ein Fehler.

whoami user1
whoami: extra operand 'user1'
Try 'whoami --help' for more information.

Name oder Nummer eines anderen Kontos werden geprüft, indem dieses Konto hinter id angegeben wird.

id -un user1
user1

Mit -u statt -un erscheint an derselben Stelle die UID-Nummer statt des Kontonamens.

4️⃣ Der groups-Befehl und zusätzliche Gruppen

  • ↪️ Primäre und zusätzliche Gruppen und die Shell nach einer Gruppenänderung

groups gibt nur die Gruppennamen in einer Zeile aus. Ohne Kontonamen erscheinen die Gruppen der aktuellen Shell; im root-Konto war das nur root.

groups
root

Mit einem Kontonamen erscheinen der Kontoname und nach dem Doppelpunkt die Gruppen. Bei mehreren Konten wurde je eines pro Zeile ausgegeben.

groups user1 daemon
user1 : user1 adm systemd-journal
daemon : daemon

Die primäre Gruppe und die zusätzlichen Gruppen werden an verschiedenen Stellen gespeichert. Zusätzliche Gruppen stehen als Mitglieder im vierten Feld der Gruppendatenbank (/etc/group), die primäre Gruppe steht als Nummer im vierten Feld der Kontoinformationen (/etc/passwd).

getent group adm
adm:x:4:user1
getent group user1
user1:x:1000:
getent passwd daemon
daemon:x:2:2:daemon:/sbin:/sbin/nologin

Bei der Gruppe user1, der primären Gruppe von user1, war das vierte Feld leer, und bei der zusätzlichen Gruppe adm war user1 als Mitglied eingetragen. Die 2 im vierten Feld der Zeile des Kontos daemon ist die Nummer der primären Gruppe.

Um ein Konto einer zusätzlichen Gruppe hinzuzufügen, dient der usermod-Befehl in der Form [usermod -aG Gruppe Konto]. Mit -G allein ohne -a fällt das Konto aus den bestehenden zusätzlichen Gruppen heraus, die nicht in der Liste stehen; deshalb wird -a mit angegeben.

groups ohne Kontonamen gibt die Gruppen des aktuellen Shell-Prozesses aus. Die man-Seite erklärt, dass dieser Wert von der Datenbank abweichen kann, wenn sich die Gruppendatenbank ändert.

Deshalb werden direkt nach einer Gruppenänderung die Gruppen in der Datenbank mit [groups Konto] oder [id Konto] geprüft, und für die Übernahme in die Shell ist eine erneute Anmeldung nötig. Ein Befehl, der die aktuelle Gruppen-ID bei bestehender Anmeldung ändert, ist newgrp.

🔢 FAQ & empfohlene Inhalte

Ja, das geht. Auf dem AlmaLinux-9.8-Server gab [id 0] dasselbe aus wie [id root], nämlich uid=0(root) gid=0(root) groups=0(root).

Ab der Nummer, die in /etc/login.defs bei UID_MIN steht. Auf dem AlmaLinux-9.8-Server war das 1000, und SYS_UID_MIN und SYS_UID_MAX in derselben Datei waren 201 und 999, der Bereich der Systemkonten.

who am i ist who mit zwei angehängten Wörtern; es verhält sich wie die Option -m und gibt eine Zeile mit den Anmeldeinformationen des Terminals aus, in dem gerade getippt wird. whoami gibt nur eine Zeile mit dem Kontonamen der aktuell effektiven UID aus.

ℹ️ Affiliate-Hinweis
Die Inhalte dieser Website enthalten Affiliate-Links. Kauft ein Besucher über einen dieser Links ein Produkt oder eine Dienstleistung, erhält die Website vom Verkäufer eine Provision. Der Betrag, den der Käufer zahlt(bei Aktionsrabatten sinkt er ↓), steigt dadurch nicht. Angegebene Preise, Rabatte und Lagerbestände entsprechen dem Stand bei Erstellung und können abweichen; prüfe sie daher vor dem Kauf beim Verkäufer. Produkte werden nach eigenen Kriterien ausgewählt und bewertet, und Provisionen beeinflussen weder die Reihenfolge noch den Inhalt der Bewertungen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Beweisen Sie, dass Sie ein Mensch sind: 2   +   4   =