miércoles, 1 de junio de 2011

Entendiendo el fichero /etc/shadow

En los sistema operativos tipo Unix la base de datos shadow password database es un mecanismo para incrementar la seguridad de las contraseñas restringiendo el acceso a todos los usuarios excepto a root. comúnmente estos datos son mantenidos en ficheros únicamente al super usuario (root) u otra cuenta administrativa con los privilegios de lugar.


Al principio no existía el fichero /etc/shadow – las contraseñas y salts estaban conjuntamente con otra información en el fichero /etc/passwd. El problema con esto era que cualquiera podía leerlo, lo que hizo más comunes y poderosos los ataques al sistema. Fue necesario mover la contraseña a un fichero diferente que sólo podía ser leído por root.


Este es un ejemplo de una entrada en el fichero shadow:


$ sudo cat /etc/shadow | grep oracle
oracle:$6$MvOuttAz$5ZUMuRkx8b2kGJ/jQvTszUQz73R1G9wM78kh1SogNRnSNARUtH9YFbRX/E9iSkcokC4Djyo86DDj39Tq5ebw4/:15057:0:99999:7:::


Cada campo está separados por dos puntos (:). En detalle cada campo:


  • User name. Coincide con el user name del fichero /etc/passwd.
  • Password. Esto es un hash de la contraseña (no la contraseña en sí misma) combinado con un id (especificando cuál forma de encriptación se utiliza) y un salt.
  • Last changed date. Esta es la fecha en que fue cambiada la contraseña.
  • Minimum days. Es el número de días que estará activa la contraseña antes de ser cambiada de nuevo. Una contraseña no puede ser cambiada hasta cumplidos estos días.
  • Maximum days. Es el número de días en los que dicha contraseña será válida. Una vez cumplido este plazo el usuario es forzado a cambiar su contraseña.
  • Warn days. Antes de una contraseña vencerse, advierte al usuario cuántos días le quedan.
  • Inactive days. Una vez que la contraseña expiró, será deshabilitada después de pasado estos días.
  • Expire date. Después de esta fecha la cuenta es deshabilitada y jamás podrá iniciar sesión.

Concentrándonos en la parte de la contraseña, tenemos que este hash se compone de tres partes separadas por el caracter $:
  • Id: Identifica el método de encriptación utilizado: 1 para MD5; 2 o 2a para Blowfish; 3 para NT Hash; 5 para SHA-256; y 6 para SHA-512.
  • Salt: Es utilizado por los algoritmos de encriptación, regularmente son 16 caracteres o más.
  • Hash: Esto es la "contraseña" (o hash). MD5 utiliza 22 caracteres, SHA-256 usa 43, y SHA-512 usa 86.


Para el ejemplo del usuario oracle que mencionamos hace un momento, tenemos:


Id=6 (SHA-512)
Salt=MvOuttAz
Hash=5ZUMuRkx8b2kGJ/jQvTszUQz73R1G9wM78kh1SogNRnSNARUtH9YFbRX/E9iSkcokC4Djyo86DDj39Tq5ebw4/




Más recursos:

No hay comentarios:

Publicar un comentario