OpenBSD/ Benutzerverwaltung

Aus Wikibooks

In diesem Kapitel geht es um das Anlegen und Verwalten von Benutzern und Gruppen. Darüber hinaus erläutern wir Dateirechte, die ohne weitere Benutzer auf dem System nur wenig Sinn ergeben würden, SUID, SGID, Aspekte der Sicherheit und Programme, um seinen User- oder Gruppenstatus zu modifizieren.

Benutzerverwaltung[Bearbeiten]

In diesem Abschnitt geht es darum, Benutzer Rechte auf dem Computer zu geben, anzupassen und (bei Bedarf) ihnen auch wieder wegzunehmen.

Benutzer anlegen[Bearbeiten]

Das zentrale Programm, um einen Benutzer anzulegen, ist useradd(8). Mit diesem Programm lassen sich Benutzer mit Gruppen verknüpfen, Home-Verzeichnisse für den Benutzer anlegen und ihm eine Shell zuweisen. Ebenfalls kann der Account nach einer ausgewählten Zeit stillgelegt werden. Das ist nützlich in Fällen, wo ein Login nur temporär, beispielsweise für die Dauer einer befristeten Aufgabe, gewährt werden soll.

Hier folgt ein Beispiel, wie ein neuer Nutzer anzulegen ist:

root@puffy:~ # useradd -g wheel -m -k /etc/skel/ -d /home/admin1 admin1
root@puffy:~ # passwd admin1
New password: 
Retype new password:
root@puffy:~ # 

Der neue Nutzer admin1 wurde erstellt, er ist in der Gruppe wheel. Sein Passwort wurde ihm von Root zugewiesen. Mit passwd(1) kann sich admin1 ein neues Passwort geben. Das Verzeichnis von admin1 ist /home/admin1. Wenn Sie normale Benutzer anlegen, die keine administrativen Rechte bekommen sollen, sollten Sie ihnen die Gruppe users zuweisen. Mehr über Gruppen im nächsten Abschnitt.

Accounts modifizieren[Bearbeiten]

Mit dem Programm usermod(8) lässt sich ein Account anpassen. Sie können dem Nutzer eine neue Shell zuweisen, das Benutzerverzeichnis verschieben, Gruppenzugehörigkeit ändern und vieles mehr.


Benutzer löschen[Bearbeiten]

Benutzer können mit userdel(8) wieder entfernt werden. Als eine Besonderheit dieses Programms kann der Account deaktiviert werden, dabei wird er nicht entfernt. Dies ist nützlich in Fällen, wo ein Nutzer später wieder zurückerwartet wird und man seine Login-Daten erhalten haben möchte. Hierbei wird die Nutzer-Shell auf nologin(8) gesetzt, eine Anmeldung mit diesem Benutzernamen und Passwort ist dann nicht möglich.

Ebenfalls ist es möglich, das Benutzerverzeichnis zu entfernen, wenn der Nutzer dauerhaft entfernt werden soll:

root@puffy:~ # userdel -r admin1
root@puffy:~ # 

Admin1 ist fortan dem System nicht länger bekannt, sein Benutzerverzeichnis wurde gelöscht.

Gruppen im Detail[Bearbeiten]

In diesem Abschnitt geht es um das Anlegen von Gruppen, Ändern der Gruppenzugehörigkeiten und weitere Details.

Benutzer bekommen durch ihre Mitglieschaft in Gruppen auch die Rechte (im Dateisystem), die diese Gruppen besitzen.

Gruppen anlegen und löschen[Bearbeiten]

Gruppen werden mit groupadd(8) angelegt:

root@puffy:~ # groupadd arbeitsgruppe
root@puffy:~ # 

In der Datei /etc/group findet sich ab da ein Eintrag arbeitsgruppe. Möchte man nun explizit einen vorhanden Nutzer in die neue Gruppe eintragen, benutzt man usermod. Die geänderten Gruppenzugehörigkeiten werden erst nach einem Login wirksam.

root@puffy:~ # usermod -G arbeitsgruppe admin1
root@puffy:~ # cat /etc/group
... viele Zeilen ...
arbeitsgruppe:*:1000:admin1
root@puffy:~ # 

Beim nächsten Login von admin1 sieht dieser:

admin1@puffy:~ $ groups
wheel arbeitsgruppe
admin1@puffy:~ $

Gelöscht werden Gruppen mit dem Befehl groupdel(8):

root@puffy:~ # groupdel arbeitsgruppe
root@puffy:~ # 

Dateirechte[Bearbeiten]

Jede Datei gehört einem Benutzer und einer Gruppe. Erzeugt man als Benutzer eine Datei, so gehört sie diesem Benutzer und seiner Hauptgruppe, wie folgendes Beispiel zeigt:

admin1@puffy:~ $ touch test
admin1@puffy:~ $ ls -l
total 0
-rw-r--r--  1 admin1  wheel  0 Jan  2 23:15 test
admin1@puffy:~ $ 

Hier gehört die mit touch(1) erzeugte Datei test automatisch admin1 und seiner Gruppe wheel. Die Zugehörigkeit zu einem Benutzer kann der erstellende Benutzer nicht ändern, es sei denn, er hat administrative Befugnisse. Wir werden auf diese Dinge noch im Abschnitt Hilfsadmins zu sprechen kommen. Root dürfte also mit dem Befehl chown(8) den Eigentümer der Datei verändern.

Ist der User, dem die Datei gehört, selbst in mehreren Gruppen, so darf er die Gruppenzugehörigkeit der Datei mit chgrp(1) verändern:

admin1@puffy:~ $ chgrp arbeitsgruppe test                                      
admin1@puffy:~ $ ls -l
total 0
-rw-r--r--  1 admin1  arbeitsgruppe  0 Jan  2 23:15 test
admin1@puffy:~ $ 

Lesen, schreiben, ausführen[Bearbeiten]

Bezogen auf normale Dateien gibt es drei mögliche Berechtigungen:

  • Jemand darf lesen (r = read).
  • Jemand darf schreiben (w = write).
  • Jemand darf ausführen (x = execute).

Diese Rechte gibt es für drei Gruppen:

  1. den Eigentümer (hier admin1, lesen und schreiben)
  2. die Mitglieder der Gruppe (hier arbeitsgruppe, lesen)
  3. alle anderen (dürfen hier ebenfalls lesen)

Der Gruppe wheel gehört:

admin1@puffy:~ $ ls -la
...
-rw-r--r--  1 admin1  wheel  774 Aug 13 00:51 .cshrc
...
admin1@puffy:~ $ 

In der ersten Spalte finden wir sieben Felder, die die Rechte spezifizieren. Die letzten drei Felder stehen für die Rechte aller anderen Benutzer. Auf die Datei .cshrc können alle Nutzer lesend zugreifen (r). Die drei Felder davor stehen für die Rechte der Gruppenmitglieder. Alle User, die in der Gruppe wheel sind, dürfen die Datei .cshrc lesen. Die drei Felder links davon spezifizieren die Rechte des Eigentümers admin1. Er darf lesen und schreiben (w).

Modifiziert werden Dateirechte mit dem Befehl chmod(1)

admin1@puffy:~ $ chmod o-r test
admin1@puffy:~ $ ls -l
total 0
-rw-r-----  1 admin1  arbeitsgruppe  0 Jan  2 23:15 test
admin1@puffy:~ $

Das bedeutet, dass fremde Nutzer (others) nicht mehr lesen (-r) dürfen. Mitglieder der Gruppe und der Benutzer selbst dürfen aber weiterhin lesen. Andere Benutzerklassen sind user und group.

Schreiben wir in die Datei test folgendes rein:

#!/bin/sh

echo "Hallo, Welt"

Dann können wir dieses Shellskript dadurch ausführbar machen, dass wir allen Nutzern das Ausführungsrecht (x) und Leserecht geben:

admin1@puffy:~ $ chmod ugo+rx  test
admin1@puffy:~ $ ls -l
total 4
-rwxr-xr-x  1 admin1  arbeitsgruppe  30 Jan  6 13:59 test
admin1@puffy:~ $ ./test
Hallo, Welt
admin1@puffy:~ $

Hier wird allen Benutzerklassen (User, Group, Other) das Recht auszuführen (x) und zu lesen (r) eingeräumt. Anschließend wird das Programm gestartet. Der Pfad vorweg (./) ist notwendig, weil es ein anderes Programm mit demselben Namen im System gibt.

Verzeichnisse und symbolische Links[Bearbeiten]

Verzeichnisse und symbolische Links werden hier nur der Vollständigkeit halber erwähnt. Verzeichnisse erzeugt man mit mkdir(1) und löscht sie wieder mit rmdir(1). In der ersten Spalte, erstes Feld wird bei Verzeichnissen ein d angezeigt:

admin1@puffy:~ $ mkdir bin
admin1@puffy:~ $ ls -l
total 8
drwxr-xr-x  2 admin1  wheel          512 Jan  6 14:30 bin
-rwxr-xr-x  1 admin1  arbeitsgruppe   30 Jan  6 13:59 test
admin1@puffy:~ $ rmdir bin
admin1@puffy:~ $ 

Symbolische Links bedeuten mehrere Namen für ein und dieselbe Datei. Sie werden mit ln(1) erzeugt. Wird ein symbolischer Link gelöscht, so wird nicht die Datei, sondern nur der zweite Namen entfernt:

admin1@puffy:~ $ ls -l
total 4
-rwxr-xr-x  1 admin1  arbeitsgruppe  30 Jan  6 13:59 test
admin1@puffy:~ $ ln -s test test2
admin1@puffy:~ $ ls -l
total 4
-rwxr-xr-x  1 admin1  arbeitsgruppe  30 Jan  6 13:59 test
lrwxr-xr-x  1 admin1  wheel           4 Jan  6 14:35 test2 -> test
admin1@puffy:~ $ rm test2
admin1@puffy:~ $ ls -l
total 4
-rwxr-xr-x  1 admin1  arbeitsgruppe  30 Jan  6 13:59 test
admin1@puffy:~ $

Symbolische Links erkennt man an dem l in der ersten Spalte, erstes Feld.

Besondere Rechte[Bearbeiten]

Es gibt weitere Rechte, die sich praktisch auswirken. So ist es möglich, ein Verzeichnis zu haben, bei dem jede in diesem Verzeichnis angelegte Datei dieselbe Gruppenzugehörigkeit hat wie das übergeordnete Verzeichnis.

admin1@puffy:~ $ mkdir bin
admin1@puffy:~ $ chgrp arbeitsgruppe bin
admin1@puffy:~ $ chmod g+s bin
admin1@puffy:~ $ ls -l
total 8
drwxr-sr-x  2 admin1  arbeitsgruppe  512 Jan  6 14:39 bin
-rwxr-xr-x  1 admin1  arbeitsgruppe   30 Jan  6 13:59 test
admin1@puffy:~ $ cd bin
admin1@puffy:~/bin $ touch test_neu
admin1@puffy:~/bin $ ls -l
total 0
-rw-r--r--  1 admin1  arbeitsgruppe  0 Jan  6 14:40 test_neu
admin1@puffy:~/bin $

Das Set-Group-ID-Recht wird mit der Option g+s bei chmod erzeugt. Alle im Verzeichnis bin angelegten Dateien gehören fortan zur Gruppe arbeitsgruppe.

Hilfsadmins[Bearbeiten]

Hilfsadmins sind solche Nutzer, die in einem bestimmten Rahmen administrative Tätigkeiten ausführen dürfen oder sollen. Oft gestattet man root keinen SSH-Zugriff auf das System, in diesen Fällen sind Hilfadmins die einzigen Benutzer, die das System auch von außen administrieren können. Zentrale Programme für Hilfsadmins sind su(1) und sudo(8). Während bei su das Passwort von root bekannt sein muss, um ein Programm auszuführen, wird bei sudo das eigene Passwort verwendet. Bei su schlüpft man in die Rolle eines anderen Benutzers. Das funktioniert nicht nur bei root, sondern auch bei allen anderen Benutzern.

Am leichtesten ist die Verwaltung von Hilfsadmins, wenn diese in die Gruppe wheel aufgenommen werden und allen Gruppenmitgliedern in der Datei /etc/sudoers(5) passende Rechte gewährt werden.

Um einzelnen Benutzern administrative Rechte zu gewähren, kann man sie einzeln eintragen...

# User privilege specification
testuser    ALL=(ALL) SETENV: ALL

... oder der gesamten Gruppe wheel die passenden Rechte geben:

# Uncomment to allow people in group wheel to run all commands
# and set environment variables.
%wheel  ALL=(ALL) SETENV: ALL

Anschließend kann entweder der einzelne User (z. B. testuser) oder ein Mitglied der Gruppe wheel (z. B. admin1) einen administrativen Befehl ausführen:

admin1@puffy:~ $ sudo ls
Password:
... Ausgabe des ls-Befehls ...


Um su benutzen zu können, muss der User explizit in die Gruppe wheel eingetragen werden. Das gilt auch dann, wenn seine Hauptgruppe wheel ist. Das erreicht man, indem man /etc/group entsprechend modifiziert:

wheel:*:0:root,admin1
... weitere Zeilen in /etc/group ...

Anschließend kann admin1 den Befehl su benutzen.

Bitte beachten Sie, dass Sie diesen Benutzern vertrauen müssen. Hilfsadmins haben unter Umständen – wenn Sie die Rechte nicht in /etc/sudoers eingeschränkt haben – vollen administrativen Zugang zum System. Sie können sich unter Umständen von außen auf das System einloggen, und es ist darum besonders wichtig, Passwörter nicht zu verraten und besonders starke zu wählen.