Anscheinend hat hier niemand das offensichtliche Anliegen angesprochen. Das Einfügen sudo
in Ihr Skript, das Sie dann verteilen, fördert schlechte Benutzergewohnheiten . (Ich gehe davon aus, dass Sie es verteilen, weil Sie "aus Sicht der Benutzer" erwähnen.)
Die Wahrheit ist, dass es bei der Verwendung von Anwendungen und Skripten eine Richtlinie gibt, die dem Sicherheitsprinzip im Bankwesen ähnelt: Geben Sie Ihre persönlichen Daten niemals an jemanden weiter, der Sie anruft und angibt, dass er "von Ihrer Bank aus" anruft , und die existiert aus ähnlichen Gründen.
Die Regel für Bewerbungen lautet:
Geben Sie niemals Ihr Passwort ein, wenn Sie dazu aufgefordert werden, es sei denn, Sie sind sich sicher, was damit geschehen soll. Dies gilt dreifach für jeden mit sudo
Zugang.
Wenn Sie Ihr Kennwort eingeben, weil Sie sudo
über die Befehlszeile ausgeführt wurden, ist das großartig. Wenn Sie es eingeben, weil Sie einen SSH-Befehl ausgeführt haben, ist das in Ordnung. Wenn Sie es eingeben, wenn Sie sich bei Ihrem Computer anmelden, ist das natürlich großartig.
Wenn Sie nur ein fremdes Skript oder eine ausführbare Datei ausführen und Ihr Kennwort nach Aufforderung nur zögerlich eingeben, wissen Sie nicht, wie das Skript damit umgeht . Soweit Sie wissen, kann es sein, dass es in einer temporären Datei im Klartext gespeichert wird und sich nicht selbst bereinigt.
Offensichtlich gibt es separate und zusätzliche Bedenken hinsichtlich der Ausführung unbekannter Befehle root
, aber ich spreche hier davon, die Sicherheit des Kennworts selbst aufrechtzuerhalten . Selbst wenn die Anwendung / das Skript nicht böswillig ist, möchten Sie dennoch, dass Ihr Kennwort sicher gehandhabt wird, um zu verhindern, dass andere Anwendungen darauf zugreifen und es böswillig verwenden.
Meine persönliche Antwort darauf lautet also:
#!/bin/bash
[ "$UID" -eq 0 ] || { echo "This script must be run as root."; exit 1;}
# do privileged stuff, etc.
exec
- sich selbst aufrufen, aber gleichzeitig den Prozess ersetzen, damit wir nicht mehrere Instanzen des Skripts