Tema 107: Tareas administrativas
Last updated
Last updated
1
Importancia
5
Descripción
El candidato debe ser capaz de añadir, eliminar, suspender y modificar cuentas de usuario.
Añadir, modificar y eliminar grupos y usuarios.
Administrar información de usuarios/grupos en bases de datos de contraseñas/grupos.
Crear y administrar cuentas limitadas y de propósito especial.
La administración de usuarios y grupos es una parte muy importante del trabajo de cualquier administrador de sistemas. Las modernas distribuciones de Linux implementan interfaces gráficas que permiten gestionar todas las actividades relacionadas con este aspecto de forma rápida y sencilla, estas son diferentes entre sí en términos de diseños gráficos, no obstante las características siguen siendo las mismas. Con estas herramientas se pueden ver, editar, añadir y eliminar usuarios y grupos locales. Sin embargo, para una gestión más avanzada es necesario trabajar a través de la línea de comandos:
Antes de entrar con los comandos, debes saber que archivos intervienen, algunos de ellos ya los hemos visto en anteriores lecciones pero vamos a repasar:
Los usuarios se guardan por defecto en el archivo /etc/passwd que tiene una estructura tal que así:
Donde cada palabra separada por dos puntos significa:
nombre_usuario: El nombre de la cuenta de usuario.
contraseña: Esta parte normalmente contiene la contraseña en texto plano, pero debido a razones de seguridad, ahora generalmente contiene una "x" que indica que la contraseña está almacenada en el archivo /etc/shadow
*.
ID_usuario: El identificador único del usuario (UID).
ID_grupo: El identificador del grupo principal del usuario (GID).
nombre_completo: Información adicional sobre el usuario, como su nombre real.
directorio_home: El directorio home del usuario, donde se almacenan sus archivos personales.
shell: El intérprete de comandos predeterminado para el usuario (como /bin/bash
).
El fichero /etc/shadow
antes mencionado es donde se guardan las contraseñas cifradas de los usuarios y la información referente a su validez, tiene permisos de –rw
(escritura lectura) para usuario root y solo permisos de lectura para usuarios Shadow. Tiene una sintaxis parecida al "passwd
" tal que así:
Donde:
Nombre de Usuario
Contraseña cifrada con formato $id$salt$hashed. El $id
indica el algoritmo de cifrado: $1$ MD5, $2a$ o $2y$ Blowfish, $5$ SHA-256 y $6$ SHA-512
Guarda cuándo fue cambiada por última vez en numero de dias desde 1-01-1970, si quieres saber que fecha es puedes usar date -d '1970-01-01 +19480 days'
El mínimo de días que deben transcurrir hasta que pueda volver a cambiarse.
El máximo de días de validez de la contraseña.
Número de días durante los que avisará de que la clave va a caducar
Días que pasarán desde que la clave caduca hasta que se deshabilita la cuenta
En Linux, puedes añadir una nueva cuenta de usuario con el comando useradd
. Por ejemplo, con privilegios de root, puedes crear una nueva cuenta de usuario llamada Juan con una configuración por defecto, usando lo siguiente:
Cuando se ejecuta el comando useradd
, la información de usuario y grupo almacenada en las bases de datos de contraseñas y grupos se actualiza para la cuenta de usuario recién creada, y si se especifica, también se crea el directorio principal del nuevo usuario. Adicionalmente se crea un
grupo con el mismo nombre de la nueva cuenta de usuario. Los usuarios se guardan en el archivo /
Una vez que haya creado el nuevo usuario, puede establecer su contraseña usando el comando
passwd
. Puede revisar su ID de usuario (UID), ID de grupo (GID) y los grupos a los que pertenece a
través de los comandos id
y groups
.
Ten en cuenta que sólo los usuarios con privilegios de root pueden cambiar la contraseña de cualquier usuario.
Las opciones más importantes que se aplican al comando useradd
son:
-c
Crear una nueva cuenta de usuario con comentarios personalizados (por ejemplo, el nombre completo del usuario).
useradd -c "Juan Pérez" juan
-d
Crear una nueva cuenta de usuario con un directorio de inicio específico.
useradd -d /home/juan_custom juan
-e
Crear una nueva cuenta de usuario estableciendo una fecha específica en la que expirará.
useradd -e 2025-12-31 juan
-f
Establece el número de días después de que expire una contraseña, durante los cuales el usuario debe actualizarla (de lo contrario, la cuenta expirará). El valor por defecto es -1 .
sudo useradd -m -f 7 juan
-g
Crear una nueva cuenta de usuario con un GID específico.
useradd -g profesores juan
-G
Crear una nueva cuenta de usuario añadiéndola a múltiples grupos secundarios.
useradd -G sudo,desarrolladores juan
-k
Crear una nueva cuenta de usuario copiando los archivos del "skeleton" (skel) de un directorio personalizado específico (esta opción sólo es válida si se especifica la opción "m" o new home).
sudo useradd -m -k /usr/share/skeletons/devuser devjuan
-m
Crear una nueva cuenta de usuario con su directorio principal (si no existe).
useradd -m juan
-M
Crear una nueva cuenta de usuario sin su directorio principal.
useradd -M juan
-s
Crear una nueva cuenta de usuario con un de acceso específico.
useradd -s /bin/bash juan
-u
Crear una nueva cuenta de usuario con un UID específico
useradd -u 1050 juan
Los parámetros combinados podrian ser algo así:
Se crea el usuario juan
Su carpeta personal será /home/juan
Tendrá acceso a una terminal (bash
)
Pertenece al grupo principal staff
y también a los grupos sudo
y developers
Puede usar sudo
para ejecutar comandos como root
Su "nombre completo" o comentario será "Juan Pérez"
En ocasiones es necesario cambiar un atributo de una cuenta de usuario existente, como también el nombre de usuario, el shell, la fecha de caducidad de la contraseña, etc. En tales casos, necesitas usar el comando usermod
:
Al igual que con el comando useradd
, el comando usermod
requiere privilegios de root.
En los ejemplos anteriores, primero se cambia el shell de inicio de sesión de juan y luego se añade una breve descripción a esta cuenta de usuario. Recuerda que puedes modificar varios atributos a la vez, especificándolos en un solo comando. Las opciones más importantes que se aplican al comando `usermod' son las mismas que en useradd solo que estas modifican los parámetros concretos.
Si quieres borrar una cuenta de usuario, puedes usar el comando userdel
. En particular, este comando actualiza la información almacenada en las bases de datos de las cuentas, borrando todas las entradas referentes al usuario especificado. La opción -r
también elimina el directorio principal del usuario y todos sus contenidos, junto con el spool de correo del usuario. Otros archivos, localizados en otros lugares, deben ser buscados y eliminados manualmente:
Al contrario que useradd
y usermod
, necesitas el privilegio de root para borrar cuentas de usuario.
Los grupos en Linux ofrecen una buena herramienta para gestionar permisos de forma colectiva, son fáciles de usar, al igual que con la gestión de usuarios, puede añadir, modificar y eliminar grupos usando los comandos groupadd
, groupmod
y groupdel
con privilegios de root. Si quieres crear un nuevo
grupo llamado developer, puede ejecutar el siguiente comando:
La opción -g
de este comando crea un grupo con un GID específico, si lo haces así, debes saber que deberás cambiar el GID de todos los archivos y directorios que deben seguir perteneciendo al grupo.
Debes tener en cuenta que cuando añades una nueva cuenta de usuario, el grupo primario y los grupos secundarios a los que pertenece deben existir antes de lanzar el useradd
.
Si luego deseas renombrar el grupo de developer a web-developer y cambiar su GID, puedes
ejecutar lo siguiente:
Finalmente, si quieres borrar el grupo de web-developer, puedes ejecutar lo siguiente:
No se puede eliminar un grupo si es el grupo principal de una cuenta de usuario. Por lo tanto, debes eliminar el usuario antes de eliminar el grupo. En cuanto a los usuarios, si elimina un grupo, los archivos pertenecientes a ese grupo permanecen en su sistema de archivos y no se eliminan ni se asignan a otro grupo.
Los grupos se guardan en el archivo /etc/groups
y quienes pertenecen a ellos de forma secundaria, tiene una sintaxis de la siguiente manera:
Donde:
Nombre del grupo
Contraseña en /etc/gshadow
GID (Group ID)
Lista de nombre de usuarios separados por comas que pertenecen al grupo de forma secundaria
Cuando añades una nueva cuenta de usuario, incluso creando su directorio principal, el directorio principal recién creado se carga de archivos y carpetas que se copian del directorio skeleton (por defecto /etc/skel) pero se puede modificar con la opción -k
tal y como hemos visto.
La idea detrás de esto es simple: un administrador del sistema quiere agregar nuevos usuarios que tengan los mismos archivos y directorios en su carpeta principal. Por lo tanto, si desea personalizar los archivos y carpetas que se crean automáticamente en el directorio principal, debe añadir estos nuevos archivos y carpetas al directorio skel, piensa en ello como una plantilla para estructuras de carpeta.
Para listar todos los archivos y directorios en el directorio skel, debes usar el comando ls -al
.
En Linux, el archivo /etc/login.defs
especifica los parámetros de configuración que controlan la creación de usuarios y grupos. Además, los comandos mostrados en las secciones anteriores toman por defecto valores de este archivo, cuando administres usuarios y grupos, comprueba siempre este archivo para ver y eventualmente cambiar el comportamiento por defecto del sistema (si fuese necesario), esto es útil para designar directivas por defecto en el sistema. Las directivas más importantes son:
UID_MIN y UID_MAX: El rango de ID de usuario que puede ser asignado a los nuevos usuarios ordinarios.
GID_MIN y GID_MAX: El rango de ID de grupo que puede ser asignado a nuevos grupos ordinarios.
CREATE_HOME: Especifica si un directorio principal debe ser creado por defecto para los nuevos usuarios.
USERGROUPS_ENAB: Especifica si el sistema debe crear por defecto un nuevo grupo para cada nueva cuenta de usuario con su mismo nombre, y a su vez al eliminar la cuenta también se debe eliminar el grupo principal del usuario si ya no contiene miembros.
MAIL_DIR: El directorio de la cola de correo.
PASS_MAX_DAYS: El número máximo de días que una contraseña puede ser usada.
PASS_MIN_DAYS: El número mínimo de días permitido entre los cambios de contraseña.
PASS_MIN_LEN: La longitud mínima aceptable de la contraseña.
PASS_WARN_AGE: El número de días de advertencia antes de que una contraseña expire
Recuerda que puedes abrirlo con:
Este comando se utiliza principalmente para cambiar la contraseña de un usuario. Como se describió anteriormente, cualquier usuario puede cambiar su propia contraseña, pero sólo root puede cambiar la contraseña de cualquier usuario. Esto sucede porque el comando passwd
se ejecuta con los privilegios del propietario del archivo (por lo tanto, root).
Algunas opciones interesantes son:
passwd –l usuario
: Bloqueamos a los usuarios la entrada al sistema.
passwd –u usuario
: Desbloqueamos al usuario
Los grupos también pueden tener una contraseña, que puede ser establecida usando el comando gpasswd
. Los usuarios que no son miembros de un grupo pero conocen su contraseña, pueden unirse a este temporalmente usando el comando relacionados con ellas newgrp
. Recuerde que gpasswd
también se utiliza para añadir y eliminar usuarios de un grupo y para establecer la lista de administradores y miembros ordinarios del grupo.
Este comando determinado como “change age”, se usa para cambiar el período de la contraseña
de un usuario. El comando chage
está restringido a root, excepto la opción usada por usuarios ordinarios para listar el tiempo de su contraseña. Si no se especifica parámetro, muestra un asistente.
Algunas de las opciones:
-d
: establece el día del último cambio de la contraseña
-E
: establece la fecha de caducidad de la cuenta
-I
: deshabilita la cuenta después de X días de la fecha de caducidad de la contraseña
-l
: muestra información de la cuenta
-m
: número mínimo de días antes de cambiar la contraseña
-M
: número máximo de días antes de cambiar la contraseña
-W
: días de aviso de expiración
Por ejemplo:
Este comando cambiaría varias configuraciones de la cuenta de juan:
El último cambio de contraseña fue el 1 de enero de 2023.
La cuenta expirará el 31 de diciembre de 2023.
La cuenta se deshabilitará 30 días después de la expiración de la contraseña.
juan debe esperar al menos 7 días para cambiar su contraseña.
La contraseña caducará después de 90 días.
juan recibirá una advertencia 7 días antes de la caducidad de su contraseña.
El comando getent
es utilizado para obtener información de diversas bases de datos de sistema, como usuarios, grupos, servicios, y más. Este comando obtiene la información de las bases de datos configuradas en el sistema como algunas que hemos visto como /etc/passwd
, /etc/group
, o servicios que están definidos en archivos de configuración como /etc/nsswitch.conf
.
La sintaxis básica del comando getent
es:
<base de datos>
: Especifica la base de datos de la cual deseas obtener la información algunas de las más comunes son:
passwd
: Información de cuentas de usuario.
group
: Información sobre grupos.
hosts
: Información sobre los nombres de host.
services
: Información sobre los servicios de red.
networks
: Información sobre redes.
protocols
: Información sobre protocolos de red.
ethers
: Información sobre direcciones MAC.
passwd
y shadow
: Información sobre contraseñas de usuarios.
[clave de búsqueda]
: (opcional) Especifica una clave para buscar un valor dentro de la base de datos.
Vamos a ver algunos ejemplos útiles:
Una de las características más potentes de este comando es la automatización, puedes usar getent
en scripts para validar la existencia de usuarios, grupos o servicios, lo cual es útil cuando estás gestionando múltiples servidores.
Importancia
4
Descripción
El candidato debe saber usar cron y los temporizadores de systemd para ejecutar trabajos a intervalos regulares y at para ejecutar trabajos en momentos específicos..
Gestionar trabajos con cron y con at.
Configurar el acceso del usuario a los servicios de cron y at.
Entender las unidades de temporización de systemd.
En sistemas Linux, cron es un demonio que se ejecuta continuamente y se activa cada minuto para comprobar un conjunto de tablas en busca de tareas a ejecutar. Estas tablas se conocen como crontabs y contienen las llamadas cron jobs.
Cron es adecuado para servidores y sistemas que están encendidos constantemente, porque cada trabajo de cron se ejecuta sólo si el sistema se está ejecutando a la hora programada. Puede ser utilizado por usuarios ordinarios, cada uno de los cuales tiene su propio crontab, así como el usuario root que gestiona los crontabs del sistema.
Los crontabs de usuario son archivos de texto que gestionan la programación de los trabajos cron definidos por el usuario. Siempre tienen el nombre de la cuenta de usuario que los creó, pero la ubicación de estos archivos depende de la distribución utilizada (generalmente un subdirectorio de /var/spool/cron
). Cada línea en un crontab de usuario contiene seis campos separados por un espacio:
El minuto de la hora (0-59).
La hora del día (0-23).
El día del mes (1-31).
El mes del año (1-12).
El día de la semana (0-7 con domingo=0 o domingo=7).
La orden a ejecutar.
Para el mes del año y el día de la semana puedes usar las tres primeras letras del nombre en lugar del número correspondiente. Los primeros cinco campos indican cuándo ejecutar el comando que se especifica en el sexto campo, y pueden contener uno o más valores. En particular, se pueden especificar múltiples valores utilizando:
(asterisco) Se refiere a cualquier valor.
, (coma) Especifica una lista de posibles valores.
- (guión) Especifica un rango de valores posibles.
/ (slash) Especifica valores escalonados.
Muchas distribuciones incluyen el archivo /etc/crontab
que puede ser usado como referencia para la disposición de un archivo cron. A continuación se muestra un ejemplo de archivo /etc/crontab
de una instalación de Debian:
Cada línea de crontab
sigue esta estructura:
MINUTO
0 - 59
30 (minuto 30)
HORA
0 - 23
14 (2:00 PM)
DÍA-MES
1 - 31
15 (día 15 del mes)
MES
1 - 12 o jan
-dec
3 (marzo) o mar
DÍA-SEMANA
0 - 7 (0
y 7
son domingo)
1 (lunes) o mon
COMANDO
Cualquier comando o script
/home/user/script.sh
0 12 * * *
Ejecuta a las 12:00 PM todos los días
30 8 * * 1-5
Ejecuta a las 8:30 AM de lunes a viernes
*/10 * * * *
Ejecuta cada 10 minutos
0 0 1 * *
Ejecuta a las 12:00 AM el primer día de cada mes
0 4 * * 0
Ejecuta a las 4:00 AM cada domingo
Los crontabs de sistema son archivos de texto que gestionan la programación de los trabajos del cron del sistema y sólo pueden ser editados por el usuario root. El archivo los que se encuentran del directorio /etc/crontab
y todos /etc/cron.d
son crontabs del sistema. La sintaxis de los crontabs del sistema es similar a la de los crontabs de los usuarios, sin embargo, también requiere un campo obligatorio adicional que especifica qué usuario ejecutará el trabajo de cron.
La mayoría de las distribuciones también incluyen los directorios /etc/cron.hourly
, /etc/cron.daily
, /etc/cron.weekly
y /etc/cron.monthly
que contienen scripts para ser ejecutados con la frecuencia apropiada. Por ejemplo, si quiere ejecutar un script diariamente puede colocarlo en /etc/cron.daily
.
Al editar los archivos crontab, también puede usar atajos especiales en las primeras cinco columnas en lugar de las especificaciones de tiempo:
@reboot
Ejecutar la tarea especificada una vez después de reiniciar.
@hourly
Ejecutar la tarea especificada una vez por hora al iniciar.
@daily (o @midnight)
Ejecutar la tarea especificada una vez al día a medianoche. (equivalente a 0 0 * * *
)
@weekly
Ejecutar la tarea especificada una vez a la semana a medianoche del domingo. (equivalente a 0 0 * * 0
)
@monthly
Ejecutar la tarea especificada una vez al mes a la medianoche del primer día del mes. (equivalente a 0 0 1 * *
)
@yearly (o @annually )
Ejecutar la tarea especificada una vez al año a medianoche del 1 de enero. (equivalente a 0 0 1 1 *
)
En ocasiones, dentro de un archivo crontab, hay variables definidas antes de que se declaren las tareas programadas. Las variables de entorno establecidas (comúnmente) son:
HOME
El directorio donde cron invoca los comandos (por defecto el directorio principal del usuario).
MAILTO
El nombre del usuario o la dirección a la que se envía la salida estándar y el error (por defecto, el propietario del crontab). También se permiten múltiples valores separados por comas y un valor vacío indica que no se debe enviar ningún correo.
PATH
La ubicación de los comandos en los sistemas de archivos.
SHELL
El shell a usar (por defecto /bin/sh)
Ejecutar tareas con rangos, listas y comodines:
*
Cualquier valor
* * * * *
Ejecuta cada minuto
,
Lista de valores
0,15,30,45 * * * *
Cada 15 minutos
-
Rango de valores
0 9-17 * * *
Cada hora de 9 AM a 5 PM
/
Intervalo
*/5 * * * *
Cada 5 minutos
El comando crontab
se usa para mantener los archivos crontab
para usuarios individuales. En particular, puede ejecutar el comando crontab -e
para editar tu propio archivo crontab o para crear uno si aún no existe.
Por defecto, el comando crontab
abre el editor especificado por las variables de entorno VISUAL
o EDITOR
para que pueda empezar a editar su archivo crontab
con su preferido. Algunas distribuciones, permiten elegir el editor de una lista cuando crontab se ejecuta por primera vez. Si quieres ejecutar el script foo.sh
con crontab:
Además de la opción -e mencionada anteriormente, el comando crontab tiene otras opciones útiles:
-l
Muestra el crontab actual en la salida estándar.
-r
Quita el crontab actual.
-u
Especifica el nombre del usuario cuyo crontab necesita ser modificado. Esta opción requiere privilegios de root y permite que el usuario root edite los archivos crontab de otro usuario.
A diferencia de los crontabs de usuario, los crontabs de sistema se actualizan usando un editor: por lo tanto, no es necesario ejecutar el comando archivos en crontab para editar /etc/crontab
y los /etc/cron.d
.
Por defecto, cron
no muestra la salida de los comandos. Para guardar registros:
>> /var/log/mi_script.log
→ Guarda la salida en un archivo de log.
2>&1
→ Redirige errores (stderr
) al mismo archivo que la salida estándar (stdout
).
También puedes enviar un correo con la salida de la tarea usando:
(Esto debe ir al inicio del crontab
).
Recuerda que cuando edites los crontabs del sistema, debes especificar la cuenta que se usará para ejecutar el trabajo cron (normalmente el usuario root). Por ejemplo, si quiere ejecutar el script barfoo.sh
ubicado en el directorio /root
todos los días a la 01:30 am, puede abrir /etc/crontab con su editor preferido y agregar la siguiente línea:
En el ejemplo anterior, la salida del job se añade a /root/output.log
, mientras que los errores se añaden a /root/error.log
.
crontab
Para ver los cron jobs
del usuario actual:
Para agregar o modificar tareas:
Esto abre el archivo de configuración en el editor de texto predeterminado (puedes cambiarlo con export EDITOR=nano
antes de ejecutarlo).
¡Cuidado! Esto borra todas las tareas sin confirmación.
Importancia
3
Descripción
El candidato debe ser capaz de localizar un sistema en un idioma diferente al inglés. Así mismo, es importante que el candidato sepa por qué LANG=C es útil a la hora de escribir scripts.
Configuración regional y variables de entorno.
Configuración de la zona horaria y de las variables de entorno.
Automatizar las tareas regulares del sistema mediante la programación de trabajos (o Jobs
) es una de las cosas más importantes que un buen administrador debe hacer (recuerda que lo vimos en el ). Por ejemplo, un administrador puede crear y automatizar trabajos para copias de seguridad, actualizaciones del sistema y para realizar muchas otras actividades repetitivas. Para ello puede utilizar la función cron, que es útil para automatizar la programación periódica de trabajos.
Para que funcione, debe estar instalado mailutils
o postfix
en el servidor, puedes ver más ejemplos con correo en mi otra pagina de apuntes: