Hasta donde sé, PAM no determina el shell del usuario, esto se deja a la aplicación. Los módulos de sesión de PAM realizan acciones genéricas y verificaciones que deben realizarse en cada inicio de sesión con ese servicio en particular. Si la aplicación quiere iniciar un shell, es libre de hacerlo, y normalmente buscará el shell en la base de datos del usuario.
Asumiendo que su pregunta es sobre OpenSSH , eso es exactamente lo que hace: una vez que el usuario se autentica y se ha completado la sesión de PAM (si está configurado para usar PAM¹), el servidor ssh busca el shell en la base de datos de usuario (directamente, no a través de la biblioteca PAM).
La base de datos de usuarios no está limitada a /usr/passwd
amigos. En Linux (que supongo que está utilizando, ya que mencionas shadow
), lo que constituye la base de datos de usuario está determinada por la passwd
configuración en /etc/nsswitch.conf
. En configuraciones de varias computadoras, las adiciones comunes a la base de datos local son NIS y LDAP . Si desea utilizar un shell que no es el indicado /etc/passwd
, esto puede ser qué configurar (aunque sería un poco extraño, y tal vez la gente pueda ofrecer mejores sugerencias si nos dice lo que está tratando de lograr).
Si desea tener usuarios sin acceso completo al shell, la solución natural es cambiar /etc/passwd
para colocar un shell restringido, tal vez rssh para permitir solo unas pocas aplicaciones de tipo de copia de archivos como scp, rsync y cvs. También puede usar comandos forzados en el ~/.ssh/authorized_keys
archivo del usuario .
Si desea ver un rastro de lo que está haciendo el servidor ssh, inicie el demonio como ssh -ddd
. También puede obtener la vista del cliente ssh -vvv
, aunque aquí la vista del servidor es lo que más le interesará.
¹
OpenSSH solo usa PAM si está configurado con soporte PAM y la UsePAM
directiva está configurada yes
en sshd_config
. Incluso cuando usa PAM, ofrece otros métodos de autenticación además de PAM; en particular, la autenticación de clave pública no pasa por PAM.
nis
, más biendb
(o quizás un módulo personalizado).