Benutzer und Gruppen

Siehe auch

Die Kommandos für die Verwaltung von Benutzern oder Gruppen sind identisch aufgebaut.

Benutzer:

useradd (als symbolischer Link: adduser)
userdel
usermod

Gruppen:

groupadd
groupdel
groupmod

Hintergrundwissen:

  • Der Benutzer root hat immer die User-ID (UID) 0 sowie die Group-ID (GID) 0.

  • Der erste im System per useradd angelegte Benutzer erhält bis CentOS 6 die UID 500, ab CentOS 7 die UID 1000.

  • Die Datei /etc/login.defs steuert unter anderem die Vergabe der User-IDs.

  • Benutzernamen der Form vorname.nachname\@firma.domain sind nicht möglich, das @ wird nicht zugelassen.

  • uid=4294967295 ist gleich -1 (unsigned long). -1 ist die Standard-UID für Prozesse, die nicht durch einen Login-Prozess gestartet wurden, betrifft also i.d.R Daemons.

  • Darf ein Benutzer auf keinen Fall eine SSH-Shell verwenden, weist man diesem die Shell /sbin/nologin zu - auch bei den Benutzern, die sich beispielsweise per SFTP (FTP über SSH) auf den Server verbinden sollen.

  • Statt useradd usw. zu verwenden, lassen sich alternativ die Dateien /etc/passwd (dort liegt die Benutzer-„Datenbank“) und /etc/groups (Liste aller Gruppen) direkt mit einem Text-Editor ändern. Nicht vergessen, dass bei Verwendung von useradd pro Benutzer auch eine gleichnamige Gruppe angelegt wird.

  • Wer distributionsübergreifend mit einem einzigen Benutzer arbeiten möchte, sollte im Benutzernamen auf einen Punkt . verzichten und statt dessen einen Underscore _ verwenden. Fedora, RHEL und CentOS lassen zwar beides zu, Linux Mint beispielsweise mag einen Punkt im Benutzernamen jedoch nicht.

  • Auf Debian und Ubuntu gibt es adduser und deluser, welche dort als benutzerfreundlichere Frontends für die „low-level“-Tools useradd und groupadd gelten.

Benutzer

Benutzerkonto linus erstellen:

useradd linus

Benutzerkonto linus erstellen und der Gruppe sales hinzufügen, die Standard-Shell des Systems zuweisen, UID 4711 und GID 0815 verwenden:

useradd --groups sales --shell /bin/sh --uid 4711 --gid 0815 linus
# short
useradd -G sales -s /bin/sh -u 4711 -g 0815 linus

Benutzerkonto ändern - die Shell für Benutzer linus explizit auf Bash setzen, neue primäre Gruppe wird sales:

usermod --shell /bin/bash --gid sales linus
# short
usermod -s /bin/bash -g sales linus

Benutzerkonto ändern - Benutzer linus zusätzlich zur Gruppe support hinzufügen:

usermod --append --groups support linus
# short
usermod -a -G support linus

Einen Benutzer löscht man so:

userdel linus

Dabei wird nur das Konto gelöscht, das Home-Verzeichnis und die Mailbox bleiben unangetastet. Um den Benutzer (der unter Umständen gerade auch noch eingeloggt ist) vollständig vom System zu entfernen, verwendet man einmal in Kurz- und einmal in der Langschreibweise:

userdel --remove --force linus
# short
userdel -rf linus

Zeige alle eingeloggten Benutzer auf dem System:

# in short
users
# with more data
who
# with much more data
w

Wann haben sich welche Benutzer zuletzt eingeloggt?

last
# last activities of user "root"
last root

Zeige Benutzer- und Gruppen-ID des aktuellen Benutzers sowie dessen SELinux-Kontext an:

id

Einen ausgewählten Benutzer abmelden (dessen Session killen):

pkill --signal SIGKILL --euid $USER

Mit diesem Konstrukt lässt sich die Existenz eines Benutzers in einem Shell-Skript prüfen:

# Try to detect the postgres user
# "pgsql" or "postgres"
if id pgsql >/dev/null 2>&1; then
   USER=pgsql
elif id postgres >/dev/null 2>&1; then
   USER=postgres
else
   exit 0
fi

Reboot-User - so erstellt man auf der Kommandozeile einen Benutzer namens „reboot-me“, der mittels eines SSH-Logins die Maschine neu startet:

chmod u+s /sbin/reboot
useradd --comment="Rebooter" --shell=/sbin/reboot reboot-me
echo "newPassW0rd" | passwd --stdin reboot-me

Gruppen

Ermitteln, zu welchen Gruppen ein Benutzer gehört:

groups linus

Gruppe erstellen:

groupadd support

Gruppe löschen:

groupdel support

Gruppe ändern - neuer Name, andere ID:

groupmod --new-name phone-support --gid 4712 support
groupmod -n phone-support -g 4712 support

Benutzer linus der Gruppe „support“ hinzufügen (geht auch mit usermod):

groupmems --group support --add linus
groupmems -g support -a linus

Benutzer linus aus der Gruppe „support“ entfernen:

groupmems --group support --delete linus
groupmems -g support -d linus

Passwörter

Passwörter vergibt und ändert man so:

# change your own password
passwd
# change password of user linus
passwd linus

Um Passwörter nicht-interaktiv/skriptbar ändern zu können, kann man sowohl passwd als auch chpasswd verwenden. Anbei zwei Beispiele mit gleichem Effekt:

echo "linus:newPassW0rd" | chpasswd
echo "newPassW0rd" | passwd --stdin linus

Um das Passwort des Benutzers linus zu entfernen, verwendet man:

passwd --delete linus

Tipp

Mit chage („change age“) legt man ein Ablaufdatum für Passwörter oder Benutzerkonten fest, oder schränkt die Wiederverwendung bisheriger Passwörter ein. So sind die Parameter gedacht:

    |       max days (-M)         |
    |-----------------------------|
    | min days |      | warn days | inactive      |
    | (-m)     |      | (-W)      | days (-I)     |
----|-----------------------------|---------------|-------> time
 last change                  password         inactive
 date (-d)                    expiration       date

Passwort-Richtlinie von root anzeigen:

chage --list root
chage -l root

Passwort von root soll nach 30 Tagen ablaufen:

chage --maxdays 30 root
chage -M 30 root

Benutzer linus darf sein Passwort frühestens alle 10 Tagen ändern:

chage --mindays 10 linus
chage -m 10 linus

Benutzerkonto linus soll am 31.12.2013 ablaufen:

chage --expiredate 2013-12-31 linus
chage -E 2013-12-31 linus

Benutzerkonto linus soll in 90 Tagen ablaufen:

date --date "+90 days"
# returns 2021-05-17
chage --expiredate 2021-05-17 linus
chage -E 2021-05-17 linus

Ablaufdatum des Benutzerkontos linus entfernen:

chage --expiredate -1 linus
chage -E -1 linus

Passwort von Benutzer linus soll sofort ablaufen (setzt den Tag der letzten Passwort-Änderung auf Null; der Benutzer muss sein Passwort beim nächsten Login ändern):

chage --lastday 0 linus
chage -d 0 linus

/etc/passwd

Ein Auszug aus der /etc/passwd:

C1    C2 C3 C4 C5    C6     C7
root: x: 0: 0: root: /root: /bin/bash

Die einzelnen, durch Doppelpunkt getrennte Spalten bedeuten:

C1

Benutzername

C2

Passwort. In Systemen ohne Shadow-Datei steht hier das verschlüsselte Passwort; ist das Feld leer, ist ein Zugang ohne Passwort erlaubt. „x“ verweist auf das verschlüsselte Passwort in der /etc/shadow.

C3

Benutzer-ID.

C4

ID der primären Gruppe, zu der der Benutzer gehört.

C5

Kommentar zum Benutzer.

C6

Home-Verzeichnis, z.B. /root, /usr/share/httpd, /dev/null.

C7

Die Shell des Benutzers, z.B. /bin/bash, /sbin/nologin.

/etc/shadow

Im Gegensatz zur /etc/passwd, die früher die ungesalzenen, verschlüsselten Passwörter der Benutzer enthielt, werden diese heute gesalzen in /etc/shadow abgelegt, die zudem wesentlich mehr Passwort-Eigenschaften kennt und so unter anderem auch Ablaufmechanismen erlaubt.

C1    C2                              C3     C4 C5     C6 C7 C8 C9
root: $6$abcdefgh$ijklmnopqrstuvwxyz: 18164: 0: 99999: 7: :  :

Die einzelnen, durch Doppelpunkt getrennte Spalten bedeuten:

C1

Login-Name

C2

Verschlüssletes Passwort. Die Eigenschaften werden durch $ getrennt.

  • $1, $5 oder $6: Damit beginnt jedes Passwort - hier wird der verwendete Hashing-Algorithmus festgehalten. $1 = md5, $5 = sha256, $6 = sha512 (Standard-Hash-Verfahren seit CentOS 6).

  • $abcdefgh: Passwörter werden mit einem zufälligen String prefixt („gesalzen“) und anschliessend gehasht. Das Salt wird im Klartext zum Passwort abgelegt. Das ermöglicht einerseits die Prüfung des Passworts und verhindert gleichzeitig, dass zwei identische Passwörter den gleichen Hash ergeben.

  • $ijklmnopqrstuvwxyz: das verschlüsselte Passwort.

C3

Datum der letzten Passwort-Änderung (Anzahl Tage seit 1970-01-01, an denen das Passwort zuletzt geändert wurde).

C4

Anzahl Tage, nach denen das Passwort wieder geändert werden darf (minage).

C5

Anzahl Tage, nach denen das Passwort geändert werden muss (maxage).

C6

Anzahl Tage, in denen der Benutzer bzgl. Ablauf des Passworts gewarnt wird.

C7

Anzahl der Tage, in denen ein abgelaufenes Passwort noch akzeptiert wird.

C8

Ablaufdatum des Kontos.

C9

Reserviert für zukünftige Nutzung.

Zeitangaben beziehen sich immer auf die „Anzahl Tage seit dem 01. Januar 1970“.

Siehe auch man 5 shadow.

Root does not exist

Wer seinen root-Benutzer auf irgendeine Art und Weise gelöscht oder zerstört hat, bootet wie oben, um das Passwort zu wechseln. Nach dem chroot /sysroot erstellt man erst einmal Sicherungskopien der beiden später zu bearbeitenden Dateien:

cp /etc/passwd /etc/passwd.bak
cp /etc/shadow /etc/shadow.bak

In den Original-Dateien die „root“-Einträge entfernen. Anschliessend einen neuen root-Benutzer anlegen:

useradd --comment root --home-dir /root \
  --uid 0 --gid root \
  --groups bin,daemon,sys,adm,disk,wheel \
  --non-unique --no-create-home \
  --shell /bin/bash root
passwd root
touch /.autorelabel
systemctl reboot

Built on 2022-06-03