Frage

Es ist ein Shell-Skript (/ bin / sh, nicht bash), die Root-Rechte für die Ausführung erforderlich ist.

Wenn es läuft von einem normalen Benutzer ist, sollte es Benutzer ein Passwort fragt Root-Zugriff und Wieder läuft selbst zu erhalten.

Jetzt verwendet er den folgenden Code:

if [ $(id -u) -ne 0 ]; then su root -- $0 $@ ; ... fi

Das funktioniert gut, aber es gibt einige Betriebssysteme wie Ubuntu, die kein root-Passwort überhaupt haben. Auf der anderen Seite, verwenden viele Systeme sudo für root-Rechte.

Die Frage ist:. Wie kann das Skript erkennen, ob zu verwenden su oder sudo, ohne den Benutzer zu viel verlangen Passwörter eingeben (zum Beispiel sudo Passwort eingeben, wenn es fehlschlägt - run su)

War es hilfreich?

Lösung

Es gibt keine kugelsichere Art und Weise, dies zu tun, weil jede Verteilungsdateien in irgendeiner Weise legen kann es will. Debian und Ubuntu setzen oft Systemdateien in anderen Verzeichnissen als Red Hat, zum Beispiel. Es ist viel einfacher, das Skript für das Betriebssystem anpassen auf dem es installiert ist.

Andere Tipps

Es sollte nicht. Wenn Skript Root-Rechte benötigt, sollte es als root ausgeführt werden. Es ist das Geschäft des Benutzers, wie er geht, das erreichen -. Mit su, sudo oder einen anderen Mechanismus

Wenn Sie sich mit Sicherheitsfragen befassen und wollen nicht alles von der Wurzel tun, werden Sie root-Rechte für die Teile fallen können.

Sie können Setup das Konto kein Passwort für sudo in / etc / sudoers müssen:

yourusername ALL=(ALL) NOPASSWD: ALL

Wenn Sie das nicht tun wollen, können Sie sie zwingen, das Skript als root ausführen. Fügen Sie so etwas wie dieses an die Spitze des Shell-Skript:

if [ "$UID" -ne 0 ]; then
    echo "You must be root to run this script"
    exit 1
fi

Auf diese Weise kann der Benutzer erhalten root zu sein, aber sie wählen (su oder sudo).

Erstellen Sie eine weitere .sh Datei aus dieser Datei wie Ihre ursprüngliche .sh Datei aufrufen -

su - oracle /u01/enlightics/Enlightiks/UploadFTP/ExportScript2.sh

Überprüfen Sie, ob sudo installiert

SU='su'
which sudo > /dev/null && SU='sudo'

Dies ist zwar nicht vollständig beantworten Ihre Frage, es ist erwähnenswert, dass Sie überprüfen können, ob das sudo-Paket installiert wird unter Verwendung der folgenden:

Debian-basierte Systeme:

dpkg -s sudo

RPM-basierte Systeme:

rpm -q sudo
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top