Do spisu tresci tematu 7
Rozpoczynanie pracy w systemie
Za umozliwienie uzytkownikowi wejscia do systemu odpowiedzialne sa 2 programy:
- Getty - jest to program otwierajacy linie terminalowa i czekajacy az ktos
wprowadzi identyfikator.
Jest on uruchamiany przez proces INIT na samym poczatku dzialania systemu.Algorytm dzialania programu "agetty" jest nieskomplikowany.
- Otworz terminal tak, aby byl przypisany do deskryptorow o numerach 0,1,2 (stdin,stdout,stderr)
- Ustaw parametry jego pracy (glownie dotyczy to linii terminalowych zwiazanych z portami szeregowymi)
- Pobierz identyfikator uzytkownika (get_logname(...)) Tu ciekawostka: Jesli uzytkownik wprowadzi swoj identyfikator duzymi literami, to ten program zmieni je na male (ale WSZYSTKIE litery musza byc wprowadzone jako wielkie)
- Ustawia koncowe parametry pracy terminala (na "normalne")
- Wywoluje program "login" podajac mu, jako parametr wczytany identyfikator uzytkownika
- Drugim programem jest "login" Jego algorytm jest nastepujacy:
- Sprawdz parametry wywolania (skladniowo,tzn. czy opcje ktore dostalismy pasuja do jakiegos wzorca)
- W petli nieskonczonej wykonuj co nastepuje:
- Jesli konieczne, pobierz identyfikator uzytkownika (czasami to nie jest potrzebne, bo mozemy dostac wlasciwy identyfikator uzytkownika jako parametr wywolania)
- Z pliku z haslami odczytaj pole odpowiadajace temu identyfikatorowi
- Ustaw identyfikator grupy i uzytkownika na 0 (czyli nadzorcy) (Nie wiem po co; przeciez powinnismy byc tak wlasnie wywolani ??)
- Jesli identyfikator nie jest identyfikatorem nadzorcy, sprawdz czy uzytkownik nie stracil prawa do zalogowania sie (np. za duzo nieudanych prob)
- Jesli identyfikator jest rowny identyfikatorowi nadzorcy to sprawdz czy uzytkownik loguje sie z "bezpiecznego" terminala (rootterm(...)) jesli nie, to wyswietl wlasciwy komunikat i przejdz do nastepnego obrotu petli
- Pobierz haslo
- Zakoduj je
- Porownaj to co wyszlo z odpowiednim rekordem w naszym polu pobranym z pliku z haslami .
- Wykonaj petelke ktorej liczba obrotow jest uzalezniona od ilosci nieudanych prob; ponadto jesli bylo wiecej niz 10 prob, zakoncz dzialanie.
- Jesli wszystko sie udalo to uaktualnij pliki zawierajace informacje o dokonanych wejsciach do systemu (utmp i wtmp), ustaw odpowiednio identyfikator grupy i uzytkownika i uruchom interpretator polecen uzytkownika
Ktos moglby sie spytac dlaczego uzywa sie tutaj 2 programow, zamiast jednego. Odpowiedz brzmi: Pierwszym z tych programow moze byc program otwierajacy konsole jako terminal, moze tez otwierac urzadzenie podlaczone do linii szeregowej; dzieki rozdzieleniu zajmowania terminali isprawdzania poprawnosci mamy wieksza elastycznosc.
Uwaga: Prosze zauwazyc, ze to co jest tutaj napisane jest to omowienie 2 zupelnie niezaleznych od jadra programow. Dlatego prosze sie nie zdziwic gdy wezmiece zrodla wlasnego getty i okaze sie, ze cos jest robione nieco inaczej niz tu jest napisane.
Tu jescze jedna uwaga: Jak zapewne to zostanie powiedziane w temacie 10 proces getty ma "atrybut" (?) respawn, gdy jest uruchamiany przez init. Dzieki temu nie musimy sie martwic o wznawianie tych procesow, gdy proba wejscia do systemu skonczy sie niepowodzeniem lub gdy uzytkownik skonczy prace - init zrobi to automatycznie.
Autorzy: Kamil Jonca i Piotr Suchodol