¿Cómo permitir ssh al usuario root solo desde la red local?

38

Instalé Google-Authenticator en una máquina CentOS 6.5 y configuré ciertos usuarios para proporcionar OTP.

Durante la edición /etc/ssh/sshd_config, vi una directiva " PermitRootLogin" que se comenta por defecto.

Me gustaría establecer " PermitRootLogin no", pero aún así poder enviar ssh a la máquina como root solo desde la red local.

¿Es eso posible?

Itai Ganot
fuente
55
Nunca hagas esto. SSH como sus usuarios, luego use sudo para elevar los permisos. Haga esto para que deje un rastro de papel, y así sabrá qué cuenta se vio comprometida.
SnakeDoc
3
@SnakeDoc: Esa es una escuela de pensamiento, pero no está clara y yo diría lo contrario. sudo es una enorme superficie de ataque compleja y no es algo que quisiera tener instalado. SSH pubkey auth es una superficie de ataque mucho más pequeña. Puede registrarse, pero el registro no es muy útil cuando el usuario (root) puede editar o eliminar registros, lo cual es siempre el caso, a menos que inicie sesión en un almacenamiento externo de solo agregado.
R ..
1
@R .. Si configura correctamente los sudoers, utilizando el principio del mínimo privilegio, estos problemas que describió no son en gran medida un problema. Ningún usuario debería poder sudo - suingresar y entrar en la raíz, o hacer nada que sus usuarios no necesiten (en sudoers, usa la lista blanca para los comandos). Si necesita root, debe estar físicamente en la consola, es decir. La raíz sobre SSH nunca debe permitirse ... claves o no.
SnakeDoc
1
@SnakeDoc: Estás equivocado. Sudo tiene sus propias superficies de ataque complejas y una superficie de ataque compleja fundamental que es inherente a ser un binario suid, en forma de todo el estado que se hereda a través de execve. En algunos casos, ni siquiera se necesita un error en el programa suid (suid); Los errores en la infraestructura subyacente, como el vinculador dinámico (por ejemplo, CVE-2010-3856) pueden ser suficientes.
R ..
1
@R .. Asume que siempre sabrá si se filtró una clave. Esa es una gran suposición. Además, una vez dentro, su atacante tiene privilegios de root. Todavía es mejor enviarlos a través de una cuenta no privilegiada y hacer que tengan que elevarse a root. De esta manera, tiene una clave que debe filtrarse, una frase de contraseña para romper y luego una contraseña de cuenta de usuario normal para romper. Y si el atacante supera todo eso ... no puede hacer nada porque este usuario está configurado bajo sudoers con una capacidad muy limitada ... ¿Ves el beneficio ahora? No permita el inicio de sesión raíz directo durante ssh ... período. Es buena higiene
SnakeDoc

Respuestas:

54

Use el Matchparámetro de configuración en /etc/ssh/sshd_config:

# general config
PermitRootLogin no 

# the following overrides the general config when conditions are met. 
Match Address  192.168.0.*
    PermitRootLogin yes

Ver man sshd_config

Sven
fuente
¿Por qué no pensé en eso? Gracias amigo
Itai Ganot
8
También puede restringir el origen de las claves de autenticación en ~root/.ssh/authorized_keys. Prefije la clave con from="192.168.0.0/24 ".
BillThor
9
Lo cambiaría para permitir también direcciones locales de enlace IPv6. La forma en que las direcciones locales de enlace funcionan en IPv6 las hace muy robustas para las redes mal configuradas. Lo que significa que si necesita ssh para corregir una configuración incorrecta de la red, es posible que usar una dirección local de enlace IPv6 sea la única opción que queda.
kasperd
FYI Si además usa la directiva AllowUser , también debe hacerlo (y de forma contraria a la intuición)AllowUser root
Robert Riedl
14

El Match addressmétodo ya se mencionó, pero también puede restringir los usuarios (o grupos) que pueden iniciar sesión en un sistema. Por ejemplo, para limitar los inicios de sesión al usuario itai(desde cualquier lugar) y root(desde una red específica), use:

AllowUsers itai [email protected].*

Esto evita que todos los demás usuarios (como apache) inicien sesión a través de SSH.

Consulte también la AllowUserspalabra clave en el manual sshd_config (5) .

Lekensteyn
fuente
44
Prefiero AllowGroupsagregar a todos los usuarios que deberían poder iniciar sesión con SSH a un grupo específico. Supongo que es una cuestión de gustos, pero eso parece menos edición de sshd_config (lo que se traduce en un menor riesgo de equivocar y bloquear a todos).
un CVn
1
@ MichaelKjörling Además, AllowGroups significa que no necesita permisos de edición para sshd_config si su equipo se expande o reduce. Esto incluso podría permitir que más tipos gerenciales o pasantes lo hagan.
Nzall
Puntos positivos, tenga en cuenta que puede combinar opciones, tener AllowUsers itai [email protected].*y AllowGroups ssh-usersno provocará un bloqueo accidentalmente en caso de que el interno
borre