Sistema de Archivos Criptográfico bajo Linux (CFS) COMO <author>Copyright (C) 1996 Alexander O. Yuriev, <tt><htmlurl url="mailto:alex@bach.cis.temple.edu" name="alex@bach.cis.temple.edu"></tt> &nl; Traducido por Salvador Fernández Barquín <tt><htmlurl url="mailto:sferbar@internetica.net.mx" name="sferbar@internetica.net.mx"></tt> <date>Marzo 14, 1996 <abstract> Este documento describe cómo compilar, instalar y configurar CFS, el Cryptographical File System. </abstract> <toc> <sect>Introducción <p> Este documento describe cómo compilar, instalar y configurar CFS, que fue escrito por Matt Blaze de AT&T, bajo Linux. <sect>Copyright <p> La siguiente nota de copyright, copiada directamente de CFS 1.12 describe las restricciones sobre el uso de CFS: El autor de este software es Matt Blaze. Copyright © 1992, 1993, 1994 por AT&T. Se permite usar, copiar, y modificar este software sin necesidad de permiso expreso, con la condición que este aviso sea incluido íntegramente en todas las copias del software tal y como está en todas las copias o modificaciones de este software, así como en todas las copias de la documentación de soporte para dicho software. Este software está sujeto a los controles de exportación de los Estados Unidos. No está permitido exportarlo, en su totalidad o en parte, por cualquier motivo o permitir cualquier exportación, por medio de acto u omisión, sin previa autorización de parte del gobierno de los Estados Unidos y permiso escrito de AT&T. En particular, usted no debe hacer disponible cualquier parte de este software para distribución general o no restringida a otros, o no debería usted revelar este software a personas diferentes a los ciudadanos y residentes permanentes de los Estados Unidos y Canadá. ESTE SOFTWARE SE PROVEE "TAL CUAL", SIN NINGUNA GARANTÏA EXPRESA O IMPLICADA. EN PARTICULAR, NI LOS AUTORES NI AT&T HACEN NINGUNA REPRESENTACION O GARANTÍA DE NINGÚN TIPO CONCERTANDO LA MERCANTILIDAD DE ESTE SOFTWARE O SUS PROPÓSITOS PARA ALGÚN PROPÓSITO EN PARTICULAR. A pesar que la información en este documento es considerada como correcta, ni el Autor ni los Laboratorios CIS, o la Universidad Temple da ninguna clase de GARANTÍAS y no es o se hace responsable de lo que pueda pasar si usted sigue esta guía. La información en este documento se proporciona TAL CUAL!. <sect>ACERCA DE CFS <p> CFS proporciona una aplicación independiente de encriptación-desencriptación de la capa del sistema de archivos que no requiere modificación del código principal del sistema de archivos o ninguna clase de modificación del código del kernel. El seguro simétrico implementado en la versión del flujo principal del CFS está basado sobre un seguro DES modificado, ejecutándose en modo CBC haciendo un ataque de fuerza bruta en contra del usual espacio de llave DES, no real de 56 bits. La estructura del CFS realiza un remplazo del flujo principal del seguro DES con un Fast-DES o algún otro seguro simétrico que provea un proceso extremadamente seguro. Por favor refiérase al "<it/White paper/" referente al CFS para más información. <tt><htmlurl url="ftp://bach.cis.temple.edu/pub/Papers/cfs.ps" name="ftp://bach.cis.temple.edu/pub/Papers/cfs.ps"></tt> <sect>Compilación e instalación de CFS. <p> CFS no se compila tal y como viene sobre Linux. Las siguientes instrucciones le llevarán a conseguir que CFS se ejecute en su sistema Linux. Hay diversos métodos para hacer que CFS trabaje en Linux, el más limpio de ellos es el basado sobre las modificaciones de Olaf Kirch. Su versión de CFS esta disponible en <tt><htmlurl url="ftp://ftp.mathematik.th-darmstadt.de/pub/linux/okir/cfs-1.1.2.tar.gz" name="ftp://ftp.mathematik.th-darmstadt.de/pub/linux/okir/cfs-1.1.2.tar.gz"></tt> Olaf firmó el archivo modificado. La firma PGP de la versión modificada del <tt/cfs-1.1.2/ puede ser obtenida de <tt><htmlurl url="ftp://ftp.mathematik.th-darmstadt.de/pub/linux/okir/cfs-1.1.2.pgp" name="ftp://ftp.mathematik.th-darmstadt.de/pub/linux/okir/cfs-1.1.2.pgp"></tt> En modo mono-usuario, se compila CFS usando la instrucción "<tt/make/". Después de la compilación, instale <tt/cfsd/, <tt/cdetach/, <tt/ccat/, <tt/cmkdir/, <tt/cname/ y <tt/cattach/ en el directorio <tt>/usr/local/sbin</tt> con propietario-grupo <tt/root.wheel/ y el modo de acceso <tt/551/. Genere una lista de hashes MD5 de los binarios limpios. Copie estos archivos junto con el <tt/md5sum/ a un medio tal como un CD o un disquete y protéjalo contra escritura. Cree el directorio <tt>/.cfsfs</tt>, el cual será usado como un gancho por el servidor CFS. Cree este directorio como dueño <tt/root.root/ y protegido con el modo de acceso "000". Cree el directorio <tt>/securefs</tt>, el cual se convertirá en la raíz del árbol de CFS. Añada las siguientes líneas a su <tt>/etc/rc.d/rc.local</tt>: <tscreen><verb> echo -n "Inicializando sistema de ficheros encriptado: " if [ -x /usr/local/sbin/cfsd ]; then /usr/local/sbin/cfsd > /dev/null echo -n "cfsd " /bin/mount -o port=3049,intr localhost:/.cfsfs /securefs echo -n "loopback " echo "done" else echo "No se ha instalado el sistema de ficheros encriptado" fi </verb></tscreen> Los usuarios de las distribuciones Caldera Network Desktop y Red Hat Commercial Linux deben añadir el archivo <tt/cfsfs/ que está incluído al final de este documento en su directorio <tt>/etc/rc.d/init.d</tt>. Realice un enlace simbólico, <tt/S65cfsfs/ de éste en los directorios apropiados al nivel de ejecución usando la instrucción: <tscreen><verb> ln -s ../init.d/cfsfs S65cfsfs </verb></tscreen> en <tt>/etc/rc.d/rcX.d</tt>, donde <tt/X/ es el número de nivel de ejecución (<tt/init/), añada la línea: <tscreen><verb> /.cfsfs localhost </verb></tscreen> en <tt>/etc/exports</tt>. Finalmente, añada la línea: <tscreen><verb> portmap: 127.0.0.1 </verb></tscreen> al el archivo <tt>/etc/hosts.allow</tt>. Reinicie su computadora. Esta entrará en modo multiusuario. Ejecute el comando <tt/mount/ para verificar que CFS esté corriendo. Si todo esto fue superado con éxito, verá una nueva línea en el lista de los sistemas de archivos: <tscreen><verb> localhost:/.cfsfs on /securefs type nfs (rw,port=3049,intr,addr=127.0.0.1) </verb></tscreen> <sect>Creación del directorio CFS. <p> Para crear un directorio CFS protegido llamado <tt/secreto/ use el comando <tscreen><verb> cmkdir secreto </verb></tscreen> Le pedirá que la frase de paso y que la verifique. Si sale bien, un nuevo directorio llamado <tt/secreto/ aparecerá en el directorio actual. Este directorio contendrá información encriptada la cual no será accesible, sólo lo será en el caso de que éste esté añadido al árbol del CFS. Para ordenar que el directorio <tt/secreto/ se añada a la lista de directorios administrados por CFS, este ha de ser añadido a el árbol CFS usando la instrucción: <tscreen><verb> cattach secreto Gran-Secreto </verb></tscreen> CFS requerirá que escriba la frase de paso para el acceso. Si ésta coincide con la frase de paso proporcionada a la instrucción <tt/cmkdir/ que creó el directorio originalmente, la información en el directorio secreto será accesible de forma no encriptada bajo <tt>/securefs/Gran-Secreto</tt> al usuario que proporcionó la frase de paso correcta. Note que usualmente toma cerca de un minuto añadir el directorio protegido al árbol del CFS. Cuando el usuario ha terminado de manipular la información debe utilizar la instrucción: <tscreen><verb> cdetach Gran-Secreto </verb></tscreen> Para destruir la llave de acceso. Esta instrucción elimina el directorio <tt/secreto/ de la lista de directorios administrados por CFS haciendo imposible acceder a la información en forma de texto plano en este directorio hasta que nuevamente sea añadido usando la instrucción <tt/cattach/. <sect>Protección del CFS. <p> Para conceder acceso a un usuario a partes encriptadas del árbol de directorios, CFS necesita que el usuario proporcione la frase de paso que es usada para generar un conjunto de llaves de acceso. Una vulnerabilidad de una frase de paso, permitirá a un intruso acceder a la información encriptada a través del modulo de seguridad Unix. Por ello, es extremadamente importante proteger el acceso a las frases de paso. Hay dos maneras básicas que pueden ser utilizadas por los intrusos para obtener su frase de paso. Son: <enum> <item>Ataques con <it/Sniffers/ <item>Ataques contra el protocolo. </enum> Las siguientes instrucciones pueden ser utilizadas para minimizar la posibilidad de un ataque exitoso contra CFS: <enum> <item>Asegurar que los binarios de CFS no estén comprometidos de ninguna forma. <item> Asegurar que <tt/cattach/, <tt/ccat/, <tt/cmkdir/, <tt/cname/, el servidor CFS <tt/cfsd/ y finalmente, <tt/cdattach/ no serán sustituidos por versiones ``<it/troyanas/'' que capturen las frases de paso o, en el caso del <tt/cfsd/, las llaves de acceso. <item>Asegurar que el Servidor CFS no esté comprometido de modo que no se realice el procedimiento de encriptación correctamente. <item>Un ataque contra <tt/cdeattach/ usualmente involucra una pequeña modificación que evita la correcta destrucción de las llaves de acceso, permitiendo a un intruso obtener acceso a una parte supuestamente separada del árbol de directorios. <item>La manera más simple para asegurar que los binarios no sean comprometidos es compilarlos estáticamente y guardarlos en un CD. Otra manera es compilar estáticamente los binarios, usar <tt/md5sum/, la calculadora de procesado de mensaje (<tt/message-digest/) y escribir los hashes MD5 en un medio protegido contra escritura. Antes de usar alguno de los programas de CFS sobre un sistema, monte un disquete y compare los hashes MD5 de los binarios del sistema con los hashes de las copias limpias compiladas estáticamente, localizadas en el disquete, sustituyendo las versiones comprometidas. <item>Capturadores de teclado usados para capturar las frases de paso, tal como los usuarios las van tecleando. Dependiendo de las circunstancias, muchos usuarios no son lo bastante cuidadosos ignorando las siguientes indicaciones: <enum> <item>Cuando escriba una frase de paso en una <tt/xterm/, asegurar que el programa <tt/xterm/ no está comprometido y use la opción "Teclado seguro" mientras se escribe la frase de paso. Esto previene que las pulsaciones sean interceptadas por capturadores X-Window. <item>Escriba las frases de paso desde la terminal conectada directamente a un puerto serie del sistema cuando dicha terminal esté disponible. <item>Cerciórese de que sus permisos en <tt/pty/s y <tt/tty/s no permitan a otros la lectura de tus pulsaciones directamente del dispositivo. </enum> <item>Nunca escriba su frase de paso a través de la red, aunque la red esté localizada tras un cortafuegos y confíe en que todos los que están conectados a su red no usen sniffers. Esto es aplicable también a redes que usen routers seguros (scrambling routers), porque no hay garantía en absoluto que los routers usen un encriptamiento sólido o no tengan una puerta trasera o un agujero de seguridad que potencialmente pueda permitir a un intruso anular la encriptación usada por el router. Si tiene que escribir su clave de acceso a través de la red, hágalo solamente si está usando un canal encriptado entre sistemas tal como el creado por el protocolo <tt/deslogin(8)/. <item>Los árboles protegidos CFS deben ser desligados siempre (<tt/de-attach/) del sistema de archivos cuando no sean usados, aun cuando vaya a dejar su sistema "sólo" por un par de minutos. </enum> <sect>Problemas conocidos de CFS <p> Hasta este momento sólo se conoce un problema que puede ser reproducido. El error de "<tt/Permission denied/" que se genera cuando un usuario intenta acceder a archivos localizados en un disco compacto. <sect>Créditos (Documento en inglés). <p> Las siguientes personas ayudaron en el proceso de preparación de este documento: Topher Hughes del Colegio Dickinson, Elie Rosenblum del Montgomery Blair High School, Mario D. Santana de la Universidad del Estado de Florida, Daniel P. Zepeda y Olaf Kirch. <sect>Nota de la traducción. <p> Mi nombre es Salvador Fernández Barquín, formo parte del proyecto LUCAS/INSFLUG. Este documento es mi aportación para que el proyecto Linux sea cada vez más grande y conocido entre nosotros los que hablamos la lengua de Cervantes; ahora que la seguridad en los servidores de Internet (y Linux en particular) es un tema importante para todo administrador o usuario de Linux, consideré esta una solución muy interesante de aplicar. Particularmente, espero que este documento sea de ayuda e interés a todos aquellos que deseen implementar un esquema de seguridad a nivel sistema de archivos en su Linux. Hay mucho por traducir, así como también hay muchos documentos traducidos, visite <tt><htmlurl url="http://www.infor.es/LuCAS" name="http://www.infor.es/LuCAS"></tt> o o sus múltiples espejos para conocer más sobre este proyecto o obtener otros documentos en castellano. No está de más decir que intentado ajustarme totalmente al original de Alexander O. Yuriev y he revisado la traducción un par de veces. No obstante aún puede quedar algo por pulir o se me ha podido colar alguna errata, de cuya responsabilidad me hago cargo, pero jamás del buen o mal uso que pueda derivar la lectura de este documento. Para cualquier comentario, errata o consulta sobre la traducción, mándeme un mensaje electrónico a: <tt><htmlurl url="sferbar@internetica.net.mx" name="sferbar@internetica.net.mx"></tt>. Un saludo y buen provecho Salvador Fernández Barquín. <sect>scripts <p> <tscreen><verb> #!/bin/sh # # $Header: /Secure/secure-doc/linux/CFS/RCS/CFS-Doc,v 1.4 1996/03/15 04:49:37 alex Exp alex $ # # cfsfs Crypto filesystem # # Author: Alexander O. Yuriev <alex@bach.cis.temple.edu> # Derived from cron # Cargamos la libraría de funciones. . /etc/rc.d/init.d/functions # Averiguamos cómo se nos ha ejecutado. case "$1" in start) echo -n "Arrancando sistema de ficheros encriptado: " if [ -x /usr/local/sbin/cfsd ]; then /usr/local/sbin/cfsd > /dev/null /bin/mount -o port=3049,intr localhost:/.cfsfs /securefs echo "listo" else echo -n "El sistema de ficheros encriptados no ha sido iniciado" fi touch /var/lock/subsys/cfsfs ;; stop) echo -n "Deteniendo sistema de ficheros encriptado: " umount /securefs killproc cfsd echo rm -f /var/lock/subsys/cfsfs ;; *) echo "Empleo: cfsfs {start|stop}" exit 1 esac exit 0 </verb></tscreen> <sect>Anexo: El INSFLUG <label id="Grupos"> <p> El <em/INSFLUG/ forma parte del grupo internacional <it/Linux Documentation Project/, encargándose de las traducciones al castellano de los Howtos (Comos), así como la producción de documentos originales en aquellos casos en los que no existe análogo en inglés. En el <bf/INSFLUG/ se orienta preferentemente a la traducción de documentos breves, como los <em/COMOs/ y <em/PUFs/ (<bf/P/reguntas de <bf/U/so <bf/F/recuente, las <it/FAQs/. <tt/:)/ ), etc. Diríjase a la sede del INSFLUG para más información al respecto. En la sede del INSFLUG encontrará siempre las <bf/últimas/ versiones de las traducciones: <tt><htmlurl url="http://www.insflug.org" name="www.insflug.org"></tt>. Asegúrese de comprobar cuál es la última versión disponible en el Insflug antes de bajar un documento de un servidor réplica. Se proporciona también una lista de los servidores réplica (<it/mirror/) del Insflug más cercanos a Vd., e información relativa a otros recursos en castellano. Francisco José Montilla, <tt><htmlurl url="mailto:pacopepe@insflug.org" name="pacopepe@insflug.org"></tt>. </article>