Kurz gesagt : Wie kann Sudo dazu gebracht werden, PATH nicht jedes Mal zu löschen?
Ich habe einige Websites auf meinem Server bereitgestellt (Debian-Tests), die mit Ruby on Rails geschrieben wurden. Ich verwende Mongrel + Nginx, um sie zu hosten, aber es gibt ein Problem, das auftritt, wenn ich Mongrel neu starten muss (z. B. nachdem ich einige Änderungen vorgenommen habe).
Alle Sites werden in VCS (Git, aber es ist nicht wichtig) überprüft und haben Eigentümer und Gruppe auf meinen Benutzer festgelegt, während Mongrel unter dem, huh, Mongrel-Benutzer ausgeführt wird, dessen Rechte stark eingeschränkt sind. Daher muss Mongrel unter root (es kann automatisch die UID ändern) oder mongrel gestartet werden.
Um mongrel zu verwalten, verwende ich mongrel_cluster gem, da es das Starten oder Stoppen einer beliebigen Anzahl von Mongrel-Servern mit nur einem Befehl ermöglicht. Das Verzeichnis /var/lib/gems/1.8/bin muss sich jedoch in PATH befinden. Dies reicht nicht aus, um es mit einem absoluten Pfad zu starten .
Das Ändern von PATH in root .bashrc hat nichts geändert, das Ändern von sudos env_reset und env_keep auch nicht.
Also die Frage: Wie füge ich ein Verzeichnis zu PATH hinzu oder behalte den PATH des Benutzers in sudo?
Update: einige Beispiele
$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults env_keep = "PATH"
root ALL=(ALL) ALL
%sudo ALL=NOPASSWD: ALL
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Ich kann auch sagen, dass es genau so auch in Debian Stable (Lenny) funktioniert.
Antworten:
Kämpfte mit dem gleichen Problem für ein paar Stunden. In Debian Lenny können Sie dies durch Hinzufügen beheben
in die sudoers-Datei.
Dies ist die einzige Möglichkeit, die kompilierte Option --secure-path zu umgehen (soweit ich weiß).
Bemerkenswert ist , wird dies auch Benutzer enthebt benötigen ihr Passwort einzugeben , wenn sie sudo.
quelle
Wenn Sie sich
secure_path
festgelegt haben/etc/sudoers
, können Sie mitenv_reset
/ spielen,env_keep
was Sie möchten, und es wird keinen Unterschied für den Pfad machen. Wenn Sie so etwas sehen, kommentieren Sie es aus.quelle
Ich würde sagen, schauen Sie sich die Optionen env_reset und env_keep in man sudo an . Aber es hört sich so an, als hätten Sie das bereits getan (Sie nennen env_keep fälschlicherweise "keepenv"). Wenn Sie die Option env_reset deaktivieren (Standardeinstellung ist aktiviert), sollte sie meiner Meinung nach keine env-Variablen löschen . Dies ist jedoch weniger sicher.
Es gibt auch eine secure_path-Option für sudo. Ich denke, das ist standardmäßig aktiviert. Sie können versuchen, es zu deaktivieren.
Die vorhergehenden Optionen werden in Ihrer / etc / sudoers-Datei festgelegt. Es gibt auch die
-i
Befehlszeilenoption für sudo. Das führt dazu, dass sudo /root/.profile oder /root/.login ausführt. Sie können dort Ihren gewünschten Pfad festlegen.quelle
Nun, du machst etwas falsch. Außerdem haben Sie nicht angegeben, was Sie mit Ihrer Datei / etc / sudoers gemacht haben. Folgendes hättest du tun sollen - das ist übrigens ein CentOS-System:
Erstens ist dies mit der richtigen env_keep-Einstellung (beachten Sie, dass PATH dort enthalten ist):
Sieht gut aus. Entfernen wir nun die Einstellung env_keep und versuchen es erneut:
Was für ein trauriger WEG:
quelle