¿Cómo puedo cd en un directorio como root?

10

Digamos que hay un directorio al que no tengo privilegios para acceder. Obviamente sudo cd foono funcionará, porque cdes un shell incorporado en cada shell.

Hasta ahora, he estado usando sudo bash(sí, sé que hay mejores formas) para obtener un indicador de raíz. Entonces, puedo cdentrar al directorio para hurgar.

¿Hay una mejor manera de hacer esto?

Strugee
fuente
¿Por qué querrías cdser root (a menos que de hecho estés en un shell de root)?
tripleee
si un directorio era propiedad de root y no había ejecución global
strugee
1
Eso no es realmente un caso válido. Puede ser útil poder leer el directorio, pero eso no requiere que el directorio sea su directorio de trabajo, es decir, no lo necesita cd.
tripleee
Sí, no me di cuenta hasta que la respuesta aceptada señaló que podía simplemente sudo ls.
strugee

Respuestas:

12

No, no hay una forma de acceder cda un directorio que solo permita root sin ser root. Realmente no debería haber demasiados directorios que tengan esta limitación. La mayoría de las veces, el acceso a un archivo determinado es limitado, como el /etc/shadowarchivo o los archivos de registro específicos que se encuentran debajo /var/log.

Puedes usar sudo ls <dir>para verlos en lugar de bash. Además, cuando se usa sudopara convertirse en root, generalmente desea establecer el usuario ( sucomando) en lugar de bash, así que use este comando en su lugar:

$ sudo su -

También puede lograr lo mismo con el -iinterruptor de un sudo :

$ sudo -i

extracto de la página del manual sobre sudo -i

La opción -i (simular inicio de sesión inicial) ejecuta el shell especificado en la entrada passwd (5) del usuario objetivo como un 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. De lo contrario, se ejecuta un shell interactivo.

Para los archivos a los que no puede acceder, puede usar cualquiera de estos sudocomandos:

$ sudo tail /var/log/messages

$ sudo less /etc/shadow
slm
fuente
3
¿Por qué usarías en sudo su -lugar de sudo -i? Ambos le otorgan todos los privilegios de superusuario, aunque todo lo que necesita es la capacidad CAP_DAC_READ_SEARCH.
Stéphane Chazelas
@StephaneChazelas: nunca antes había notado ese cambio. Mi introducción original sudofue a través de los entornos Solaris y la versión sudoque estaba allí no incluía este interruptor. Mirando a través del registro de cambios de sudo , parece que esa opción se agregó en 2004. Supongo que estoy saliendo con esto pero me preguntaste 8-). Enmendaré la respuesta para incluir ambos, ¡gracias!
slm
@ StéphaneChazelas Estoy de acuerdo. Prefiero sudo -Hiporque establece el directorio de inicio también (no establece inicio de forma predeterminada en mi distribución, el valor predeterminado puede variar). Si no lo hace, puede terminar con archivos de propiedad raíz en su hogar, si crea nuevos archivos allí.
doug65536
5

No, no hay Necesita un shell que se ejecute como root.

Ignacio Vazquez-Abrams
fuente
Y, como se señaló en los comentarios, no tiene sentido a cdmenos que esté ejecutando un shell o un proceso comparable.
tripleee
0

Bien, no puedes. Sin embargo, aquí hay una solución alternativa:

sudo sh -c "cd restricted-dir; some_command"
Tagar
fuente