ssh kann man auch auf localhost anwenden und dadurch gezielt usern die Ausfuehrung von root Befehlen ermoeglichen. Der Nachteil zu sudo ist, dass keine Protokollierung der ausgefuehrten Befehle stattfindet.
 
Der ssh Server wird hier behandelt.
Ausserdem muss der root login dazu in dem sshd daemon erlaubt sein was man aber immer ausschalten sollte. Deshalb sollte man in diesem Fall einen zweiten sshd daemon auf einem freien Port aufsetzen (im Beispiel 4711), der eine eigene Konfigurationsdatei hat mit:
  1.  
    1. Port 4711
    2. PermitRootLogin without-password
    3. PubKeyAuthentication yes
      Rootlogin ohne passwort und NUR pubkey authentication
    4. Aufnahme von from="127.0.0.1" und command="..." in authorized_keys so dass die Befehle nur vom lokalen System aufgerufen werden koennen
    5. Kopieren der public keys der User, die Befehle per ssh ausfuehren koennen sollen in ~/root/.ssh/authorized_keys und Einschraenkung der Berechtigung mit command="/usr/sbin/rcsquid start". Dieses muss leider fuer jeden Befehl erlaubten getan werden. Alternative: s.u. Keine Zeile ohne command in authorized_keys stellen denn sonst hat der user uneingeschraenkten root Zugriff!
    6. Schutz des sshd ports 4711 mit iptables vor externem Zugriff
    7. Ein kurzes Script erstellen, mit dem man einfach die Befehler per local ssh aufrufen kann
                        ssh -p 4711 -l root localhost $@

Beispiel ~/root/.ssh/authorized_keys:

    command="/usr/sbin/rcsquid start" ssh-rsa AAAAB3NzaC1 ....
 
Wie mehrere Befehle einfacher zulassen?

Ein Script erstellen, welches in einem Switch die Befehle enthaelt, die ausgefuehrt werden duerfen. Dieses Script (z.B. /usr/local/sbin/ssh-for-hugo) in die authorized_keys aufnehmen, also

command="/usr/local/sbin/ssh-for-hugo $SSH_ORIGINAL_COMMAND" ssh-rsa AAAAB3NzaC1 ....

Das Script sieht dann etwa so aus:

case "$1" in
    rcsquid-start)
          /usr/sbin/rcsquid start
          ;;
    rcsquid-stop)
          /usr/sbin/rcsquid stop
          ;;
    rcsquid-restart)
        /usr/sbin/rcsquid restart
          ;;
    *)
       echo "Illegal request rejected" 1>&2
       exit 1
    ;;
esac
 
 
Kommentar schreiben
Hinweis:
Die eMail ist versteckt und nicht öffentlich sichtbar. Sie wird benutzt um über neue Kommentare zu informieren.