gen[IA]ll Tutor
SYSTEM-ADMIN-FUNDAMENTALS

System Administration

Actualizado en octubre de 2026 · 27 min de lectura

Administración de sistemas

Resumen

Esta guía de estudio independiente describe las tareas cotidianas de quien administra Linux: crear cuentas, instalar software, controlar servicios, programar trabajos y observar recursos. No es material oficial ni está afiliada a la Linux Foundation. Cada operación se presenta con el comando habitual, el archivo o unidad que la respalda y el estado que modifica, para que puedas comprobarla antes y después.

Objetivos de aprendizaje

  • Gestionar usuarios, grupos y privilegios con las herramientas estándar de Linux.
  • Instalar, actualizar y eliminar paquetes con apt o dnf según la distribución.
  • Controlar servicios con systemctl y distinguir el arranque de la habilitación permanente.
  • Programar tareas con cron y at, e interpretar sus campos de tiempo.
  • Leer métricas básicas con top, vmstat e iostat para detectar presión de CPU, memoria o disco.
  • Configurar montajes persistentes con fstab y ampliar permisos con ACL cuando el modo tradicional no basta.

Prerrequisitos y conexiones

Conviene manejar la jerarquía del sistema de archivos y la terminal; repásalos en Linux Operating System y Command Line. Este tema se amplía en Mejores prácticas y sirve de base para Resolución de problemas.

Cuentas, grupos y privilegios

Linux identifica a cada usuario con un UID y a cada grupo con un GID. /etc/passwd guarda nombre, UID, GID, directorio personal y shell; /etc/shadow, los hashes y la caducidad; /etc/group, la pertenencia a grupos. useradd -m -s /bin/bash ana crea la cuenta con directorio y shell, pero no define contraseña: eso lo hace passwd ana. usermod -aG sudo ana añade el grupo sin quitar los demás; omitir -a reemplaza la lista secundaria.

Los privilegios se delegan con sudo, no compartiendo la cuenta de root. La configuración se edita con visudo, que valida la sintaxis. Una regla como ana ALL=(ALL:ALL) ALL permite todo; para un operador de respaldos conviene limitar el alcance a programas concretos. su - abre una sesión de root, mientras que sudo registra quién ejecutó qué. id ana muestra UID, GID y grupos; chage -l ana revisa la caducidad de la contraseña.

sudo useradd -m -s /bin/bash ana
sudo passwd ana
sudo usermod -aG sudo ana
id ana
sudo chage -l ana

Deshabilitar una cuenta no exige borrarla: usermod -L ana bloquea la contraseña y usermod -U ana la reactiva. userdel -r ana elimina la cuenta y su directorio personal, una acción destructiva. Antes de borrar, revisa procesos y archivos del UID con ps -u ana y find / -uid <UID>.

Claves SSH y acceso remoto

El acceso con clave sustituye la contraseña: el cliente firma con la clave privada y el servidor valida con la pública. Genera un par con ssh-keygen -t ed25519 -C "ana@portatil"; el archivo sin extensión es privado y debe quedar en modo 600, mientras que .pub es el que se instala en el servidor. ssh-copy-id ana@192.0.2.10 añade la pública al archivo authorized_keys remoto; si la utilidad no está disponible, basta con copiar la línea a mano y conservar los permisos 600 de ese archivo.

Las líneas de ~/.ssh/authorized_keys admiten restricciones: command="..." obliga a ejecutar un programa concreto, from="198.51.100.0/24" limita el origen permitido y no-agent-forwarding impide reenviar el agente. Emitir claves es solo la mitad del ciclo: cuando alguien deja el equipo, borra su entrada y rota el par; una clave perdida sigue abriendo puerta hasta que se revoca, y el cambio surte efecto en la siguiente conexión sin reiniciar el demonio.

El archivo known_hosts del cliente registra la huella de cada servidor. Si la clave del host cambia de forma inesperada, SSH avisa; conviene verificar el cambio con quien opera el equipo antes de aceptarla. ssh-keygen -R nombre-host elimina la entrada obsoleta, y en entornos con muchos servidores conviene guardar las huellas en la configuración de gestión para no aceptar a ciegas a un equipo desconocido.

ssh-keygen -t ed25519 -C "ana@portatil"
ssh-copy-id ana@192.0.2.10
ssh-keygen -R respaldo.local
ls -l ~/.ssh

Paquetes y servicios

El gestor de paquetes mantiene un inventario coherente de software y dependencias. En Debian y Ubuntu, apt update refresca los índices y apt install nginx instala el paquete con sus dependencias. apt remove nginx conserva la configuración; apt purge nginx también la borra. apt upgrade aplica actualizaciones y apt full-upgrade puede añadir o quitar paquetes. dpkg -l lista paquetes y dpkg -L nginx muestra sus archivos.

En Fedora, RHEL y derivados, dnf install, dnf remove y dnf upgrade cumplen funciones equivalentes. rpm -qa lista paquetes y rpm -ql nginx muestra su contenido. No mezcles repositorios de distribuciones distintas ni instales paquetes de sitios no confiables: las firmas y dependencias corresponden al repositorio configurado. Antes de una actualización mayor, revisa df -h.

systemd administra servicios mediante unidades. systemctl start nginx lo inicia ahora; systemctl enable nginx lo prepara para el arranque; enable --now hace ambas cosas. systemctl status nginx muestra estado, PID y registro reciente, y stop, restart o disable revierten la operación. Las unidades de paquetes viven en /usr/lib/systemd/system y las del administrador en /etc/systemd/system. Tras editarlas, systemctl daemon-reload recarga las definiciones; list-units --type=service lista las activas.

sudo apt update && sudo apt install nginx
sudo systemctl enable --now nginx
systemctl status nginx --no-pager
systemctl list-units --type=service --state=running

systemctl is-enabled nginx y systemctl is-active nginx comprueban el estado. Si falla, journalctl -u nginx -n 50 --no-pager muestra su registro. Un servicio puede estar activo pero no disponible si escucha en otra interfaz o si el firewall bloquea el puerto: separa "proceso vivo" de "servicio funcional".

apt frente a dnf

Ambos gestores resuelven dependencias, comprueban firmas y trabajan sobre el conjunto de repositorios configurado; cambian los comandos y las herramientas de consulta del estado local.

Acciónapt (Debian y Ubuntu)dnf (Fedora y RHEL)
Comprobar pendientesapt update y apt list --upgradablednf check-update
Instalarapt install nginxdnf install nginx
Actualizarapt upgradednf upgrade
Desinstalarapt remove o apt purgednf remove
Listar instaladosdpkg -lrpm -qa
Archivos de un paquetedpkg -L nginxrpm -ql nginx
Metadatosdpkg -s nginxrpm -qi nginx
Buscarapt search proxydnf search proxy

apt update solo descarga los índices: no instala ni actualiza nada. apt upgrade conserva los paquetes obsoletos que ya están instalados, mientras que apt full-upgrade puede eliminarlos para satisfacer dependencias nuevas; conviene reservar el segundo para los saltos de versión y dejar el primero para el mantenimiento regular. En los sistemas con dnf, dnf check-update devuelve un código de salida distinto de cero cuando hay actualizaciones disponibles, un detalle útil dentro de scripts de revisión.

Cuando apt informa de paquetes retenidos, la actualización se detiene sobre esos nombres hasta resolver la causa. apt-mark showhold enumera los marcados y apt-mark unhold los libera. Ignorar el aviso deja el sistema con una mezcla de versiones antigua y nueva que después es difícil de explicar.

apt update && apt list --upgradable
dnf check-update
apt-mark showhold
dpkg -s nginx | head -5
rpm -qi nginx

Tareas programadas

cron usa cinco campos: minuto, hora, día del mes, mes y día de la semana. En 30 2 * * 1-5 /usr/local/bin/backup.sh, el trabajo corre a las 02:30 de lunes a viernes. crontab -e edita la tabla, crontab -l la muestra y crontab -r la elimina. Las tablas de sistema están en /etc/cron.d y /etc/crontab, que añade el campo de usuario. Usa rutas absolutas: cron no carga el perfil interactivo.

at ejecuta una sola vez: echo '/usr/local/bin/tarea.sh' | at 23:00 lo programa y atq lista los pendientes. Para tareas periódicas, systemd ofrece temporizadores con OnCalendar=, visibles con systemctl list-timers. Registra siempre la salida en un archivo o en el journal; de lo contrario, un fallo silencioso puede pasar inadvertido.

cron frente a systemd timers

Aspectocrontemporizadores de systemd
Programacióncinco campos de tiempoOnCalendar=, OnBootSec=, OnUnitActiveSec=
Definicióncrontab del usuario, /etc/crontab, /etc/cron.dpares de unidades .timer y .service
Ejecución perdidase pierde si el equipo estaba apagadoPersistent=true la ejecuta al arrancar
Salida y fallosredirección manual a archivojournal de la unidad asociada
Listadocrontab -l y el contenido de /etc/cron.dsystemctl list-timers
Relacionesninguna declarada entre trabajosRequires= y After= entre unidades

Cron sigue siendo la vía más rápida para una línea suelta en el crontab de alguien: no exige archivos de unidad ni recargas. Los temporizadores ganan cuando el trabajo depende de otro servicio, cuando el fallo debe quedar en el journal o cuando hace falta recuperar una ejecución omitida durante un apagado; un .timer sin Persistent=true no recupera nada, y ese valor solo tiene sentido con programaciones de calendario.

Antes de dar un temporizador por configurado, consulta systemctl list-timers: la columna de próxima ejecución muestra el momento en que systemd disparará la unidad, lo que confirma que la expresión de calendario produce un futuro plausible. En cron, la comprobación equivalente es releer la tabla con crontab -l y validar el orden de los cinco campos a mano.

systemctl list-timers --all | head -15
crontab -l
journalctl -u nombre-del-trabajo -n 30 --no-pager

Observación de recursos

top ordena procesos por consumo y muestra carga media, memoria y CPU. La carga media cuenta procesos en ejecución o esperando y debe interpretarse junto con el número de núcleos. vmstat 1 5 imprime cinco muestras de procesos, memoria, paginación, bloqueos y CPU; una columna wa alta sugiere espera por E/S. iostat -xz 1 muestra utilización y latencia por dispositivo, útil para distinguir un disco lento de una aplicación ineficiente.

top -b -n 1 | head -20
vmstat 1 5
iostat -xz 1
free -h
df -h

free -h distingue memoria total, usada, disponible y caché; la caché no es memoria perdida. df -h informa del espacio por sistema de archivos y df -i de los inodos, cuyo agotamiento impide crear archivos aunque quede espacio. En un incidente, guarda varias muestras y correlaciona la hora con los registros.

Discos, montajes y sistemas de archivos

lsblk dibuja el árbol de discos, particiones y volúmenes; lsblk -f añade sistema de archivos, etiqueta y UUID. sudo fdisk -l lista las tablas de partición y blkid identifica cada dispositivo por su identificador único. Antes de formatear, contrasta tamaño y contenido con esas salidas: mkfs destruye datos sin pedir confirmación y el nombre de dispositivo puede cambiar entre reinicios.

mkfs.ext4 /dev/sdb1 crea el sistema de archivos; el binario lleva el prefijo mkfs. y el sufijo indica el tipo. Montar asocia el dispositivo con un punto del árbol: sudo mount /dev/sdb1 /srv/datos funciona hasta el reinicio. Para que persista, añade a /etc/fstab una línea como UUID=<uuid> /srv/datos ext4 defaults 0 2. El penúltimo campo es el respaldo de dump —casi siempre 0— y el último, el orden de comprobación con fsck en el arranque: 0 la omite, 1 corresponde a la raíz y 2 al resto de volúmenes.

findmnt confirma qué está realmente montado y con qué opciones, información más fiable que releer el archivo. sudo mount -o remount,ro /srv/datos pasa el volumen a solo lectura, rutina habitual antes de un rescate o de operaciones sobre el disco. Si una entrada errónea de fstab bloquea el arranque, systemd puede dejar el equipo en modo de emergencia: desde la shell de mantenimiento se corrige el archivo y se vuelve a arrancar. Un umount ocupado responde «device is busy»; fuser -m /srv/datos muestra los procesos con archivos abiertos y lsof +D /srv/datos detalla cuáles, antes de desmontar.

lsblk -f
blkid
findmnt /srv/datos
sudo mount -o remount,ro /srv/datos
fuser -m /srv/datos

Permisos, umask y ACL

El modo tradicional de nueve bits rige chmod sobre propietario, grupo y otros. En notación simbólica, chmod u+x script.sh añade ejecución al propietario sin tocar el resto; en notación octal, chmod 750 script.sh equivale a rwxr-x---. El orden de las clases importa: chmod o-rw quita lectura y escritura a otros y deja intactos los permisos de propietario y grupo.

La umask define con qué permisos nacen los archivos y directorios nuevos: 022 deja lectura y ejecución al grupo —típico en un servidor donde otros leen datos—, mientras que 077 crea archivos privados al propietario. Se consulta escribiendo umask y se fija por sesión o en el perfil de inicio; no se aplica después como permiso, sino que se resta del modo base 666 para archivos y 777 para directorios: con 022, un archivo nace en 644 y un directorio en 755.

Cuando el grupo necesita un acceso distinto del que concede el modo básico, entran las listas de control de acceso. getfacl /srv/informes muestra las entradas y setfacl -m g:ventas:r-x /srv/informes concede lectura sin cambiar el grupo primario de nadie. setfacl -d -m g:ventas:r-x /srv/informes fija la entrada por omisión que heredarán los elementos nuevos. Las ACL conviven con el modo tradicional: el kernel las evalúa después de las clases y ls -l muestra un + en la columna de permisos cuando existen.

chmod 2770 /srv/informes
setfacl -m g:ventas:r-x /srv/informes
setfacl -d -m g:ventas:r-x /srv/informes
getfacl /srv/informes
umask

Procesos, señales y prioridad

ps aux lista los procesos del sistema con usuario, CPU y memoria; ps -ef añade la jerarquía de padres a través del campo PPID. pgrep -a nombre devuelve PID sin memorizar posiciones y top -b -n 1 captura un instante comparable entre muestras. El PID 1 es el proceso arrancado por el kernel, y un proceso cuyo padre murió queda huérfano hasta ser adoptado.

Las señales ordenan al proceso qué hacer. kill -TERM pid pide terminación ordenada —el proceso puede limpiar recursos y cerrar ficheros— y kill -KILL pid lo elimina sin margen de despedida; usa -9 solo cuando -TERM no bastó, porque omite cualquier limpieza y puede dejar archivos a medias. SIGHUP se envía al recibir «hang up» y muchos demonios la interpretan como recarga de su configuración, aunque el comportamiento concreto depende de cada programa. kill -l enumera las señales disponibles en el sistema.

La prioridad indica cuánto CPU recibe un proceso: nice -n 10 comando arranca con menor prioridad y renice 10 -p pid ajusta uno en marcha; los valores negativos exigen privilegios. Los procesos en estado Z ya terminaron pero su padre no recogió el código de salida: ps los marca como defunct y la solución está en el padre, no en matar al zombi. Un proceso en estado D espera E/S de forma ininterrumpible y no responde a señales; si varios quedan así, revisa el almacenamiento con iostat -xz 1.

ps aux --sort=-%mem | head -10
pgrep -a nginx
kill -TERM 1234
kill -l
renice 10 -p 1234

Ejemplos prácticos

Una empresa incorpora a una analista que debe desplegar una aplicación y consultar sus registros, pero no administrar el sistema completo. Se crea la cuenta con useradd -m -s /bin/bash ana, se asigna una contraseña temporal y se añade a un grupo operativo. Una regla de sudoers le permite reiniciar solo el servicio y consultar su journal. La verificación consiste en iniciar sesión como Ana, ejecutar sudo -l y comprobar que los comandos no previstos se rechazan.

Para un servidor web se instala con apt install nginx, se habilita con systemctl enable --now nginx y se confirma con systemctl is-active nginx y una petición local. Una entrada de cron programa una copia diaria a las 02:30 y redirige la salida a un archivo con fecha. Al día siguiente se revisan el archivo, el código de salida y el espacio ocupado; una copia nunca restaurada no está verificada.

Una biblioteca comparte /srv/informes entre dos departamentos: los dos leen y solo logística escribe. Se crea el grupo informes, se añaden las cuentas necesarias y se aplica chmod 2770 para que los archivos nuevos hereden el grupo. Como el modo de grupo daría el mismo acceso a todos, se concede lectura al resto con setfacl -m g:ventas:r-x /srv/informes y se fija setfacl -d para que los elementos nuevos hereden el patrón. La verificación combina getfacl /srv/informes con una escritura real desde la cuenta de ventas, que debe rechazarse.

Antes de una baja temporal, un operador conserva los datos de una cuenta sin permitir nuevos accesos. usermod -L ana bloquea la contraseña y passwd -S ana refleja el estado en la segunda columna; un intento de su - ana falla mientras el bloqueo dure. Los archivos y el UID permanecen intactos, así que los respaldos siguen cubriendo al usuario, y usermod -U ana revierte el bloqueo a su regreso. La verificación final combina un inicio de sesión exitoso con id ana y los grupos esperados.

Errores frecuentes

  • Usar usermod -G en lugar de -aG y eliminar grupos secundarios existentes.
  • Confundir systemctl start con enable: el primero inicia ahora; el segundo prepara el arranque futuro.
  • Editar una unidad sin daemon-reload y seguir usando la definición anterior.
  • Programar cron con rutas relativas o sin redirección de salida.
  • Leer la caché como memoria agotada o la carga media como porcentaje de CPU.

Puntos clave para el examen

  • useradd crea la cuenta, passwd define la contraseña y usermod -aG añade grupos.
  • sudo delega privilegios y deja rastro; visudo valida la configuración.
  • apt y dnf resuelven dependencias; dpkg y rpm consultan el estado local.
  • systemctl enable --now habilita e inicia; status y journalctl -u diagnostican.
  • cron usa cinco campos; at ejecuta una vez; vmstat, iostat y top observan recursos.
  • Las claves SSH se instalan con ssh-copy-id y se revocan borrando la entrada de authorized_keys.
  • apt full-upgrade puede retirar paquetes, mientras que apt upgrade conserva los obsoletos.
  • Un temporizador con Persistent=true recupera ejeciones perdidas durante un apagado.
  • fstab por UUID hace persistente el montaje; findmnt verifica el estado real.
  • Las ACL amplían el modo tradicional sin cambiar el grupo primario de la cuenta.

Recursos externos

Autoevaluación

  1. ¿Qué diferencia hay entre useradd y passwd? Respuesta: useradd crea la cuenta y su directorio con -m; passwd define la contraseña. Sin contraseña válida no hay inicio de sesión normal.

  2. ¿Por qué systemctl start nginx no basta tras un reinicio? Respuesta: start solo cambia el estado actual; la persistencia requiere enable, que crea los enlaces de arranque.

  3. ¿Qué indica un valor alto de wa en vmstat? Respuesta: Tiempo de CPU esperando E/S. Conviene revisar iostat -xz para identificar el dispositivo y la latencia.

  4. ¿Cómo se programa un trabajo de lunes a viernes a las 02:30? Respuesta: Con 30 2 * * 1-5 y el comando en crontab -e; los campos son minuto, hora, día del mes, mes y día de la semana.

  5. ¿Qué comprobación falta si una copia diaria termina sin error? Respuesta: Verificar que se puede restaurar y que contiene los datos esperados; el código de salida no demuestra que el respaldo sea utilizable.

  6. ¿Cómo haces que un montaje sobreviva a un reinicio? Respuesta: Con una entrada en /etc/fstab referida por UUID y comprobada con findmnt tras arrancar; mount ejecutado a mano no persiste.

  7. ¿Qué representa la umask de un proceso? Respuesta: El modo que se resta al valor base al crear archivos: con 022 nacen en 644 o 755, y con 077 en 600 o 700.

  8. ¿Cómo revocas el acceso de una cuenta conservando sus datos? Respuesta: usermod -L bloquea la contraseña y quitar la cuenta de sus grupos o de sudoers retira privilegios; userdel -r es el paso destructivo.

  9. ¿Qué compruebas antes de ejecutar mkfs sobre un dispositivo? Respuesta: Con lsblk y blkid que el tamaño, la etiqueta y el contenido corresponden al disco pretendido, porque el formateo no pide confirmación.

  10. ¿Qué señal usas para terminar un proceso y por qué reservas -9? Respuesta: kill -TERM, que permite la limpieza ordenada; -9 se queda solo si la anterior no funciona, porque elimina el proceso sin despedida.