sudo - sich als Benutzer ausgeben

8

Ich versuche, den Befehl sudo und die Datei sudoers korrekt zu verwenden, damit ich einen Befehl als anderer Benutzer ausführen kann.

Ich habe meine sudoers-Datei wie folgt eingerichtet:

beans ALL = (root,apache) NOPASSWD: /opt/renovations/var/script-*.sh

Root, Apache und Beans sind Teil der Group Beans.
Außerdem verfügt / opt über 755 Berechtigungen, während das Verzeichnis / opt / renovations und seine Unterverzeichnisse dem Benutzer und der Gruppe von Beans gehören.

Der Befehl, den ich als Beans ausführen möchte, lautet:

sudo -n -u apache -i /opt/renovations/var/script-test.sh  

-n: ist so, dass ich nicht zur Eingabe eines Passworts aufgefordert werde, da dies von einem Cron ausgeführt wird.
-u: ist so, dass ich mich als Apache-Benutzer
ausgeben kann. -i: ist so, dass ich eine Anmeldung und mein .profile simuliere wird geladen. Ich brauche dies, damit ich auf die Umgebungsvariablen in .profile zugreifen kann.

Das Problem ist, dass beim Ausführen des Befehls sudo die folgende Meldung angezeigt wird:

sudo: Entschuldigung, zum Ausführen von sudo ist ein Passwort erforderlich

Ich habe versucht, dies sowohl unter AIX als auch unter Ubuntu auszuführen, aber das Problem liegt auf beiden Systemen. Das funktioniert, wenn ich laufe:

sudo -n -u apache /opt/renovations/var/script-test.sh

Ohne das -i enthält meine Umgebung jedoch nicht alle Umgebungsvariablen, die ich benötigen muss.

Muss ich etwas in meiner sudoers-Datei aktualisieren, damit dies möglich ist?

krzyszto
quelle
Was gibt visudo -czurück (prüft Sudoer auf Fehler). Können Sie auch die Vollversion von AIX ( oslevel -s) und die installierte Version von sudo bestätigen?
EightBitTony
1
Funktioniert es auch, wenn Sie den Skriptnamen explizit in sudo anstelle des Platzhalters auflisten (und ist der Dateiname ein symbolischer Link?).
EightBitTony
Danke @EightBitTone. Also habe ich eine Lösung für dieses Sudoers-Konfigurationsproblem gefunden: Wenn der Schalter -i verwendet wird, ist der echte Befehl beans ALL = (root,apache) NOPASSWD: /usr/bin/ksh -c /opt/renovations/var/script-*.sh und beans ALL = (root,apache) NOPASSWD: /usr/bin/bash -c /opt/renovations/var/script-*.shjetzt erhalte ich den neuen Fehler, zum Beispiel:ksh: /opt/renovations/var/script-test.sh: cannot execute
krzyszto
Das Analysieren der Protokolldatei / var / log / sudolog war sehr hilfreich, um das obige Problem (unter AIX) zu beheben.
krzyszto

Antworten:

4

Wie Sie selbst bei @krzysto gesagt haben, besteht die Lösung darin, der sudoers-Datei Folgendes hinzuzufügen

beans ALL = (root,apache) NOPASSWD: /usr/bin/ksh -c /opt/renovations/var/script-*.sh 
beans ALL = (root,apache) NOPASSWD: /usr/bin/bash -c /opt/renovations/var/script-*.sh

Als nächstes fehlt, um sicherzustellen, dass die Gruppe über Ausführungsberechtigungen für die Skripte verfügt, damit Sie sie ausführen können.

Bohnen
quelle
Ja, es ist die richtige Lösung. Der ksh-Fehler tritt nur in Testumgebungen auf, die zur Untersuchung des Identitätswechselproblems erstellt wurden. In Wirklichkeit funktioniert die Produktion alle korrekt
krzyszto