¿Qué pasos sigue el sistema cuando maneja una conexión SSH?

9

¿Qué pasos sigue el sistema cuando maneja una conexión SSH?

  1. Intentamos iniciar sesión a través de ssh
  2. sshd inicia el módulo pam y pam para autenticarnos
  3. Dependiendo de la configuración de pam, necesitamos proporcionar nombre de usuario y contraseña (comprobaciones de pam passwdy shadowarchivos)
  4. pam cheques para hosts.allow/deny, /etc/shellsy otras cosas
  5. Si todo va bien, estamos conectados
  6. ???
  7. Shell se inicia

Entonces, mi pregunta es ¿qué mecanismo es responsable de verificar qué shell está asignado al usuario en su passwdarchivo (en el paso 6)? ¿Es pam en sí mismo, algún módulo de pam específico sshdu otra cosa? Sé que puedo reemplazar el passwdarchivo (para verificar el nombre de usuario y la contraseña) escribiendo un módulo pam, pero ¿cómo puedo reemplazar el passwdarchivo para la entrada del shell?

pbm
fuente

Respuestas:

8

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/passwdamigos. En Linux (que supongo que está utilizando, ya que mencionas shadow), lo que constituye la base de datos de usuario está determinada por la passwdconfiguració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/passwdpara 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_keysarchivo 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 UsePAMdirectiva está configurada yesen 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.

Gilles 'SO- deja de ser malvado'
fuente
Quiero permitir que los usuarios de mi aplicación inicien sesión en Shell como usuarios normales sin crear una cuenta en el sistema. Los datos de los usuarios (nombre de usuario, contraseña y shell) se almacenarán en sqlite db. El primer paso es el módulo sqlite pam que autentica a los usuarios contra db. El segundo paso es proporcionar shell leído desde la base de datos. Así que creo que podría lograrse escribiendo el módulo nis adecuado. Gracias por la respuesta ...
pbm
@pbm: No creo que quieras nis, más bien db(o quizás un módulo personalizado).
Gilles 'SO- deja de ser malvado'
que de errata .. Yo quería decir "escribiendo adecuada (personalizado) NSS módulo" ...
PBM