También he tenido este problema a veces, con comandos tan básicos como cd. Usando el dzdo cdretorno de "comando no encontrado". Por supuesto, más tarde me di cuenta de que cding en un directorio que no tiene permisos en, no ayudará mucho, así que tampoco necesito un intérprete de comandos o necesidad de dzdo ls, dzdo mv, etc los contenidos de fuera de ese directorio.
Comodín el
2
El problema sudo cdes que cdes un comando incorporado, no un programa. Si quieres ir a un directorio que usted no tiene ningún acceso a, y (por ejemplo) cambie el nombre de un archivo existe, se puede hacer (por ejemplo) sudo mv dir/oldfile dir/newfileosudo sh -c "cd dir; mv oldfile newfile" .
G-Man dice 'Restablece a Monica' el
Respuestas:
13
Cuando usted sudo, obtiene un preconfigurado $PATH, que es (se supone que es) algo así como la ruta predeterminada del usuario raíz . Su programa no está en esa lista de directorios identificados por $PATH.
sudo intenta estar seguro cuando ejecuta comandos externos.
Hay dos formas distintas de tratar con las variables de entorno. Por defecto, la
opción env_resetsudoers está habilitada. Esto hace que la ejecución de comandos con un entorno mínimo que contiene TERM,
PATH, HOME, SHELL, LOGNAME, USERy USERNAMEademás de las variables de proceso llamante permitidos por las env_checky env_keepsudoers opciones. Existe efectivamente una lista blanca para las variables de entorno.
Si no puede configurar sudopara preservar su $PATH, la solución habitual es especificar la ruta completa del programa. Es posible que eso no funcione bien con los scripts que llaman a otros ejecutables en el directorio (no accesible).
Debe especificar la ruta completa. También es más seguro; Si no especifica la ruta, es concebible que un atacante pueda crear otro programa que se ejecutará con permisos de root.
Además, debe poner una línea /etc/sudoerspara permitirlo. man sudoerspara la sintaxis, es demasiado poner aquí.
cd
. Usando eldzdo cd
retorno de "comando no encontrado". Por supuesto, más tarde me di cuenta de quecd
ing en un directorio que no tiene permisos en, no ayudará mucho, así que tampoco necesito un intérprete de comandos o necesidad dedzdo ls
,dzdo mv
, etc los contenidos de fuera de ese directorio.sudo cd
es quecd
es un comando incorporado, no un programa. Si quieres ir a un directorio que usted no tiene ningún acceso a, y (por ejemplo) cambie el nombre de un archivo existe, se puede hacer (por ejemplo)sudo mv dir/oldfile dir/newfile
osudo sh -c "cd dir; mv oldfile newfile"
.Respuestas:
Cuando usted
sudo
, obtiene un preconfigurado$PATH
, que es (se supone que es) algo así como la ruta predeterminada del usuario raíz . Su programa no está en esa lista de directorios identificados por$PATH
.Ver por ejemplo
sudo
preservar $ PATH?PATH
)Si no puede configurar
sudo
para preservar su$PATH
, la solución habitual es especificar la ruta completa del programa. Es posible que eso no funcione bien con los scripts que llaman a otros ejecutables en el directorio (no accesible).fuente
Debe especificar la ruta completa. También es más seguro; Si no especifica la ruta, es concebible que un atacante pueda crear otro programa que se ejecutará con permisos de root.
Además, debe poner una línea
/etc/sudoers
para permitirlo.man sudoers
para la sintaxis, es demasiado poner aquí.fuente