sourcing perfil bash para usuarios root

17

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

Cuando inicio sesión, lo hago como usuario adam . Los alias en /Users/adam/.bash_profile están cargados y puedo usarlos inmediatamente al arrancar un terminal. No uso un archivo .bashrc y eso está bien.

De vez en cuando, cambio a la raíz escribiendo su en el terminal y luego ingresando mi contraseña. La solicitud cambia y ahora soy usuario root. Mi pregunta es la siguiente: inmediatamente después de convertirse en root, ¿se puede cargar mi perfil de bash de raíz 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. He intentado configurar las siguientes permutaciones y luego cambiar a raíz a través del terminal, pero ninguna de ellas genera automáticamente el perfil / alias (nota, no tengo ninguna de las siguientes opciones configuradas al mismo tiempo, así que creo que no '' m confundiendo el sistema):

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

Opción 2:

  • en /etc/profile , inserte [ -r /etc/bashrc ] && . /etc/bashrc
  • pongo mis alias en /etc/bashrc

Opción 3:

  • en /etc/bash_profile , inserte [ -r /etc/bashrc ] && . /etc/bashrc
  • pongo mis alias en /etc/bashrc

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

Opción 5:

  • en /var/root/.profile , inserte [ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • pongo mis alias en /var/root/.bashrc

Opción 6:

  • en /var/root/.bash_profile , inserte [ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • pongo mis alias en /var/root/.bashrc

Tenga en cuenta que con cualquiera de los anteriores, si cambio a la raíz y luego escribo source root_profile_file , los alias se cargan, pero solo si realmente obtengo el archivo manualmente. Tal vez haya 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.

    
pregunta Adam Gold 14.03.2012 - 18:41

8 respuestas

13

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

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

Una solución simple para un problema simple:

su -

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

  

El comando su se usa para convertirse en otro usuario durante una sesión de inicio de sesión. Invocado sin un nombre de usuario, su predeterminado es convertirse en el superusuario. El argumento opcional - se puede usar 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 su en un shell de inicio de sesión, bash se comportará como usted espera, y automáticamente obtiene los archivos apropiados en "inicio de sesión", sin la necesidad de soluciones demasiado complejas.

    
respondido por el Jason Salaz 14.03.2012 - 19:33
9

En realidad, la raíz usa /bin/sh (antiguo shell de bourne), .bash_profile y .bashrc son leídos por bash.

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

Una forma de resolver esto es ejecutando

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

para cambiar el shell de root a bash .

    
respondido por el Florian Bidabe 29.06.2014 - 20:31
5

Cuando es absolutamente necesario, sudo bash lo que 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 reflejo de la raíz vuelva a mí en ROJO para enfatizar que ahora soy (más) vulnerable a la mía [elija uno: descaro, estupidez, tendencias con los dedos gruesos, falta de voluntad para seguir un buen consejo, arriba en la cala: no dejes caer la paleta].

    
respondido por el JRobert 26.03.2012 - 15:23
3

Estoy usando sudo -i para cambiar a usuario root. En este caso, la configuración del shell se lee desde /var/root/.profile .

    
respondido por el Matic 19.10.2013 - 12:55
1

En general, aconsejo contra su ya que es peligroso, solo búscalo y sabes por qué. En su pregunta, la cuenta raíz funciona de la misma manera que su cuenta: fuente ~ / .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
    
respondido por el Hai Vu 14.03.2012 - 19:28
0

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash ¡Sólo esto funciona! Intenté poner mi export PS1=... en cualquiera de los archivos anteriores. / etc / profile, / etc / bashrc /var/root/.bashrc /var/root/.profile /var/root/.bash_profile.

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

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

    
respondido por el ivan11 02.04.2016 - 21:51
-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.

    
respondido por el Yang Wang 20.07.2015 - 09:41
-2

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

    
respondido por el David Costa 20.09.2014 - 06:52

Lea otras preguntas en las etiquetas