← Blog

Administración de Servicios en Linux

Gestión de servicios en Linux: /etc/services, configuraciones comunes, update-rc.d, units y sockets systemd.

Administración de Servicios en Linux

Operational Scope & Technical Objective

Un servicio es un daemon o proceso supervisado por el init del sistema. Hay tres planos de configuración a distinguir: el registro nominal /etc/services (mapa nombre↔puerto, usado por getservbyname, no define qué corre), los archivos de configuración de cada daemon (/etc/*.conf), y el gestor de arranque — update-rc.d en el clásico SysV, systemctl con units en systemd. Sobre systemd conviene además el plano de socket activation: un unit .socket abre el socket en lugar del daemon, con un SocketMode que define qué procesos pueden conectarse. Este último punto es material de escalada cuando el modo es 0666.

High-Impact Syntax & Command Cheatsheet

Registro nominal de servicios

cat /etc/services   # puerto ↔ nombre de servicio (IETF/IANA + locales)
grep 80 /etc/services   # qué servicio usa nominalmente el puerto 80

Configuraciones de servicio comunes

cat /etc/syslog.conf
cat /etc/chttp.conf
cat /etc/lighttpd.conf
cat /etc/cups/cupsd.conf
cat /etc/inetd.conf
cat /etc/apache2/apache2.conf
cat /etc/my.conf
cat /etc/httpd/conf/httpd.conf
cat /opt/lampp/etc/httpd.conf
ls -aRl /etc/ | awk '$1 ~ /^.*r.*/'   # inventario de archivos legibles en /etc

Arranque automático (SysV, Debian)

update-rc.d ssh enable     # habilita ssh en los runlevels por defecto
update-rc.d ssh disable    # lo deshabilita

Estado en runtime:

service ssh status         # estado vía SysV wrapper
systemctl status ssh       # estado vía systemd (SSH, Apache2, etc.)

Units systemd

systemctl list-units --type=service --all   # inventario de units
systemctl status <unit>
journalctl -u <unit>                        # logs del unit

# Ejemplo de unit de servicio
/lib/systemd/system/snapd.service

Socket activation (unit .socket)

[Socket]
ListenStream=/run/snapd.socket
ListenStream=/run/snapd-snap.socket
SocketMode=0666

SocketMode=0666 permite que cualquier proceso se conecte y hable con el socket — una superficie de ataque cuando el daemon tras el socket no valida origen.

Real-World Offensive/Defensive Scenarios

  • Reconocimiento de configuración (ofensivo): los cat /etc/<daemon>.conf de la cheatsheet permiten extraer credenciales embebidas, rutas de ejecución y bindings. ls -aRl /etc/ | awk '$1 ~ /^.*r.*/' lista archivos de configuración legibles por cualquier usuario, punto de partida para hunting de secretos.

  • Socket AF_UNIX world-writable (ofensivo): un unit .socket con SocketMode=0666 acepta conexiones de cualquier proceso local. Si el daemon tras él confía en el socket, se puede interactuar directamente:

    nc -U /run/snapd.socket
    GET / HTTP/1.1
    Host: 127.0.0.1
    
  • Escalada por servicios reiniciables (ofensivo): detectar qué archivos de /etc son modificables y si algún servicio los lee en cada reinicio; combinado con sudo -l (p.ej. sudo apache2 -f /etc/shadow en escalar-rutas) convierte un servicio reconfigurable en un vector de escalada.

  • Superficie mínima (defensivo): revisar systemctl list-units --type=service y journalctl para detectar servicios no autorizados; verificar SocketMode de todos los .socket activos y forzar 0660 con grupo restringido cuando el daemon no necesita acceso global.