LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado
 

EN ESTE CAPÍTULO SE ABARCAN LOS SIGUIENTES OBJETIVOS DEL EXAMEN:

  • 107.1: Administrar cuentas de usuarios y grupos, y los archivos del sistema relacionados (5)
  • 108.2: El registro del sistema (3)
  • 107.2: Automatizar las tareas de administración del sistema mediante la programación de tareas (4)

Administrar el sistema

Sobre usuarios y grupos

Usuarios

Linux nos permite dar casi cualquier nombre a una cuenta de usuario. Las reglas mas “liberales” sobre nombres de usuario nos permiten usar caracteres en minúsculas y mayúsculas (para Linux, Andrea, andrEa y andrea serán cuentas diferentes)  , tener una longitud de hasta 32 caracteres y usar algunos caracteres especiales como el guión bajo (_), el punto (.) o el signo del dólar ($) al final del nombre. Se recomienda que las cuentas de usuarios comiencen con una letra, aunque se pueden emplear números incluso caracteres de puntuación como el ‘.‘ y el ‘_‘. Algunas utilidades usadas para la creación de cuentas de usuarios son mas restrictivas, por lo que nos podemos encontrar problemas a la hora de crear un nombre con espacios, mas de 8 caracteres o incluso que no nos permitan comenzar el nombre con caracteres especiales, números o incluso usar letras mayúsculas.

 Nota: Si empleamos como primer caracter para el nombre de la cuenta el ‘.’ (punto) tendremos que tener en cuenta que el directorio home del usuario aparecerá como oculto bajo /home

 Cada usuario que creemos en el sistema tendrá una línea que lo identifique en el archivo /etc/passwd y su correspondiente contraseña encriptada más algunas características de la cuenta en el archivo /etc/shadow.

 Podemos ver los usuarios logueados en el sistema a través del comando finger.

Nota: El comando finger está en desuso por su alto riesgo de inseguridad. Existen otros comandos como who o w con los que podemos ver los usuarios logueados en el sistema

Sobre el archivo /etc/passwd

El formato de /etc/passwd es el siguiente: usuario:x:UID:GID:nombrecompleto:directoriohome:consola

nebul4ck:x:1000:1000:Gonzalo Sánchez,695-235-526:/home/nebul4ck:/bin/bash

 El segundo campo ‘x‘ indica que la contraseña no se almacena en este archivo, si no que se encuentra encriptada en /etc/shadow. Los campos tercero y cuarto indican el UID (ID de usuario) y GID (ID del grupo principal del usuario) del usuario. El quinto campo es utilizado para proveer información acerca del usuario, como su nombre y teléfono en nuestra línea de ejemplo. Este campo no es un requisito para la creación de un usuario, es  por ello que con frecuencia lo encontremos vacío. Si un campo no tiene valor, aún así deberá de ser definido por dos puntos ‘:‘ tal que así:

nebul4ck:x:1000:1000::/home/nebul4ck:/bin/bash

 Por último el sexto campo, cuyo objetivo es ejecutar un comando. La mayoría de las veces se utiliza este campo con dos objetivos principales:

  • Ejecutar un shell para el usuario, bash en nuestro ejemplo
  • Negar el acceso de sesión a un usuario. Esto es utilizado normalmente para cuentas del sistema a las que no se le tiene permitido iniciar sesión como por ejemplo ‘daemon‘, ‘man‘, ‘nobody‘… Esto se suele conseguir de dos formas distintas. Si despliegas el contenido del archivo /etc/passwd podrás observar que existen líneas que poseen como sexto campo el comando /usr/sbin/nologin mientras que otros (hablamos de valores diferentes a una consola) tienen como valor /bin/false. Ambos niegan el acceso a la cuenta, la diferencia es que el comando nologin en realidad ‘te permite acceder a la cuenta‘ pero acto seguido te muestra un mensaje diciendo que el usuario no tiene permitido el acceso y te expulsa. Esta opción suele ser la preferida por el hecho de mostrar como poco un mensaje. /bin/false es un binario que finaliza directamente devolviendo el código de retorno ‘1’, por lo que tras escribir la contraseña lo único que notaremos será un pequeño parpadeo en la pantalla y de nuevo estaremos ante el prompt pidiéndonos unas credenciales o bien en el prompt del usuario en el que nos encontrábamos antes de ejecutar la orden ‘su – nuevousuario‘, estudiaremos los comandos su y sudo en otra sección de este mismo capítulo.

Sobre el uso de UID y GID

Todos los archivos y directorio que cree el usuario, así como cualquier programa ejecutado por él, se asociarán a su UID y GID.

Algunas distribuciones dan como primer UID y GID el identificador 1000 y otras el 500. Si tenemos un usuario con UID y GID 1000 unicamente y creamos otro, este tomará por defecto el UID y GID 1001 y así secuencialmente, a menos que indiquemos nosotros mismos el UID y GID mediante opciones de la utilidad de creación de cuentas, al igual que usando estas, podremos seleccionar la consola, directorio home principal y nombre o comentario que nosotros decidamos. Linux sigue el rastro de los usuarios y grupos por sus respectivos UID y GID en vez de por sus nombres, por lo que accederá a /etc/passwd o /etc/group (veremos el formato de este archivo en el apartado de grupos) para localizar el número asociado al nombre. El primer centenar de ID de usuarios y grupos (0-99) suelen reservarse para uso del sistema, como por ejemplo para cuentas como root (0), daemon (1), bin (2), mail (8), etc..

Importante: Los ID de cuentas del sistema suelen variar de una distribución a otra, menos el UID y GID de root, que siempre será 0. Deberemos de prestar especial atención a esto, ya que un intruso podría crear una cuenta con UID 0 para obtener privilegios de root. Si detecta una cuenta sospechosa en su archivo /etc/passwd con un UID 0, es probable que su sistema esté comprometido.

Se pueden crear varios cuentas de usuario y grupos con los mismos UID y GID, siendo estas, cuentas totalmente diferentes, por lo que existirá una entrada en /etc/passwd y /etc/group para cada una de ellas, con diferentes contraseñas, directorios principales, etc… No obstante, Linux tratará a estas cuentas de la misma manera en lo referente a los permisos de archivos, ya que estos son aplicados a los UID y GID, por lo que debería de evitar crear varios usuarios o grupos de compartan ID.

Reutilizar un número ID puede provocar problemas si no elimina los archivos del antiguo usuario ya que el nuevo usuario se convertirá en el propietario de los archivos del anterior.

Los límites de numeración de cuentas se definen en el archivo /etc/login.defs con las entradas UID_MIN y UID_MAX

Sobre el archivo /etc/shadow

Como comentábamos anteriormente el archivo /etc/shadow contiene la contraseña encriptada del usuario y algunos otros parámetros configurables con la utilidad chage, passwd, useradd o usermod que veremos en apartados posteriores.

Vamos a estudiar este archivo mediante una línea de ejemplo:

nebul4ck:$8$km3ZmQpk9mJLlq3bVGU6ssPwa:15988:0:-1:7:-1:-1:
  • Nombre de usuario: El nombre de usuario enlaza las entradas de este archivo con las de /etc/passwd.
  • Contraseña: Formato encriptado. Un asterisco ‘*‘ o signo de admiración ‘!‘ al comienzo de este campo denota una cuenta sin contraseña, por lo que esta se encontrará bloqueada. Si eliminamos este signo se desbloqueará la cuenta y se restaurará la contraseña original.
  • Ultimo cambio de contraseña: Fecha en la que se realizó el último cambio de contraseña. Se identifica por el número de días transcurridos desde el 1 de Enero de 1970, 15988 en nuestro ejemplo.
  • Días que han de pasar para permitir un cambio de contraseña: Es el número de días que han de pasar para que se pueda cambiar la contraseña. En nuestro ejemplo un 0, que indica que cualquier día será bueno para cambiar la contraseña e incluso cambiarla varias veces al día.
  • Periodo de días tras el cual habrá que modificar la contraseña: Es el número de días que deberán de pasar desde que se cambió la contraseña hasta que se requiera un nuevo cambio. En nuestro ejemplo se indica un -1 (equivalente a 99999) que normalmente indica que se ha desactivado esta función.
  • Avisar con antelación de la necesidad de cambiar la contraseña: En nuestro ejemplo se nos avisará 7 días antes de que nuestra contraseña nos caduque. 7 suele ser un número muy común en este campo, indica una semana antes.
  • Días que pasarán entre la caducidad de la contraseña y la desactivación de la cuenta:  Cuando una cuenta se desactiva (bloquea) por que su contraseña a caducado el usuario no podrá usar su cuenta, por ello se ofrece un plazo en días en los cuales el usuario podrá cambiar su contraseña justo después de acceder a la cuenta (siempre que se encuentre dentro del plazo), de lo contrarío la contraseña anterior será eliminada y será el administrador quien tenga que volver a activar dicha cuenta.
  • Fecha de caducidad: Esta fecha se expresa de la misma manera que la fecha del último cambio de contraseña es decir los días transcurridos desde el 1 de Enero de 1970 hasta el día en que la cuenta caducará.
  • Indicador especial: Este campo no suele usarse por lo que en nuestro ejemplo lo tenemos vacío
nombre:contraseña:último-cambio:cambiar-pass-no-antes-de:cambiar-contraseña:días-de-aviso:periodo-de-gracia:caducidad:indicador

Nota: Cuando hablemos sobre la modificaciones de las cuentas de usuario veremos que es posible modificarlas a través de los archivos /etc/passwd y /etc/shadow, pero se recomienda que las modificaciones se hagan con las utilidades destinadas a tal fin como son passwd, chage, usermod,etc…

Advertencia: El archivo /etc/shadow se suele almacenar con permisos mas restrictivos (600) que los usados en /etc/passwd (644) evitando de esta manera que los usuarios distintos a root lean el archivo y obtengan la lista de contraseñas encriptadas.

Grupos

Los grupos son medios para organizar colecciones de cuentas. Un grupo puede ser el grupo principal de uno o varios usuarios y además contener a mas usuarios aunque para estos no sea el grupo principal. La pertenencia a los grupos se controla mediante el archivo /etc/group, el cual contiene una lista de grupos y los miembros que pertenecen a cada uno de ellos. Podemos comprobar a que grupos pertenecemos y otras características de la cuenta como los ID de usuario y grupos con el comando id o bien listar todos los grupos a los que pertenecemos con el comando groups. El comando groups no indicará cual es nuestro grupo primario ni los GID, simplemente desplegará una lista con todo aquel grupo del que formamos parte.

Cuando un archivo es creado se le asigna un grupo que será el grupo principal del usuario que ha creado o ejecutado el archivo/directorio o el programa en cuestión. Sin embargo, para ejecutar programas o crear archivos con un grupo distinto al grupo primario del usuario creador, este deberá de ejecutar el comando newgrp para cambiar la pertenencia del grupo principal al nuevo grupo. Para que esto sea posible el usuario debe de pertenecer antes al nuevo grupo o si el nuevo grupo tiene definida una contraseña de grupo esto no será necesario, pero si que el usuario podrá convertirse en miembro temporal del grupo siempre y cuando conozca dicha password que será solicitada tras la ejecución de newgrp.

Nota: En algunas distribuciones no se permite la modificación temporal del grupo principal aún conociendo la password del grupo (este recibirá un mensaje del tipo “access denied“), a menos que previamente el usuario pertenezca al grupo.

Ejemplo de newgrp:

Supongamos que el usuario ‘dante‘ tiene como grupo principal ‘dante‘ y que además pertenece a otros grupos, entre ellos al grupo ‘sistemas‘, y quiere cambiar a este último para que nuevos archivos sean creados con el GID del grupo sistemas y además ejecutar unos programas bajo los permisos asignados al grupo.

$ newgrp sistemas

Una vez ejecutado este comando el nuevo grupo principal para dante será sistemas y los archivos creados se asociarán a este.

Debemos de conocer algunas peculiaridades del uso del comando newgrp:

  • El cambio al nuevo grupo principal es temporal, es decir, al iniciar una nueva sesión o cerrar y abrir una terminal, volveremos a tener nuestro grupo principal por defecto.
  • Cuando ejecutamos newgrp veremos los efectos a la hora de crear archivos o ejecutar programas, pero no si desplegamos el contenido de /etc/passwd o /etc/group para los cuales nuestro grupo principal seguirá siendo el que teníamos por defecto.
  • Si hemos ejecutado newgrp para pasarnos a otro grupo temporalmente y queremos volver a nuestro grupo de origen sin cerrar sesión e iniciar nueva sesión bastará con volver a ejecutar newgrp sin argumento alguno

Configurar cuentas de usuario

En esta sección del capítulo vamos a repasar las herramientas con las que podremos crear, modificar y eliminar cuentas de usuario. Linux posee herramientas GUI para tal fin, pero las que vamos a estudiar son las que están basada en modo texto, ya que son mas flexibles y por ello nos permitirán realizar una configuración mas detallada. Como veremos en las próximas secciones las cuentas de usuarios y grupos pueden ser creados mediante comandos destinados a tal fin, o bien editando una serie de archivos de forma manual. En la sección de creación de cuentas de usuarios y grupos hablaremos sobre las herramientas destinadas a estas tareas ya que son la forma conveniente de hacerlo. No obstante en la sección “Modificando cuentas de usuarios y grupos directamente desde archivos de configuración” estudiaremos como hacerlo de tal forma.

Creando cuentas de usuarios

Cuando creamos una cuenta de usuario en el sistema realmente lo que se está haciendo de forma automática es lo siguiente:

  • Crear una línea de identificación y especificación de ciertas características de la cuenta en el archivo /etc/passwd
  • Crear una contraseña con el comando passwd. Esto suele hacerse de forma manual (por seguridad) tras crear la cuenta y lo que hace es añadir una contraseña encriptada en el archivo /etc/shadow
  • Se crea una línea en /etc/group para identificar al grupo primario del usuario
  • Se crea un directorio /home/<usuario> en el que se copian una serie de archivos de configuración de perfil desde el directorio /etc/skel

Todo lo automatizado o configurable del comando destinado a crear un usuario useradd, es definido en el archivo de configuración /etc/default/useradd y por otra parte el comportamiento de una cuenta viene determinado por /etc/login.defs por lo que ambos ficheros son de importancia cuando se crea o administra una cuenta de usuario. Veremos que existen en algunas distribuciones una interfaz sencilla llamadas adduser la cual se configura en otros archivos independientes.

Para crear cuentas de usuarios utilizaremos la utilidad de bajo nivel useradd, para la cual existe en muchas distribuciones (como por ejemplo las derivadas de Debian) una interfaz mas sencilla denominada adduser que automáticamente selecciona valores basados en la línea de comandos y en el archivo de configuración /etc/adduser.conf,  como por ejemplo el ID de usuario y grupo, la creación de un directorio personal (/home/usuario), ejecución de un script personalizado y algunas otras funcionalidades.

En este caso, aunque la herramienta que abarca el examen es useradd, vamos a estudiar también adduser.

Cuando invocamos a useradd es su forma mas simple, es decir con tan solo el nombre de login de usuario como parámetro no crearemos ningún directorio home, los UID y GID serán definidos por defecto, no asignaremos un shell, ni tampoco añadiremos información complementaria como su nombre o teléfono. Esto no quita que la cuenta tenga unas característica o comportamiento determinado como por ejemplo un directorio mail a utilizar (/var/mail), un valor de variable PATH predeterminado para la cuenta, una umask, valores de UID/GID mínimos y máximos, los intento de login fallidos, el TIMEOUT para el login, método de encriptación para la clave (SHA512 por defecto) cuando esta es creada con el comando passwd, y algunos otros muchos parámetros incluso relacionados con los grupos que son definidos por variables en el archivo /etc/login.defs.

En cambio si utilizamos el comando useradd con parámetros para crear shell o directorio home, este se basará en los valores de unas determinadas variables definidas en el archivo /etc/default/useradd. Podremos ver los valores de estas variables con la opción -D de este comando e incluso modificarlas.

Estudiaremos la sintaxis y opciones de ambos comandos en el apartado de comandos de este mismo capítulo, pero mencionaremos algunos ejemplos para ir familiarizándonos con ellos.

  • Crear un usuario con useradd sin utilizar parámetros y opciones adicionales:
$sudo useradd cursolpi

La línea que se generará en el archivo /etc/passwd tendrá el siguiente aspecto:

cursolpi:x:1007:1007::/home/cursolpi:
  • Crear un usuario prácticamente al detalle utilizando el mismo comando useradd:
sudo useradd -d /home/cursolpi -m -c "Usuario para curso LPIC-1" -e 2015-04-20 -u 1024 -g 1001 -G 1002,104 -s /bin/bash -p norecomendedado cursolpi

 Lo que hace este comando es crear con ‘-m‘ el directorio indicado por el parámetro ‘-d‘, con un comentario ‘-c‘, indicando que la cuenta expire ‘-e‘ en una fecha determinada, se asigna un UID y GID específico y además se le hace miembro de otros dos grupos ‘-G‘, utilizará el shell bash y para acceder a su cuenta necesitará su nombre de usuario ‘cursolpi‘ y su contraseña ‘norecomendado‘.

Advertencia: Como medida de seguridad no se recomienda utilizar el parámetro -p <contraseña> desde la línea de comandos. Es preferible crear la cuenta y a continuación utilizar el comando passwd para tal fin

Ahora la nueva línea del archivo /etc/passwd tendrá el siguiente aspecto:

cursolpi:x:1024:1001:Usuario para curso LPIC-1:/home/cursolpi:/bin/bash
  • Crear un usuario con los valores por defectos configurados en /etc/adduser.conf con el comando adduser que desplegará unas líneas que servirán para que interactuemos con la utilidad:

adduser

Tras esto la línea creada para este nuevo usuario en el archivo /etc/passwd tendrá el siguiente aspecto:

dottore:x:1007:1007:Patricio Calamonte,12,666-666-666,:/home/dottore:/bin/bash

Nota: La utilidad adduser nos permite además crear grupos pasándole el parámetro –group, pero mejor utilizar las herramientas destinadas a la creación de grupos.

Implementar  contraseñas shadow y crear una o varias contraseñas.

Las distribuciones  actuales traen por defecto la implementación de contraseñas shadow, esto no es mas que una forma de implementar algo mas de seguridad para guardar las contraseñas de nuestros usuarios. En versiones anteriores de distribuciones las contraseñas solían guardarse de forma encriptada en el campo de contraseñas del archivo /etc/passwd. Esto tenía la vulnerabilidad de que cualquier usuario podía leer el archivo y con ello la contraseña encriptada. Si desplegamos el contenido de nuestro archivo /etc/passwd lo mas normal será tener una :x: en el campo de contraseña, esto indica que tenemos implementado contraseñas shadow, con lo que estas serán guardadas en el archivo /etc/shadow el cual solo puede ser leído por root. No obstante podemos implementar o igualmente dejar de utilizar estas contraseñas con los comandos pwconv y pwunconv respectivamente. Si usamos el comando pwconv lo que hará será copiar el campo de contraseña de /etc/passwd en el campo de contraseña de /etc/shadow y añadir el caracter x en dicho campo de /etc/passwd. El uso de pwunconv realizará la acción inversa.

Tengamos o no implementado contraseñas shadow en nuestro sistema, podremos usar el comando passwd o gpasswd para crear contraseñas de cuentas de usuario o grupos respectivamente. Además tenemos la opción de contraseñas para múltiples cuentas de una sola vez, gracias al comando chpasswd que leerá desde su entrada estándar una lista de usuario:contraseña (una por cada línea).

El comando passwd nos permite pasar una serie de opciones. El uso de la opción -p <contraseña> establece una contraseña desde línea de comando algo que es desaconsejado, mejor crear la cuenta y posteriormente asignar una contraseña con ‘$ sudo passwd cursolpi‘. Los usuarios normales pueden utilizar passwd para cambiar sus contraseñas, pero muchos de sus parámetros como -l, -u, -f y -d solo los puede utilizar root. Un usuario corriente podrá cambiar su contraseña simplemente invocando a la utilidad passwd sin ningún parámetro. Como medida de seguridad se le preguntará por la antigua contraseña antes de proceder al cambio. Solo root puede especificar tras la orden passwd el nombre del usuario al que se le va a crear/modificar la contraseña.

Nota: Hay que tener en cuenta a la hora de crear/modificar la contraseña que Linux distingue entre mayúsculas y minúscula.

Como comentábamos anteriormente, cabe la posibilidad de cambiar la contraseña a varios usuarios de una misma vez mediante el comando chpasswd que solo root podrá ejecutar. chpasswd lee de la entrada estándar una serie de líneas cada cual debe estar formada por un usuario y una contraseña (en texto plano) separado por dos puntos ‘:‘ (usuario:contraseña). Será chpasswd a través de PAM quien codifique las contraseñas, aunque este comportamiento puede ser cambiado mediante las opciones -e, -c o -m del comando, algo que no es recomendado. Este comando suele utilizarse en sistemas que contienen multitud de cuentas de usuarios donde realizar la tarea de cambiar contraseñas una a una resulta tedioso.

Crear grupos

Al igual que ocurre con la herramienta de creación de cuentas de usuario, para los grupos disponemos de la utilidad de bajo nivel groupadd y la interfaz sencilla para algunas distribuciones addgroup. Lo normal en el momento de crear un grupo es pasar como argumento el propio nombre del grupo al  comando groupadd. El sistema le asignará el GID que cree conveniente, normalmente sumándole 1 al último GID existente.

La interfaz de creación de grupos addgroup funciona de una forma similar, es decir bastará con pasar como argumento el nombre del grupo. Será el archivo /etc/adduser.conf el que predetermine la funcionalidad del comando addgroup.

  • Creando un grupo con groupadd:
$ sudo groupadd -g 1003 -o -r -p vulnerable newbie

Con estos parámetros estaremos actuando de una forma ‘imprudente‘, pero servirá para nombrar algunas opciones importantes. Por ejemplo como ya vimos, pasar el parámetro -p seguido de la password no es lo aconsejable. Ya existe un grupo con el ID 1003 en el sistema, pero con -o le estaremos indicando a la utilidad que cree el grupo ‘newbie‘ compartiendo GID con el grupo ya existente, es decir, existirán 2 grupos con diferentes nombres pero mismo GID. La opción -r indica que será un grupo del sistema, en realidad no es algo muy grave porque simplemente estaremos diciendo que use uno de los GID reservados (normalmente del 0-99) para grupos del sistema, aún así no es aconsejable crear un grupo ‘ordinario‘ de esta forma.

Modificar cuentas de usuarios

Tanto las cuentas de usuarios como los grupos pueden ser modificados de varias maneras, bien editando directamente los archivos /etc/passwd, /etc/group, /etc/shadow y /etc/gshadow (forma menos aconsejable) o la modificación mediante herramientas destinadas a tal fin con las que evitaremos errores típicos. Un error al editar el archivo /etc/shadow suele ser el no tener en cuenta los años bisiestos a la hora de contar el número de días que hay desde el 1 de Enero de 1970 hasta el día en el que queremos que una contraseña caduque.

Además de estas dos formas, podremos personalizar los entornos de las cuentas de usuarios a través de sus archivos propios de configuración (~/.profile, ~/.bashrc o ~/.bash_profile) o los archivos de configuración global para cuentas como /etc/profile y /etc/bash.bashrc.

Modificando las cuentas de usuarios y grupos directamente desde los archivos de configuración

En apartados anteriores describimos los formatos de los archivos /etc/passwd, /etc/shadow y /etc/group. Conociendo los formatos, podremos modificarlos mediante un editor de texto e indicar en cada uno de sus respectivos campos aquellos valores con los que queramos que las cuentas sean configuradas.

Ala hora de modificar estos archivos directamente habrá que tener en cuenta por ejemplo la creación de una cuenta encriptada, siempre será mejor utilizar la utilidad passwd para tal fin. No es aconsejable editar manualmente de forma general el archivo /etc/shadow ya que contiene campos demasiado específicos que podremos configurar de forma mas segura con herramientas como passwd, useradd o usermod.

Los archivos /etc/passwd y /etc/group son mas fácil de configurar que /etc/shadow, aun así volvemos a hacer hincapié en el uso de herramientas de línea de comandos o GUI. No obstante si hemos decidido finalmente crear o modificar usuarios y grupos desde sus archivos de configuración deberemos de tener en cuenta una serie de aspectos:

  • Hacer una copia de seguridad de los archivos a editar. Si metemos la pata durante la edición, lo mejor será tener una copia del archivo original.
  • En el archivo /etc/passwd deberemos de dejar en blanco el campo de la contraseña para posteriormente generarla con el comando passwd.
  •  Será importante mantener la secuencia de los identificadores de usuarios y grupo en los campos UID y GID. Para ello podremos ver el número ID asignado al último usuario y grupo que creamos y sumarle +1.
  • Una vez generada la línea que identifica a un usuario en el archivo /etc/passwd, guardaremos el archivo, generaremos la clave, y entonces crearemos el directorio /home, en el que copiaremos el contenido del directorio esqueleto (/etc/skel) del cual hablaremos mas adelante. A continuación le cambiaremos los permisos a este mediante el comando chown para que el nuevo usuario pueda acceder al sistema ya que de no tener permisos para acceder a su directorio no se le permitirá el acceso al sistema.
  • Por último antes de que el usuario acceda al sistema deberemos de crear su grupo principal, añadiendo en el archivo /etc/group su correspondiente línea, a menos que hayamos indicado un grupo principal en /etc/passwd ya existente.

Modificando las cuentas de usuarios desde la línea de comandos

Las dos herramientas por excelencia para la modificación de cuentas de usuario ya creadas son usermod y chage

Con el comando usermod podremos modificar características de una cuenta como por ejemplo cambiar el directorio principal de un usuario -d y además mover todo el contenido del antiguo directorio al nuevo -m. Otra de las funciones que nos facilita usermod es el cambio del nombre de acceso del usuario (incluso el nombre de root podrá ser cambiado), esto será posible gracias a su parámetro -l. Si hemos modificado el nombre del login para un usuario, tendremos que tener en cuenta que los nombres de su directorio principal y de existir el de mail no serán automodificados por lo que deberemos de renombrarlos nosotros. Del mismo modo que el comando passwd, nos permite bloquear y desbloquear una cuenta (en realidad bloquea la contraseña) podremos hacerlo con los parámetros -L y -U respectivamente.

Podemos también modificar los valores UID y GID de una cuenta, pero de hacerlo es muy importante saber que cuando cambiamos a un nuevo identificador, los archivos ya existente no cambiarán por lo que es posible que el usuario o incluso los usuarios pertenecientes al grupo dejen de tener acceso a estos. En este caso podremos recurrir a la utilidad find para localizar archivos en el sistema con un determinado UID y GID y ejecutar el comando chown para cambiarlos al nuevo usuario.

$ sudo find / -uid 1001 -gid 1001 -exec chown nebul4ck

Importante: Cambiar las características de una cuenta mientras el usuario está dentro del sistema puede tener consecuencias desagradables, en particular con el uso de los parámetros -d y -m de usermod. Algo a tener en cuenta por ejemplo cuando se cambian opciones como la consola por defecto de un usuario, es que este cambio no tendrá efectos hasta que el usuario salga y vuelva a entrar.

Nota: Con el comando usermod también podremos modificar características de los grupos. Esto lo veremos en la sección de grupos.

Las cuentas de Linux se pueden configurar para que caduquen automáticamente. Será el comando chage el que nos permita modificar ciertos parámetros relacionados con la caducidad. Una cuenta de usuario podrá caducar siempre y cuando se cumpla alguna de las siguientes condiciones:

  • La cuenta está configurada para cambiar la contraseña cada cierto tiempo y esta, tras pasar el tiempo especificado e incluso un tiempo de gracia, no ha sido modificada.
  • La fecha del sistema ha sobrepasado un tiempo predeterminado.

Con la utilidad chage podremos hacer cosas como mostrar la información sobre el periodo de caducidad de la cuenta y la contraseña -l, definir el tiempo mínimo en días para poder volver a cambiar la contraseña -m (0 indica que puede cambiar la contraseña varias veces al día, 1 que puedes cambiarla una vez al día, 2 que podrás hacerlo 1 vez cada 2 días y así…) o por lo contrario establecer un periodo máximo entre cambios de contraseñas -M.

Nota: Si el usuario cambia una contraseña antes de la fecha límite, el contador se reinicializará, por lo que dispondremos nuevamente del margen de tiempo, por ejemplo, si hemos dado 30 días como tope entre cambios de contraseña, si al día que hace 25 modifico la contraseña, contaremos nuevamente con 30 días para volver a realizar el cambio y no con 5 días.

Otras opciones útiles para gestionar la caducidad pueden ser:

  • Definir la fecha del último día en que se cambió de contraseña, que aunque este valor lo controla Linux de forma automática, podremos alterarlo con -d AAAA/MM/DD o con el número de días transcurrido desde el 1 de Enero de 1970
  • Podremos definir la fecha de caducidad absoluta de una cuenta con el parámetro -E 2015/09/21, con el número de días transcurridos desde el 1 de Enero de 1970 o incluso que no caduque nunca pasándole como argumento al parámetro -1 en vez de una fecha o días.
  • Si antes de que caduque una cuenta definitivamente queremos disponer de un “periodo de gracia” comprendido entre el día en que caducó la contraseña y el día en que la cuenta será bloqueada podremos hacerlo con el parámetro -I díasdeinactivo. Una cuenta con contraseña caducada pero que aún no ha sido bloqueada pedirá al usuario que cambie la contraseña justo después de acceder a esta.
  • Una cuenta podrá pasar varios días en estado inactivo tras haber caducado una contraseña e incluso podrá llegar a bloquearse definitivamente si el periodo de gracia se termina. Para evitar esto lo mejor será definir un número de días previos a la caducidad de la cuenta para que seamos informados y poder modificar nuestra contraseña y evitar el bloqueo, por ejemplo -W 7 nos avisará desde el modo consola una semana antes de que nuestra cuenta caduque. Los usuarios que estén en modo Gui no serán avisados.

Normalmente solo root puede utilizar el comando chage, la única excepción es cuando se emplea la opción -l, que permite a los usuarios consultar la información de caducidad de su propia cuenta.

Para terminar con la modificaciones de cuentas de usuario, nombrar el comando chsh el cual nos permitirá cambiar el shell con el que inicia la cuenta de usuario y el comando chfn que permite cambiar la información (comentarios -c) del usuario.

Modificar grupos

Como ya comentábamos anteriormente las características de las cuentas de usuarios y los grupos pueden modificarse con utilidades destinadas a ello, o bien modificando directamente sus archivos de configuración. Para la modificación de grupos mediante utilidades además de la herramienta usermod disponemos también de otras como groupmod y gpasswd que serán las que se cubran en esta sección del tema “Sobre usuarios y grupos“.

Con el comando groupmod podremos modificar los parámetros de un grupo ya existente. Su sintaxis es bastante clara y sencilla al igual que sus opciones.

Sintaxis del comando groupmod:

groupmod [opciones] grupo

Básicamente las opciones de groupmod nos permitirán seleccionar un GID concreto para el grupo con su opción -g o –gid e incluso elegir uno ya existente con la opción -o:

$ sudo groupmod -go 1004 migrupo

Cambiar el nombre del grupo:

$ sudo groupmod -n nuevogrupo miantiguogrupo

Asignar una password con su opción -p (se desaconseja utilizar esta opción):

$ sudo groupmod -p mipasswd

La password podremos crearla mejor con el equivalente a passwd que es en este caso gpasswd, simplemente pasando como argumento al comando gpasswd la contraseña deseada. Como ya vimos en secciones anteriores esta contraseña además de implementar seguridad a la hora de agregar usuarios al grupo, permitía que un usuario que no es miembro de un grupo pudiese pasar a tener a este como grupo principal de forma temporal con el comando newgrp, aunque también se comentó que esto no funcionaba en todas las distribuciones de Linux. Podremos eliminar la password de un grupo con la opción -r de gpasswd. El comando gpasswd además de permitirnos crear o eliminar una contraseña de grupo nos permite realizar otras personalizaciones en los grupos con opciones como -a y -d que añadirá o eliminará respectivamente un usuario al grupo. Podremos agregar mas de un usuario al grupo, es decir crear una lista de miembros de grupo con la opción -M. Por último si queremos implementar algo mas de seguridad al grupo, a parte de tener una contraseña, sería bueno que el grupo fuera administrado por uno o varios usuarios, algo que conseguiremos con la opción -A. Con -R podremos restringir el acceso al grupo de forma temporal (newgrp) solo los usuarios que conozcan la password podrán acceder al grupo. Si la opción -R es definida la contraseña del grupo será seteada con el signo de admiración ‘!‘.

Algo muy común en la administración de grupos es el añadir miembros a un grupo. A continuación vamos a nombrar diferentes formas de hacerlo.

  • Añadir un usuario que ya existe a un grupo que también existe:
$ sudo adduser <usuario> <grupo>
  • Añadir un usuario que ya existe a un grupo que también existe. Es similar al comando anterior y además es el que deberemos de acostumbrar a usar:
$ sudo gpasswd -a <usuario> <grupo>
  • Añadir a uno o varios grupos existentes usuarios de nueva creación:
$ adduser | useradd [opciones de creación de usuario] -G grupo1,grupo2,grupoN...

 Añadir un usuario que ya existe a uno o varios grupos a la vez:

$ sudo usermod -G grupo1,grupo2,grupoN <usuario>

 

Nota: En este ultimo caso deberemos de especificar la lista de todos los grupos a los que ya pertenece el usuario además de los nuevos grupos de los que queremos que forme parte. De no especificar to111dos sus grupos anteriores, aquel que no indiquemos será eliminado, por lo que este comando también nos puede servir para eliminar a un usuario de uno o varios grupos.

 

  • Acabamos de ver en la nota anterior como eliminar a un usuario de uno o varios grupos, pero la mejor forma de hacerlo es la siguiente:
$ sudo gpasswd -d <usuario> <grupo>
  • O igualmente con la interfaz para userdel de algunas distribuciones Debian:
$ sudo deluser <usuario> <grupo>

Eliminar cuentas de usuario

Eliminar una cuenta de usuario no es complicado, pero deberemos de estar atentos para no dejar rastros de los usuarios, como son sus archivos o directorios creados, cuentas de correo, directorio home, etc… Si no queremos eliminar todo su contenido deberemos de hacer algo con él, para evitar que nuevos usuarios creados en el sistema puedan adoptar su UID (algo que a menos que se fuerce no suele ser muy normal) y tengan acceso completo a todos los archivos. A continuación vamos a ver como eliminar una cuenta de usuario y ver que hacer con todo aquello que queremos o no conservar.

Para eliminar cuentas disponemos de la utilidad userdel y de su interfaz sencilla deluser (en teoría solo para algunas distribuciones Debian). Ambas herramientas son sencillas de utilizar por lo que vamos a explicar el funcionamiento de de las dos.

  • Eliminar la cuenta de usuario de e.torres eliminando a demás su directorio /home y con ello todos los archivos en él creados, además de su directorio mail.
$ sudo userdel -r e.torres
  • La misma acción pero mas agresiva (eliminará no solo el directorio home del usuario, si no cualquier archivo con su UID en el sistema) podremos realizarla con deluser y su opción –remove-all-files o –remove-home si queremos dejar intacto todo archivo creado por el usuario fuera de su directorio home
$ sudo deluser --remove-all-files e.torres

Nota: Ambos comandos aceptan la opción -f con la que podremos eliminar un usuario que se encuentre dentro del sistema e incluso al mismísimo root.

 

  • Si queremos eliminar un usuario con userdel y dejar intactos sus archivos bastará con no pasar la opción -r
  • En este caso el comando deluser ofrece una ventaja importante y es que nos permite realizar copias de seguridad que por defecto se crearán en el directorio raíz /nomusuario.tar.gz o /nomusuario.bz2 (opción –backup) o incluso redirigir la copia a un directorio concreto con –backup-to <directorio>

 

Nota: deluser nos permite eliminar un grupo (no el primario de un usuario) con su opción –group y podemos asegurarnos de que eliminamos un grupo que se encuentra vacío si lo comprobamos antes con la opción –only-if-empty

Una vez eliminada la cuenta con userdel -r podremos comprobar con el comando find / -uid <UID> si el usuario a dejado rastro por algún directorio del sistema y eliminarlos o decidir que hacer con ellos.

Algunos servidores entre los que destaca Samba, guardan su propia lista de usuarios. Si emplea un servidor de este tipo, es preferible eliminar la entrada del usuario de la lista de usuarios del servidor al eliminar la cuenta principal del usuario. En el caso de Samba esto se suele hacer editando manualmente el archivo smbpasswd, que suele encontrase en /etc/, /etc/samba o /etc/samba.d y eliminar la línea correspondiente al usuario en cuestión o bien utilizando el comando smbpasswd y su opción -x

Eliminar grupos

Los grupos se eliminan con el comando groupdel o como siempre dependiendo de la distribución podremos usar su interfaz sencilla delgroup e incluso deluser –group. Igualmente podremos eliminar un grupo editando el archivo /etc/group y /etc/gshadow si el grupo tiene contraseña. El comando groupdel verifica si el grupo es el grupo primario de algún usuario, en tal caso rehusará eliminarlo; tendrá que cambiar primero el grupo primario del usuario o borrar su cuenta. Como ocurre al eliminar las cuentas de usuario, puede que existan archivos y directorios en el sistema con el GID del grupo, lo mejor será buscarlos con find y modificar el grupo con chown.

Poner a punto entornos de sistemas y usuarios

Como ya comentamos al inicio del tema de creación de usuarios, los entornos de tipo texto de los usuarios se controlan a través de los archivos de configuración de la consola. En bash estos archivos son /etc/profile, /etc/bash, /etc/bash.bashrc, ~/.profile~/.bash_profile y ~/.bashrc.

Los archivos de /etc son archivos de configuración global, los del directorio principal de los usuarios afectan a las cuentas de los usuarios de manera individual y son copiados en el en home a la hora de crear la cuenta. Estos archivos controlan las distintas opciones de bash, incluyendo las variables de entorno. Podemos ver todas las variables de entorno definidas para una cuenta concreta ejecutando la orden env.

Bash mantiene algunas variables de entorno automáticamente como PWD, por lo que no debería intentar definirla en un script de configuración adicional. La modificación de los archivos de configuración de bash solo afectan a bash por lo que si un usuario no utiliza una consola en modo texto o usa otro shell distinto de bash definir las variables de entorno en archivos de configuración de bash no le será de ayuda.

Algo de información extra

Truco para recuperar la contraseña de root

Existen varias formas de hacerse con el control de root incluso cuando hemos sido olvidadizos y no recordamos la contraseña de nuestro superusuario. Vamos a explicar una forma sencilla pero eficaz de acceder a root sin saber su contraseña. Para esto necesitaremos un LiveCD o herramientas de rescate como SystemRescueCd, otro usuario en el sistema y además conocer la contraseña de este. Suponiendo que contamos con lo anterior, comenzaremos iniciando con el sistema de recuperación de emergencia y localizaremos el archivo /etc/shadow. De este archivo copiaremos la contraseña encriptada del otro usuario y la pegaremos en el campo de contraseña de root. A continuación podremos iniciar con root y teclear la contraseña del usuario. Una vez dentro se recomienda cambiarla con el comando passwd.

 

En una situación en la que ni siquiera contamos con otro usuario podremos vaciar el campo de contraseña de root para dejar el sistema si password. Una vez que accedamos lo mejor será crear una nueva contraseña.

Sobre los archivos esqueletos

Proporcionan un conjunto central de archivos de configuración que deben estar presentes en los directorios principales de los usuarios cuando estos se creen. Proporcionan un punto de partida para que los usuarios modifiquen sus archivos de consola y características de su perfil (~/.bashrc) e incluso algunas aplicaciones de terceros pueden exigir que definamos ciertas variables en alguno de estos archivos para su correcto funcionamiento (normalmente en ~/.profile o ~/.bash_profile), otros son usado para guardar los últimos comandos usados en la consola (~/.bash_history) o realizar tareas al finalizar la sesión en una terminal, como puede ser limpiar la pantalla y mostrar el prompt de nuevo (~/.bash_logout).

Nota: El archivo ~/.bashrc es ejecutado cuando invocamos un shell desde consola por lo que ajustará la configuración para este nuevo shell mientras que el archivo ~/.bash_profile o ~/.profile es ejecutado cuando el usuario inicia sesión por lo que será quién controle la configuración principal del shell de inicio del usuario. La configuración de estos archivos solo afectan a bash.

Podremos añadir al directorio /etc/skel archivos de configuración, de presentación (tipo README) e incluso un árbol de directorios.

Bases de datos de cuentas de red

Muchas redes emplean bases de datos de cuentas de red como por ejemplo NIS (Network Information System, Sistema de información de la red), su predecesor NIS+, LDAP (Lightweight Directory Access Protocol, Protocolo Ligero de Acceso a Directorios), dominios de Kerberos, dominios de Windows NT4.0 o dominios de Directorio Activo de Windows (AD).

Todos estos sistemas tienen como función principal trasladar la gestión de la base de datos de las cuentas de usuarios a un mismo servidor centralizado. La ventaja de estos sistemas es que administradores y usuarios no tienen por que preocuparse de la gestión individual de cada cuenta. El uso de estos sistemas o semejantes implica que la mayoría de las cuentas no aparecerán en /etc/passwd, /etc/group, /etc/shadow o /etc/gshadow y digo la mayoría porque siempre estarán como mínimo las cuentas del sistema local (daemon, man, mail o incluso la de algún usuario no perteneciente al dominio pero que tiene una cuenta concreta en el sistema local).

Implementar un sistema de este tipo suele ser complejo. Entre otras cosas deberemos de instalar el software apropiado, modificar el archivo /etc/nsswitch.conf y los archivos de configuración PAM (Pluggable Authentication Module, Módulo de autenticación conectable) de /etc/pam.d.

Tras implementar un sistema de autenticación basado en red, el comportamiento de utilidades como passwd o usermod quizás dejen de sernos útiles para crear estas cuentas de dominio.

Conclusiones sobre la administración de usuarios y grupos en Linux

Durante las secciones relacionadas con la creación, modificación y eliminación de cuentas de usuarios y grupos hemos estudiado algunos comandos y formas destinadas de realizar estas tareas. Hemos vistos comandos y sus similares en algunas distribuciones y hemos desaconsejado formas de realizar tareas de mantenimiento de usuarios de forma manual. A continuación vamos a ver un listado de las herramientas ‘estándar‘ para realizar el mantenimiento de usuarios y grupos y posteriormente las opcionales que funcionarán solo para algunas distribuciones.

Herramientas estándar:

  • Crear, Eliminar y Modificar usuario: useradd, userdel y (usermod, chage, passwd, chpasswd, chfn y chsh), respectivamente.
  • Crear, Eliminar y Modificar grupos: groupadd, groupdel y (groupmod y gpasswd), respectivamente
  • Añadir o Eliminar usuarios a un grupo: gpasswd -a ó gpasswd -d
  • Cambiar a grupo principal temporal: newgrp

Nota: El comportamiento de estos comandos puede ser modificado a través de lo archivos de configuración /etc/login.defs y /etc/default/useradd

Símiles de las herramientas estándar:

Nota: Son válidas solo en algunas distribuciones y pueden cambiar el comportamiento de una a otra distribución.

 

  • Crear y Eliminar usuarios: adduser y deluser
  • Crear y Eliminar grupos: (addgroup ó adduser –group) y (delgroup ó deluser –group), respectivamente.
  • Añadir y Eliminar usuarios a un grupo: adduser <usuario> <grupo> y deluser <usuario> <grupo>

 

Nota: Estos comandos suelen ser mas sencillos de utilizar, puesto que llevan configuradas opciones para pasar pocos argumentos por línea de comando y realizar muchos cambios e incluso son interactivo, es decir se realizan una serie de preguntas sobre el usuario cuando este es creado. Los archivo de configuración para estas herramientas son /etc/adduser.conf y /etc/deluser.conf aunque pueden existir otros como /usr/local/sbin/adduser.local o /usr/local/sbin/deluser.local que de existir serán ejecutados tras crear o eliminar las cuentas.

Como último de los comandos para la administración de grupos y usuarios estudiados en este tema mencionaremos el comando getent el cual nos permite imprimir por pantalla (o redireccionar a un archivo) el contenido de las bases de datos de gestión de usuarios como lo son /etc/passwd, /etc/group y /etc/shadow;

getent passwd | group | shadow

ademas de permitirnos ver el contenido de otros archivos como /etc/hosts, los servicios con su puerto y protocolo, los protocolos o redes;

getent hosts | services | protocols | networks

Nota: Estos últimos serán estudiados mas a fondo en el “Capítulo 8 – Configuración básica de redes

 


 Notas del autor:

 

Licencia Creative Commons
Curso LPIC-1 400 Capítulo 7 por nebul4ck se distribuye bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional.

 

Puede contratar ExtreHost para temas profesionales con sus servidores. No lo dude, contáctenos.

Pin It

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías