Dado el acceso SSH, ¿qué debo hacer para proteger un servidor y monitorear las acciones (peligrosas) de los usuarios?

13

Context:

  • Pequeñas empresas, principalmente una casa de software para aplicaciones web, pero también algunas aplicaciones de escritorio.
  • Muchos colaboradores externos, por lo tanto, una variedad de usuarios externos con acceso a los servidores.
  • Servidor físico único, con Linux y Xen como solución de virtualización: cada máquina virtual tiene usos específicos y acceso controlado. Los usuarios externos pueden acceder a dos de ellos
  • Los servidores (virtuales) brindan una variedad de servicios: pila LAMP, correo electrónico, DNS, etc. Esta pregunta se refiere a mis inquietudes con respecto al acceso de usuarios locales
  • Los usuarios pueden SSH en dos de las máquinas virtuales

Requisitos

  • Proporcione a los usuarios acceso a herramientas de desarrollo comunes, tanto para la web (PHP, Ruby on Rails, etc.) como para aplicaciones independientes (gcc, g ++, etc.); Esto incluye no solo compiladores y similares, sino también editores. En este momento, tienen acceso completo a la shell.
  • Los usuarios deben poder utilizar el control de origen en el servidor: svn y git
  • Algunos tienen acceso a las bases de datos MySQL

Pregunta

¿Qué pasos debo seguir para:

  1. Proporcione un shell completo a los usuarios, si es posible, o una solución equivalente que cumpla con los requisitos anteriores de manera segura
  2. Automatizar el monitoreo de actividades peligrosas donde sea posible (como en las notificaciones de sudo / su)
  3. Minimice los efectos si un usuario obtiene un exploit de escalamiento de privilegios de 0 días antes de que alguien lo parche en el servidor, ¿es esto posible?
pregunta tomeduarte 12.01.2011 - 20:52
fuente

3 respuestas

9

Si los usuarios deben tener SSH en su servidor, una herramienta útil para proteger la raíz de su servidor es chroot : esto le permitirá darles la funcionalidad aparente de la raíz del servidor, sin darles realmente las joyas de la corona.

De forma alternativa, al utilizar máquinas virtuales de todos modos, ¿por qué no les proporciona instancias de servidor virtual?

Ambos de estos te permitirán ejecutar herramientas de monitoreo (como tripwire ) para verificar si hay cambios en los archivos. El registro se debe realizar fuera del entorno de los usuarios.

Con las entradas en / etc / sudoers puede limitar las actividades que los usuarios pueden realizar bajo su.

    
respondido por el Rory Alsop 12.01.2011 - 22:04
fuente
7

También puede restringir a los usuarios el uso de bash 4 (eliminar otras shells) y grabar todos los comandos y enviar copias a un servidor de registro independiente.

Bash: History to Syslog ( enlace )

Esto puede ayudarlo a auditar las actividades de los usuarios y, lo que es más importante, realizar análisis forenses cuando alguien hace algo malo. También haría la divulgación legal completa: todas las actividades se registran y se auditan, los infractores serán procesados, etc.

La implementación de OSSEC (Sistema de detección de intrusos basado en host) también ayudaría; Tiene muchas reglas incorporadas para detectar y alertar sobre cosas malas. OSSEC puede alertarte sobre toda la actividad de sudo / su.

    
respondido por el Tate Hansen 13.01.2011 - 03:07
fuente
6

No te olvides de la tunelización, el reenvío de puertos. Por defecto, AllowTcpForwarding es yes en el archivo sshd_config y permite a los usuarios reenviar puertos arbitrarios. Puede causar muchos más problemas de los que puede adivinar. (Esta no es una respuesta ideal al estilo de pila de intercambio, pero no pude encontrar una mejor respuesta, es difícil resumir el reenvío de puertos con unas pocas oraciones) Debe obtener más información sobre el reenvío de puertos antes de permitir el acceso.

Reenvío de puertos en pocas palabras

SSH permite multiplexar flujos de datos a través de una única conexión SSH. Una o más de estas transmisiones pueden ser port forward , de manera que el tráfico a un puerto en la computadora cliente del atacante se envía a través de la conexión SSH a un puerto específico en un host específico desde el servidor . Esto significa que si su servidor de shell tiene acceso, por ejemplo, a un servidor MySQL, entonces cualquier persona que se conecte a la casilla SSH puede acceder directamente al servidor MySQL. Luego, pueden usar sus propias herramientas de cliente en lugar de limitarse al software que ha suministrado en el cuadro de SSH.

    
respondido por el Nathan B. 12.01.2011 - 22:28
fuente

Lea otras preguntas en las etiquetas