|
Existen, no obstante, una serie de principios básicos, de obligado cumplimiento:
a) Utilizar una versión actualizada del Kernel, sin bugs conocidos.
b) Dado que la única forma de salir de un "chroot" es haciendo otro, y que esa llamada solo es invocable por el superusuario, resulta más que conveniente que no se ejecute ningún proceso como "root". Hay que evitar los programas SUID siempre que sea posible; un compromiso en su seguridad puede ser catastrófico: acceso a la memoria del kernel, lectura directa del disco, etc. Debe ser imposible hacerse superusuario dentro del "chroot", ya que una vez alcanzado ese status romper el confinamiento resulta trivial.
c) Evitar la importación de ficheros abiertos al "chroot".
d) Es importante que el directorio actual del proceso esté dentro del "chroot" a la hora de hacer la llamada. En caso contrario romper el confinamiento es inmediato.
e) Siguiendo las directivas proporcionadas a lo largo de este artículo, replicar en el "chroot" solo los procesos, librerías y dispositivos necesarios para el correcto funcionamiento del programa. En Linux no dejar nunca accesible "/proc", ya que permite movernos sin ninguna restricción a cualquier directorio raíz de cualquier proceso, amen de muchas otras cosas inconfesables. Ello incluye el proceso "init" (el proceso uno), cuyo directorio raíz es el real del disco.
f) Hay que prestar mucha atención a los procesos "explotables" desde dentro de un "chroot". Ello incluye ataques como el syslog flooding. No hay que dejar ningún fleco abierto, como AT o CRON. Y mucho menos si son SUID.
g) Bajo ninguna circunstancia debe permitirse cargar módulos en el Kernel.
h) Si estamos montando particiones remotas, y no hay otra opción, hagámoslas de "solo lectura". En las que se pueda escribir, pongámoslas NOSUID.
En la figura se puede ver un caso práctico de creación de un entorno CHROOT para el FTP, configurando éste para que haga "chroot" y SETUID tras el "login" Es bastante sencillo de entender. Debe ejecutarse como "root" y desde el directorio raíz del usuario que estamos configurando, cuyo último segmento debe coincidir con el "login" del usuario. Por ejemplo, para el usuario "jcea", un path correcto podría ser "/export/home/usuarios/jcea".
El listado, naturalmente, no es para que lo utilicéis tal cual, sino para estudiarlo con detenimiento.
- El directorio "/export/home/ftp/anonimo" contiene las librerías, ficheros, etc. comunes a todos los usuarios y que deben copiarse en el "chroot".
- El fichero "actualizar_web" es nuestro fichero de bienvenida al FTP. En mi caso es un mensaje que explica dónde dejar los ficheros para el web del usuario, la sección privada, etc.
- Las librerías que se vinculan mediante "ln" son comunes a todos los usuarios.
- Se crea un fichero "passwd" y "group" fantasmas para que el comando "ls" funcione correctamente.
- Dependiendo del sistema, puede no ser necesario duplicar dispositivos.
|