Perfil de bash de abastecimiento para usuarios root

17

Disculpas de antemano si esta pregunta va a molestar a todos como lo aprecio, se ha hecho de varias maneras muchas veces antes. Tenga la seguridad de que he leído los archivos y he probado al menos algunas de las sugerencias, pero aún no puedo resolver el problema (simple). Espero que alguien pueda dar una respuesta y pueda sentirme debidamente humilde. Para su información, para evitar cualquier ambigüedad, voy a usar rutas absolutas en lugar de relativas.

Cuando inicio sesión, lo hago como usuario adam. Los alias /Users/adam/.bash_profileestán cargados y puedo usarlos inmediatamente al abrir un terminal. No uso un .bashrcarchivo y está bien.

De vez en cuando, cambio a root escribiendo suen el terminal y luego ingresando mi contraseña. El aviso cambia y ahora soy usuario root. Mi pregunta es la siguiente: inmediatamente después de convertirme en root, ¿se puede cargar mi perfil de bash root sin que tenga que buscar manualmente el archivo de perfil? La razón por la que sé que no sucede automáticamente es porque tengo los mismos alias en mi archivo de perfil raíz y en mi /Users/adam/.bash_profile. Después de convertirse en usuario root, a menos que escriba source [root_profile_file], no funcionan. Intenté configurar las siguientes permutaciones y luego cambiar a root a través del terminal, pero ninguna de ellas obtiene automáticamente el perfil / alias (nota, no tengo ninguna de las siguientes opciones configuradas simultáneamente, así que no creo que ' m confundiendo el sistema):

Opción 1: poner mis alias en/etc/profile

Opcion 2:

  • en /etc/profileinsertar[ -r /etc/bashrc ] && . /etc/bashrc
  • poner mis alias en /etc/bashrc

Opcion 3:

  • en /etc/bash_profileinsertar[ -r /etc/bashrc ] && . /etc/bashrc
  • poner mis alias en /etc/bashrc

Opción 4: poner mis alias en/var/root/.profile

Opcion 5:

  • en /var/root/.profileinsertar[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • poner mis alias en /var/root/.bashrc

Opcion 6:

  • en /var/root/.bash_profileinsertar[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • poner mis alias en /var/root/.bashrc

Tenga en cuenta que, con cualquiera de los anteriores, si cambio a root y luego source root_profile_fileescribo los alias se cargan, pero solo si de hecho obtengo el archivo manualmente. Quizás he entendido mal cómo funciona bash y no es posible obtener un archivo de perfil automáticamente después de cambiar a root, pero espero que haya una solución simple. Gracias de antemano a cualquiera que se haya tomado el tiempo de leer este mensaje.

Adam Gold
fuente

Respuestas:

14

El problema con el que se encuentra es que cuando se ejecuta susolo, no está ingresando un shell de 'inicio de sesión'. Esto significa que su entorno, directorio de trabajo y todo, excepto uid / gid, siguen siendo los mismos del usuario original.

Los desencadenantes de inicio de sesión no se ejecutan y usted experimenta los problemas que describe.

Una solución simple a un problema simple:

su -

Desde la su(1)página del manual:

El comando su se utiliza para convertirse en otro usuario durante una sesión de inicio de sesión. Invocado sin nombre de usuario, su valor predeterminado es convertirse en superusuario. El argumento opcional : puede usarse para proporcionar un entorno similar al que el usuario esperaría si el usuario hubiera iniciado sesión directamente.

También:

   -, -l, --login
       Provide an environment similar to what the user would expect had the user logged in directly.

Si suingresa a un shell de inicio de sesión, bash se comportará como espera y automáticamente obtendrá los archivos apropiados en "inicio de sesión", sin la necesidad de soluciones alternativas demasiado extravagantes.

Jason Salaz
fuente
1
Yo quiero observa, sin embargo segunda Hai Vu: Realmente, realmente, realmente nunca debe suni trabajan como root. Existe sudopara ese propósito, o puede trabajar de tal manera que no requiera privilegios de root en absoluto.
Jason Salaz
Gracias a ti y a @Hai Vu. "su -" hace el truco y sí, entendido completamente, la raíz generalmente debe evitarse.
Adam Gold
1
Ya sabía agregar el '-' después del comando su, pero aún no obtenía mi .bash_profile para el usuario raíz. La respuesta de Florian Bidabe y Patrix a continuación acerca de cambiar el shell raíz de sh a bash me solucionó el problema.
JaredC
9

En realidad, los usos de raíz /bin/sh(antiguo shell bourne), .bash_profiley .bashrcson leídos por bash.

Se vuelve complicado ya que esos archivos pueden usar una funcionalidad no disponible en sh. Incluso si usted source .bashrco source .bash_profile, todavía tendrá algún problema con funciones complejas, por ejemplo.

Una forma de resolver esto es ejecutar

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

para cambiar rootel caparazón a bash.

Florian Bidabe
fuente
Root /bin/shutiliza el /var/root/.profilearchivo. Crédito a la respuesta de
Petr Újezdský
6

Cuando debo hacerlo, lo sudo bashque me hace root pero con el entorno de JRobert. Mi .bashrc contiene:

# Prompt: 'jrobert@JRiMac ~' in green (red, if I'm root), '$' in white
if [[ $UID == 0 ]]; then
   export PS1="\[\e[1;31;40m\]\u@\h \W\[\e[0m\]\$ "
else
   export PS1="\[\e[32;40m\]\u@\h \W\[\e[0m\]\$ "
fi

, para hacer que el mensaje de raíz me devuelva la mirada en ROJO para enfatizar que ahora soy (más) vulnerable a la mía [elija uno: descaro, tontería, tendencias de dedo gordo, falta de voluntad para seguir un buen consejo, hasta ahora. - no dejes caer la pala].

JRobert
fuente
3

Estoy usando sudo -ipara cambiar a usuario root. En este caso, se lee la configuración de shell /var/root/.profile.

Matic
fuente
1

En general, desaconsejo suya que es peligroso, solo búscalo y sabrás por qué. En cuanto a su pregunta, la cuenta raíz funciona de la misma manera que su cuenta: genera ~ / .bash_profile y / o ~ / .bashrc. No sé cuál, pero mi intuición se inclina hacia ~ / .bashrc , por lo que es posible que desee intentar poner sus alias allí. Aquí hay una sugerencia:

su           # type password to get into root account
vi ~/.bashrc # put your aliases there
exit         # exit your root session
su           # try again to see if your aliases works
Hai Vu
fuente
0

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash ¡Solo esto funciona! Traté de poner mi export PS1=...a cualquiera de todos estos archivos anteriores. / etc / profile, / etc / bashrc /var/root/.bashrc /var/root/.profile /var/root/.bash_profile.

De todos estos archivos /bin/shshell, ¡no lee la información! (solo bash) (Mac OS El Capitan). Y tuve que cambiar shell para golpear.

También "su -"funciona también. (con este shell está leyendo el /var/root/.profilearchivo)

ivan11
fuente
1
No es necesario volver a confirmar las respuestas existentes ...
nohillside
-1

Una forma de resolver esto es ejecutar lo siguiente para cambiar el shell de root a bash:

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

Esta solución también ha solucionado mi problema.

Yang Wang
fuente
-2

si solo tiene un usuario 'predeterminado' y el usuario raíz, puede poner alias su="su -"el .bash_profile del usuario 'predeterminado' y obtendrá el efecto que desea. Funciona y sin cosas extravagantes.

David Costa
fuente