17 sept 2010

Tutorial de Usuario y Grupos en GNU/Linux

Puesto que Unix es un sistema multiusuario, permite que varios usuarios usen el sistema simultáneamente. Se hace necesario que cada usuario no pueda acceder a los documentos de los demás, además no todos los usuarios deberían poder instalar programas, modificar ficheros importantes del sistema u otras cosas importantes.

Por ello se establece nombre y contraseña para cada usuario. Además existe el administrador del sistema o superusuario, cuyo login es root, que tiene acceso a todo y permisos para todo.

Las contraseñas son almacenadas de forma cifrada, por lo que es imposible acceder a ellas (si las guardara simplemente en un fichero de texto, sería muy fácil acceder y romper el sistema de seguridad).

Dentro de las cuentas asociadas a usuarios podemos encontrar diferentes tipos:
  • Cuenta de administrador, con identificador root: sólo es (o debería ser) utilizada para las operaciones de administración. El usuario root es el que dispone demás permisos y acceso completo a la máquina y a los archivos de configuración. Por lo tanto, también es el que más daño puede causar por errores u omisiones. Es mejor evitar usar la cuenta de root como si fuese un usuario más, por lo que se recomienda dejarla sólo para operaciones de administración.
  • Cuentas de usuarios: cuentas normales para cualquier usuario de la máquina tienen los permisos restringidos al uso de ficheros de su cuenta, y a algunas otras zonas particulares (por ejemplo, los temporales en /tmp), así como a utilizar algunos dispositivos para los que se le haya habilitado.
  • Cuentas especiales de los servicios: lp, news, wheel, www-data... cuentas que no son usadas por personas, sino por servicios internos del sistema, que los usa bajo estos nombres de usuario. Algunos de los servicios también son usados bajo el nombre de root.

Información de usuarios

Toda la información sobre usuarios, grupos y contraseñas se guarda en los archivos:
  • /etc/passwd: información sobre usuarios
  • /etc/group: información sobre grupos
  • /etc/shadow: contraseñas cifradas
  • /etc/gshadow: contraseñas cifradas de los grupos, aunque generalmente no se utiliza este fichero
En estos archivos de texto, se almacena la información línea a línea (cada una es un usuario o un grupo) y dentro de cada línea hay varios campos separados por ":".

El fichero /etc/passwd

Archivo: /etc/passwd
usuario : x : UID : GID : comentarios : directorio_home : shell

donde cada uno de los campos se corresponde con:
  • usuario: identificador de usuario en el sistema.
  • x: contraseña, pero en su lugar aparece una 'x', ya que la contraseña se encuentra cifrada en /etc/shadow
  • UID: número de identidad del usuario. Es un valor único. Suele ser mayor o igual que 100, ya que el 0 se reserva para el root y del 1 al 99 para tareas del sistema.
  • GID: número de identidad de grupo. Al igual que ocurre con el UID, el cero se reserva para el grupo root.
  • comentarios: nombre real u otros comentarios sobre el usuario (puede contener espacios).
  • directorio_home: directorio de casa del usuario
  • shell: intérprete de comandos (normalmente bash). En caso de que se encuentre en este campo /bin/false, el usuario no podrá entrar en el sistema.
Nota: Si aparecen dos símbolos de dos puntos seguidos (::) significa que el campo está vacío.
Curiosidad
El fichero /etc/passwd solía contener las palabras de paso de los usuarios de forma encriptada, pero el problema estaba en que cualquier usuario podía ver el fichero, y en su momento se diseñaron cracks que intentaban encontrar en forma bruta la palabra de paso, mediante la palabra de paso encriptada como punto de partida (palabra codificada con el sistema crypt). Para evitar esto, hoy en día ya no se colocan las palabras de paso en este archivo, sólo una "x" que indica que se encuentran en otro fichero, que es sólo de lectura para el usuario root, /etc/shadow, que veremos a continuación.

El fichero /etc/group

Archivo: /etc/passwd
grupo : x : GID : lista_usuarios

donde cada uno de los campos se corresponde con:
  • grupo: identificador de grupo en el sistema.
  • x: contraseña, aunque lo más común es que este campo aparezca vacío (el grupo no necesita contraseña).
  • GID: número de identidad de grupo.
  • lista_usuarios: lista de usuarios que pertenecen al grupo separados por comas. También se pueden añadir usuarios de otros grupos, con lo que tendrían todos los privilegios de este grupo.
Para añadir un nuevo usuario a un grupo, basta con agregarlo en la lista de usuarios (sin olvidar poner la coma de separación entres usuarios).
La lista de usuarios del grupo puede estar presente o no, ya que la información ya está en /etc/passwd, no suele ponerse en /etc/group.

El fichero /etc/shadow

Archivo: /etc/passwd
usuario : contraseña_cifrada : d1 : d2 : d3 : d4 : d5 : d6 : reservado

donde cada uno de los campos es:
  • usuario: es el login o nombre de usuario (el mismo que en /etc/passwd)
  • contraseña cifrada: normalmente codificada con md5.
  • d1: nº de días desde el 01/01/1970 hasta último cambio de la contraseña.
  • d2: nº de días que deben pasar hasta que se pueda cambiar la contraseña.
  • d3: nº de días que deben pasar para que caduque la contraseña y deba ser cambiada.
  • d4: nº de días de antelación con los que avisará el sistema de la caducidad de la contraseña.
  • d5: nº de días con contraseña caducada antes de deshabilitar la cuenta.
  • d6: nº de días desde el 01/01/1970 y el día en que se deshabilitó la cuenta.
Además, las claves de encriptación pueden ser más difíciles, ya que ahora puede utilizarse un sistema denominado md5 (suele aparecer como opción a la hora de instalar el sistema) para proteger las palabras de paso de los usuarios.
Veremos más detalles al respecto en la unidad dedicada a la seguridad.

El fichero /etc/gshadow

Al igual que el fichero /etc/shadow de las contraseñas encriptadas para usuarios, también se puede usar un fichero /etc/gshadow de contraseñas encriptadas para grupos.
Se suele usar para permitir el acceso al grupo, a un usuario que no es miembro del grupo. Ese usuario tendría entonces los mismos privilegios que los miembros de su nuevo grupo.

Otros ficheros

Otros ficheros interesantes son los del directorio /etc/skel, donde se hallan los ficheros que se incluyen en cada cuenta de usuario al crearla.
Podemos tener unos scripts de configuración que se ejecutaban al entrar o salir de la cuenta. En el directorio skel se guardan los "esqueletos" que se copian en cada usuario al crearlo. Suele ser responsabilidad del administrador crear unos ficheros adecuados para los usuarios, poniendo los path necesarios de ejecución, inicialización de variables de sistema, variables que se necesiten para el software, etc.

Gestión de Usuarios y Grupos

A continuación vamos a ver una serie de órdenes útiles para esta gestión:

useradd

La orden useradd añade un usuario al sistema.
La sintaxis es:
useradd [opciones]
Algunas de las opciones más útiles son:
  • -c : Incluir comentario (normalmente nombre completo del usuario).
  • -d : Permite especificar su directorio de inicio.
  • -m: Crea directorio de inicio /home/usuario y le pone todos los subdirectorios y ficheros que haya en /etc/skel.

El nuevo usuario creado no tiene contraseña. Para asignarle una contraseña, tecleamos desde terminal:
passwd
Nota: Cualquier usuario puede cambiar su contraseña tecleando passwd.

userdel

La orden userdel borra la cuenta de un usuario.
La sintaxis es:
userdel [-r]
siendo:
  • -r: Borra también su directorio home.
Si usamos la opción -r borrará el directorio casa del usuario, pero no borra el resto de ficheros que tenga en otras carpetas. Estos ficheros tendrán como dueño un usuario inexistente, por lo que podría crear conflictos en el sistema. Por ello resulta aconsejable deshabilitar una cuenta en lugar de eliminarla. Otra opción es usar la orden deluser (que permite incluso hacer copia de seguridad de los ficheros del usuario).

usermod

La orden usermod modifica las opciones de un usuario.
La sintaxis es:
usermod [opciones]
Algunas de las opciones más útiles son:
  • -L: Lock. Bloquea la contraseña (deshabilita la cuenta).
  • -U: Unlock. Desbloquea la contraseña.

groupadd

La orden groupadd añade un grupo al sistema.
La sintaxis es:
groupadd

groupmod

La orden groupmod modifica un grupo.
La sintaxis es:
groupmod [-n]
donde:
  • -n : Cambia el nombre del grupo

groupdel

La orden groupdel borra un grupo del sistema.
La sintaxis es:
groupdel
Nota: Si el grupo es primario para algún usuario no se puede borrar.

Otras órdenes

  • chage: cambia información sobre la caducidad de la contraseña
  • chfn: cambia la información del campo "comentario" de un usuario, presente en el comentario del fichero /etc/passwd.
  • chsh: cambia el shell de inicio del usuario.
  • chpasswd: cambiar las contraseñas a un gran número de usuarios.
  • whoami: nos dice qué usuario somos
  • groups: nos dice en qué grupos estamos
  • id: nos muestra ID y grupos
  • login: nos permite cambiar de usuario
  • su: Cambio de identidad.
  • newusers: permite crear varias cuentas desde la información introducida en un fichero.
  • newgrp: nos permite cambiar a otro grupo (necesitamos saber la contraseña)
  • passwd: cambia la contraseña de un usuario. Puede ejecutarse como usuario, y entonces pide la contraseña antigua y la nueva. En el caso de hacerlo, el root tiene que especificar el usuario al que va a cambiar la contraseña (si no, estaría cambiando la suya) y no necesita la contraseña antigua.
  • sg: nos permite ejecutar comandos de otro grupo
  • who: lista los usuarios que hay en el sistema
  • w: lista los usuarios que hay en el sistema y lo que están haciendo
  • write: escribir mensaje a otro usuarios
  • wall: escribir mensaje a todos los usuarios
  • mesg: permitir o no que te escriban mensajes

Curiosidad
Respecto a la administración de usuarios y grupos, lo que hemos comentado aquí hace referencia a la administración local de una sola máquina. En sistemas con múltiples máquinas que comparten los usuarios suele utilizarse otro sistema de gestión de la información de los usuarios. Estos sistemas, denominados genéricamente sistemas de información de red, como NIS, NIS+ o LDAP, utilizan bases de datos para almacenar la información de los usuarios y grupos, de manera que se utilizan máquinas servidoras, donde se almacena la base de datos, y otras máquinas clientes, donde se consulta esta información.
Esto permite tener una sola copia de los datos de los usuarios (o varias sincronizadas), y que éstos puedan entrar en cualquier máquina disponible del conjunto administrado con estos sistemas. Además estos sistemas incorporan conceptos adicionales de jerarquías, y/o dominios/zonas de máquinas y recursos, que permiten representar adecuadamente los recursos y su uso en organizaciones con diferentes estructuras de organización de su propio personal y sus secciones internas.
Podemos comprobar si estamos en un entorno de tipo NIS si en las líneas passwd y group del archivo de configuración /etc/nsswitch.conf aparece compat, si estamos trabajando con los ficheros locales, o bien nis onisplus según el sistema con que estemos trabajando. En general, para el usuario simple no supone ninguna modificación, ya que la gestión de las máquinas le es transparente, y más si se combina con ficheros compartidos por NFS que permite disponer de su cuenta sin importar con qué máquina trabaje. La mayor parte de los comandos anteriores pueden seguir usándose sin problema bajo NIS o NIS+, son equivalentes a excepción del cambio de contraseña, que en lugar de passwd, se suele hacer con yppasswd (NIS) o nispasswd (NIS+); aunque suele ser habitual que el administrador los renombre (por un enlace) a passwd, con lo cual los usuarios no notarán la diferencia.

Ejercicios

Ejercicios de la sección de usuarios y grupos
Aspectos pedagógicos: Permiten el aprendizaje de órdenes relacionadas con la gestión y administración tanto de usuarios como de grupos. También sirve para asimilar el comportamiento habitual de un adminitrador a la hora de cambiar su rol y comprobar quién está trabajando en el sistema.
Preparación previa: Para hacer estos ejercicios debes acceder al sistema con el usuario por defecto usuario (recuerda que la contraseña es unix). A continuación:
  • Ve al directorio casa del usuario actual. Comprueba que existe un directorio llamado unix y dentro de éste un subdirectorio llamado usuarios. Para ello ejecuta:
    ls unix
    Debe aparecer el directorio usuarios. En caso de que no exista alguno de estos elementos, puedes hacer varias cosas:
    1. Descargar el archivo comprimido con la jerarquía de elementos de comprobación que se encuentra en la portada del wiki y descomprimirlo en el directorio casa del usuario actual.
    2. Apagar la máquina virtual y restaurar el snapshot que funcionaba bien.
    3. Apagar la máquina virtual y borrarla eliminando el disco duro virtual. A continuación, descargar el disco duro y volver a configurar la máquina de nuevo.
  • Ve al subdirectorio unix/usuarios. Limpia el sistema antes de realizar los demás ejercicios para prevenir posibles incongruencias:
    python usuarios.py -c
    o
    python usuarios.py --clean
  1. Cree un grupo de usuarios denominado "progs".
  2. Cree un usuario llamado "juan" cuyo grupo primario sea "progs".
  3. Cree un grupo de usuarios demonimado "externos".
  4. Cree un usuario llamado "luis" cuyo grupo primario sea "externos" y grupo secundario "progs".
  5. Vuelve al directorio inicial (usuarios) y ejecuta el primer control intermedio:
    sudo python usuarios.py -p 1
    o
    sudo python usuarios.py --partial 1
Debes haber aprendido a:Queda por aprender:
Modificación del rol del usuario y comprobacionesTrabajo de creación y modificación de nuevos usuarios y grupos
  1. Cree un directorio llamado "desarrollo" en /srv (comprueba si existe este directorio en la máquina virtual)
  2. Ponga los permisos adecuados para que luis pueda leer, escribir y acceder a él, pero que juan sólo pueda acceder y leer su contenido.
  3. Queremos que a partir de ahora todas las cuentas de usuario que se creen en el sistema tengan un directorio llamado repos.
  4. Vuelve al directorio inicial (usuarios) y ejecuta el segundo control intermedio:
    sudo python usuarios.py -p 2
    o
    sudo python usuarios.py --partial 2
Debes haber aprendido a:Queda por aprender:
Creación y modificación de nuevos usuarios y gruposModificación de datos de usuario
  1. Asegúrese de que todos los usuarios cambian su contraseña cada 30 días como máximo
  2. Cambie la contraseña del usuario luis, ponga como contraseña "SuJJh_4".
  3. Cambie el shell por defecto de juan, que use /bin/zsh.
  4. Vuelve al directorio inicial (usuarios) y ejecuta el control final:
    python usuarios.py
Tras la realización de estos ejercicios debes tener clara la utilización y el manejo de las siguientes órdenes:
useradduserdelusermodgroupaddgroupmodgroupdelnewusersnewgrpsuwho

Si aún sigues teniendo dudas puedes:
  1. Releer el artículo Usuarios y grupos de nuevo al completo, o tan sólo las secciones en las que tengas dudas.
  2. Volver a desarrollar los ejercicios de nuevo.
  3. Revisar los artículos creados en el wiki para cada una de las órdenes.
  4. Revisar el manual de las órdenes implicadas (recuerda que tienes los enlaces en los artículos del wiki de cada una y además en está el manual del sistema).

Posted by Víctor S. Recio

2 comments:

Luis Andujar. dijo...

Para que es El fichero /etc/shadow ?

Víctor S. Recio dijo...

para encriptar las contrasenas de los usuarios en sstemas unix-like y no puedan ser leidas

Publicar un comentario

 
;