Cambiar el sudo su shell


13

Cada vez que ejecuto sudo sumi normal zsh(que usa el marco oh-my-zsh ), me veo obligado a usar el viejo shell Bourne ( sh) de forma predeterminada (obviamente; este es el comportamiento estándar en la mayoría de los sistemas * nix-like). Si corro zshdesde adentro shdespués de correr sudo su, obtengo el shell Z, pero sin las mejoras de oh-my-zsh.

¿Hay alguna forma de cambiar los sudo sulanzamientos de shell zsh? Si es así, ¿es posible tener también esa instancia de zshlanzamiento usando oh-my-zsh?

Estoy usando OS X 10.8.4.

Respuestas:


21

Otra forma de ejecutar un shell interactivo como superusuario es sudo -s, que se usa $SHELLcomo shell.

Como se mencionó en los comentarios en la otra respuesta, su -s /path/to/zshno funciona en OS X.

OS X tampoco admite el cambio de shells de inicio de sesión /etc/passwd, pero puede usar dscl:

$ dscl . -read /Users/root UserShell
/bin/sh
$ sudo dscl . -change /Users/root UserShell /bin/sh /bin/zsh
$ dscl . -read /Users/root UserShell
/bin/zsh
$ sudo su
My-iMac# echo $0
zsh
My-iMac# exit
$ sudo dscl . -change /Users/root UserShell /bin/zsh /bin/sh
$ 

/bin/shya no es un shell Bourne en la mayoría de las plataformas. Es una versión de bash compatible con POSIX en OS X y dash en Ubuntu.


Esto es lo que creo que la pregunta quería. Definitivamente es lo que funcionó para mí; ¡Muchas gracias! editar veo lo que quería ahora, no creo que esto sea lo que él quería, así que no puedo votarlo de manera justa por esta pregunta, pero creo que de todas formas te mereces una medalla. ¡Tenías la respuesta a mi pregunta!
Wyatt8740

4

Desde la página de sumanual, hay dos formas de lograr esto.


El primer método es simplemente usar el indicador -so --shell(suponiendo que esté usando un sistema operativo basado en * NIX con una versión suque admita este argumento), seguido de la ruta al shell de su elección. Si no se puede encontrar el shell pasado, suvuelve al siguiente método y, en su defecto, intentará invocar /bin/sh.

Por ejemplo, puede forzar el suinicio zsh(suponiendo que exista en /bin/zsh) como:

sudo su --shell /bin/zsh

El segundo método es modificar el shell predeterminado especificado para el rootusuario (¡ tenga cuidado! ). Esto se puede hacer editando el archivo /etc/passwdy cambiando el shell especificado para el rootusuario. Para ver qué shell se especifica de manera predeterminada, puede ejecutar el siguiente comando (suponiendo que el superusuario sea root):

sudo grep root /etc/passwd 

El comando debería mostrar algo como root:x:0:0:root:/root:/bin/bash. Simplemente puede cambiar el /bin/bash(o lo que esté configurado en su sistema) para que apunte en su zshlugar.


3
Como siempre, tenga cuidado al cambiar el caparazón de la raíz. No desea estar en modo de usuario único y tener un shell raíz que necesita / usr cuando está roto. Al alquilar, asegúrese de que su nuevo shell no tenga más dependencias del sistema de archivos que el que está reemplazando
Rich Homolka

Ejecutar sudo su -s /bin/zsh(o usar --shell) retornos su: illegal option -- s. Estoy en OS X 10.8.4; ¿OS X toma un comando diferente?
Julio

@JulesMazur, ¿cuál es el resultado cat /etc/shells? Técnicamente, solo se lanzarán shells permitidos en ese archivo, aunque la página de sumanual dice que esto no debería importar si suse llama por root: S
Breakthrough

cat /etc/shellsregresa /bin/zshcomo un shell aceptable.
Julio

2
@JulesMazur recuerde incluir siempre su sistema operativo para evitar este tipo de confusión.
terdon

1

Una forma más limpia que también protegerá su sistema en caso de que se explote su shell personalizado es crear un .profile en el directorio de inicio de la raíz con:

if [ -x /opt/local/bin/bash ]; then
    SHELL=/opt/local/bin/bash
    export SHELL
    exec /opt/local/bin/bash
else
    echo /opt/local/bin/bash not found using default shell of $SHELL
fi

Simplemente cambie la ruta al shell que desea en lugar de bash.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.