
¿Hay alguna forma de ejecutar el cd
comando con privilegios de superusuario para obtener acceso a directorios propiedad del root? Cuando corro sudo cd <path>
, obtengo sudo: cd: command not found
.
Respuesta1
La otra respuesta no está mal.
Posiblemente una mejor respuesta sea:
La herramienta sudo está destinada a realizar acciones como superusuario y usted está describiendo algo que es más bien un cambio de estado que precedería a acciones como 'ls' o 'vi' u otras para simplificarlas.
Sugiero, por ejemplo, si desea editar un archivo en /root/private/:
sudo ls /root
sudo ls /root/private
sudoedit /root/private/<name from previous ls command>
Definitivamente esto implica más escribir y un poco más difícil que simplemente cambiar de directorio. Sin embargo lo éslejosmás auditable y mucho más acorde con los principios detrás de sudo que ejecutar alguna variante de 'sudo bash'.
Si trabaja en un entorno seguro, su equipo de IA se lo agradecerá. Si te preguntas: "¿Qué cambio hice el otro día?", entoncestúse lo agradecerá, porque no tendrá que preguntarse qué archivo o archivos editó.
Dicho todo esto, habilitar y ejecutar algún tipo de 'sudo bash' es definitivamente más fácil. Si buscaba algo más fácil, ¿por qué utiliza 'sudo' en primer lugar en lugar de simplemente iniciar sesión como root?
Respuesta2
Como notó, cd
es un comando integrado en el shell yhay una razónpara eso: el "directorio actual" es un parámetro por proceso que solo puede ser cambiado por el procesosí mismo.
Ningún proceso secundario puede cambiar el directorio de trabajo de su shell, por lo que incluso si logra ejecutarlo cd
en un subshell privilegiado, solo cambiará el directorio de trabajo de ese subshell temporal, y no importa qué método para aumentar los privilegios utilice.
Entonces, para sudo cd
que funcione, sudo en sí tendría que ser un shell integrado y necesitaría alguna forma de aumentar los privilegios de un proceso que ya se está ejecutando. Actualmente no existe ningún mecanismo de este tipo en Linux (ni en la mayoría de los demás sistemas operativos).
Una forma de lograr lo que desea es ejecutar uninteractivoshell con privilegios de root (cualquier método funciona), y simplemente use el normal cd
en él:
[user@host /]$ sudo bash
[root@host /]# cd /root/secret
Si desea hacerlo todo con un solo comando, debería verse así: primero cambie el directorio de trabajo y luego inicie un shell interactivo:
sudo bash -c "cd /root/secret && bash"
su -c "cd /root/secret && zsh"
Nota: El comando externo no tiene que ser un shell, solo necesita seralgoque cambia su directorio de trabajo y ejecuta un nuevo comando. Los sistemas Linux recientes tienen uno o dos ayudantes que podrían usarse:
sudo nsenter --wd="/root/secret" bash # util-linux v2.23 (debian jessie)
sudo env --chdir="/root/secret" bash # coreutils v8.28 (debian buster)
La ventaja de este método es que no requiere citas anidadas; puede ejecutar un comando de varias palabras sin tener problemas con los espacios en blanco o los caracteres especiales.
Finalmente, algunos programas tienen una opción incorporada para cambiar su directorio de trabajo:
sudo make -C /etc
sudo git -C /root/secret log
Respuesta3
La forma más rápida de hacer lo que necesitaba hacer era esta:
sudo -s
Como se describe enesta respuesta.