Come impostare il percorso per i comandi sudo


37

Se emetto

sudo my-command

come lo cerca Linux my-command?

Il my-commandè nel mio percorso. Posso invocarlo senza alcun problema. Tuttavia, quando lo invoco con sudo, ottengo command not found. Interessante, non sperimentarlo mai prima. Come superare?

EDIT: Quella risposta selezionata "Possibile duplicato" è sbagliata, beh, almeno non al punto. Questa risposta, di terdon, è quella corretta.

Risposte:


48

Questo è normalmente impostato secure_pathdall'opzione in /etc/sudoers. Da 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.

Per eseguire comandi che non sono predefiniti $PATH, puoi farlo anche tu

  1. Utilizzare il percorso completo: sudo ~/bin/my-command; o

  2. Aggiungi la directory contenente il comando a secure_path. Esegui sudo visudoe modifica la linea del percorso sicuro:

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

    Salvare il file e la prossima volta che si esegue sudo, la directory ~/binsarà nella sua $PATH.


2
Oppure commenta l'intera riga se questa non è una macchina di produzione e non ci interessa. Quindi utilizzerà il PERCORSO degli utenti. Dice che non è impostato di default, ma potrebbe non essere sempre vero ...
Nagev

2

Questo è quello che ho usato per una soluzione alternativa:

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

Il whichcomando viene eseguito in una subshell non root, quindi è in grado di trovare my-command, quindi, sudo copia l'eseguibile in un percorso a cui l' rootutente può accedere. Non eccezionale per la sicurezza, ma per me andava bene eseguire un'immagine docker che veniva distrutta subito dopo l'esecuzione del comando.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.