5. USUARIOS Y GRUPOS

5.1. Identificadores de usuario y grupo

Usuarios y grupos

▪ Cada usuario tiene un identificador (UID), un grupo principal (o primario) al que pertenece (GID), una serie de grupos adicionales, un nombre de usuario (login), un directorio de trabajo (home)

▪ La orden id nos da el UID, el GID y los grupos adicionales de un usuario

▪ Cada usuario puede tener dos tipos de recursos en un sistema UNIX: Procesos y Ficheros

▪ Cada UID y cada GID puede tener asociado un nombre, especificado en los ficheros /etc/passwd y /etc/group, respectivamente

▪ La información de /etc/passwd y /etc/group la utilizan diversas órdenes de administración. Ambos ficheros deben existir y ser coherentes para que el sistema funcione correctamente

▪ No es recomendable editar estos ficheros directamente, sino mediante mandatos como usermod

▪ Si se edita /etc/passwd y /etc/group/ directamente, debe usarse vipw y vigr

5.2. Importancia de las contraseñas

Importancia de las contraseñas

▪ El campo passwd en el /etc/passwd y el /etc/shadow se encuentra cifrado con una función hash para evitar que los usuarios (y administradores) puedan conocer las contraseñas de otros usuarios.

▪ Se usa un cifrado de un solo sentido: no existe algoritmo para averiguar la contraseña a partir de estos ficheros.

▪ Pero se pueden probar varias contraseñas, hasta millones por segundo (John the Ripper).

▪ Es imprescindible elegir palabras clave seguras, que no aparezcan en diccionarios, evitando nombres o fechas significativas, combinando símbolos, y de la mayor longitud posible.

▪ Ejemplos de malas contraseñas:

123456
4312
toby
r2d2
tornillo
fromage
mostoles

▪ Contraseñas que parecen buenas, pero son malas:

XCV330
NCC-1701-A
ARP2600V

▪ Buenas contraseñas
Para usos ordinarios, una contraseña razonablemente buena será parecida (¡pero no igual!) a una de estas

Contraseña

Nemotécnico

00QuReMa:

Queridos Reyes Magos:

3x4igDoze

3x4=doce

1pt,yTp1

uno para todos,todos para uno

19Dy500n

19 dias y 500 noches

R,cmqht?0

Rascayú, cuando mueras que harás tú?

wali1YS!

we all live in a Yellow Submarine

Lh10knpr.

le hare una oferta que no podrá rechazar

Para aplicaciones especialmente sensibles, es necesario ampliar el keyspace a 14 caracteres o más

▪ Es conveniente que busquemos e inutilicemos las contraseñas débiles de nuestros usuarios, ya que suponen un primer punto de entrada en nuestro sistema

▪ En Unix, el root no puede leer las contraseñas. Pero en otros entornos sí. Y muchos usuarios emplean siempre la misma contraseña

Ejemplo:

1. Juan Torpe usa como contraseña dgj441iU en juan.torpe@hotmail.com

2. Juan Torpe se apunta en www.ladygaga-videos-prohibidos.com, con su cuenta de correo y su contraseña de siempre

3. El administrador malicioso de este web ya conoce el nombre de Juan, su cuenta de correo y su contraseña.

• Puede usar la función ¿contraseña olvidada? y colarse en cualquier otra cuentas de Juan

Debemos instruir a nuestros usuarios sobre esto

▪ Los usuarios sin duda olvidarán en ocasiones su contraseña y tendremos que generles una nueva, de forma segura

▪ Pero es muy poco profesional que nosotros como administradores olvidemos una contraseña. Debemos usar varias y guardarlas de forma medianamente segura (gpg, keepassx, lastpass, etc)

5.3. Secret sharing

Secret sharing

Aunque pongamos cuidado extremo en guardar nuestra contraseña, esto puede no ser suficiente.

▪ ¿Y si a pesar de todo, la perdemos o nos la roban?

▪ ¿Y si no estamos disponibles? (Viaje, enfermedad, muerte...)

▪ ¿Y si nos secuestran?

▪ ¿Y si hacemos algún disparate?

Podríamos dividir la contraseña en n trozos y repartirlos entre n personas de nuestra confianza, de forma que con el acuerdo de todos, el secreto es recuperable

▪ Problema: Bastaría con que se pierde un trozo para perder el secreto

▪ Solución: Algoritmos de secret sharing

Un esquema secret sharing es aquel que permite dividir un secreto en n fragmentos, de forma que basten t (t < n) para reconstruirlo

Armory incluye esto de manera nativa, con electrum podemos usar una herramienta independiente, ssss

Con la orden ssss-split, dividimos el secreto en n fragmentos

koji@mazinger:~$ ssss-split -t 3 -n 5
WARNING: couldn't get memory lock (ENOMEM, try to adjust RLIMIT_MEMLOCK!).
Generating shares using a (3,5) scheme with dynamic security level.
Enter the secret, at most 128 ASCII characters
ABRETE SESAMO
1-378a29cbbe9b38f0d473bdab0654
2-d7cc58bbce72070afc675f0991dd
3-d42a4e6f0dca1d32a6d1f96e4e92
4-629dd862cb052f8774bdb26d91df
5-617bceb608bd35bf2e0b140a4e82

Con la orden ssss-combine, recuperamos el secreto

koji@mazinger:~$ ssss-combine -t 3
WARNING: couldn't get memory lock (ENOMEM, try to adjust RLIMIT_MEMLOCK!).
Enter 3 shares separated by newlines:
Share [1/3]: 2-d7cc58bbce72070afc675f0991dd
Share [2/3]: 3-d42a4e6f0dca1d32a6d1f96e4e92
Share [3/3]: 5-617bceb608bd35bf2e0b140a4e82
Resulting secret: ABRETE SESAMO

Si el secreto es mayor de 128 bytes, se cifra con una clave tradicional y se aplica ssss a esta nueva clave

/etc/passwd

▪ Contiene la información de todos los usuarios del sistema.

▪ Contenido: líneas con campos separados por dos puntos:
login :passwd :UID :GID :info :home-dir :shell

▪ El campo “login” puede tener hasta 32 caracteres en Linux, pero se recomienda limitarlo a 8, como en los UNIX clásicos

▪ El campo “passwd” contiene la contraseña cifrada (con DES o con MD5) y puede estar en otro fichero, en el /etc/shadow.

▪ El campo “info” contiene el nombre real del usuario e información adicional como el teléfono, etc. Por (desafortunados) motivos históricos, también se le denomina GECOS

▪ En algunos sistemas, puede haber información externa (NIS, LDAP. . .)

▪ Programas que lo utilizan directamente: login, su, passwd.

/etc/group

▪ Nombres de grupos del sistema, y miembros de cada grupo.

▪ Contenido: líneas con campos separados por dos puntos:
nombre :passwd :GID :lista-logins

▪ “lista-logins” son usuarios separador por comas que pertenecen a ese grupo.

▪ El campo “passwd” no se suele utilizar. Permite ingresar en un grupo en el que no se es miembro.

▪ En algunos sistemas, puede haber información externa (NIS, LDAP. . .)

/etc/shadow

▪ Si existe, contiene las contraseñas cifradas de los usuarios del sistema.

▪ Contenido: líneas con campos separados por dos puntos:
login :passwd :a :b :c :d :e :f :g
a: momento en que la passwd fue cambiada por última vez.
b: días que deben pasar antes de que pueda cambiarse.
c: días después de los cuales la passwd debe cambiarse.
d: días antes de la expiración para avisar al usuario.
e: días después de la expiración para desactivar la cuenta.
f: momento en que la cuenta se ha desactivado.
g: campo reservado.

Para mejorar la seguridad se añade un ”salt”

salt es un tipo de nounce: Number used once. 2 bytes aleatorios que se añaden a la contraseña

Sin salt

password --> hash (password)
"sesamo" --> zv/coRb$PjGToGEqNZF434TmQ7bAH.rVi3i.o7IWQAI9qqzeGKe/JkJq bDfQE2gBFYzBTDNCHyoxpZvSLhenkPT3L6aZN0

El atacante puede usar una rainbow table: El resultado de aplicar hash a un diccionario completo. Si encuentra la hash en la tabla, conoce la contraseña que fue usada

rainbow table
hash(palabra1)
hash(palabra2)
hash(palabra3)

Con salt

password+salt --> hash (password+salt)

rainbow table:
hash(palabra1+salt1)
hash(palabra1+salt2)
hash(palabra1+salt3)

▪ salt se guarda en abierto: se añade al hash, son los primeros dos bytes

▪ Esto obliga a que la rainbow table sea mucho mayor, puede hacerla inviable

Desactivar un usuario del sistema

▪ Bloquear su contraseña en el /etc/passwd o /etc/shadow (añadiendo un carácter “-” o “*”, por ejemplo).

▪ Eliminar sus tareas periódicas (/var/spool/cron).

▪ Revisar /etc/aliases y .forward por si el usuario tuviera acciones a realizar con el correo recibido.

Eliminar un usuario

▪ userdel

▪ userdel -r también borra su correo y su home

Usuarios especiales

▪ No todas las líneas del /etc/passwd corresponden con usuarios físicos.

▪ Super-usuario: uid=0 (su login es normalemente root).

▪ Otros usuarios del sistema: se utilizan para:

• tareas específicas de administración

• propietarios de determinados ficheros del sistema

• ejecución de determinadas aplicaciones (bases de datos, servidores de web, ftp, e-mail, noticias, etc)

▪ Normalmente, los usuarios normales tienen UIDs entre el 1000 y el 30000.

Cambio de contraseña

Para cambiar la contraseña y otros datos se utilizan las órdenes passwd (contraseña), chfn (info/gecos), chsh (shell):

▪ Estas órdenes tienen set-uid para que un usuario normal pueda modificar información privilegiada.

▪ Antes de nada, piden la passwd del usuario para verificar que es quien dice ser.

▪ Bloquean cada fichero a modificar para asegurar exclusión de accesos.

▪ Realizan las modificaciones.

▪ Desbloquean ficheros.

Para crear o cambiar la contraseña de un usuario desde un script

▪ echo "jperez:sesamo" | chpasswd

Cambios de usuario y grupo

▪ su ejecuta otra shell bajo un usuario distinto.

▪ su jperez
ejecuta otra shell, perteneciente al usuario jperez
No hace falta ser root para ejecutar esto, si la invoca un usuario ordinario, le pedirá la contraseña de jperez

▪ su
ejecuta shell con uid=0 (root).

• Pide la contraseña del usuario destino, excepto salvo si el origen es root.

▪ newgrp ejecuta una shell con distinto GID.

• Tiene set-uid

• newgrp permite cambiar el GID a otro grupo al que pertenezcamos (cambia el grupo primario)

Mandatos que sólo pueden ejecutarse como root

▪ groupadd grupo
crea un grupo

▪ adduser usuario1
añade un usuario. Copia en su home el directorio /etc/skel
adduser usuario grupo
añade un usuario a un grupo

▪ usermod -g grupo_primario usuario
Cambia el grupo primario por omisión del usuario

▪ passwd usuario
Cambia la contraseña de un usuario

▪ chown dueño fichero(s)
cambia el dueño de un fichero

▪ chgrp dueño fichero(s)
cambia el grupo de un fichero

Mandatos para cualquier usuario

▪ passwd
Cambia la contraseña del usuario

▪ newgrp grupo
Entre los grupos de un usuario, elige el grupo primario

_______________________________

1 En RedHat, useradd usuario y chfn usuario