Cómo ver todas las SS_ authorized_keys para un servidor Unix

10

¿Cómo puedo ver todos los clientes SSH autorizados desde un servidor Unix?

Sé que cat ~/.ssh/authorized_keys muestra las claves autorizadas si se inició sesión desde la raíz. ¿Pueden otros usuarios establecer sus propias claves autorizadas también? En cuyo caso, ¿cómo vería todas las claves autorizadas del sistema?

    
pregunta user2761030 17.04.2015 - 16:37
fuente

3 respuestas

8

Para responder a sus preguntas en orden:

  1. Puede ver todas las claves autorizadas ejecutando el siguiente script con privilegios de root.

    #!/bin/bash
    for X in $(cut -f6 -d ':' /etc/passwd |sort |uniq); do
        if [ -s "${X}/.ssh/authorized_keys" ]; then
            echo "### ${X}: "
            cat "${X}/.ssh/authorized_keys"
            echo ""
        fi
    done
    
  2. Cualquier usuario válido puede crear un archivo $HOME/.ssh/authorized_keys y agregarle cualquier número de claves públicas. Alguien con la clave privada correspondiente podrá iniciar sesión como ese usuario en particular. El proceso que sigue sshd es como el siguiente. Cuando entra una nueva conexión, sshd le pide al cliente el nombre de usuario. Si el nombre de usuario existe en /etc/passwd , sshd lee el nombre del directorio de inicio del usuario desde el sexto campo en /etc/passwd . Luego verifica si .ssh/authorized_keys existe en el directorio de inicio de ese usuario y si los permisos están correctamente configurados tanto en el directorio .ssh como en el archivo authorized_keys. Si se cumplen esas condiciones, sshd intentará autenticar la clave privada del cliente contra la clave pública almacenada en $HOME/.ssh/authorized_keys . Si el cliente posee la clave privada correspondiente, sshd le permitirá acceder.

  3. Puedes usar el script anterior.

S.L. Barth hace un excelente punto sobre el acceso de la raíz. Se considera un riesgo permitir el acceso de root a través de ssh. La práctica generalmente aceptada es crear una cuenta de usuario, otorgarle acceso de root con sudo o una herramienta similar, y deshabilitar los inicios de sesión de root a través de ssh agregando la siguiente línea a /etc/ssh/sshd_config y reiniciando sshd.

PermitRootLogin no

Las posibilidades son casi el 100% de que si su máquina está en Internet, la " Hail Mary Cloud " llamará a tu puerta. Para Linux, iptables y sshd donde se permiten inicios de sesión basados en contraseña, es probable que desee instalar y configurar algo como fail2ban para es más difícil para los atacantes forzar a su máquina de forma bruta.

Y, dado que ya estamos hablando de claves ssh, y como se publicó hoy, es probable que desee añada UseRoaming no a la sección Host * en su /etc/ssh/ssh_config

    
respondido por el Liczyrzepa 14.01.2016 - 22:03
fuente
2

El comando cat ~/.ssh/authorized_keys le muestra el archivo authorized_keys del usuario que ha iniciado sesión actualmente. Cuando inicie sesión como root, o use sudo , esto le dará el archivo authorized_keys del usuario root.

El archivo authorized_keys, al menos en Ubuntu, generalmente es propiedad del usuario. Así que el usuario actualmente conectado (root o no) puede verlo.
El directorio .ssh está en el directorio de inicio del usuario, y generalmente es propiedad de ellos con privilegios de lectura, escritura y ejecución; así que normalmente un usuario debería poder agregar su propio archivo authorized_keys.

Para ver todas las claves autorizadas, puede crear un script que recorra todos los directorios principales y / root, e imprima el archivo .ssh / authorized_keys. Obviamente, este script requerirá privilegios de sudo.

Como nota al margen, en Ubuntu, la cuenta raíz suele estar deshabilitada, porque es un objetivo favorito de los atacantes. Es posible que no contenga un archivo authorized_keys por este motivo.

    
respondido por el S.L. Barth 17.04.2015 - 16:48
fuente
0

OMI, es una buena idea comprobar también el archivo ~/.ssh/authorized_keys2 . De enlace :

  

Para compatibilidad con versiones anteriores, ~ / .ssh / authorized_keys2 se seguirá utilizando para   La autenticación y las claves de host aún se leen desde los host_2 conocidos.

Código mejorado de Liczyrzepa:

#!/bin/bash
for X in $(cut -f6 -d ':' /etc/passwd |sort |uniq); do
  for suffix in "" "2"; do
    if [ -s "${X}/.ssh/authorized_keys$suffix" ]; then
      echo "### ${X}: "
      cat "${X}/.ssh/authorized_keys$suffix"
      echo ""
     fi;
   done;
done
    
respondido por el coffeemakr 17.02.2017 - 18:02
fuente

Lea otras preguntas en las etiquetas