Kiedyś mój przyjaciel (który jest doświadczonym użytkownikiem Uniksa / Linuksa) powiedział mi, że ustawienie powłoki roota na coś innego niż sh (tj. Bash lub zsh) może stwarzać problemy, ponieważ jakiś skrypt może założyć, że powłoka jest sh i robi coś dziwnego .
Myślę jednak, że Ubuntu ma domyślną powłokę root ustawioną na bash, a Gentoo również używa bash. Czy ktoś może obalić mit?
bash
. Uruchomiłem się w trybie pojedynczego użytkownika, aby to naprawić, ale działało to tylko dlatego, że/bin/sh
wciąż było powiązane zFBSD
rozwidleniembourne
i niebash
.zsh
i jakoś/usr
jest uszkodzony, będę miał problem? ale mój system ma/bin/sh
wskazując/bin/bash
ibash
sobie, dlaczego nie będziesh
mieć wpływ?zsh
nie powinno być,/usr/bin/
jeśli jest źle zainstalowane. wszystkie muszle powinny znajdować się w/bin
/bin
ale zachowuje niektóre pliki/usr/share
. Wyraźnie stwierdziłem również, że problem występuje podczas logowania podczas uruchamiania (gdy niektóre usługi ulegają awarii).Nie powinno to stanowić problemu.
Pliki skryptów powłoki jawnie kodują powłokę, z którą są wykonywane. Jest zakodowany w pierwszym wierszu lub inne programy lub skrypty wykonują określoną powłokę i podają skrypt powłoki jako argument.
Jedyny program, jaki mogę wymyślić, który korzysta z informacji powłoki konta użytkownika (oprócz procesu logowania) to procmail. Naprawdę zabawne, jeśli użytkownik ustawił jako shell / bin / false na serwerze pocztowym ... Ale zwykle nie uruchamiasz procmaila jako root.
Kolejnym kandydatem byłyby linie w crontabie roota. Nie wiem jaka jest polityka crond, której powłoki użyć.
źródło
Skrypty napisane dla powłoki bourne przez większość czasu będą działać bez problemów przeciwko BASH, ZSH lub $ foo.
W wielu systemach Linux nie jest zainstalowany żaden oryginalny sh, zamiast tego jest to często dowiązanie symboliczne do / bin / bash.
Jeśli niektóre skrypty po prostu „zakładają”, że powłoka jest jawnie sh, należy je przepisać. Istnieje mechanizm shebang, aby wybrać interpretera, którego potrzebuje twój skrypt. Jeśli to sh, skrypt powinien zawierać
#!/bin/sh
jako pierwszy wiersz.Domyślne ustawienie powłoki nie powinno być odpowiednie w tym kontekście.
źródło
Nie sądzę, aby zmiana powłoki roota spowodowała jakiś problem. Wydaje mi się, że pamiętam niektóre jednorożce (może niektóre warianty BSD?) Mające tcsh jako domyślną powłokę dla roota.
Loginy root są zresztą rzadkie. Zwykle logowałbyś się na własne konto, a następnie su lub sudo w celu rootowania.
Liczy się to, że powłoka roota powinna mieć jak najmniej zależności, aby była użyteczna w kontekście reparacji systemu. Na przykład dobrym pomysłem jest posiadanie statycznie połączonej powłoki roota; niektóre dystrybucje dostarczają statycznie połączoną wersję bash lub zsh lub sash (powłoka z wieloma wbudowanymi narzędziami). Nie jest to jednak tak ważne, jeśli system można łatwo uruchomić z ratunkowej płyty CD lub napędu USB.
źródło
Powłoka logowania użytkownika nie wpływa na proces rozruchu. Możesz ustawić tę powłokę na cokolwiek zechcesz. Nie wszystkie systemy mają bash i działają dobrze. Również jeśli jest
/usr/bin/zsh
źle zainstalowany, wszystkie powłoki systemowe powinny być w nim/bin
. Nie powinieneś jednak zmieniać/bin/sh
wskazań na coś innego niż domyślny (chyba że wiesz, co robisz), ponieważ wiele skryptów ma to,#!/bin/sh
co zwykle wskazuje na bash, kiedy powinny,#!/bin/bash
ponieważ powinny używać bashism i innych zachowań, które nie będą pracować nadzsh
lubdash
.źródło
bash
izsh
są w/bin
Mam bash jako domyślną powłokę dla roota. Przez jakiś czas używałem Zsh , ale potem wróciłem do bash . Jakiej powłoki używasz, nie ma większego znaczenia.
To tylko problem, jeśli więcej niż jedna osoba ma dostęp do konta root. W takim przypadku możesz wybrać „wspólny mianownik”, którym zwykle jest bash, ponieważ jest to najczęściej używana powłoka.
źródło
W odniesieniu do Solaris / illumos wspomina Mini-FAQ o Solaris Root Shell
Tak, jeśli używasz Solaris lub illumos, możesz używać powłok innych niż
sh
.źródło