ssh / scp del servidor al servidor - establecer permisos (no root)

1

Tengo acceso como usuario regular (no como root) a dos servidores. Se puede acceder a Servidor A a través de ssh con un nombre de usuario y contraseña, solo se puede acceder a Servidor B utilizando una tarjeta de acceso y un pin. Necesito configurar una secuencia de comandos cron en Servidor B para que los datos puedan transferirse desde Servidor B a Servidor A a intervalos regulares para su procesamiento ( el proceso se realiza en Servidor A y en el momento en que hago la transferencia manualmente).

La pregunta es: ¿Cuál es la forma más segura de hacer esto? Si configuro un ID ssh desde Servidor B a Servidor A , ¿cómo puedo asegurarme de que si alguien obtuviera acceso a Servidor B no podría simplemente ingresar a Servidor A y piratear Servidor A ¿también? Idealmente, necesitaría restringir el acceso de Servidor B a Servidor A a una sola carpeta; esto hubiera sido avanzado hasta el final si tuviera permisos de root pero solo soy un usuario regular.

¿Alguna idea? Gracias

    
pregunta john 16.09.2015 - 20:02
fuente

2 respuestas

1

Si su servidor B tiene fusibles y sshfs instalados y ambos servidores son permanentes (fix ip, 24/7) su mejor opción es montar el directorio del otro servidor y copiar archivos a través de ese canal .

En serverB:

$ mkdir $HOME/serverA
$ sshfs [email protected]:restricteddirectory serverA

a partir de ahora, sus scripts en serverB pueden copiar archivos en $ HOME / serverA. Esta es una solución razonablemente segura. Dado que el canal se configura manualmente, no se pueden robar contraseñas ni archivos de clave no protegidos. Además, el posible atacante no podrá escapar del directorio restringido en ServerA. Se alcanzan todos los objetivos. La parte trasera es que tiene que volver a montar el directorio cada vez que (uno) el servidor se reinicie. En el entorno empresarial, esto podría ser un problema menor, y puede configurar un script / cron para verificar la conexión y enviarle un correo si el otro lado no está disponible (para que pueda iniciar sesión y solucionar el problema).

Si el servidor tiene una IP dinámica o está fuera de línea con frecuencia , este enfoque no funcionará. El uso de scripts automatizados para acceder al servidorA requerirá que almacene su contraseña o clave de acceso no protegida en el servidorA, por lo tanto, no hay forma de evitar que un atacante exitoso del servidor B llegue al servidor A con su nivel de privilegio. (Sin embargo, esto no significa en absoluto que (s) él pueda "hackear el Servidor A". Usted es un usuario sin privilegios. Pero su cuenta se verá comprometida con seguridad).

De hecho, podrías intentar resolver problemas con la pantalla y ssh-agent para evitar el almacenamiento de credenciales, pero enfrentarás uno de los problemas antes, si el servidor B se reinicia, debes iniciar sesión y arreglar las cosas.

La única solución verdaderamente segura que me viene a la mente en este caso es usar un almacenamiento intermedio. Configure una cuenta en un tercer lugar (servidor C), restrinja el acceso a la dirección IP del servidor A y del servidor B y puede hacer un proxy de todos los datos fácilmente. En el servidor A, sus scripts de extracción obtendrán los datos. Debido a que nunca accede al servidor A desde el servidor B, su cuenta no puede ser hackeada incluso si el servidor B se compromete silenciosamente en el nivel raíz.

    
respondido por el goteguru 17.09.2015 - 00:07
fuente
1
  

¿Cuál es la forma más segura de hacer esto? Si configuro   un ID ssh del servidor B al servidor A, ¿cómo puedo asegurarme de que si   alguien que tuviera acceso al Servidor B no solo podía ssh en   Servidor A y hack Server A también? Idealmente necesitaría restringir   acceso desde el Servidor B al Servidor A a una sola carpeta; esto tendría   sido streoightforward si tuviera root

Puede usar rsync con una clave SSH de bloqueo para restringir el acceso del Servidor B al Servidor A. Recibo las instrucciones de está escrito .

  1. Cree un par de claves SSH en el servidor B
  2. Agregue la clave pública SSH del servidor B a ~ / .ssh / authorised_key en el servidor A
  3. Ejecute su comando rsync en el servidor B para asegurarse de que copia el archivo al servidor A (si no sabe cómo ejecutar rsync, lea esta guía ).

Refuerzo de Rsync sobre SSH

Autorice solo su comando rsync para ejecutarse a través de la clave SSH

Edite ~/.ssh/authorized_key y agregue su comando rsync exacto que está ejecutando en el servidor B

command="[YOUR RSYNC COMMAND WITH ALL OPTIONS]" ssh-rsa AAAAB3NzaC1y[...]

Deshabilitar el reenvío de puertos, pty y reenvío de agentes

Edite ~/.ssh/authorized_key con lo siguiente

command="[YOUR RSYNC COMMAND WITH ALL OPTIONS]",no-pty,no-agent-forwarding,no-port-forwarding ssh-rsa AAAAB3NzaC1y[...]

Ahora, si intenta realizar SSH desde el Servidor B al Servidor A, no autorizará ningún acceso.

Nota: Supongo que puede SSH al servidor A usando la clave SSH. De lo contrario, puede hacer este proceso de otra manera: SSH desde el Servidor A al Servidor B usando una clave SSH y extraiga los archivos usando rsync.

    
respondido por el Dr. mattle 17.09.2015 - 00:38
fuente

Lea otras preguntas en las etiquetas