Saltar al contenido

Conceptos básicos de seguridad en Linux, Primera parte: Autenticación

Articulo escrito por Caitlyn Martin en Distrowatch, traducido al castellano a partir de la versión portuguesa de Guia do Hardware.

cerradura

Hubo muchas discusiones algunas bastante acaloradas, sobre la seguridad de sistemas en la sección de comentarios de DistroWatch Weekly (DWW) en los últimos meses. Algunas personas incluso argumentan en contra de lo que la mayoría considera la seguridad básica de Linux. Por este motivo, recibí varias solicitudes para escribir un articulo completo y con referencias sobre los conceptos básicos de seguridad en Linux. Está claro que existen libros enteros dedicados a seguridad en Linux, y cuando empecé a escribir quedó claro que un articulo solo no sería bastante para cubrir el asunto. Considere el articulo de esta semana como un punto de partida para una pequeña e intermitente serie de artículos sobre la seguridad en Linux.

Limité el abanico de este y de futuros artículos de DistroWatch sobre seguridad para que tuviese sentido para los usuarios domésticos y de pequeñas empresas o, en otras palabras, para ambientes con solamente un puñado de sistemas y usuarios. La mayor parte de lo que será descrito a continuación se aplica al BSD, al OpenSolaris o a cualquier sistema operativo o a cualquier sistema operativo UNIX o parecido a UNIX, sin embargo los nombres de archivos, comandos específicos y la sintaxis puedan ser un poco diferentes. Para simplificar las cosas, me voy atener a los sistemas Linux.

Antes de describir lo básico de la autenticación en Linux, las discusiones recientes dejaran muy claro que debo comenzar definiendo lo que entiendo por seguridad. También tengo que responder a la pregunta mas básica de todas, que sería el porqué de términos que nos preocupan con ese asunto. Algunos lectores del DWW afirman haber ignorado completamente la seguridad sin haber tenido un problema que contar durante muchos años. Esas declaraciones son autenticas. Eso no significa que la posibilidad de problemas reales no exista. Kurt Seifried, en su Linux Linux Administrator’s Security Guide, escribió: “Basta cometer un error o dejar un único fallo en abierto para que un atacante entre. Eso, obviamente, significa que la mayoría de los lugares será invadida un día si y otro también”. El añade: “Todas las medidas técnicas de seguridad terminarán fallando o volviéndose vulnerables ante un atacante. Y por ese motivo usted necesita múltiples medidas de protección.”

El libro Practical UNIX and Internet Security ofrece una definición simple y directa de seguridad: “Un ordenador es seguro cuando usted puede confiar en él y su software se comportará como usted espera.” Hay muchas definiciones mas técnicas y detalladas, pero esa realmente lo resume todo. Si alguien hace uso de su(s) sistema(s) para conseguir sus propios objetivos sin su permiso, esa condición no es escuchada. El uso sin su autorización puede ser causada por un amigo o pariente que no desee causar daño, de un compañero de trabajo o de un extraño del otro lado del mundo.

Cuando hablo de seguridad, una de las preguntas que con frecuencia me hacen es porqué alguien querría atacar un sistema doméstico o de una empresa pequeña. La semana pasada, la Linux Pro Magazine Online publicó un articulo describiendo cien servidores Linux con una seguridad pésima en Rusia usados como parte de un botnet para distribuir malware para sistemas Windows. Tenga en mente que muchos sistemas desktop domésticos son mas poderosos que algunos servidores con algunos años de antigüedad. Combine la potencia del hardware de hoy con las conexiones permanentes de banda ancha de alta velocidad que muchos utilizamos, y usted podrá comprender que cualquier sistema puede ser un objetivo interesante.

  • Cuentas y contraseñas
Contraseña

La primera y mas sencilla línea de defensa es una contraseña. En su libro, Securing & Optimizing Linux: The Ultimate Solution Gerhard Mourani escribe: “Muchas personas mantienen sus valiosas informaciones y archivos en un ordenador, y la única cosa que impide que terceros tengan acceso a todo eso es una secuencia de ocho caracteres que llamamos contraseña. Una contraseña indescifrable, al contrario de lo que dicen por ahí, no existe. Con tiempo y recursos en las manos, cualquier contraseña puede ser adivinada utilizando ingeniería social o fuerza bruta.” Algunos usuarios de Linux van mas lejos, utilizando distribuciones que no tienen contraseña o que usan una contraseña conocida y disponible públicamente para una cuenta con privilegios de root. Eso en la practica es poner una alfombra de bienvenida a una persona que tenga acceso físico al sistema y que esté dispuesta a invadirlo. Una vulnerabilidad en un servicio que se comunique por internet puede, de hecho, dejar un sistema de esos abierto literalmente a cualquiera que conozca la contraseña y el fallo. Al escribir sobre los mas variados tipos de patrones inseguros, Kurt Seifried dijo: “Ese es uno de los problemas que generan problemas de seguridad que no tienen fin desde el primer día.”

Mourani lista cuatro reglas básicas para una buena contraseña. Tres de ellas son aplicables incluso a sistemas domésticos y oficinas pequeñas.

  1. Su tamaño debe ser al menos de seis caracteres, preferentemente ocho, con al menos un número y un carácter especial.
  2. No puede ser trivial; una contraseña trivial es aquella que es fácil de adivinar y usualmente se basa en el nombre del usuario o de un pariente, en su empleo o en otras características personales.
  3. Debe tener un periodo de validez, exigiendo que una nueva contraseña sea escogida después de un tiempo marcado.

Todas las grandes distribuciones Linux tienen herramientas que obligan a contraseñas fuertes y validez de las mismas. Muchos usuarios no usan esas herramientas porque es incomodo usar contraseñas largas y no triviales que cambian periódicamente. La seguridad es, por naturaleza, incomoda. Cabe a cada uno de nosotros decidir hasta que punto la incomodidad es válida para tener un sistema seguro.

  • Cuenta de root

La cuenta de root (o cuenta de superusuario) es una cuenta presente en todos los sistemas *nix que usualmente no tiene ninguna restricción. El root puede hacer cualquier cosa. Por ese motivo, usualmente es recomendable no hacer login y usar el sistema como root, a no ser que eso sea absolutamente necesario.

La primera persona de la cual usted se protege al no utilizar el sistema como root es de usted mismo. Trabajé para un banco local durante seis meses antes de ocurrir una fusión. Uno de los administradores de sistemas, un hombre con años de experiencia. Escribió un script para limpiar archivos antiguos en un servidor. Por motivos obvios, el script necesitaba ser utilizado como root. El cometió un error de sintaxis en el script que hizo que el mismo funcionase en el sistema de archivos raíz, y no en uno de los sistemas de archivos en el que debería funcionar. Para empeorar, él ignoro los procedimiento de control de alteraciones apropiados, porque pensó que era solo un mantenimiento trivial. El script funcionó durante la noche, y comenzó a realizar su trabajo de remover grandes partes del sistema operativo, que eran mas antiguos que la fecha configurada en el script, arrasando efectivamente con el servidor de producción. La moraleja de la historia es que incluso profesionales veteranos cometen errores, y a veces las consecuencia son desastrosas. Funcionando como root, usted puede causar fácilmente daños en el sistema, sin aviso. Es por eso que algunas distribuciones como Ubuntu no permiten logearse como root por defecto.

No es necesario decir que las reglas para contraseñas fuertes deben de aplicarse en primer lugar a la cuenta de root. Si el acceso remoto como root fuese permitido, intencionadamente o por causa de una vulnerabilidad de seguridad, una contraseña fuerte puede retrasar una invasión por tiempo suficiente para que sea detectada e impedida. También hay un montón de aplicativos para Internet, como navegadores web, que poseen vulnerabilidades que efectivamente permiten acceso remoto usando la cuenta de usuario que estuviera ejecutando el aplicativo. Si ese usuario fuera root, los fallos de seguridad se vuelven mucho mas peligrosas. Es por eso que algunos aplicativos de Linux presentan avisos simples y directos sobre los riesgos de utilizarlos como root.

Todas las distribuciones Linux, incluso las pequeñas, poseen herramientas que permiten la concesión temporal de privilegios de root a los usuarios normales. La mas común es su, abreviatura de superusuario, y sudo, abreviatura de “superuser do” (ejecutar como superusuario). El comando sudo ofrece la capacidad de registrar en log lo que usted hace como root. También ofrece la forma mas simple de conceder un subconjunto de privilegios de root a alguien que necesite realizar tareas especificas que exijan privilegios de root, pero que no necesitan control total y absoluto del sistema, lo que lo hace ideal para redes de pequeñas empresas. Un manual detallado sobre su y sudo será publicado próximamente en DistroWatch Weekly.

  • Autenticación básica en Linux: como funciona.

En todo sistema Linux hay tres archivos que ofrecen el nivel mas básico de autenticación para el sistema local:

/etc/passwd /etc/group /etc/shadow

Cada usuario del sistema tiene un identificador de usuario único, el UID, asociado a su nombre de usuario (OBSERVACIÓN: es posible atribuir dos nombres de usuario a un mismo UID, creando una misma cuenta con dos nombres que pueden ser usados para hacer login). Cada usuario pertenece por lo menos a un grupo de usuarios, y cada grupo tiene un identificador único de grupo (GID) asociado al nombre del grupo.

El archivo /etc/passwd es un archivo de texto simple. Puede ser editado con cualquier editor de texto ejecutado como root, y contiene siete campos para cada usuario, separados por dos puntos:

  • el nombre de usuario
  • un x minúsculo (usualmente)
  • el ID del usuario (UID)
  • el grupo por defecto del usuario
  • el nombre completo del usuario y, opcionalmente, informaciones adicionales en texto puro sobre él
  • el directorio home del usuario
  • el shell por defecto del usuario

El shell por defecto es particularmente importante para cuentas del sistema. Muchas herramientas del sistema y algunos aplicativos exigen su propias cuentas de usuario para ser ejecutadas correctamente. Mientras, usted no querrá que alguna persona sea capaz de hacer login en nombre de esa tarea. Siendo así, un shell falso (generalmente /bin/false) es usado. Si no hubiese un shell válido, el usuario no puede hacer login.

En un pasado remoto y casi olvidado, el archivo /etc/passwd también contenía las contraseñas de los usuarios en texto puro. A medida que las redes crecieron, quedo claro que algún tipo de forma segura de almacenar contraseñas en un formato que no pudiese ser leído era una necesidad absoluta, y como de costumbre, un incidente de seguridad convenció a alguien de esa necesidad. En 1987, Julianne Haugh tuvo su sistema invadido y escribió la suite Shadow Password original, que contenía los comandos login, passwd y su. Las contraseñas shadow forman parte de Linux desde 1992, y las suite creció y hoy agrupa trenta comandos.

El concepto básico del sistema shadow es fácil de entender. Voy a citar a Seifried otra vez: “Durante muchos años la solución fue bastante sencilla y eficaz, bastando hacer un hash de las contraseñas y almacenar ese hash; cuando un usuario se autentica, se hace un hash de la contraseña tecleada y, si los hashes combinaran, la contraseña es, obviamente, la misma.” Al pasar el tiempo, el poder computacional creció y quedó mas fácil de romper incluso las contraseñas con hast; con eso Linux y otros sistemas UNIX migraran para sistemas de criptografía mas fuertes (normalmente el MD5). Además del nombre de usuario y de la contraseña con hash, el archivo /etc/shadow también contiene informaciones sobre el envejecimiento de la contraseña.

  • Usando chage para definir el envejecimiento de la contraseña

Todas las grandes distribuciones Linux poseen herramientas gráficas que actúan como interfaces para la suite Shadow Password. Sin embargo, si usted estuviese utilizando una distribución mas minimalista o si prefiere controlar el envejecimiento de la contraseña por la línea de comando en una cuenta existente, la forma mas fácil de hacerlo es con el comando chage. Su uso mas sencillo permite definir un periodo después del cual la contraseña debe ser cambiada. Por ejemplo, si quisiese forzar a un usuario (si, incluso a mi mismo) a modificar la contraseña cada noventa días, puedo hacerlo con el comando:

chage -m 90 usuario

Cambiando “usuario” por el nombre del usuario. También ayuda un aviso con la opción -W. Digamos que yo quería dar un aviso cinco días antes de que la contraseña venza. El comando seria:

chage -m 90 -W 5 usuario

Cualquier usuario puede verificar cuando vence su contraseña con el comando

chage -l

  • Pluggable Authentication Modules (PAM)

El PAM generalmente se aplica a redes mayores, pero como viene habilitado por defecto como parte del proceso de autenticación en muchas de las grandes distribuciones Linux, él merece ser mencionado aquí. En redes mayores, hay varios sistemas (NIS, NIS+ y LDAP, por ejemplo) usados para permitir que un usuario utilice una cuenta para hacer login en varios sistemas. También hay sistemas de seguridad mas avanzados que permiten que las contraseñas sean alteradas minuto a minuto. En muchas redes corporativas, quien precisa acceder a sistemas seguros recibe una especie de llavero con una pequeña ventana de LCD o LED que exhibe la contraseña del momento. Lo que PAM hace es permitir que los administradores definen reglas para decir como lidiar con cada tipo de autenticación y que múltiples métodos de autenticación puedan ser usados y controlados en un único lugar. Por ejemplo, una regla puede permitir que una clase de usuarios solo pueda hacer login en ciertos horarios.

Bien, pero que tiene que ver todo esto con los usuarios domesticos?. Bueno, si usted estuviese usando Debian GNU/Linux, Red Hat/Fedora, o SUSE Linux Enterprise o una de las muchas distribuciones basadas en ellas, el PAM viene habilitado por defecto en su sistema y ciertamente es posible que usted lo utilice para definir reglas para sistemas incluso en una red pequeña. Slackware, por otro lado, no incluye PAM, sin embargo alguno de sus derivados, como Zenwalk Linux, lo hacen. Un manual de PAM algo desfasdo, realizado por Red Hat, puede encontrarse aquí.

Un uso correcto para PAM en redes domesticass y de pequeña empresa es la imposición de contraseñas fuertes. PAM incluye un módulo que usa CrackLib para determinar si una contraseña es “suficientemente fuerte”. El significado de “suficientemente fuerte” para su sistema es completamente configurable. Algunas distribuciones, incluyendo Red Hat Enterprise Linux y sus clones, Oracle Enterprise Linux, y Scientific Linux, habilitan el módulo pam-cracklib por defecto.

  • Articulos futuros

En las partes siguientes de esta serie, vamos a echar un vistazo a las etapas básicas que usted puede seguir para mantener su servidor seguro, limitando los servicios en ejecución y el acceso a los servicios que necesitan ser ejecutados. Vamos a echar un vistazo a las puertas de la red, aprender como saber cuales están abiertas y cuales están cerradas, y como cerrar las que no son necesarias. Vamos a echar un vistazo a la seguridad del sistema de archivos de Linux, cubriendo todo, desde los permisos hasta la criptografía. Vamos a echar un vistazo al firewall incluido en el kernel de Linux y como usarlo; y, de acuerdo con lo prometido, vamos hablar sobre como conceder privilegios de root con seguridad. Para terminar, vamos hacer un manual sobre los logs del sistema y sobre como determinar si algún visitante indeseado estuvo en el sistema.

Autor Caitlyn Martin – distrowatch.com

Traducción al portugues de Roberto Bechtlufft <info at bechtranslations.com.br> en guiadohardware.net

Traducción al español Jesus Varela, Jvare.

2 comentarios en «Conceptos básicos de seguridad en Linux, Primera parte: Autenticación»

  1. Hey, I read a lot of blogs on a daily basis and for the most part, people lack substance but, I just wanted to make a quick comment to say GREAT blog!…..I»ll be checking in on a regularly now….Keep up the good work! 🙂 🙂

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.