¿Es una mala práctica establecer el shell de root en algo diferente al predeterminado?


16

Una vez, un amigo mío (que es un usuario experimentado de Unix / Linux) me dijo que establecer el shell de root en algo distinto de sh (es decir, bash o zsh) podría crear problemas, porque algunos scripts podrían asumir que el shell es sh y hacer algo extraño. .

Sin embargo, creo que Ubuntu tiene el shell raíz predeterminado establecido en bash, y Gentoo también usa bash. ¿Alguien puede romper el mito?

Respuestas:


12

Si. Si el sistema falla durante el arranque, puede iniciar sesión en el shell raíz. Si tiene separador / usr, algunos shells pueden fallar al iniciarse con éxito.

Aconsejaría crear una cuenta toor(uid 0, gid 0) con un shell no estándar, mientras que deja la raíz con el shell predeterminado.


Esto me sucedió cuando actualicé de FBSD 7.2 a 8.0 y olvidé reconstruir bash. Arranqué en modo de usuario único para solucionarlo, pero solo funcionó porque /bin/shtodavía estaba vinculado a FBSDla bifurcación de bourney no bash.
gvkv

solo para aclarar las cosas, si instalo say zshy de alguna manera /usrestá dañado, ¿tendré problemas? pero mi sistema tiene /bin/shseñalando /bin/bashy bashsí, por qué no se shverán afectados?
phunehehe

1
Los valores predeterminados para la raíz "garantizan" que el sistema se iniciará: la guía de actualización se encargará de poder iniciar sesión en la raíz al menos. Sin embargo, puede que no sea el caso para nada más. La solución es duplicar la cuenta raíz por toor con un shell no predeterminado para uso diario y mantener la raíz como está.
Maciej Piechotka

1
zshno debería estar /usr/bin/si se instaló incorrectamente. todos los proyectiles deben estar en/bin
xenoterracide

1
@xenoterracide: zsh en Gentoo está dentro /binpero mantiene algunos archivos /usr/share. También dije claramente que el problema es durante el inicio de sesión durante el arranque (cuando falla algún servicio).
Maciej Piechotka

7

No debería ser un problema.

Los archivos de script de shell codifican explícitamente con qué shell se ejecutan. Está codificado en la primera línea u otros programas o scripts ejecutan un shell específico y dan el script de shell como argumento.

El único programa que se me ocurre que usa la información del shell de la cuenta de usuario (además del proceso de inicio de sesión) es procmail. Realmente divertido si su usuario ha establecido como shell / bin / false en el servidor de correo ... Pero generalmente no ejecuta procmail como root.

Otro candidato sería las líneas en el crontab de root. No sé cuál es la política de crond que shell usar.


$ SHELL generalmente se establece en / bin / sh por el crondaemon en el inicio.
echox

3

Los scripts escritos para el shell bourne la mayoría de las veces se ejecutarán contra BASH o ZSH o $ foo sin ningún problema.

En muchos sistemas Linux no hay instalado ningún sh original, sino que a menudo es un enlace simbólico contra / bin / bash.

Si algunos scripts simplemente "asumen" que el shell es explícitamente sh, deberían reescribirse. Existe el mecanismo shebang para elegir qué intérprete necesita su script. Si es el sh, el script debe incluir #!/bin/shcomo la primera línea.

Su configuración de shell predeterminada no debería ser relevante en este contexto.


2

No creo que cambiar el shell de root pueda causar problemas. Me parece recordar algunas unidades (¿quizás algunas variantes BSD?) Que tienen tcsh como shell predeterminado para root.

Los inicios de sesión de raíz son raros de todos modos. Normalmente, iniciaría sesión en su propia cuenta y luego su o sudo para rootear.

Lo que importa es que el shell de root debe tener la menor cantidad de dependencias posible para poder utilizarse en un contexto de reparación del sistema. Por ejemplo, es una buena idea tener un shell raíz estáticamente vinculado; algunas distribuciones envían una versión estáticamente vinculada de bash o zsh o sash (un shell con muchas utilidades estándar incorporadas). Sin embargo, esto no es tan importante si su sistema se puede iniciar fácilmente desde un CD de rescate o una unidad USB.


Por la razón de la dependencia, creo que tiene sentido dejar el shell como está para que una gran modificación del sistema (como una actualización) no arruine las cosas. Estoy de acuerdo en que es fácil de arreglar con un CD o USB en vivo, pero no debería tener que arreglarlo en primer lugar.
phunehehe

1

El shell de inicio de sesión de un usuario no afecta el proceso de arranque. Puedes configurar este shell a lo que quieras. No todos los sistemas tienen bash y funcionan bien. Además, si se /usr/bin/zshinstaló incorrectamente, todos los shells del sistema deberían estar en /bin. Sin embargo, no debe cambiar /bin/shpara apuntar a algo que no sea el predeterminado (a menos que sepa lo que está haciendo), ya que muchos scripts tienen lo #!/bin/shque generalmente apunta a bash, cuando deberían hacerlo #!/bin/bashporque usan bashisms y otro comportamiento que no trabajar en zsho dash.


vaya lo siento he cometido un error, en realidad, tanto en mi equipo bashy zshestán en/bin
phunehehe

0

Tengo bash como shell predeterminado para root. Solía zsh durante algún tiempo, pero luego volví a la fiesta . Qué caparazón usas, no importa mucho.

Es solo un problema, si más de una persona tiene acceso de root. En ese caso, puede seleccionar un 'denominador común' que generalmente es bash, ya que este es el shell más utilizado.


0

En lo que respecta a Solaris / illumos, la mención Mini-FAQ de Solaris Root Shell

Algunos administradores de sistemas todavía recomiendan no cambiar el shell raíz en los
sistemas Solaris. Pregunte por qué y es posible que le digan que root necesita un
shell vinculado estáticamente que no depende de las
bibliotecas dinámicas en / usr / lib. Esto fue cierto en el pasado, pero no es
necesariamente el caso hoy. Solaris, cuando está configurado correctamente, es como cualquier otra versión de Unix y puede admitir cualquier shell que defina, para root o cualquier otra cuenta.

Entonces, sí, si está utilizando Solaris o illumos, está bien usar shells que no sean sh.

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.