So legen Sie den Pfad für sudo-Befehle fest


37

Wenn ich ausstelle

sudo my-command

Wie sieht Linux danach aus my-command?

Das my-commandsteht in meinem PFAD. Ich kann es ohne Probleme aufrufen. Wenn ich es jedoch mit sudoaufrufe, bekomme ich command not found. Interessant, noch nie zuvor erlebt. Wie zu überwinden?

EDIT: Die ausgewählte Antwort von "Possible duplicate" ist falsch, zumindest nicht auf den Punkt. Diese Antwort von Terdon ist die richtige.

Antworten:


48

Dies wird normalerweise durch die secure_pathOption in eingestellt /etc/sudoers. Von man sudoers:

 secure_path   Path used for every command run from sudo.  If you don't
               trust the people running sudo to have a sane PATH environ‐
               ment variable you may want to use this.  Another use is if
               you want to have the “root path” be separate from the “user
               path”.  Users in the group specified by the exempt_group
               option are not affected by secure_path.  This option is not
               set by default.

$PATHSie können auch Befehle ausführen, die nicht in der Standardeinstellung enthalten sind

  1. Verwenden Sie den vollständigen Pfad sudo ~/bin/my-command:; oder

  2. Fügen Sie das Verzeichnis hinzu, in dem sich der Befehl befindet secure_path. Führen Sie sudo visudodie sichere Pfadzeile aus und bearbeiten Sie sie:

    Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
    

    Speichern Sie die Datei und beim nächsten Start sudobefindet sich das Verzeichnis ~/binin der Datei $PATH.


2
Oder kommentieren Sie einfach die ganze Zeile aus, wenn dies keine Produktionsmaschine ist und es uns egal ist. Dann wird der PATH des Benutzers verwendet. Es sagt, dass es nicht standardmäßig eingestellt ist, aber das kann nicht immer wahr sein ...
Nagev

2

Folgendes habe ich für eine Problemumgehung verwendet:

sudo cp $(which my-command) /usr/bin
...

Der whichBefehl wird in einer Subshell ausgeführt, die nicht root ist, sodass my-commandsudo die ausführbare Datei in einen Pfad kopiert, auf den der rootBenutzer zugreifen kann. Für die Sicherheit nicht besonders, aber es war in Ordnung, ein Docker-Image auszuführen, das unmittelbar nach Ausführung des Befehls zerstört wurde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.