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 vonuseradd
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
unddeluser
, welche dort als benutzerfreundlichere Frontends für die „low-level“-Toolsuseradd
undgroupadd
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
Shell des Benutzers linus auf /bin/bash
ändern:
chsh --shell /bin/bash 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 sowie dessen SELinux-Kontext an:
# current user
id
# ID's of user "linus"
id linus
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
USERNAME=pgsql
elif id postgres >/dev/null 2>&1; then
USERNAME=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 2024-09-30