.png)
Tengo acceso sudo en el servidor de mis amigos, ejecutando centos-6.3, pero cuando intento ejecutar algunos comandos, sudo vim /var/www/html/index.html
aparece un error sudo: vim: command not found
, pero puedo ejecutar sudo su
y luego vim /var/www/html/index.html
funciona como se esperaba.
echo $PATH
y sudo echo $PATH
ambos dan:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin
sudo which vim
sin embargo produce:
which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)
He intentado agregar
export PATH=$PATH:/usr/local/bin
a lo /root/.bashrc
cual se solucionó el problema al usar, sudo su
pero no solo sudo <command>
.
¿Cómo llego sudo <command>
al trabajo?
Respuesta1
Cuando se ejecuta sudo
, muchos sistemas están configurados para borrar del entorno todos los valores no incluidos en la lista blanca y restablecer la variable PATH a un valor desinfectado.
Encontrarás los primeros como Defaults env_reset
y varios Defaults env_keep += "SOME_VARIABLE_NAME"
en /etc/sudoers
. La última PATH
anulación "segura" se especifica como Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
: elimine esta línea para eliminar este comportamiento al sudo
realizar ing.
La forma en que se maneja qué variable de entorno se imprime cuando se ejecuta sudo -V
como root
.
Si no desea deshacerse de estos valores predeterminados, siempre puede especificar los programas utilizando su ruta completa ( sudo /usr/local/bin/vim
).
Alternativamente, puede permitir que su cuenta esté SETENV
en el sudoers
archivo, por ejemplo:
%wheel ALL=(ALL) SETENV: ALL
Esto le permite anular los valores predeterminados del entorno como este: sudo PATH=$PATH which vim
, ya que su shell interpreta la variable antes de ejecutar el comando, lo que da como resultado un valor heredado PATH
(que probablemente no incluirá, /sbin
etc.).
Respuesta2
sudo echo $PATH
no hace lo que piensas. $PATH
es reemplazado por (tu) caparazónantesejecutando el comando.
Para lograr el comportamiento deseado, puede utilizar sudo -i
.
Dehombre sudo:
-yo ordeno]
El-i(simular el inicio de sesión inicial) la opción ejecuta el shell especificado en elcontraseña(5) entrada del usuario objetivo como shell de inicio de sesión. Esto significa que el shell leerá los archivos de recursos específicos de inicio de sesión, como
.profile
o ..login
Si se especifica un comando, se pasa al shell para su ejecución.
Respuesta3
¿Cómo llego
sudo <command>
al trabajo?
Hasta que resuelva el problema con las rutas, utilice un nombre de ruta completo
sudo /usr/local/bin/vim /var/www/html/index.html