23 sept 2010

Usuarios y seguridad: El administrador del sistema

Usuarios y grupos en UNIX

Un usuario UNIX dispone de una cuenta con un nombre de usuario (identificación) y una contraseña secreta asociada (autenticación).

En UNIX, los procesos y archivos tienen asociado un usuario como dueño. El dueño de un archivo es el usuario que lo crea. Un proceso es un programa en ejecución; el dueño del proceso es el usuario que lo arranca. Tanto para archivos como para procesos existe también un grupo al que ese proceso o archivo pertenece. Un grupo es un conjunto de usuarios; un usuario puede pertenecer a varios grupos. Un archivo o proceso pertenece al grupo primario o grupo principal del usuario que crea el archivo o arranca el proceso.

El usuario administrador: root

Entre todos los usuarios del sistema existe uno especial cuyo identificador o UID es 0, asociado a una cuenta con nombre "root". El nombre puede ser cualquiera, lo importante es el UID 0.

El usuario administrador, conocido como superusuario puede realizar cualquier operación posible sobre archivos y procesos; muchas llamadas al sistema sólo pueden ser realizadas por el superusuario o tienen opciones especiales para el superusuario no disponibles para los usuarios comunes, como por ejemplo:

- Cambiar la hora del sistema
- Apagar el sistema
- Cambiar el nombre de la máquina
- Cambiar los atributos a un fichero ajeno (con chmod)
- Cambiar la propiedad de un fichero (con chown)
- Cambiar la prioridad a un proceso ajeno
- Cambiar la propiedad de un proceso ajeno

¿Cuándo ocurre el cambio de dueño de un proceso? Por ejemplo, el programa "login" corre como superusuario, una vez que el usuario introduce su usuario y contraseña, cambia el UID y GID a los del usuario y arranca el intérprete de comandos del usuario.

root es todopoderoso y por tanto en su contraseña reside la seguridad del sistema. Una buena contraseña debe combinar caracteres de todos los tipos y no venir en el diccionario. La contraseña de root debe cambiarse con cierta periodicidad, cada vez que se vaya alguien que la conoce, o cuando existan sospechas de que un sistema se ha visto comprometido.

¿Qué ocurre si se nos olvida la contraseña de root? Pues estamos en un problema.

Afortunadamente no seríamos los primeros a los que nos pasa. Se tiene que acceder físicamente a la consola del sistema, iniciar desde CD o cinta, e iniciar el procedimiento de recuperación.


Hacerse root
Como la contraseña de root es un secreto importante, muchos administradores de sistemas jamás harán telnet o rlogin como root (puesto que las contraseñas transmitidas por estos medios no van encriptadas). Lo normal es hacer telnet o rlogin como otro usuario ordinario y después utilizar el comando su (switch user). No hace falta indicar "su root" o "su - root", simplemente "su -" o "su".

luciag@pluton:~> su -
Password:
Sun Microsystems Inc. SunOS 5.8 Generic Patch December 2002
#

Hacerse root sin saber la contraseña
Existe un software que se llama "sudo" que nos sirve para que, sin conocer la contraseña de superusuario, podamos definir ciertas operaciones privilegiadas que pueden ser realizadas por ciertos usuarios no administradores, con el fin de no tener que "repartir" la password de root a usuarios sin conocimientos para ellos (por ejemplo, si tenemos usuarios que quieren insertar un CD: para "montar" dispositivos se requiere superusuario).

Pseudo-usuarios
Existe una serie de usuarios que vienen definidos con el sistema. No hay que borrarlos ni tampoco cambiarles la contraseña porque no la sabe nadie y además no suelen tener una shell "real" (para que no puedan entrar).

Por ejemplo:
  • bin: El propietario "histórico" de los comandos del sistema
  • daemon: Usuario sin privilegios que ejecuta cierto software del sistema
  • nobody: Usuario NFS

El fichero /etc/passwd

El fichero /etc/password es el fichero donde se encuentran las identidades de los usuarios. Este fichero contiene los siguientes campos.

ID usuario: Contraseña: UID: GID: Descripción (GCOS): Directorio Home: Shell de inicio

Los ID usuario deberían ser cortos (los más largos de 8 caracteres pueden causar incompatibilidades con sistemas más antiguos) y fáciles de recordar.

Un ejemplo

luciag:Urklk2.alLmrU:20073:200:Lucia Gonzalez, R&D Tech,x5145,91555555:/export/share/home/luciag:/usr/local/bin/tcsh

La contraseña está encriptada mediante el algoritmo crypt. Se toma la contraseña para encriptar un bloque de 64 bits de ceros. Se realizan 25 rondas y del resultado se toma de una cadena de 11 caracteres.

El usuario luciag tiene UID 20073 y GID 200, correspondiendo con un grupo definido en /etc/group como

imasd::200:intserv

Los UIDs tienen que ser únicos en la organización cuando se comparten recursos entre sistemas, hacerlo de otra forma contribuiría al caos. Los UIDs son enteros de 32 bits, aunque se recomienda no crear usuarios a partir del 32.767 si se tienen sistemas antiguos cerca (entero con signo de 16-bit)

El campo descripción, que en algunos libros llaman GECOS por motivos históricos, contiene información sobre el usuario. El comando finger normalmente interpreta los campos separados por comas como

- Nombre completo
- Centro de trabajo
- Extensión
- Teléfono de casa

En cuanto a la contraseña, muchos sistemas (como Solaris), no almacenan el valor encriptado, sino una x (nunca dejar la x en blanco porque se estaría dejando el usuario sin password). El valor encriptado se almacena en un fichero adjunto llamado /etc/shadow que los usuarios ordinarios no tienen permisos para ver y por tanto se dejan menos opciones para el crackeo por fuerza bruta.

Por ejemplo:

tbd:x:11102:110:Database Administrator:/opt/tbd:/bin/ksh
Tiene su correspondencia en /etc/shadow (la he alterado, no penséis que corresponde a una contraseña de mi sistema)

tbd:62yqgtwd35PJQ:13865::::::

En un sistema UNIX es preocupante que varios usuarios compartan la cuenta, que los usuarios dejen su contraseña escrita, que las contraseñas sean fáciles de adivinar... como en todos los sistemas operativos la seguridad empieza por las contraseñas.

Por cierto, en AIX que es muy original, el fichero de password está en /etc/security/passwd

Crear un usuario

Podemos hacerlo editando el fichero /etc/passwd. No debemos olvidar el comando pwconv en los sistemas con /etc/shadow.
Muchos sistemas tienen herramientas de ayuda para crear usuarios.

Ejercicio: Creación de un usuario en Fedora12.


Trabajar como superusuario
En la mayoría de las situaciones el superusuario trabaja con la shell. El entorno de un superusuario suele estar bastante pelado. Es tradicional que la shell de root sea Bourne Shell (bastante arcaica y con menos facilidades de trabajo que Korn Shell o Tenex C-Shell), por motivos de compatibilidad con sistemas antiguos. Esto suele ser incómodo para muchos y algunos tenemos la manía de crearnos un superusuario alternativo customizado (otros odian esta manía). Duplicamos la entrada del fichero de passwords y nos ponemos nuestras cositas

root:x:0:1:Super-User:/:/sbin/sh
roottcsh:x:0:1:Super-User Customized Account:/root:/usr/local/bin/tcsh

Anécdotas
El rol de superusuario a muchas personas les encanta. Eso de "convertirse en superusuario" tiene un halo que por mucho que le expliques a alguien en una máquina Windows no lo puede entender.

Asociado al rol de superusuario no sólo hay destrezas sino también anécdotas y desastres.

Cualquier persona que haya pasado tiempo administrando un sistema UNIX, sabrá que lo peor que puede hacer es "rm -rf /" (esto borra todos los ficheros hasta que te has pulido el sistema, o hasta que haya desaparecido algo importantísimo como la libc.so). Una de las primeras cosas que debes recibir con la contraseña de superusuario es el título de saber hacer backups y de saber instalar el sistema, para que no sea otro el que tenga que arreglar tus desastres.

En sistemas "reales", el poseedor de la contraseña de root es una persona con poder: puede leer el correo de otros, borrar sus archivos... por tanto un superusuario tiene que tener ciertas convicciones "éticas".


Bibliografía
Capitulo 7 del libro de Nemeth
http://www.dsi.uclm.es/asignaturas/42602/seguridad.pdf



No hay comentarios:

Publicar un comentario