Sourcing-Bash-Profil für Root-Benutzer

17

Entschuldigung im Voraus, wenn diese Frage jeden nervt, wie ich es schätze, wurde sie schon oft auf verschiedene Arten gestellt. Seien Sie versichert, ich habe die Archive gelesen und habe zumindest einige der Vorschläge ausprobiert, kann das (einfache) Problem jedoch immer noch nicht lösen. Hoffentlich kann jemand eine Antwort geben und ich kann mich demütig fühlen. Zur Vermeidung von Mehrdeutigkeiten verwende ich eher absolute als relative Pfade.

Wenn ich mich anmelde, tue ich dies als Benutzer adam. Die Aliase in /Users/adam/.bash_profilesind geladen und ich kann sie sofort nach dem Hochziehen eines Terminals verwenden. Ich benutze keine .bashrcDatei und das ist in Ordnung.

Hin und wieder wechsle ich zu root, indem ich suin das Terminal tippe und dann mein Passwort eingebe. Die Eingabeaufforderung ändert sich und ich bin jetzt Root-Benutzer. Meine Frage lautet: Kann mein Root-Bash-Profil sofort nach dem Root-Status geladen werden, ohne dass ich die Profildatei manuell erstellen muss? Der Grund, warum ich weiß, dass dies nicht automatisch geschieht, ist, dass ich dieselben Aliase in meiner Stammprofildatei und in meiner habe /Users/adam/.bash_profile. Nachdem ich Root-Benutzer geworden bin source [root_profile_file], funktionieren sie nur , wenn ich sie eingebe. Ich habe versucht, die folgenden Permutationen einzurichten und dann über das Terminal auf root zu wechseln, aber keine von ihnen gibt das Profil / die Aliase automatisch aus (beachten Sie, dass ich keine der folgenden Optionen gleichzeitig eingerichtet habe, also glaube ich nicht, dass ich m das System verwirren):

Option 1: Geben Sie meine Aliase ein/etc/profile

Option 2:

  • in /etc/profileeinfügen[ -r /etc/bashrc ] && . /etc/bashrc
  • lege meine Aliase ein /etc/bashrc

Option 3:

  • in /etc/bash_profileeinfügen[ -r /etc/bashrc ] && . /etc/bashrc
  • lege meine Aliase ein /etc/bashrc

Option 4: Gib meine Aliase ein/var/root/.profile

Option 5:

  • in /var/root/.profileeinfügen[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • lege meine Aliase ein /var/root/.bashrc

Option 6:

  • in /var/root/.bash_profileeinfügen[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • lege meine Aliase ein /var/root/.bashrc

Bitte beachten Sie, dass bei jedem der oben genannten source root_profile_fileFälle die Aliase geladen werden , wenn ich zu root wechsle und dann eingebe, aber nur, wenn ich die Datei tatsächlich manuell als Quelle habe. Vielleicht habe ich völlig falsch verstanden, wie bash funktioniert, und es ist nicht möglich, eine Profildatei nach dem Wechsel zu root automatisch zu erstellen, aber ich hoffe, dass es eine einfache Lösung gibt. Vielen Dank im Voraus an alle, die sich die Zeit genommen haben, diese Nachricht zu lesen.

Adam Gold
quelle

Antworten:

14

Das Problem, auf das Sie stoßen, besteht darin, dass Sie, wenn Sie suvon selbst ausgeführt werden, keine 'Login'-Shell aufrufen. Dies bedeutet, dass Ihre Umgebung, Ihr Arbeitsverzeichnis und alles außer uid / gid dem ursprünglichen Benutzer entsprechen.

Login-Trigger werden nicht ausgeführt und es treten die von Ihnen beschriebenen Probleme auf.

Eine einfache Lösung für ein einfaches Problem:

su -

Von der su(1)Manpage:

Der Befehl su wird verwendet, um während einer Anmeldesitzung ein anderer Benutzer zu werden. Wird su ohne einen Benutzernamen aufgerufen, wird es standardmäßig zum Superuser. Das optionale Argument - kann verwendet werden, um eine Umgebung bereitzustellen, die der vom Benutzer erwarteten Umgebung ähnelt, in der sich der Benutzer direkt angemeldet hat.

Ebenfalls:

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

Wenn Sie sich suin eine Login-Shell einloggen, verhält sich bash wie erwartet und generiert die entsprechenden Dateien automatisch unter "login", ohne dass übermäßig hackige Workarounds erforderlich sind.

Jason Salaz
quelle
1
Ich werde jedoch Hai Vus Notizen weiterverfolgen: Du solltest wirklich, wirklich, wirklich nie so arbeiten sunoch root. Es gibt sudofür diesen Zweck, oder Sie können so arbeiten, dass Sie überhaupt keine Root-Rechte benötigen.
Jason Salaz
Vielen Dank an Sie und @Hai Vu. "su -" macht den Trick und ja, völlig verstanden, Root sollte generell vermieden werden.
Adam Gold
1
Ich wusste bereits, dass das '-' nach dem su-Befehl hinzugefügt werden muss, bekam aber immer noch nicht mein .bash_profile für den Root-Benutzer. Die Antwort von Florian Bidabe und Patrix über das Ändern der Root-Shell von sh auf bash hat das Problem für mich behoben.
JaredC
9

Tatsächlich verwendet root /bin/sh(alte Borowski-Shell) .bash_profileund .bashrcwird von bash gelesen.

Es wird schwierig, da diese Dateien möglicherweise Funktionen verwenden, die in nicht verfügbar sind sh. Selbst wenn Sie source .bashrcoder source .bash_profile, werden Sie zum Beispiel immer noch Probleme mit komplexen Funktionen haben.

Ein Weg, dies zu lösen, ist zu rennen

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

die rootSchale wechseln zu bash.

Florian Bidabe
quelle
Root /bin/shverwendet /var/root/.profileDatei. Dank an @ Matics Antwort
Petr Újezdský
6

Wenn ich unbedingt muss, sudo bashmacht mich das root aber mit JRoberts Umgebung. Mein .bashrc enthält:

# 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

, um die Root-Eingabeaufforderung auf ROT zurückblicken zu lassen, um zu betonen, dass ich jetzt (mehr) anfällig für meine eigenen bin - Lassen Sie das Paddel nicht fallen].

JRobert
quelle
3

Ich benutze sudo -i, um zum Root-Benutzer zu wechseln. In diesem Fall wird die Shell-Konfiguration gelesen /var/root/.profile.

Matic
quelle
1

Im Allgemeinen rate ich davon ab, suda es gefährlich ist. Suchen Sie einfach danach und Sie wissen warum. Bei Ihrer Frage funktioniert das Root-Konto genauso wie Ihr Konto: Es bezieht ~ / .bash_profile und / oder ~ / .bashrc. Ich weiß nicht, welche, aber meine Intuition ist auf ~ / .bashrc ausgerichtet . Vielleicht möchten Sie versuchen, Ihre Aliase dort abzulegen . Hier ist ein Vorschlag:

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
quelle
0

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash Nur das funktioniert! Ich habe versucht, meine export PS1=...Datei in eine der oben genannten Dateien zu kopieren. / etc / profile, / etc / bashrc /var/root/.bashrc /var/root/.profile /var/root/.bash_profile.

Aus all diesen Dateien /bin/shShell, liest keine Informationen! (nur Bash) (Mac OS El Capitan). Und ich musste die Schale wechseln, um zu schlagen.

Funktioniert auch "su -". (mit dieser Shell wird die /var/root/.profileDatei gelesen )

ivan11
quelle
1
Bestehende Antworten müssen nicht erneut bestätigt werden ...
nohillside
-1

Eine Möglichkeit, dies zu lösen, besteht darin, Folgendes auszuführen, um die Shell von root auf bash umzustellen:

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

Diese Lösung hat auch mein Problem behoben.

Yang Wang
quelle
-2

Wenn Sie nur einen "Standard" -Benutzer und den Root-Benutzer haben, können Sie das alias su="su -".bash_profile des "Standard" -Benutzers anlegen und erhalten den gewünschten Effekt. Funktioniert und ohne hackige Sachen.

David Costa
quelle