freeload4u
 

Sudo unter Debian

Sudo ist ein Befehl der dazu benutzt wird, Prozesse mit den Rechten eines anderen Benutzers (z. B. des Superusers root) zu starten, ohne dessen Passwort kennen zu müssen. Wer aus Sicherheitsgründen das Root-Passwort des Rechners nicht weitergeben möchte, setzt einfach das Programm sudo ein.

Ausgangspunkt

  1. Debian >= 8.0
  2. Standard-Systemwerkzeuge
  3. SSH server

Ziel



Sudo (superuser do) ist standardmäßig nicht unter Debian installiert. Das ändern wir indem wir uns zunächst mal als root anmelden.
        
            su
        
    
Anschließend wird nach dem "Root-Passwort gefragt. Das geben wir ein und bestätigen mit ENTER.

Jetzt installieren wir "sudo":
        
            apt-get install sudo
        
    

Die Konfigurationsdatei zu sudo befindet sich unter /etc/sudoers. Um diese Datei zu bearbeiten, wird nicht wie sonst üblich vi dateiname ausgeführt, sondern einfach mit dem Befehl:
        
            visudo
        
    

Es öffnet sich standardmäßig der Texteditor nano. Möchte man lieber mit vim arbeiten, führen wir folgendes aus:
        
            EDITOR=vim sudo -E visudo
        
    


Das Syntax ist folgendermaßen aufgebaut:
1. Benutzer
2. welcher Host
3. =(als welcher Benutzer)
4. darf was ausühren

1. Benutzer ermöglichen alle Kommandos ohne Passwort auszuführen
An das Ende der Datei fügen wir jetzt folgende Zeile ein:
        
            user1 ALL=(ALL) NOPASSWD:ALL
        
    
user1 steht für unseren Benutzernamen (siehe Syntax).

2. Nur bestimmte Kommandos ohne Passworteingabe ausführen
        
            user2 ALL=(ALL) NOPASSWD: /usr/bin/apt-get, /usr/sbin/synaptic
        
    
user2 darf ab jetzt nur apt-get und synaptic ausführen

Jetzt speichern wir und melden uns als Benutzer neu an. Die Änderungen sind dann auch schon aktiv.

3. Mit PHP Kommandos/Scripte ausführen
Wer über ein Webfrontend Aktionen auf dem Server ausführen möchte, muss den Benutzer www-data die Erlaubnis dazu erteilen. Unter Debian ist das immer www-data.

Als Beispiel zeige ich ein kleines Bash-Script, was ganz simplel "Hallo Welt" in einer Textdatei anfügt. Sobald die PHP-Datei über den Browser aufgerufen wird, startet es.
        
            vi /usr/bin/doit
        
    
        
            #!/bin/bash

            d=$(date "+%Y-%m-%d %T.%N")
            echo 'Hallo Welt - ' $d >> /home/user/test.txt
        
    
speichern.

Datei ausführbar machen:
        
            chmod +x /usr/bin/doit
        
    


/etc/sudoers mit vim bearbeiten
        
            EDITOR=vim sudo -E visudo
        
    
An das Ende der Datei einfügen:
        
            www-data ALL=NOPASSWD: /usr/bin/doit
        
    

Die PHP Datei dazu: (/var/www/test.php)
        
            <?php

                exec('sudo /usr/bin/doit');

            ?>
        
    

Jetzt rufen wir die Datei im Browser auf
http://www.example.com/test.php

Anschließend die test.txt einsehen..
        
            tail -f /home/user/test.txt
        
    
Ausgabe:
        
            Hallo Welt - 2017-03-03 14:05:27.383008799
        
    

Vorsicht!!!
Es ist eigentlich keine gute Idee, den www-data Benutzer in die sudoers Datei aufzunehmen und sollte nur gemacht werden, wenn keine andere Möglichkeit besteht.

Der sicherere Weg ist folgender:
Wir ändern den Eigentümer der Datei in www-data:
        
            chown www-data:www-data /usr/bin/doit
        
    
Und führen es dann ohne sudo aus:
        
            <?php

                exec('/usr/bin/doit');

            ?>
        
    
Natürlich können wir jetzt als www-data auch nicht mehr so einfach in das Homeverzeichnis schreiben (test.txt) und ändern den Pfad einfach in:
        
            echo 'Hallo Welt - ' $d >> /var/www/www.example.com/test.txt
        
    
fertig :-)