Co to są powłoki logowania i bez logowania?

78

Mówi się, że ustawienia powłoki niezalogowanej do .bashrcpliku i ustawienia powłoki logowania do .profilepliku.

Co tak naprawdę rozumie się przez powłoki do logowania i bez logowania?

Proszę wyjaśnić bez użycia żargonu technicznego, o ile to możliwe.

KSIĄŻĘ
źródło

Odpowiedzi:

83

Po prostu:

  • Jeśli otworzysz powłokę lub terminal (lub przełączysz się na jeden) i poprosi Cię o zalogowanie się (Nazwa użytkownika? Hasło?) Zanim wyświetli się monit, jest to powłoka logowania.
  • Jeśli tak nie jest (jak gnome-terminal ) i pozwala ci od razu go użyć, jest to powłoka niezalogowana.

Jeśli jesteś zwykłym użytkownikiem Ubuntu Desktop, jedyną powłoką logowania jest ... Twój pulpit (wpisujesz hasło, prawda;)? Cóż, technicznie rzecz biorąc, jest to powłoka logowania, która uruchamia GUI, ale wchodzi w żargon. I tak, wczyta ustawienia.profile

Jedyny raz, kiedy Ty (normalny użytkownik) prawdopodobnie zobaczysz powłokę logowania, która wygląda jak powłoka logowania, masz problem z pulpitem i przełączasz się na terminal wirtualny za pomocą skrótu Ctrl+ Alt+ F1.


Inne ogólne przypadki posiadania powłoki logowania obejmują:

  • zdalny dostęp do komputera za pośrednictwem ssh(lub połączenie lokalne ssh localhost)
  • symulowanie początkowej powłoki logowania za pomocą bash -l(lub sh -l)
  • symulowanie początkowej rootpowłoki logowania za pomocąsudo -i
    • lub dla innego użytkownikasudo -u username -iroot
  • uwierzytelnianie jako inny rootużytkownik niebędący użytkownikiem za pomocą (i ich hasła)su - username
  • za pomocą sudo loginpolecenia, aby przełączyć użytkownika
ish
źródło
Jeśli uruchomię moje środowisko Eclipse IDE z terminala, otworzy się ono zgodnie z oczekiwaniami, ale jeśli spróbuję je otworzyć, klikając ikonę Eclipse, nie będzie w stanie rozpoznać lokalizacji Java (chyba że w pliku .profile ustawiono PATH dla Java). Oznacza to, że kliknięcie ikony Eclipse wymaga powłoki logowania, dlaczego?
DUKE
2
@DUKE, Nie, oznacza to, że zmienne środowiskowe muszą być ustawione inaczej, gdy używasz pulpitu / GUI w porównaniu do prawdziwego systemu konsoli tylko z wiersza poleceń. Wprowadź swoją ŚCIEŻKĘ itp. W ~/.pam_environment(tylko zmienne, nie ma tam poleceń bash!), Wyloguj się, zaloguj i obserwuj wszystko magicznie pojawiające się na pulpicie, a także w terminalu gnome!
ish
1
Logowanie przez ssh nie wywołuje powłoki logowania. Nie ładuje się /etc/profile, /etc/profile.dlub ~/.profile.
xuhdev
Zobacz to pytanie .
xuhdev,
@xuhdev Logowanie przez ssh wywołuje powłokę logowania i ładuje / etc / profile, /etc/profile.d i ~ / .bash_profile.
MichaelZ
9

Nie sądzę, że poprawnej odpowiedzi można udzielić bez „technicznego żargonu”. Ponieważ to pytanie pojawia się jako pierwsze w Google w odpowiedzi na zapytanie „co to jest powłoka logowania”, poniżej podaję bardziej poprawną odpowiedź:

Powłoka logowania to po prostu powłoka, o której mówiono, że jest powłoką logowania. To nie nie znaczy powłoki, które pojawia się po zalogowaniu, choć zwykle aplikacja, która loguje się mówi skorupę uruchamia się powłoki logowania. Istnieją następujące sposoby, aby powiedzieć powłoce, że powinna to być nazwa logowania:

  1. Uruchamianie powłoki z argumentem -llub --loginprzy założeniu, że go zna (nie znam żadnych powłok, które nie wiedzą -l, ale --loginsą obsługiwane tylko przez kilka powłok).
  2. Uruchamianie powłoki z argv[0]ustawionym na -{some_string}(tj. Z HYPHEN-MINUS dodanym do zwykłego argv[0]lub do innego łańcucha). Oto, co robią ssh i su: su po prostu uruchamia plik wykonywalny -sujako argv[0](cześć wszystkim, którzy myślą, że argv[0]ma to coś wspólnego z aktualnie uruchomioną nazwą pliku wykonywalnego), ssh uruchamia zsh, -zshgdy użytkownik ustawił /bin/zshswoją powłokę.

Logiczność powłoki nie ma absolutnie nic wspólnego z tym, że ktoś prosi cię o hasło lub wykonuje inną procedurę uwierzytelniania. Niektóre programy, takie jak ssh lub login (lub niektóre emulatory terminali, takie jak urxvt) uruchamiają powłoki jako te, argv[0]które używają logowania, zaczynając od HYPHEN-MINUS. Niektóre takie jak su lub sudo (lub zsh: patrz -modyfikator polecenia wstępnego opisany w rozdziale PRECOMMAND MODIFERY w man zshmisc) nie robią tego domyślnie, ale można to powiedzieć. Niektóre mają jedyną opcję, aby powiedzieć shellowi, aby był loginem, używając swojego argumentu (tj. bash -l): Ssh z argumentem polecenia (który wyraźnie mówi ssh, co uruchomić na zdalnym końcu).

Zasadniczo lepiej najpierw zapoznać się z dokumentacją programu używanego do wywoływania powłoki, aby ustalić, czy powłoka będzie loginem, a następnie wykonać kilka testów w celu ustalenia, czy aplikacja uruchomi powłokę logowania (np. Poprzez dodanie echodo .profile).

ZyX
źródło
Interesuje mnie druga opcja: jak mogę zmienić argv [0] przed (lub po) wywołaniem bash? Czy można to zrobić z wiersza poleceń?
VeryHardCoder
@ VeryHardCoder Zależy to od aplikacji używanej do uruchomienia polecenia. W kodzie C to odbywa się poprzez dostarczenie bezpośrednio argv[0]do jednej z exec*funkcji, naturalne i nieuchronne: ty zawsze dostarczać zarówno argv[0] i ścieżkę do polecenia faktycznie uruchomić przy użyciu exec*funkcji, nawet jeśli nie zawsze chcą argv[0]być różny od biegu poleceń. Inne języki zapewniają własne sposoby. W szczególności bash pozwala na użycie exec -a new_argv0 bash, ale to oczywiście zastąpi aktualnie działającą powłokę tym, co exec(exec -a -zsh zsh)
edytujesz
Ok, rozumiem! W rzeczywistości można to zrobić nawet w prostszy sposób: (exec -l bash) ...
VeryHardCoder
1
Jaka jest funkcjonalna różnica między nimi? Czy to po prostu flaga boolowska?
Alexey,
@Alexey Główną różnicą funkcjonalną jest zestaw plików konfiguracyjnych używanych podczas uruchamiania. $0, a być może ustawiono także coś innego (zmienną, ustawienie itp.), aby logiczność powłoki mogła zostać wykryta w pliku konfiguracyjnym, ale kto tak naprawdę to wykrywa, aby to miało znaczenie? To wszystko co wiem.
ZyX