zmiana domyślnej powłoki w Linuksie
przegląd
interaktywna powłoka odczytuje polecenia z danych wejściowych użytkownika na terminalu tty. Powłokę interaktywną nazywamy po pomyślnym zalogowaniu użytkownika powłoką domyślną lub powłoką logowania.
w tym samouczku omówimy, jak zmienić domyślną powłokę użytkownika.
Wprowadzenie do polecenia chsh
polecenie chsh jest dostarczane wraz z pakietem util-linux — standardowym pakietem dostępnym we wszystkich dystrybucjach Linuksa.
używając polecenia chsh z opcją-l możemy wyświetlić listę powłok zainstalowanych w bieżącym systemie:
$ chsh -l/bin/sh/bin/bash/bin/zsh/usr/bin/zsh/usr/bin/git-shell
bardziej powszechnym zastosowaniem polecenia chsh jest zmiana domyślnej powłoki użytkownika.
omówimy, jak to zrobić w późniejszych sekcjach.
Jakiej Powłoki Obecnie Używam?
po pomyślnym zalogowaniu, będziemy z naszą domyślną powłoką.
zanim porozmawiamy o zmianie domyślnej powłoki, najpierw poznajmy kilka sposobów, aby dowiedzieć się, której powłoki aktualnie używamy.
jednym ze sposobów jest odczytanie środowiska systemowego $SHELL, które przechowuje aktualnie działające polecenie powłoki:
kent$ echo $SHELL/bin/zsh
jak pokazuje powyższy przykład, uruchomioną powłoką mojego obecnego użytkownika logowania jest Zsh.
alternatywnie, możemy poznać bieżącą powłokę, badając jej informacje o procesie. Linux przechowuje PID uruchomionej powłoki w zmiennej specjalnej$$:
kent$ echo $3492
w powyższym przykładzie proces o PID 153492 będzie bieżącym procesem powłoki. Możemy uzyskać szczegółowe informacje o procesie za pomocą polecenia ps z opcją-p:
kent$ ps -p $$ PID TTY TIME CMD 153492 pts/2 00:00:00 zsh
wyjście mówi nam, że Zsh jest naszą obecną powłoką.
zmiana domyślnej powłoki Bieżącego użytkownika
jeśli chcemy zmienić domyślną powłokę bieżącego użytkownika logującego się, możemy wykonać polecenie chsh z opcją-s <NEW_SHELL>.
zmieńmy domyślną powłokę bieżącego użytkownika na Bash:
kent$ chsh -s /bin/bashChanging shell for kent.Password: Shell changed.
warto wspomnieć, że po pomyślnej zmianie domyślnej powłoki, aktualnie działająca powłoka nie zostanie zmieniona. Na przykład ustawiliśmy Bash jako domyślną powłokę użytkownika kent, ale bieżącą powłoką nadal jest Zsh:
kent$ ps -p $$ PID TTY TIME CMD 153492 pts/2 00:00:00 zsh
nowo zmieniona domyślna powłoka zacznie działać przy następnym logowaniu się u użytkownika kent.
domyślne polecenie powłoki jest niezbędne do logowania użytkowników. Jeśli polecenie jest nieprawidłowe, będziemy mieć problemy z zalogowaniem się u użytkownika.
dlatego, gdy zmieniamy domyślną powłokę, polecenie chsh zweryfikuje, czy dane polecenie powłoki jest poprawne.
zobaczmy, co się stanie, jeśli przekażemy nieprawidłową ścieżkę do polecenia chsh:
kent$ chsh -s /bin/bashhhhChanging shell for kent.Password: chsh: "/bin/bashhhh" does not exist
dowiedzieliśmy się, że polecenie chsh może wyświetlić listę aktualnie zainstalowanych powłok w systemie.
polecenie chsh odmówi zmiany domyślnej powłoki, jeśli dana powłoka nie znajduje się na liście poprawnych powłok systemowych:
kent$ chsh -s /usr/bin/catChanging shell for kent.Password: chsh: "/usr/bin/cat" is not listed in /etc/shells.Use chsh -l to see list.
w powyższym przykładzie próbowaliśmy ustawić komendę / usr / bin / cat jako domyślną powłokę użytkownika kent.
ścieżka polecenia cat jest prawidłowa. Nie ma go jednak na liście powłok. W związku z tym, chsh przerwał z odpowiednim komunikatem o błędzie i podpowiedzią.
zmiana domyślnej powłoki innych użytkowników
do tej pory nauczyliśmy się używać polecenia chsh do zmiany domyślnej powłoki bieżącego użytkownika logującego się.
możemy również zmienić domyślną powłokę innych użytkowników za pomocą polecenia chsh, ale potrzebujemy uprawnień roota, aby to zrobić.
składnia jest dość prosta:
root# chsh -s NEW_SHELL USERNAME
tym razem logujemy się jako użytkownik root i zmieniamy domyślną powłokę użytkownika na/bin / sh:
root# chsh -s /bin/sh kent Changing shell for kent.Shell changed.
teraz zalogujmy się ponownie z użytkownikiem kent i sprawdźmy, czy domyślna powłoka została zmieniona pomyślnie:
sh-5.1$ echo $SHELL/bin/sh
jak wynika z powyższego, domyślną powłoką użytkownika jest teraz /bin/sh.
edytując plik /etc/passwd
nauczyliśmy się używać polecenia chsh do zmiany domyślnej powłoki użytkownika. Alternatywnie możemy to zrobić edytując plik / etc / passwd.
w Linuksie plik / etc / passwd jest zwykłym plikiem tekstowym. Przechowuje informacje o koncie użytkownika, które są wymagane podczas logowania użytkownika:
-rw-r--r-- 1 root root 2.1K Mar 12 10:27 /etc/passwd
jeśli przyjrzymy się jego flagom uprawnień, zobaczymy, że wszyscy użytkownicy mogą je odczytać, ale tylko użytkownik root może pisać do /etc / passwd.
sprawdźmy zawartość w pliku / etc / passwd:
kent$ cat /etc/passwdroot:x:0:0:root:/root:/bin/zshbin:x:1:1:bin:/bin:/bin/false...kent:x:1000:1000::/home/kent:/bin/zshguest:x:1001:1001::/home/guest:/bin/zsh...cups:x:209:209:cups helper user:/:/sbin/nologin...
każda linia w pliku rejestruje informacje o koncie użytkownika. Pola w rekordzie są oddzielone dwukropkami.
rekord zawiera dane konta użytkownika, takie jak nazwa użytkownika, UID, GID i katalog domowy, między innymi. Ostatnie pole wskazuje domyślną powłokę użytkownika.
jeśli zmienimy domyślne pole powłoki w pliku /etc/passwd, zacznie działać, gdy użytkownik następnym razem zaloguje się do systemu.
jedną z zalet edycji pliku/etc / passwd jest to, że możemy zmienić domyślną powłokę wielu użytkowników w jednym ujęciu. Czasami może to być całkiem wygodne.
należy jednak pamiętać, że po zapisaniu pliku / etc / passwd nie nastąpi Walidacja ani weryfikacja zmienionych powłok domyślnych.
dlatego musimy upewnić się, że podaliśmy poprawne ścieżki poleceń powłoki. W przeciwnym razie użytkownik będzie miał problem z zalogowaniem się do systemu następnym razem.
podsumowanie
w tym krótkim artykule nauczyliśmy się, jak zmienić domyślną powłokę użytkownika za pomocą przykładów.
polecenie chsh jest dość proste do wykonania. Co więcej, może zweryfikować, czy dana powłoka jest poprawna w systemie.
jeśli chcemy zmienić domyślną powłokę użytkownika innego niż bieżący login, musimy wykonać polecenie chsh z uprawnieniem użytkownika root.
co więcej, jeśli możemy zalogować się jako użytkownik root, możemy również zmienić domyślną powłokę wielu użytkowników, edytując bezpośrednio plik /etc/passwd.