Jakie kroki przechodzi system podczas obsługi połączenia SSH?

9

Jakie kroki przechodzi system podczas obsługi połączenia SSH?

  1. Próbujemy zalogować się przez ssh
  2. sshd uruchamia moduł pam i pam, aby nas uwierzytelnić
  3. W zależności od konfiguracji pam musimy podać nazwę użytkownika i hasło (pam pam passwdi shadowpliki)
  4. Kontrole PAM hosts.allow/deny, /etc/shellsi inne rzeczy
  5. Jeśli wszystko pójdzie dobrze, jesteśmy zalogowani
  6. ???
  7. Shell jest uruchomiony

Moje pytanie brzmi: jaki mechanizm jest odpowiedzialny za sprawdzenie, która powłoka jest przypisana do użytkownika w jego passwdpliku (w kroku 6)? Czy to sam pam, jakiś konkretny moduł pam sshd, czy coś innego? Wiem, że mogę zastąpić passwdplik (w celu sprawdzenia nazwy użytkownika i hasła), pisząc moduł pam, ale jak mogę zamienić passwdplik dla wpisu powłoki?

pbm
źródło

Odpowiedzi:

8

O ile mi wiadomo, PAM nie określa powłoki użytkownika, należy to do aplikacji. Moduły sesji PAM wykonują ogólne czynności i kontrole, które należy wykonać przy każdym logowaniu przy użyciu tej konkretnej usługi. Jeśli aplikacja chce następnie uruchomić powłokę, może to zrobić za darmo i zwykle szuka powłoki w bazie danych użytkowników.

Zakładając, że twoje pytanie dotyczy OpenSSH , właśnie to robi: po uwierzytelnieniu użytkownika i zakończeniu sesji PAM (jeśli skonfigurowano do używania PAM¹), serwer ssh wyszukuje powłokę w bazie danych użytkowników (bezpośrednio, nie przez bibliotekę PAM).

Baza danych użytkowników nie jest ograniczona do /usr/passwdznajomych i. W systemie Linux (który, jak zakładam, używasz, odkąd wspomniałeś shadow), baza danych użytkowników zależy od passwdustawienia w /etc/nsswitch.conf. W konfiguracjach z wieloma komputerami powszechnymi dodatkami do lokalnej bazy danych są NIS i LDAP . Jeśli chcesz użyć powłoki, która nie jest tą, w której się znajdujesz /etc/passwd, może to być konfiguracja (chociaż byłoby to trochę dziwne, a ludzie mogą zaoferować lepsze sugestie, jeśli powiesz nam, co próbujesz osiągnąć).

Jeśli chcesz mieć użytkowników bez pełnego dostępu do powłoki, naturalnym rozwiązaniem jest /etc/passwdwprowadzenie ograniczonej powłoki - być może rssh, aby zezwolić tylko na kilka aplikacji typu kopiowanie plików, takich jak scp, rsync i cvs. Możesz także użyć poleceń wymuszonych w ~/.ssh/authorized_keyspliku użytkownika .

Jeśli chcesz zobaczyć ślad działania serwera ssh, uruchom demona jako ssh -ddd. Możesz także uzyskać widok klienta ssh -vvv, chociaż tutaj widok serwera jest tym, co najbardziej Cię interesuje.

¹ OpenSSH używa PAM tylko wtedy, gdy jest skonfigurowany z obsługą PAM, a UsePAMdyrektywa jest ustawiona na yesin sshd_config. Nawet gdy używa PAM, oprócz PAM oferuje inne metody uwierzytelniania; w szczególności uwierzytelnianie za pomocą klucza publicznego nie odbywa się za pośrednictwem PAM.

Gilles „SO- przestań być zły”
źródło
Chcę zezwolić użytkownikom mojej aplikacji na logowanie się do powłoki jako zwykły użytkownik bez tworzenia konta w systemie. Dane użytkowników (nazwa użytkownika, hasło i powłoka) będą przechowywane w bazie danych sqlite. Pierwszym krokiem jest moduł pam sqlite, który uwierzytelnia użytkowników ponownie db. Drugim krokiem jest zapewnienie powłoki odczytanej z bazy danych. Myślę więc, że można to osiągnąć, pisząc odpowiedni moduł nis. Dziękuję za odpowiedź ...
pbm
@pbm: Nie sądzę, że chcesz nis, a raczej db(albo moduł niestandardowy).
Gilles „SO- przestań być zły”
to literówka .. Miałem na myśli "pisząc odpowiedni (niestandardowy) moduł nss" ...
pbm