Estructura de los ficheros password en Unix

 

En este documento voy a intentar explicar un poco la estructura del los ficheros passwd de UNIX.

El fichero passwd esta compuesto por varias lineas parecidas a esta:

    • Pepe:1qwP95nmh6:1845:14:Pepe Pérez:/home/users:/bin/bash

Esta linea contiene 7 campos separados por ":", que se dividen en:
 

 Campo 

 Contenido 
 (ejemplo) 

 Descripción 

 Login : 

 Pepe 

 Login de usuario, identifica al usuario 
 dentro del sistema 

 Password : 

 1qwP95nmh6 

 Password encriptada del usuario 

 Número de usuario : 

 1845 

 Identifica al usuario en el sistema, 
 mediante este numero 

 Número de grupo : 

 14 

 Grupo al que pertenece este usuario 

 Información Gecos : 

 Pepe Pérez 

 Descripción del usuario 

 Directorio HOME : 

 /home/users 

 Directorio <home> de este usuario 

 Shell : 

 /bin/bash 

 Shell que usa este usuario al entrar al sistema 

 

Bueno el unico campo con un poco de complicación es el password, asi que voy a intentar explicarlo un poco por encima:

Este campo como ya he dicho antes, contiene la password encriptada ( con la funcion crypt() ), y sus posibles contenidos son (puede que me deje alguno):
Caso 1

Pepe:*:1845:14:Pepe Pérez:/home/users:/bin/bash
Pepe:x:1845:14:Pepe Pérez:/home/users:/bin/bash

La clave esta inhabilitada, o esta "shadowed". Que, que significa esto?
Bueno pues si la clave esta inhabilitada, aunque la sepais no vais a poder entrar, ya que esto significa que este usuario tiene el acceso denegado.
¿Y si esta "shadowed"?, bueno el shadowing es una medida de seguridad, que consiste en meter los passwords en otro fichero aparte. Aqui teneis una lista de su localización (la mayoria de las veces).

Clase de Unix

Path

AIX 3

/etc/security/passwd/
tcb/auth/files/
<FIRST LETTER OF USERNAME>/<USERNAME>

A/UX 3.0s

/tcb/files/auth/?/*

BSD4.3-Reno

/etc/master.passwd

ConvexOS 10

/etc/shadpw

ConvexOS 11

/etc/shadow

DG/UX

/etc/tcb/aa/user/

EP/IX

/etc/shadow

HP-UX

/.secure/etc/passwd

IRIX 5

/etc/shadow

Linux 1.1

/etc/shadow

OSF/1

/etc/passwd[.dir|.pag]

SCO Unix #.2.x

/tcb/auth/files/
<first letter of username>/<username>

SunOS4.1+c2

/etc/security/passwd.adjunct

SunOS 5.0

/etc/shadow<optional NIS +
private secure maps/tables/whatever>

System V Release 4.0

/etc/shadow

System V Release 4.2

/etc/security/* database

Ultrix 4

/etc/auth[.dir|.pag]

UNICOS

/etc/udb

 

Aunque muchas veces, el sistema tiene un poco mas de seguridad, y este fichero es ilegible para la mayoria de los usuarios del sistema. Pero como en todo hay una forma de leerlo, simplemente hacemos un programa de este tipo:

 

     #include <pwd.h>

 

 

 

     void main( void )

 

     {

 

       struct passwd *p;

 

 

 

       while(p=getpwent())

 

       printf("%s:%s:%d:%d:%s:%s:%s\n",

 

               p->pw_name, p->pw_passwd,

 

               p->pw_uid, p->pw_gid, p->pw_gecos,

 

               p->pw_dir, p->pw_shell);

 

     }

Este programa hace varias llamadas a getpwent() para que el fichero passwd sea enviado directamenta a vuestro ordenador, con lo que al Shadowing ni caso.
Caso 2

Pepe:1qwP95nmh6:1845:14:Pepe Pérez:/home/users:/bin/bash

Este es el caso mas "normal", y en el esta la password encriptada sin mas.
Caso 3

Pepe:*1qwP95nmh6:1845:14:Pepe Pérez:/home/users:/bin/bash
Pepe:!1qwP95nmh6:1845:14:Pepe Pérez:/home/users:/bin/bash
Pepe: 1qwP95nmh6:1845:14:Pepe Pérez:/home/users:/bin/bash

En estos tres casos la clave esta inhabilitada, es decir, aunque la sepamos no vamos a poder entrar en el sistema. Esta opción la suelen usar los gestores para restringir el acceso a alguno de los usuarios de la maquina.
Caso 4

Pepe::1845:14:Pepe Pérez:/home/users:/bin/bash

Una opcion "interesante", ya que este usuario no tiene clave, introduce su login, y ya estas dentro del sistema.