Sudo/Konfiguration: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
| (6 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
| Zeile 9: | Zeile 9: | ||
== Konfiguration == | == Konfiguration == | ||
=== Sudoers === | |||
Benutzer, die [[Sudo]] benutzen wollen, müssen Mitglied der Gruppe "sudo" sein | |||
<syntaxhighlight lang="bash" highlight="1" line copy> | <syntaxhighlight lang="bash" highlight="1" line copy> | ||
usermod -G sudo -a BENUTZERNAME | sudo usermod -G sudo -a BENUTZERNAME | ||
</syntaxhighlight> | </syntaxhighlight> | ||
; Ausführen von sudo ohne Passwort | ; Ausführen von sudo ohne Passwort | ||
<syntaxhighlight lang="bash" highlight="1" line copy> | <syntaxhighlight lang="bash" highlight="1" line copy> | ||
visudo | sudo visudo | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Zeile 29: | Zeile 30: | ||
* in der Klammer die Befehle listen, die gewünscht sind, in diesem Fall sind das alle Befehle (ALL) | * in der Klammer die Befehle listen, die gewünscht sind, in diesem Fall sind das alle Befehle (ALL) | ||
; Allgemeiner Grundsatz für die Konfiguration von sudoers | |||
;Allgemeiner Grundsatz für die Konfiguration von sudoers | |||
# Öffnen Sie die gewünschte Datei mit ''visudo'' (Haupt- oder Drop-in-Datei). | # Öffnen Sie die gewünschte Datei mit ''visudo'' (Haupt- oder Drop-in-Datei). | ||
# Nehmen Sie Änderungen vor und speichern Sie die Datei. | # Nehmen Sie Änderungen vor und speichern Sie die Datei. | ||
| Zeile 39: | Zeile 37: | ||
# Überprüfung: ''sudo -l''. Führen Sie einen Testbefehl aus. | # Überprüfung: ''sudo -l''. Führen Sie einen Testbefehl aus. | ||
;Konfiguration Öffnen | ; Konfiguration Öffnen | ||
Sie können den Konfigurationseditor mit folgendem Befehl öffnen: | Sie können den Konfigurationseditor mit folgendem Befehl öffnen: | ||
| Zeile 86: | Zeile 84: | ||
* Die Dateien haben keine Erweiterung. | * Die Dateien haben keine Erweiterung. | ||
=== Regeln (User Specifications) === | |||
Jeder dieser Einträge beschreibt: | Jeder dieser Einträge beschreibt: | ||
| Zeile 120: | Zeile 118: | ||
* '''COMMANDS''' – Liste der vollständigen Pfade zu Befehlen (vorzugsweise ohne Wildcards), Aliase sind möglich. | * '''COMMANDS''' – Liste der vollständigen Pfade zu Befehlen (vorzugsweise ohne Wildcards), Aliase sind möglich. | ||
* Beispiele für Regeln mit Erläuterungen: | |||
<syntaxhighlight lang="ini"> | |||
# Die Gruppe devops darf ALLES ausführen, AUSSER Ausschalten/Neustarten | |||
%devops ALL = (ALL) ALL, !/sbin/shutdown, !/sbin/poweroff, !/sbin/reboot | |||
# Der Benutzer dbuser darf die Befehle psql und mysql als postgres bzw. mysql ausführen | |||
dbuser ALL = (postgres, mysql) /usr/bin/psql, /usr/bin/mysql | |||
# apt für den Benutzer dev einschränken | |||
dev ALL = (root) NOPASSWD: /usr/bin/apt update, /usr/bin/apt upgrade | |||
# Der Benutzer webops darf den Status von nginx als root ohne Passwort abfragen | |||
# und einen Neustart mit Passwort durchführen (nur bei exakt passender Befehls-Syntax). | |||
# Das Stoppen des Dienstes ist NICHT erlaubt, da es nicht ausdrücklich aufgeführt ist. | |||
webops ALL = (root) NOPASSWD: /usr/bin/systemctl status nginx, PASSWD: /usr/bin/systemctl restart nginx | |||
# Dem Benutzer extadmin das Recht geben, api auf Hosts web* (deren Hostname mit „web“ beginnt) | |||
# während der Arbeitszeit neu zu starten (09:00–18:00 gemäß den unten gesetzten Grenzen) | |||
extadmin web* = (root) NOTBEFORE=202511010900: NOTAFTER=202511011800: /usr/bin/systemctl restart api | |||
</syntaxhighlight> | |||
=== Defaults === | |||
Mit Defaults können Sie das Sicherheitsprofil und die Verhaltenseinstellungen von sudo festlegen, z. B.: | Mit Defaults können Sie das Sicherheitsprofil und die Verhaltenseinstellungen von sudo festlegen, z. B.: | ||
| Zeile 177: | Zeile 198: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Aliase === | |||
Einrichten von Aliasen für die spätere Verwendung: | |||
<syntaxhighlight lang="ini"> | |||
User_Alias WEBOPS = alice, bob | |||
Runas_Alias DBUSERS = postgres, mysql | |||
Host_Alias WEBSERVERS = www01, www02 | |||
Cmnd_Alias NGINX_CTL = /bin/systemctl start nginx, /bin/systemctl stop nginx, /bin/systemctl restart nginx, /bin/systemctl status nginx | |||
</syntaxhighlight> | |||
Anwendungsbeispiel: | |||
Beispiel für eine vollständige Zeile: | Beispiel für eine vollständige Zeile: | ||
<syntaxhighlight lang="ini"> | |||
WEBOPS WEBSERVERS = (root) NOPASSWD: NGINX_CTL | |||
</syntaxhighlight> | |||
== Aufruf == | == Aufruf == | ||
Aktuelle Version vom 5. November 2025, 14:31 Uhr
Sudo/Konfiguration - Beschreibung
Beschreibung
- Modulare Regeln werden als Drop-Ins bezeichnet und befinden sich standardmäßig unter: /etc/sudoers.d/
Die Datei sollte mit visudo bearbeitet werden
- visudo führt vor dem Speichern eine Syntaxprüfung durch
Konfiguration
Sudoers
Benutzer, die Sudo benutzen wollen, müssen Mitglied der Gruppe "sudo" sein
sudo usermod -G sudo -a BENUTZERNAME
- Ausführen von sudo ohne Passwort
sudo visudo
In der sudoers.d Datei in der letzten Zeile folgenden Befehl einfügen
'USER' ALL=(ALL) NOPASSWD:ALL
- User ist der Name des Users, den das betreffen soll
- Einzelne Befehle auszuschließen
- in der Klammer die Befehle listen, die gewünscht sind, in diesem Fall sind das alle Befehle (ALL)
- Allgemeiner Grundsatz für die Konfiguration von sudoers
- Öffnen Sie die gewünschte Datei mit visudo (Haupt- oder Drop-in-Datei).
- Nehmen Sie Änderungen vor und speichern Sie die Datei.
- visudo überprüft die Syntax.
- Wenn die Überprüfung fehlschlägt, werden die Änderungen nicht übernommen und visudo gibt eine Fehlermeldung aus.
- Überprüfung: sudo -l. Führen Sie einen Testbefehl aus.
- Konfiguration Öffnen
Sie können den Konfigurationseditor mit folgendem Befehl öffnen:
sudo visudo
Unter Debian erfolgt der Start mit nano, da dies standardmäßig in der Systemvariablen editor angegeben ist.
Sie können dies wie folgt überprüfen:
readlink -f /usr/bin/editor
Änderung des Standard-Editors:
sudo update-alternatives --config editor
- Drop-Ins einschalten
- Am Ende von /etc/sudoers steht normalerweise:
@includedir /etc/sudoers.d
- Sie können auch eine separate Datei mit der Anweisung @include in die Konfiguration einfügen.
@include /usr/local/etc/sudoers.custom
- Hinweis
- In älteren Versionen von sudo (<1.9.1) begannen die Anweisungen mit dem Zeichen # statt mit @. Beide Formate werden jedoch unterstützt.
- Bezeichnung der Drop-in-Dateien
Allgemein übliche Bezeichnung der Drop-in-Dateien:
- NN-topic, wobei NN die Dateinummer ist. Die Reihenfolge der Lesbarkeit ist lexikografisch (alphabetisch, von 00 bis 99).
- Beispiel:
/etc/sudoers.d/ ├── 00-defaults ├── 10-groups ├── 50-nginx └── 90-local
- Die Dateien haben keine Erweiterung.
Regeln (User Specifications)
Jeder dieser Einträge beschreibt:
- wer (USER)
- auf welchen Hosts (HOSTS)
- was ausführen darf (COMMANDS)
- im Namen von wem (RUNAS)
- mit welchen Modifikatoren (TAGS)
- Schreiben von sudoers-Regeln
Allgemeiner Aufbau einer Zeile:
USER HOSTS = (RUNAS) [TAGS] COMMANDS
- USER — Für dieses Feld kann einer der folgenden Werte angegeben werden:
- Benutzer
- Gruppe (GID-Gruppe)
- Netgroup (NIS)
- Alias
- HOSTS – auf welchen Hosts die Regel gilt (Namen/Masken/IP, Aliase sind möglich).
- (RUNAS) – in wessen Namen und/oder mit welcher Gruppe ausführen (Standardwert root).
- Benutzer
- Mehrere Benutzer: (postgres, mysql)
- Gruppe (GID-Gruppe)
- Alias
- [TAGS] – Modifikatoren
- NOPASSWD: – kein Passwort für die aufgeführten Befehle abfragen.
- PASSWD: – Passwort für die aufgeführten Befehle abfragen.
- SETENV: – Verwaltung der Umgebung zulassen.
- NOEXEC: – Unterprozesse innerhalb des Befehls verbieten.
- COMMANDS – Liste der vollständigen Pfade zu Befehlen (vorzugsweise ohne Wildcards), Aliase sind möglich.
- Beispiele für Regeln mit Erläuterungen:
# Die Gruppe devops darf ALLES ausführen, AUSSER Ausschalten/Neustarten
%devops ALL = (ALL) ALL, !/sbin/shutdown, !/sbin/poweroff, !/sbin/reboot
# Der Benutzer dbuser darf die Befehle psql und mysql als postgres bzw. mysql ausführen
dbuser ALL = (postgres, mysql) /usr/bin/psql, /usr/bin/mysql
# apt für den Benutzer dev einschränken
dev ALL = (root) NOPASSWD: /usr/bin/apt update, /usr/bin/apt upgrade
# Der Benutzer webops darf den Status von nginx als root ohne Passwort abfragen
# und einen Neustart mit Passwort durchführen (nur bei exakt passender Befehls-Syntax).
# Das Stoppen des Dienstes ist NICHT erlaubt, da es nicht ausdrücklich aufgeführt ist.
webops ALL = (root) NOPASSWD: /usr/bin/systemctl status nginx, PASSWD: /usr/bin/systemctl restart nginx
# Dem Benutzer extadmin das Recht geben, api auf Hosts web* (deren Hostname mit „web“ beginnt)
# während der Arbeitszeit neu zu starten (09:00–18:00 gemäß den unten gesetzten Grenzen)
extadmin web* = (root) NOTBEFORE=202511010900: NOTAFTER=202511011800: /usr/bin/systemctl restart api
Defaults
Mit Defaults können Sie das Sicherheitsprofil und die Verhaltenseinstellungen von sudo festlegen, z. B.:
- Zeitlimit für zuvor eingegebene Passwörter, erneute Passwortabfrage nach ...
- I/O-Protokollierung
- Verwendung eines vordefinierten PATH
- usw.
- Ausführungspriorität
Defaults haben die folgende Priorität (von oben nach unten):
- Defaults! /Befehl
- Defaults>runas
- Defaults:Benutzer/Gruppe
- Defaults@Host
- Globale Defaults
# Reine Umgebung
Defaults env_reset
# PATH definieren
Defaults secure_path="/usr/sbin:/usr/bin:/sbin:/bin"
# sudo-Passwort-Cache (Minuten); 0 – immer fragen
Defaults timestamp_timeout=5
# Pseudo-TTY für I/O-Protokolle
Defaults use_pty
# Authentifizierungsparameter/
Defaults passwd_tries=3, passwd_timeout=30
Defaults lecture=once
Beispiele für Defaults für bestimmte Entitäten
# Für den Befehl vi: Unterprozesse verbieten und I/O-Protokolle aktivieren
Defaults! /usr/bin/vi noexec, log_input, log_output
# Für den Benutzer alice: Immer nach dem Passwort fragen
Defaults:alice timestamp_timeout=0
# Für die Gruppe (GID) webops: Proxy-Variablen zulassen
Defaults:%webops env_keep += "http_proxy https_proxy"
# Für den Host (jump-host): TTY und strenge Passwortabfragepolitik
Defaults@backupsrv use_pty, timestamp_timeout=0
# Für RunAs-Benutzer: Beim Ausführen von Befehlen von postgres wird kein Passwort abgefragt.
Defaults>postgres !authenticate
# Für RunAs-Benutzer: Beim Ausführen von Befehlen von postgres wird kein Passwort abgefragt.
Aliase
Einrichten von Aliasen für die spätere Verwendung:
User_Alias WEBOPS = alice, bob
Runas_Alias DBUSERS = postgres, mysql
Host_Alias WEBSERVERS = www01, www02
Cmnd_Alias NGINX_CTL = /bin/systemctl start nginx, /bin/systemctl stop nginx, /bin/systemctl restart nginx, /bin/systemctl status nginx
Anwendungsbeispiel:
Beispiel für eine vollständige Zeile:
WEBOPS WEBSERVERS = (root) NOPASSWD: NGINX_CTL
Aufruf
Optionen
| Unix | GNU | Parameter | Beschreibung |
|---|---|---|---|
Parameter
Umgebungsvariablen
Exit-Status
| Wert | Beschreibung |
|---|---|
| 0 | Erfolg |
| >0 | Fehler |
Anwendung
Problembehebung
Konfiguration
Dateien
| Datei | Beschreibung |
|---|---|
Anhang
Siehe auch
Dokumentation
- Man-Page