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.