zmiana powłoki z zsh na bash

17

Mój serwer został naruszony przez kogoś, kto używał powłoki Zsh. Czuję się bardziej komfortowo przy użyciu powłoki bash, ponieważ takie są ustawienia domyślne Ubuntu i OS X (dwa główne systemy operacyjne, których używam). Ale te pytania dotyczą serwera Ubuntu. Mam 4 strony działające na tym serwerze, używam byobu, używam tmux, używam ruby ​​/ ruby ​​na szynach, node.js, apache, kilka demonów. Jeśli zmienię bieżącą powłokę roota z zsh na bash, czy mogą wystąpić jakieś negatywne skutki uboczne, które mogą wynikać z tego przełączenia? Na przykład, czy procesy zostaną zabite, ponieważ ich proces nadrzędny (powłoka) został przełączony?

JohnMerlino
źródło
Pytasz o konsekwencje zmiany (której nie ma, używam teraz zsh i mogę przejść na bash kiedy tylko chcę) czy pytasz o to, jak skutecznie zmienić powłokę?
Braiam
@Braiam Niepokoi mnie konsekwencje zmiany. Jeśli nie będzie żadnych konsekwencji, zmienię się. Myślałem tylko, że powłoka jest procesem nadrzędnym dla niektórych z tych demonów, takich jak apache, a jeśli miałbym się z niej wyłączyć, to zabiłoby to proces apache. Ale chyba się mylę.
JohnMerlino,

Odpowiedzi:

10

Zmiana powłoki, via sudo chsh --shell=/bin/bash $USERzmieni pole powłoki w /etc/passwd. Ta wartość jest sprawdzana tylko podczas logowania, gdy system nie ma pojęcia, której powłoki użyć.

Nie ma to wpływu na uruchamianie procesów, niezależnie od tego, czy zostały uruchomione zsh, bash apacheczy evil_overlord's_programnie

waltinator
źródło
Czy powłoka nie jest procesem nadrzędnym innych uruchomionych w niej procesów, czy tylko terminal kontrolny (a nie powłoka) byłby uważany za proces nadrzędny?
JohnMerlino,
loginProgram działa w procesie, jak wszystko. Kiedy wpuszcza cię, tworzy kolejny proces z twoim UID itp. I uruchamia / bin / bash (z / etc / passwd). Powłoka bash odczytuje ze STDIN (skonfigurowane przez login) i rozwidla / wykona wbudowane polecenia, czeka na ich zakończenie i zapętla więcej poleceń. Pomysł „kontrolowania terminala” nie jest użyteczny w systemach Unix / Linux.
waltinator
26

Odpowiedź z przepełnienia stosu ( przejście z zsh na bash ):

Możesz po prostu użyć exec, aby zastąpić bieżącą powłokę nową powłoką:

Przełącz na bash:

exec bash

Przełącz na zsh:

exec zsh

Nie wpłynie to na nowe okna terminali ani nic, ale jest to wygodne.

Zamiana
źródło
nie działał. wciąż: echo $ SHELL / usr / bin / zsh
ses
8

Otwórz terminal i użyj następującego polecenia:

chsh -s $(which bash)
rɑːdʒɑ
źródło
Zakładam, że jest to odpowiednik chsh -s / bin / bash
JohnMerlino
2
which bashpodałby bezwzględną ścieżkę bash, więc byłoby tak samo, gdyby /bin/bashto bashbyło miejsce.
ryanjdillon
0

W systemie Mac OS Catalina

  1. Zmień na zsh:

    chsh -s /bin/zsh
  2. Zmień na bash:

    chsh -s /bin/bash
Mono
źródło