83 lines
5.1 KiB
Markdown
83 lines
5.1 KiB
Markdown
---
|
|
title: sudo ohne Passwort | kofler.info
|
|
source: https://kofler.info/sudo-ohne-passwort/
|
|
tags:
|
|
- IT/OS/Linux
|
|
- IT/Tools/Shell
|
|
---
|
|
|
|
An sich ist das unter Ubuntu vorkonfigurierte sudo-Konzept vernünftig: Benutzer der sudo-Gruppe dürfen, nach der Eingabe ihres Passworts, Kommandos mit Administrator-Rechten ausführen. Was aber, wenn Sie möchten, dass alle Benutzer — oder auch nur einzelne Benutzer — bestimmte Kommandos auch ohne Passworteingabe ausführen dürfen? Denkbar wäre dies z.B. für `apt-get`, damit bestimmte Benutzer auch ohne Passwort-Eingabe bzw. ohne andere sudo-Rechte Programme installieren und Updates durchführen dürfen.
|
|
|
|
### Vorsichtsmaßnahmen
|
|
|
|
Die Veränderung von `/etc/sudoers` ist gefährlich. Wenn Sie einen Syntaxfehler einbauen, ist ein weiterer sudo-Kommando unmöglich und Sie können den Fehler nicht mehr korrigieren! Um dieses Dilemma zu vermeiden, können Sie drei Vorsichtsmaßnahmen ergreifen:
|
|
|
|
* Sie ändern `/etc/sudoers` nicht mit irgendeinem Editor, sondern mit `visudo`. Vor dem Speichern führt `visudo` einen Syntaxtest durch. Sie können die Datei erst speichern, wenn die Syntax korrekt ist. Wenn Sie keine Lust auf den Editor `vi` haben, stellen Sie vor der Ausführung von `visudo` den gewünschten Editor mit `export EDITOR=$(which nano)` ein, wobei Sie `nano` durch Ihren Lieblingseditor ersetzen.
|
|
* Sie definieren vorübergehend ein Passwort für `root`. Das gibt Ihnen die Möglichkeit, sich unabhängig von `sudo` als `root` anzumelden, z.B. mit `su -l` oder in einer Textkonsole.
|
|
* Sie lassen parallel zu Ihren Tests ein Terminalfenster offen, in dem Sie root-Rechte haben. Dieses Fenster schließen Sie erst, wenn Sie alle Tests erfolgreich abgeschlossen haben.
|
|
|
|
### Syntax in /etc/sudoers
|
|
|
|
Die Grundsyntax für die Zeilen in `/etc/sudoers` lautet:
|
|
|
|
```sudoers
|
|
<wer> <auf welchem Host>=(<als welcher Benutzer>) <darf was ausführen>
|
|
```
|
|
|
|
Die Zeile
|
|
|
|
```sudoers
|
|
kofler ALL=(ALL) ALL
|
|
```
|
|
|
|
bedeutet, dass `kofler` nach einer Authentifizierung auf jedem Rechner arbeiten kann (wobei `/etc/sudoers` normalerweise aber nur für den lokalen Host gilt; insofern ist das erste `ALL` nicht wirklich aussagekräftig), dass er als beliebiger Benutzer arbeiten kann (normalerweise wohl als `root`, aber prinzipiell auch als `lp` oder `www-data` oder unter welchem Account auch immer), und dass er schließlich jedes beliebige Kommando ausführen kann. Weitere Details liefert die sehr unübersichtliche `man`-Seite zu `sudoers` sowie [dieser viel besser lesbare Beitrag](http://unix.stackexchange.com/questions/18877) auf unix.stackexchange.com.
|
|
|
|
### sudo ohne Passwort
|
|
|
|
Zurück zur eigentlichen Fragestellung: Wie lässt sich erreichen, dass bestimmte Kommandos mit `sudo` auch ohne Passwortangabe ausgeführt werden können? Indem Sie zusätzlich das Schlüsselwort `NOPASSWD` verwenden. Die folgende Zeile bewirkt, dass `huber` die Kommandos `sudo apt-get` und `sudo synaptic` ausführen darf, ohne ein Passwort anzugeben.
|
|
|
|
```sudoers
|
|
huber ALL=(ALL) NOPASSWD: /usr/bin/apt-get, /usr/sbin/synaptic
|
|
```
|
|
|
|
Noch liberaler ist die folgende Zeile, die dies jedem Benutzer erlaubt:
|
|
|
|
```sudoers
|
|
ALL ALL=(ALL) NOPASSWD: /usr/bin/apt-get, /usr/sbin/synaptic
|
|
```
|
|
|
|
Es ist Ihnen sicher klar, dass man mit `apt-get` jedes System vollständig zerstören kann, z.B. durch die Deinstallation systemrelevanter Pakete. Insofern sind die obigen Einstellungen in `/etc/sudoers` nur zweckmäßig, wenn Sie den betreffenden Personen vertrauen können …
|
|
|
|
### Raspbian (Raspberry Pi)
|
|
|
|
Radikal unsicher sind die Defaulteinstellungen unter Raspbian: Dort kann der Benutzer `pi` jedes administratives Passwort mit `sudo` ohne Passwort ausführen.
|
|
|
|
```sudoers
|
|
### Defaultkonfiguration in /etc/sudoeres unter Raspbian
|
|
...
|
|
pi ALL=(ALL) NOPASSWD: ALL
|
|
```
|
|
|
|
Da das Passwort für `pi` vordefiniert und öffentlich bekannt ist, heisst das: Jede Raspbian-Installation, bei der SSH aktiviert ist und das `pi`-Passwort in der Defaulteinstellung belassen wurde, steht offen wie ein Scheunentor.
|
|
|
|
Das ist definitiv nicht empfehlenswert, selbst wenn das Gerät nur im lokalen Netzwerk eingesetzt wird. Abhilfe: Ändern Sie zumindest das Passwort von `pi`. Selbst entferne ich auch `NOPASSWD:` aus `/etc/sudoers`, obwohl das natürlich unbequem ist.
|
|
|
|
### bash-Scripts von PHP aus mit sudo ausführen
|
|
|
|
Sicherheitstechnisch ist es selten eine optimale Lösung, aber manchmal lässt es sich schwer vermeiden: Sie wollen von einer PHP-Seite aus administrative Aufgaben erledigen und müssen daher ein Shell-Script mit `sudo` ausführen. Damit das klappt, müssen Sie zuerst feststellen, unter welchem Account der Webserver Apache läuft (`ps axu`). Unter Debian und Ubuntu ist dies `www-data`. Nun erlauben Sie diesem Account in `/etc/sudoers`, das betreffende Script ohne Passwort auszuführen:
|
|
|
|
```sudoers
|
|
### Defaultkonfiguration in /etc/sudoeres unter Raspbian
|
|
...
|
|
# in /etc/sudoers
|
|
# erlaubt www-date die Ausführung eines Scripts
|
|
www-data ALL=(ALL) NOPASSWD: /etc/myscripts/do-whatever
|
|
```
|
|
|
|
In das PHP-Script können Sie nun den folgenden Code einbauen:
|
|
|
|
```php
|
|
$output = shell_exec("sudo /etc/myscripts/do-whatever");
|
|
echo "<pre>$output</pre>";
|
|
```
|