Ejecute el comando "cd" como superusuario en Linux

Ejecute el comando "cd" como superusuario en Linux

¿Hay alguna forma de ejecutar el cdcomando 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?", entoncesse 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ó, cdes 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 cden 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 cdque 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 cden é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.

información relacionada