Perché non riesco ad eseguire alcuni comandi? (ad es. vim)


16

Ho accesso sudo sul server dei miei amici, con centos-6.3, ma quando provo ad eseguire alcuni comandi come se sudo vim /var/www/html/index.htmlavessi un errore sudo: vim: command not found, tuttavia, posso eseguire sudo sue quindi vim /var/www/html/index.htmle funziona come previsto.

echo $PATHed sudo echo $PATHentrambi producono:

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

sudo which vim tuttavia produce:

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

Ho provato ad aggiungere

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

al /root/.bashrcquale come risolto il problema durante l'utilizzo sudo suma non solo sudo <command>.

Come faccio sudo <command>a lavorare?


Hai già aggiunto quell'utente ai sudoer nel sistema operativo Centos?
AAlvz,

Risposte:


18

Durante l'esecuzione sudo, molti sistemi sono configurati per cancellare l'ambiente da tutti i valori non autorizzati e per ripristinare la variabile PATH su un valore igienizzato.

Troverai il primo come Defaults env_resete diversi Defaults env_keep += "SOME_VARIABLE_NAME"in /etc/sudoers. Quest'ultimo PATHoverride "sicuro" è specificato come Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin- elimina questa riga per rimuovere questo comportamento durante sudoing.


Come viene stampata la variabile d'ambiente quando si esegue  sudo -Vcome root.


Se non si desidera eliminare queste impostazioni predefinite, è sempre possibile specificare i programmi utilizzando il loro percorso completo ( sudo /usr/local/bin/vim).

In alternativa, è possibile consentire il tuo account per SETENVnel sudoersfile, ad esempio:

%wheel  ALL=(ALL)       SETENV: ALL

Ciò consente di sovrascrivere le impostazioni predefinite dell'ambiente in questo modo sudo PATH=$PATH which vim:, poiché la variabile viene interpretata dalla shell prima dell'esecuzione del comando, con conseguente eredità PATH(che probabilmente non includerà /sbinecc.).


Grazie. Userò il lavoro di Dennis fino a quando non avrò il proprietario per ammettere il file sudoers.
JaredMcAteer

6
sudo echo $PATH

non fa quello che pensi. $PATHviene sostituito dalla (tua) shell prima di eseguire il comando.

Per ottenere il comportamento desiderato, è possibile utilizzare sudo -i.

Da man sudo :

-comando io]

L' opzione -i ( simula il login iniziale ) esegue la shell specificata nella voce passwd (5) dell'utente di destinazione come shell di login. Ciò significa che i file di risorse specifici per l'accesso come .profileo .loginverranno letti dalla shell. Se viene specificato un comando, viene passato alla shell per l'esecuzione.


1
Questa è una soluzione adeguata fino a quando non riesco a convincere il proprietario a regolare il file sudoers.
JaredMcAteer

1

Come faccio sudo <command>a lavorare?

Fino a quando non si risolve il problema con i percorsi, utilizzare un percorso completo

  sudo /usr/local/bin/vim /var/www/html/index.html

5
Non ho intenzione di sottovalutarti, ma non mi piace mai solo aggirare i problemi piuttosto che arrivare al punto di capirli e risolverli.
Nicole Hamilton,
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.