Cómo comprobar si un servicio del sistema está enmascarado en Linux

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo verificar si un servicio del sistema está enmascarado en Linux utilizando systemd. Enmascarar un servicio impide que se inicie, lo cual es un concepto clave para la gestión y solución de problemas del sistema. Utilizarás el comando systemctl is-masked para verificar el estado de enmascaramiento de servicios específicos y el comando systemctl list-unit-files para obtener una visión general más amplia de los archivos de unidades de systemd. Finalmente, explorarás los directorios de configuración de systemd para entender dónde se almacenan estas configuraciones.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/less("File Paging") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/SystemInformationandMonitoringGroup -.-> linux/service("Service Managing") subgraph Lab Skills linux/ls -.-> lab-558770{{"Cómo comprobar si un servicio del sistema está enmascarado en Linux"}} linux/less -.-> lab-558770{{"Cómo comprobar si un servicio del sistema está enmascarado en Linux"}} linux/cd -.-> lab-558770{{"Cómo comprobar si un servicio del sistema está enmascarado en Linux"}} linux/service -.-> lab-558770{{"Cómo comprobar si un servicio del sistema está enmascarado en Linux"}} end

Verificar el enmascaramiento de un servicio con systemctl is-masked

En este paso, comenzaremos a explorar systemd, el gestor de sistema y servicios en distribuciones modernas de Linux como Ubuntu. systemd es responsable de iniciar, detener y gestionar servicios (como servidores web, bases de datos, etc.) y otros recursos del sistema.

Un concepto importante en systemd es "enmascarar" un servicio. Enmascarar un servicio impide que se inicie, incluso manualmente o por otros servicios. Esta es una forma de deshabilitar completamente un servicio.

Podemos verificar si un servicio está enmascarado utilizando el comando systemctl is-masked. Vamos a verificar el estado de un servicio común, apache2. Apache es un popular servidor web.

Abre tu terminal si no está abierta. Recuerda que puedes encontrar el icono de Xfce Terminal en el lado izquierdo de tu escritorio.

Escribe el siguiente comando y presiona Enter:

systemctl is-masked apache2

Deberías ver una salida similar a esta:

inactive

Esta salida indica que el servicio apache2 no está enmascarado. Si estuviera enmascarado, la salida sería masked.

Vamos a intentar verificar un servicio que normalmente está enmascarado por defecto en este entorno, como systemd-udevd-kernel.socket. Este es un servicio de bajo nivel del sistema.

Escribe el siguiente comando y presiona Enter:

systemctl is-masked systemd-udevd-kernel.socket

La salida debería ser:

masked

Esto confirma que el servicio systemd-udevd-kernel.socket está en efecto enmascarado.

Comprender si un servicio está enmascarado es crucial para solucionar problemas y gestionar tu sistema. Si un servicio no se inicia, verificar su estado de enmascaramiento suele ser uno de los primeros pasos.

Haz clic en Continuar para pasar al siguiente paso.

Listar archivos de unidades con systemctl list-unit-files

En el paso anterior, utilizamos systemctl is-masked para verificar el estado de servicios individuales. Ahora, obtengamos una visión más amplia de todos los archivos de unidades que systemd conoce.

systemd gestiona varios tipos de "unidades", que son archivos de configuración que definen servicios, puntos de montaje, dispositivos, sockets y más. El tipo más común es la unidad .service, que define cómo ejecutar un proceso en segundo plano (un servicio).

El comando systemctl list-unit-files muestra una lista de todos los archivos de unidades instalados y su estado de "habilitación". El estado de habilitación indica si una unidad está configurada para iniciarse automáticamente al arrancar el sistema.

Escribe el siguiente comando en tu terminal y presiona Enter:

systemctl list-unit-files

Este comando generará una larga lista de archivos de unidades. La salida se verá algo así (solo se muestra una pequeña parte):

UNIT FILE                                  STATE
proc-sys-fs-binfmt_misc.automount          static
dev-hugepages.mount                        static
dev-mqueue.mount                           static
proc-sys-fs-binfmt_misc.mount              static
sys-fs-fuse-connections.mount              static
sys-kernel-config.mount                    static
sys-kernel-debug.mount                     static
sys-kernel-tracing.mount                   static
...
apache2.service                            disabled
...

La salida tiene dos columnas:

  • UNIT FILE: El nombre del archivo de unidad (por ejemplo, apache2.service).
  • STATE: El estado de habilitación de la unidad (por ejemplo, static, enabled, disabled, masked).

A continuación, una breve explicación de algunos estados comunes:

  • enabled: La unidad está configurada para iniciarse automáticamente al arrancar el sistema.
  • disabled: La unidad no está configurada para iniciarse automáticamente al arrancar el sistema.
  • static: La unidad no se puede habilitar o deshabilitar; su inicio está controlado por otra unidad.
  • masked: La unidad está completamente deshabilitada y no se puede iniciar.

Puedes desplazarte por la salida utilizando la barra de desplazamiento de tu terminal o canalizando la salida a un paginador como less. Por ejemplo:

systemctl list-unit-files | less

Dentro de less, puedes usar las flechas del teclado para desplazarte, presionar la barra espaciadora para avanzar una página y presionar q para salir.

Este comando es muy útil para ver qué servicios están instalados en tu sistema y cómo están configurados para iniciarse.

Haz clic en Continuar para continuar.

Inspeccionar la configuración de systemd en /etc/systemd

En los pasos anteriores, utilizamos el comando systemctl para interactuar con systemd. Ahora, veamos dónde systemd almacena sus archivos de configuración.

El directorio principal para los archivos de configuración de systemd es /etc/systemd. Este directorio contiene subdirectorios para diferentes tipos de archivos de unidades y configuraciones.

Vamos a listar el contenido del directorio /etc/systemd utilizando el comando ls. Recuerda que /etc es un directorio estándar en Linux para archivos de configuración.

Escribe el siguiente comando en tu terminal y presiona Enter:

ls /etc/systemd/

Verás una lista de directorios y archivos, similar a esta:

journald.conf  logind.conf  networkd.conf  resolved.conf  system  system.conf  timesyncd.conf  user  user.conf

El subdirectorio más importante aquí es /etc/systemd/system. Aquí es donde a menudo se colocan o se enlazan los archivos de unidades a nivel de sistema. Vamos a echar un vistazo dentro de este directorio.

Cambia tu directorio actual a /etc/systemd/system utilizando el comando cd.

cd /etc/systemd/system

Ahora, lista el contenido de este directorio:

ls

Verás una lista de archivos y directorios, muchos de los cuales son enlaces simbólicos (->) que apuntan a los archivos de unidades reales ubicados en otro lugar (a menudo en /lib/systemd/system). Así es como se habilitan o deshabilitan los servicios: creando o eliminando estos enlaces simbólicos.

Por ejemplo, podrías ver algo como esto:

multi-user.target.wants -> /lib/systemd/system/multi-user.target.wants
sockets.target.wants -> /lib/systemd/system/sockets.target.wants
...

Los directorios .wants contienen enlaces simbólicos a los servicios que deben iniciarse cuando se alcanza ese objetivo. Por ejemplo, multi-user.target.wants contiene enlaces a los servicios que deben ejecutarse cuando el sistema está en un estado de múltiples usuarios (como después de arrancar).

Vamos a echar un vistazo dentro del directorio multi-user.target.wants.

ls multi-user.target.wants/

Verás una lista de servicios que están habilitados para iniciarse en el objetivo de múltiples usuarios.

anacron.service -> ../anacron.service
apache2.service -> ../../apache2.service
...

Esto muestra que apache2.service está enlazado aquí, lo que significa que está habilitado para iniciarse con el objetivo de múltiples usuarios.

Explorar el directorio /etc/systemd/system te ayuda a entender cómo systemd organiza y gestiona los servicios en tu sistema.

Haz clic en Continuar para finalizar este laboratorio.

Resumen

En este laboratorio, comenzamos a explorar systemd en Linux, centrándonos en cómo determinar si un servicio del sistema está "enmascarado" (masked). Enmascarar un servicio es un método para deshabilitarlo por completo, evitando que se inicie en cualquier circunstancia. Aprendimos a usar el comando systemctl is-masked para verificar el estado de enmascaramiento de servicios específicos, observando que apache2 no estaba enmascarado mientras que systemd-udevd-kernel.socket sí lo estaba. Comprender el estado de enmascaramiento es un paso fundamental para solucionar problemas de inicio de servicios.

Luego, pasamos a usar systemctl list-unit-files para obtener una perspectiva más amplia de todos los archivos de unidades gestionados por systemd, que son archivos de configuración que representan varios recursos y servicios del sistema. Este comando proporciona una lista completa de unidades y sus estados, ofreciendo una visión más amplia de la configuración del sistema más allá de las comprobaciones de servicios individuales.