pozyskiwanie profilu bash dla użytkowników root

17

Z góry przepraszam, jeśli to pytanie zirytuje wszystkich, jak doceniam, wiele razy zadawano je na różne sposoby. Zapewniam, że przeczytałem archiwa i wypróbowałem przynajmniej niektóre z sugestii, ale nadal nie mogę rozwiązać (prostego) problemu. Mam nadzieję, że ktoś może udzielić odpowiedzi i czuję się odpowiednio upokorzony. Do waszej informacji, aby uniknąć wszelkich dwuznaczności, zamierzam używać ścieżek bezwzględnych, a nie względnych.

Kiedy się loguję, robię to jako użytkownik adam. Aliasy w /Users/adam/.bash_profilesą ładowane i mogę ich użyć natychmiast po wyciągnięciu terminala. Nie używam .bashrcpliku i jest w porządku.

Od czasu do czasu przełączam się na rootowanie, wpisując susię w terminal, a następnie wprowadzając hasło. Monit zmienia się i jestem teraz użytkownikiem root. Moje pytanie brzmi: czy zaraz po uzyskaniu uprawnień roota mogę załadować mój profil root bash bez konieczności ręcznego pobierania pliku profilu? Wiem, że nie dzieje się to automatycznie, ponieważ mam te same aliasy w moim pliku profilu głównego i moim /Users/adam/.bash_profile. Po zostaniu użytkownikiem root, chyba że wpisuję source [root_profile_file], nie działają. Próbowałem skonfigurować następujące permutacje, a następnie przełączyć się na rootowanie za pośrednictwem terminala, ale żadna z nich nie automatycznie pobiera profilu / aliasów (uwaga: nie mam skonfigurowanych żadnej z poniższych opcji jednocześnie, więc nie sądzę, że „ mylący system):

Opcja 1: wstaw moje aliasy/etc/profile

Opcja 2:

  • w /etc/profile, wstaw[ -r /etc/bashrc ] && . /etc/bashrc
  • wstaw moje aliasy /etc/bashrc

Opcja 3:

  • w /etc/bash_profile, wstaw[ -r /etc/bashrc ] && . /etc/bashrc
  • wstaw moje aliasy /etc/bashrc

Opcja 4: wstaw moje aliasy/var/root/.profile

Opcja 5:

  • w /var/root/.profile, wstaw[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • wstaw moje aliasy /var/root/.bashrc

Opcja 6:

  • w /var/root/.bash_profile, wstaw[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • wstaw moje aliasy /var/root/.bashrc

Zauważ, że w którymkolwiek z powyższych, jeśli przełączę się na root, a następnie source root_profile_filenapiszę, aliasy są ładowane, ale tylko wtedy, gdy rzeczywiście ręcznie źródłem pliku. Być może całkowicie źle zrozumiałem, jak działa bash i nie można automatycznie pobrać pliku profilu po przejściu na root, ale mam nadzieję, że istnieje proste rozwiązanie. Z góry dziękuję wszystkim, którzy poświęcili czas na przeczytanie tej wiadomości.

Adam Gold
źródło

Odpowiedzi:

14

Problem, z którym się spotykasz polega na tym, że kiedy uruchamiasz susię sam, nie wpisujesz powłoki „login”. Oznacza to, że twoje środowisko, katalog roboczy i wszystko oprócz uid / gid pozostają takie same jak oryginalnego użytkownika.

Wyzwalacze logowania nie są wykonywane i występują problemy, które opisujesz.

Proste rozwiązanie prostego problemu:

su -

Ze strony podręcznika su(1):

Polecenie su służy do zostania innym użytkownikiem podczas sesji logowania. Wywołany bez nazwy użytkownika, su domyślnie staje się superużytkownikiem. Opcjonalny argument - może być użyty do zapewnienia środowiska podobnego do tego, czego użytkownik oczekiwałby, gdyby użytkownik zalogował się bezpośrednio.

Również:

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

Jeśli suprzejdziesz do powłoki logowania, bash będzie się zachowywał tak, jak się spodziewasz, i automatycznie pobierze odpowiednie pliki podczas logowania, bez potrzeby zbyt hackerskich obejść.

Jason Salaz
źródło
1
Będę jednak popierał uwagi Hai Vu: Naprawdę, naprawdę, naprawdę nigdy sunie powinieneś, ani nie pracować jako root. Ma to sudona celu lub możesz pracować w taki sposób, że wcale nie potrzebujesz uprawnień roota.
Jason Salaz
Dziękuję zarówno Tobie, jak i @Hai Vu. „su -” robi lewę i tak, w pełni zrozumiały, root należy zasadniczo unikać.
Adam Gold
1
Wiedziałem już, że dodałem „-” po komendzie su, ale nadal nie otrzymywałem mojego .bash_profile dla użytkownika root. Poniższa odpowiedź Floriana Bidabe i Patrix na temat zmiany powłoki roota z sh na bash naprawiła dla mnie problem.
JaredC
9

Właściwie używa roota /bin/sh(stara powłoka Bourne'a) .bash_profilei .bashrcsą odczytywane przez bash.

Staje się to trudne, ponieważ te pliki mogą korzystać z funkcji niedostępnych w sh. Nawet jeśli ty source .bashrclub source .bash_profilenadal będziesz mieć problem ze złożonymi funkcjami, na przykład.

Jednym ze sposobów rozwiązania tego jest uruchomienie

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

zmienić rootpowłokę na bash.

Florian Bidabe
źródło
Root /bin/shużywa /var/root/.profilepliku.
Podziękowania
6

Kiedy absolutnie muszę, sudo bashco sprawia, że ​​jestem rootem, ale ze środowiskiem JRobert. Mój .bashrc zawiera:

# 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

, aby przywrócić mi rdzawe spojrzenie w RED, aby podkreślić, że jestem teraz (bardziej) podatny na własne [wybierz jeden: zuchwałość, głupota, skłonności do grubych palców, niechęć do udzielania dobrych rad, w górę s.creek - nie upuszczaj wiosła].

JRobert
źródło
3

Używam, sudo -iaby przejść do użytkownika root. W takim przypadku konfiguracja powłoki jest odczytywana /var/root/.profile.

Matic
źródło
1

Ogólnie odradzam, suponieważ jest to niebezpieczne, po prostu poszukaj go, a wiesz, dlaczego. Jeśli chodzi o twoje pytanie, konto root działa w taki sam sposób, jak konto: źródło ~ / .bash_profile i / lub ~ / .bashrc. Nie wiem, który z nich, ale moja intuicja skłania się w kierunku ~ / .bashrc , więc możesz spróbować umieścić tam swoje aliasy. Oto sugestia:

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
źródło
0

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash Tylko to działa! Próbowałem umieścić mój export PS1=...plik w jednym z powyższych plików. / etc / profile, / etc / bashrc /var/root/.bashrc /var/root/.profile /var/root/.bash_profile.

Ze wszystkich tych plików /bin/shpowłoki nie odczytuje informacji! (tylko bash) (Mac OS El Capitan). I musiałem zmienić shell na bash.

Również "su -"działa zbyt. (z tą powłoką czyta /var/root/.profileplik)

ivan11
źródło
1
Nie ma potrzeby potwierdzania istniejących odpowiedzi ...
nohillside
-1

Jednym ze sposobów rozwiązania tego jest uruchomienie następującego polecenia, aby przełączyć powłokę roota na bash:

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

To rozwiązanie rozwiązało również mój problem.

Yang Wang
źródło
-2

jeśli masz tylko jednego „domyślnego” użytkownika i użytkownika root, możesz umieścić alias su="su -"plik .bash_profile „domyślnego” użytkownika i uzyskasz pożądany efekt. Działa i bez hacków.

David Costa
źródło