Warum kann ich einige Befehle nicht sudo? (zB vim)

16

Ich habe auf dem Server meines Freundes Sudo-Zugriff, auf dem Centos-6.3 ausgeführt wird. Wenn ich jedoch versuche, einige Befehle auszuführen sudo vim /var/www/html/index.html, wird eine Fehlermeldung angezeigt. sudo: vim: command not foundIch kann sie jedoch ausführen sudo suund dann vim /var/www/html/index.htmlfunktioniert sie wie erwartet.

echo $PATHund sudo echo $PATHbeide ergeben:

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin

sudo which vim jedoch ergibt:

which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)

Ich habe versucht hinzuzufügen

export PATH=$PATH:/usr/local/bin

an dem /root/.bashrcwas wie behoben das problem bei der verwendung sudo suaber nicht nur sudo <command>.

Wie komme ich sudo <command>zur Arbeit?

JaredMcAteer
quelle
Haben Sie diesen Benutzer bereits zu den Sudoern in Centos OS hinzugefügt?
AAlvz

Antworten:

18

Bei der Ausführung sudosind viele Systeme so konfiguriert, dass alle nicht auf der Whitelist aufgeführten Werte aus der Umgebung entfernt und die Variable PATH auf einen bereinigten Wert zurückgesetzt werden.

Sie finden die ersteren als Defaults env_resetund mehrere Defaults env_keep += "SOME_VARIABLE_NAME"in /etc/sudoers. Die letztgenannte "sichere" PATHÜberschreibung ist wie folgt angegeben: Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin- Diese Zeile löschen, um dieses Verhalten bei der sudoEingabe zu entfernen .


Wie welche Umgebungsvariable behandelt wird, wird gedruckt, wenn Sie sudo -Vals ausführen  root.


Wenn Sie diese Standardeinstellungen nicht entfernen möchten, können Sie Programme immer mit ihrem vollständigen Pfad ( sudo /usr/local/bin/vim) angeben .

Alternativ können Sie zulassen, dass Ihr Konto SETENVin der sudoersDatei enthalten ist. Beispiel:

%wheel  ALL=(ALL)       SETENV: ALL

Auf diese Weise können Sie Umgebungsstandards wie die folgende überschreiben: sudo PATH=$PATH which vimDa die Variable von Ihrer Shell interpretiert wird, bevor der Befehl ausgeführt wird, führt dies zu einer geerbten Variable PATH(die jedoch wahrscheinlich kein /sbinusw. enthält).

Daniel Beck
quelle
Vielen Dank. Ich werde Dennis 'Workaround verwenden, bis ich den Besitzer dazu bringe, die sudoers-Datei zu lesen.
JaredMcAteer
6
sudo echo $PATH

tut nicht was du denkst. $PATHwird durch die (Ihre) Shell ersetzt, bevor der Befehl ausgeführt wird.

Um das gewünschte Verhalten zu erreichen, können Sie verwenden sudo -i.

Vom Mann sudo :

-Ich befehle]

Mit der Option -i ( Erstanmeldung simulieren ) wird die im Eintrag passwd (5) des Zielbenutzers angegebene Shell als Anmeldeshell ausgeführt. Dies bedeutet, dass anmeldungsspezifische Ressourcendateien wie .profileoder .loginvon der Shell gelesen werden. Wenn ein Befehl angegeben ist, wird er zur Ausführung an die Shell übergeben.

Dennis
quelle
1
Dies ist eine geeignete Problemumgehung, bis der Eigentümer die sudoers-Datei anpassen kann.
JaredMcAteer
1

Wie komme ich sudo <command>zur Arbeit?

Verwenden Sie einen vollständigen Pfadnamen, bis Sie das Problem mit den Pfaden gelöst haben

  sudo /usr/local/bin/vim /var/www/html/index.html
RedGrittyBrick
quelle
5
Ich werde Sie nicht downvote, aber ich bin nie gern nur arbeiten um Probleme , anstatt direkt auf den Punkt bekommen sie herauszufinden und Aufhängevorrichtungen.
Nicole Hamilton