Autor: Rafael Martinez
Primera publicación: 1999-12-01
El contenido del fichero /etc/passwd determina quien puede acceder al sistema de manera legitima y que se puede hacer una vez dentro del sistema. Este fichero es la primera linea de defensa del sistema contra accesos no deseados. Debe de mantenerse escrupulosamente y libre de errores y fallos de seguridad. En el tenemos registrados las cuentas de usuarios, asi como las claves de accesos y privilegios.
Una linea ejemplo en este fichero:
usuario1:FXWUuZ.vwXttg:500:501:usuario pepito:/home/usuario1:/bin/bash
Los diferentes campos(7) estan separados por dos puntos (:) y el significado de los mismos es el siguiente:
| usuario1: |
Nombre de la cuenta (Login)
|
| FXWUuZ.vwXttg: |
Clave de acceso encriptada (password)
|
| 500: |
UID de esta cuenta
|
| 501: |
GID del grupo principal al que pertenece la cuenta
|
| usuario pepito: |
Nombre del usuario
|
| /home/usuario1: |
Directorio de trabajo de usuario1
|
| /bin/bash: |
Interprete de comando (shell) de usuario pepito
|
Una serie de reglas a tener en cuenta sobre el contenido de este fichero:
El GID del grupo principal esta definido en el archivo /etc/group y este sera el grupo por defecto cuando un usuario crea un fichero.
No hace falta decir que solo el administrador del sistema tiene que tener ID's 0 en estos dos campos. Lo contrario significaria estar dando permisos de administracion (root) a la cuenta en cuestion.
Lo unico que identifica a una cuenta root del resto es una identificacion UID igual a 0. Podemos tener por ejemplo una cuenta llamada "pepito" pero con UID igual a 0, esta cuenta tendria permisos de administrador (root) y muchos programas que hacen referencia al nombre de la cuenta (ej: who, w, etc) no nos darian informacion sobre que la cuenta "pepito" tiene permisos de root.
Esto es lo primero que un hacker suele hacer para instalar una puerta trasera en un sistema. Para averiguar cuentas con nombre diferente de root, pero permisos de root existen programas, pero a falta de uno podemos utilizar el siguiente comando:
awk -F: '{if ($3==0) print $1}' /etc/passwd
Lo mismo (con un pequeno cambio) se puede utilizar para ver cuentas con GID igual a 0:
awk -F: '{if ($4==0) print $1}' /etc/passwd
awk -F: '{if ($2=="") print $1}' /etc/passwd
Nunca dejar una cuenta con el campo de clave vacio, esto significa que no es necesario una clave para entrar en el sistema. Las cuentas de pseudo-usuarios (ej: daemon, lp, etc) y cuentas de usuarios cerradas temporalmente, tienen que tener un asterisco (*) en el campo de la clave.
Otro punto a tener en cuenta es la eleccion de una buena clave. No se deberian utilizar claves que sean palabras de diccionario, nombres, datos personales, matriculas, etc, existen programas que son capaces de descifrar este tipo de claves. Utilizar al menos 7 caracteres (8 recomendable) e interpolar numeros y letras, mayusculas y minusculas. Existen programas que sustituyen el clasico "passwd" para crear/cambiar claves, que comprueban que la clave es suficientemente buena.
La explicacion de porque no se deberian utilizar palabras de diccionario, nombres, etc como claves de acceso, es la siguiente:
Cuando una clave es generada, esta, es codificada con la funcion "crypt", esta funcion se puede definir como una funcion "hash" de una sola direccion, esto es, un algoritmo que es facil de computar en una direccion pero muy dificil de calcular en direccion opuesta. La funcion crypt utiliza un valor aleatorio llamado "salt" el cual esta formado por una cadena de dos caracteres [a-z A-Z 0-9 ./]. Este valor aleatorio permite codificar una misma clave de 4096 maneras distintas (Los dos primeros caracteres de una clave codificada, son los valores de "salt", el resto hasta un total de 13 caracteres ASCII es la clave codificada segun el valor de "salt").
Una vez que sabemos un poco de teoria de como las claves son codificadas, nos podemos imaginar como se podria descifrar un clave de cuenta que es un palabra de diccionario, nombre, matricula, etc. Existen programas que codifican sistematicamente diccionarios de palabras de las 4096 maneras posibles (segun el valor "salt") y comparan cada codificacion con los valores encriptados en /etc/passwd, si algun valor coincide, significaria que una clave ha sido descifrada. Este es uno de los metodos utilizados por hackers para descifrar claves y la razon de porque no se deben utilizar claves que sean palabras de diccionarios, nombres, etc.
shutdown::0:0:shutdown:/sbin:/sbin/shutdown
Podeis ver que el campo de clave esta vacio, con esta linea en tu /etc/passwd cualquier usuario, local o no local, puede apagar tu ordenador haciendo un simple telnet a la maquina en cuestion y escribiendo shutdown como login. No hace falta explicar las consecuencias que esto puede tener para tu sistema. ;-)
-rw-r--r-- 1 root root 11594 Nov 9 12:53 /etc/passwd
-rw-r--r-- 1 root root 1024 Nov 9 12:53 /etc/group
Con estos permisos, cualquiera que tenga acceso al sistema puede leer el contenido de estos ficheros e intentar descifrar la clave encriptada de las cuentas. En pequenos sistemas, donde todos los usuarios se conocen y existe confianza entre ellos, esto no es un gran problema, pero en sistemas con un gran numero de usuarios, no es recomendable tener el sistema configurado de esta manera.
Para evitar esto se puede instalar "Shadow passwords". Con shadow passwords el fichero /etc/passwd puede ser leido por cualquier usuario con acceso, pero la informacion con las claves del sistema queda guardada en un fichero que solo puede ser leido por el administrador (root). Mas informacion sobre Shadow Password en el Howto correspondiente Shadow password HOWTO (ingles)
Esto es todo sobre este fichero tan especial en nuestro sistema. Comentarios y sugerencias al autor.
Comentarios
gracias
Sáb, 04/07/2009 - 02:37 — Anónimobien tu exposición, quedó muy claro!
muchas gracias.
excelente
Mié, 05/08/2009 - 02:22 — Anónimomuy bueno!!
muy buen aporte
Dom, 16/08/2009 - 20:03 — Anónimoademas de que fue muy claro nos brindaste una buena perspectiva y un buen comando con lo que se refiere a seguridad
una pregunta
Dom, 11/10/2009 - 22:02 — AnónimoComo el comando passwd modifica el archivo /etc/passwd, sin ser root?
Hola,
Mié, 11/11/2009 - 18:29 — AnónimoSera que me pueden ayudar obtener el root en una maquina linux, por cierto tengo acceso fisico, pero como usuario normal. Lo que necesito es accesar como #
para poder hacer uno que otro cambio...
Usuarios por defecto?
Mié, 18/11/2009 - 00:44 — AnónimoHay ciertos usuarios como:
games
nobody
....
etc.
Estos Usuarios no representan un riesgo para nuestro equipo?
si lo quitariamos de la lista, tendriamos errores futuros?, ya que talvez estan relacionados con algun programa en nuestro equipo?
tb hay usuarios como:
mysql
ftp
segun hayas instalado algun programa.
Re: Usuarios por defecto?
Mié, 18/11/2009 - 14:16 — AnónimoEstos Usuarios no representan un riesgo para nuestro equipo?
si lo quitariamos de la lista, tendriamos errores futuros?, ya que talvez estan relacionados con algun programa en nuestro equipo?
No vayas a borrar estos usuarios si no quieres estropear una buena parte de tu sistema.
Estos usuarios no tienen asignada ninguna clave de acceso y por lo tanto no se puede acceder al sistema como ellos escribiendo una clave.
Estan ahi para aumentar la seguridad de tu sistema, para organizar privilegios y para que muchos de los servicios que se ejecutan en tu maquina no lo hagan como root. De esta manera un fallo en el servicio en cuestion no pone en peligro el resto del sistema.
Muy buena Explicacion
Mié, 25/11/2009 - 00:47 — AnónimoCordial saludo!
Muy buena Explicacion, pero tengo una inquietud..........
he creado un usuario y quisiera que este usuario (que es euna cuenta ftp), estuviera restringido mas que a su propia carpeta; por ej: "/home/pepito" y no saliera de ahi......
Por su colaboracion..........
muchas gracias!
Loguearme sin necesidad de clave de usuario
Vie, 08/01/2010 - 05:00 — AnónimoUso Ubuntu 9.04 al inicio solo tenia mi usuario, y no usaba contraseña, entonces accedia al sistema directamente, sin la pantalla para poner el usuario y contraseña, luego coloque a mi usuario una contraseña, luego de eso ahora qisiera regresar al estado anterior, es decir, quitarle la clave a mi usuario y loguearme directamente con mi usuario por defecto. Como puedo volver a hacerlo?
Trate de ejecutar: sudo passwd -d miusuario
y me pidio mi contraseña para realizar la operacion, lo hice, y cambio la clave. Pero ahora que quiero ingresar me sigue saliendo la venta de usuario y contraseña y cuando coloco mi contraseña anterior no accedo, y tampoco poniendola en blanco.
No puedo ingresarr!!!
olvide el usuario y password
Sáb, 27/02/2010 - 08:23 — joelpaserse puede obtener la informacion olvidada de usuario y pasword?
RE :Loguearme sin necesidad de clave de usuario
Sáb, 17/04/2010 - 05:16 — Anónimopasswd –f –u usuario
Enviar nuevo comentario