profil bash d'approvisionnement pour les utilisateurs root

17

Toutes mes excuses à l'avance si cette question va ennuyer tout le monde comme j'apprécie, elle a été posée de diverses manières plusieurs fois auparavant. Soyez assuré, j'ai lu les archives et j'ai essayé au moins certaines des suggestions, mais je ne parviens toujours pas à résoudre le problème (simple). J'espère que quelqu'un peut fournir une réponse et je peux me sentir convenablement humilié. Pour info, pour éviter toute ambiguïté, je vais utiliser des chemins absolus plutôt que relatifs.

Lorsque je me connecte, je le fais en tant qu'utilisateur adam. Les alias /Users/adam/.bash_profilesont chargés et je peux les utiliser immédiatement après avoir tiré un terminal. Je n'utilise pas de .bashrcfichier et ça va.

De temps en temps, je passe à root en tapant sudans le terminal puis en entrant mon mot de passe. L'invite change et je suis maintenant root. Ma question est la suivante: immédiatement après être devenu root, mon profil root bash peut-il être chargé sans que je doive source manuellement le fichier de profil? La raison pour laquelle je sais que cela ne se produit pas automatiquement est que j'ai les mêmes alias dans mon fichier de profil racine et dans mon /Users/adam/.bash_profile. Après être devenu utilisateur root, sauf si je tape source [root_profile_file], ils ne fonctionnent pas. J'ai essayé de configurer les permutations suivantes, puis de passer à root via le terminal, mais aucune ne source automatiquement le profil / les alias (remarque, je n'ai aucune des options ci-dessous configurées simultanément, donc je ne pense pas que je '' m confondre le système):

Option 1: mettre mes alias/etc/profile

Option 2:

  • dans /etc/profile, insérer[ -r /etc/bashrc ] && . /etc/bashrc
  • mettre mes alias /etc/bashrc

Option 3:

  • dans /etc/bash_profile, insérer[ -r /etc/bashrc ] && . /etc/bashrc
  • mettre mes alias /etc/bashrc

Option 4: mettre mes alias/var/root/.profile

Option 5:

  • dans /var/root/.profile, insérer[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • mettre mes alias /var/root/.bashrc

Option 6:

  • dans /var/root/.bash_profile, insérer[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • mettre mes alias /var/root/.bashrc

Veuillez noter, avec l'un des éléments ci-dessus, si je passe à root et que je tape source root_profile_fileles alias sont chargés, mais uniquement si je source effectivement le fichier manuellement. J'ai peut-être totalement mal compris le fonctionnement de bash et il n'est pas possible de générer automatiquement un fichier de profil après le passage à root, mais j'espère qu'il existe une solution simple. Merci d'avance à tous ceux qui ont pris le temps de lire ce message.

Adam Gold
la source

Réponses:

14

Le problème que vous rencontrez est que lorsque vous exécutez suseul, vous n'entrez pas de shell de «connexion». Cela signifie que votre environnement, votre répertoire de travail et tout sauf uid / gid restent les mêmes que ceux de l'utilisateur d'origine.

Les déclencheurs de connexion ne s'exécutent pas et vous rencontrez les problèmes que vous décrivez.

Une solution simple à un problème simple:

su -

Depuis la su(1)page de manuel:

La commande su est utilisée pour devenir un autre utilisateur lors d'une session de connexion. Appelé sans nom d'utilisateur, su par défaut devient le superutilisateur. L'argument facultatif - peut être utilisé pour fournir un environnement similaire à celui auquel l'utilisateur s'attendrait s'il se connectait directement.

Aussi:

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

Si vous êtes sudans un shell de connexion, bash se comportera comme vous l'attendez et source automatiquement les fichiers appropriés sur "login", sans avoir besoin de solutions de contournement excessives.

Jason Salaz
la source
1
Je vais cependant seconder les notes de Hai Vu: Vous ne devriez vraiment, vraiment, vraiment jamais sutravailler comme root. Il existe sudoà cet effet, ou vous pouvez travailler de telle manière que vous n'avez pas du tout besoin des privilèges root.
Jason Salaz
Merci à vous et à @Hai Vu. "su -" fait l'affaire et oui, complètement compris, root devrait généralement être évité.
Adam Gold
1
Je savais déjà ajouter le '-' après la commande su, mais je n'obtenais toujours pas mon .bash_profile pour l'utilisateur root. La réponse de Florian Bidabe et patrix ci-dessous à propos du changement de la coque racine de sh en bash a résolu le problème pour moi.
JaredC
9

En fait root utilise /bin/sh(vieux shell bourne), .bash_profileet .bashrcest lu par bash.

Cela devient difficile car ces fichiers peuvent utiliser des fonctionnalités non disponibles dans sh. Même si vous source .bashrcou source .bash_profile, vous aurez toujours des problèmes avec des fonctions complexes par exemple.

Une façon de résoudre ce problème consiste à exécuter

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

pour changer rootle shell de bash.

Florian Bidabe
la source
Root /bin/shutilise le /var/root/.profilefichier. Crédit à la réponse de
Petr Újezdský
6

Quand je le dois absolument, moi sudo bashqui me fait rooter mais avec l'environnement de JRobert. Mon .bashrc contient:

# 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

, pour que l'éblouissement de la racine me revienne en rouge pour souligner que je suis maintenant (plus) vulnérable à la mienne - ne laissez pas tomber la pagaie].

JRobert
la source
3

J'utilise sudo -ipour passer à l'utilisateur root. Dans ce cas, la configuration du shell est lue /var/root/.profile.

Matic
la source
1

En général, je déconseille sucar c'est dangereux, cherchez-le et vous savez pourquoi. Sur votre question, le compte root fonctionne de la même manière que votre compte: il source ~ / .bash_profile et / ou ~ / .bashrc. Je ne sais pas lequel, mais mon intuition penche vers ~ / .bashrc , donc vous voudrez peut-être y mettre vos alias. Voici une suggestion:

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
la source
0

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash Seulement cela fonctionne! J'ai essayé de mettre mon export PS1=...à l'un de tous ces fichiers ci-dessus. / etc / profile, / etc / bashrc /var/root/.bashrc /var/root/.profile /var/root/.bash_profile.

De tous ces fichiers /bin/shshell, ne lit pas les informations! (uniquement bash) (Mac OS El Capitan). Et j'ai dû changer de shell en bash.

Fonctionne également "su -"aussi. (avec ce shell lit le /var/root/.profilefichier)

ivan11
la source
1
Il n'est pas nécessaire de reconfirmer les réponses existantes ...
nohillside
-1

Une façon de résoudre ce problème consiste à exécuter ce qui suit pour basculer le shell de root sur bash:

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

Cette solution a également résolu mon problème.

Yang Wang
la source
-2

si vous n'avez qu'un seul utilisateur «par défaut» et l'utilisateur root, vous pouvez mettre alias su="su -"sur .bash_profile de l'utilisateur «par défaut» et vous obtenez l'effet que vous voulez. Fonctionne et sans choses hacky.

David Costa
la source