
Si los usuarios de UNIX acceden a los servidores a través de SSH y solo queremos permitir inicios de sesión con clave pública, ¿hay otros elementos que deban agregarse a esta lista y que deban preocuparme?
- Permitir
pubkey login
elsshd_config
archivo en el servidor. - Consideraciones para una contraseña predeterminada, como"!"o"*"
Respuesta1
Hubiera sido bueno decir qué servidor SSH solicita y qué (conjunto de) sistemas Unix.
!
y *
no son contraseñas cuando las ve en /etc/passwd
o /etc/shadow
(úselas getent
para leer esas entradas).
Son marcadores que denotan si la cuenta tiene contraseña o no y si está bloqueada o no.
Esta es una distinción importante, dependiendo de la configuración y versión de PAM y la distribución,si estás en Linux. Si está bloqueado, es menos probable que se le permita iniciar sesión, pero por otro lado es posible que funcione de inmediato en sistemas más antiguos (al menos esa es mi experiencia).
Puede usar (como superusuario) passwd -l <name>
para bloquear una cuenta ( !
) o passwd -d <name>
eliminar su contraseña ( *
) y también puede combinar ambas, lo que simplemente garantizaría que se elimine cualquier contraseña existente: passwd -dl <name>
.
No lo dices, pero asumiendo OpenSSH, las directivas relevantes en /etc/ssh/sshd_config
(la ruta puede variar) son:
HostKey ...
El servidor debe tener una clave de host o RSA2 o DSA (y las implementaciones más modernas también agregan dos implementaciones de curva elíptica). RSA1 ha sido abandonado durante mucho tiempo por todas las implementaciones de servidores SSH comunes.
Entonces:
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
También recomendaría siempre configurar /etc/sudoers
y no permitir completamente root
el inicio de sesión a través de SSH ( PermitRootLogin no
). Sin embargo, esta configuración más segura puede tener una pequeña desventaja: el disco está lleno y su sudo
miembro sin privilegios no puede escribir en el disco, pero root
lo haría (debido al espacio reservado). Entonces YMMV.
Dos consejos más
Asignar un grupo para limitar el acceso SSH
Cree un grupo ssh-users
(o el nombre que desee) y establezca la directiva respectiva en sshd_config
. Asegúrese de que root
sea o no miembro de ese grupo de acuerdo con la política que eligió según la información anterior.
AllowGroups ssh-users
Asignar un grupo para limitar a los usuariossoloAcceso SFTP
A sshd_config
continuación, nos aseguraremos de que los usuarios no puedan escapar /home
y de que determinadas funciones estén desactivadas para ellos.
Match group sftponly
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
PasswordAuthentication no
Conclusión
Entonces sí, PAM tendría que agregarse como consideración si estuviera en Linux.
También si se debe permitir el reenvío de agentes o dejarlo en manos de los usuarios.
Y por último, pero no menos importante, si se les permitirá reenviar puertos o conexiones X11. Especialmente los puertos pueden ser indeseables, ya que permiten que un usuario utilice su servidor como proxy.
La Match
directiva también le permite limitar a los usuarios con respecto al lugar desde donde se conectan (un firewall también puede hacer eso o los contenedores TCP).
¿Quiere que sus usuarios puedan administrar las claves o quiere abstraerlas y hacer que el acceso directo authorized_keys
no esté disponible para ellos?
Ciertamente hay más aspectos, pero en su mayoría tienen un nivel de detalle más detallado y, como tales, variaciones de los puntos antes mencionados.
Respuesta2
Lo que el usuario quiera que sea, considerando las políticas sobre la complejidad de las contraseñas. Si el único acceso es vía SSH y PasswordAuthentication
está no
ensshd_config
, entonces no importa cuál sea la contraseña. Tenga en cuenta también que las entradas enshadow
son contraseñas cifradas, por lo que los valores de !
y *
no soncontraseñas- pero cadenas que no son valores cifrados válidos, lo que impide el inicio de sesión basado en contraseña.
Respuesta3
Suponiendo que estás ejecutando algo similar a RHEL/CentOS con OpenSSH, estas son las cosas que normalmente hago cuando no tengo contraseña:
- Configure sshd_config para aceptar solo la autenticación de clave pública (
PubkeyAuthentication yes, PasswordAuthentication no, ChallengeResponseAuthentication no, UsePAM no
) - Configurar todos los usuarios existentes para que tengan una contraseña no válida (
chpasswd -e 'pubkey!!' <username>
) - Eliminar la caducidad de la contraseña de todos los usuarios existentes (
chage -M -1 <username>
) - Si usa sudo, asegúrese de que todas las especificaciones del usuario estén marcadas como NOPASSWD (p. ej.
%wheel ALL=(ALL) NOPASSWD: ALL
) - Asegúrese de que su proceso de creación de usuarios mantenga estos requisitos (p. ej
useradd -p 'pubkey!!' -K MAX_PASS_DAYS=-1 <username>
.)
Antes de bloquear el acceso con contraseña, asegúrese doblemente de poder autenticarse correctamente mediante la clave pública. Asegúrese de que su partición /home no esté en un montaje de red (o cualquier otra cosa que no siempre esté disponible). Hay pocas cosas peores que perder el acceso a su servidor porque no puede acceder a su clave pública. Si el sistema no tiene cabeza, asegúrese de tener alguna forma de obtener rápidamente acceso directo a la consola en caso de emergencia (KVM, consola virtual, carrito de emergencia, etc.).
Dicho todo esto, consideraría poner una contraseña en la cuenta de cualquier persona con acceso completo a sudo y configurar sudoers para que les soliciten una contraseña. Si todo lo demás está configurado como se indica arriba, aún no podrán iniciar sesión en el servidor con esta contraseña, pero le brindará un poco de protección adicional contra alguien que se sienta en su símbolo del sistema y hace "cosas malas (tm)". .
Respuesta4
Si se trata de una máquina UNIX (HP UX) y no Linux, deberá agregarla rcommand
a su pam.conf en la cuenta sshd.
sshd account sufficient /usr/lib/security/libpam_ldap.1 rcommand
De lo contrario, recibirá una solicitud de contraseña que no se activará cuando intente iniciar sesión mediante ssh en la máquina.