Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
info:cursos:pue:ethical-hacker:extras:sincara-systemd [27/02/2025 02:44] – [Entorno] mateinfo:cursos:pue:ethical-hacker:extras:sincara-systemd [28/02/2025 03:51] (actual) – [Logs] admin
Línia 267: Línia 267:
  
 == Sockets == Sockets
 +  * Para cada unidad de tipo socket, debe existir una unidad de tipo servicio correspondiente
 +  * Opciones
 +    * **ListenStream**: dirección de escucha para el stream (puede ser un puerto, ruta del socket o una dirección IPv4 o IPv6 junto con el puerto).
 +    * **Accept**: si es true, la instancia del servicio se lanza por cada conexión; si es false, la encargada de gestionar todas las conexiones es una instancia.
 +    * **MaxConnections**: es el número máximo de conexiones para un servicio
 +    * **Service**: servicio que activa el socket (por defecto es el servicio que tiene el mismo nombre).
 +  * ''man systemd.socket''
 +    * https://www.man7.org/linux/man-pages/man5/systemd.socket.5.html
 +  * ''systemctl list-sockets'' # Lista todos los sockets
 +  * ''alias sockets=%%'systemctl --no-pager -t socket --state=running'%%'' # Lista los activos
 +  * https://www.linux.com/training-tutorials/end-road-systemds-socket-units/
 +
 +== Timers
 +  * Para cada archivo **.timer**, existe un archivo **.service** coincidente (por ejemplo, foo.timer y foo.service). 
 +    * El archivo **.timer** activa y controla el archivo **.service**. 
 +    * El archivo **.service** no requiere una sección **[Install]** ya que son las unidades de temporizador las que se activan. 
 +    * Si es necesario, es posible controlar una unidad con un nombre diferente usando la opción Unit= en la sección [Timer] del archivo temporizador.
 +  * ''systemctl list-timers'' Para listar los "timers" de SystemD
 +  * ''journalctl -b -u .timer'' # Para ver los timers ejecutados desde el arranque del sistema
 +  * Si un temporizador se **desincroniza**, puede ayudar eliminar su archivo  **stamp-*** en **/var/lib/systemd/timers** (o** ~/.local/share/systemd/** en caso de temporizadores de usuario). Estos son archivos vacios que marcan la última vez que se ejecutó cada temporizador. Si se eliminan, se reconstruirán en el próximo inicio de su temporizador.
 +  * Frecuencias con el parámetro OnCalendar (funciona igual que el cron)
 +    * **Realtime timers** (a.k.a. wallclock timers) **Temporizadores en tiempo real** (también conocido como «wallclock timers») se activan con un evento del calendario, de la misma manera que lo hacen los cronjobs. La opción OnCalendar= se utiliza para definirlos.
 +      * DayOfWeek   Year-Month-Day   Hour:Minute:Second
 +        * Con el DayOfWeek siendo opcional. Los operadores ''*'', ''/'' y '','' tienen el mismo significado que los usados para los trabajos de cron, mientras que puede usar ''..'' entre dos valores para indicar un rango
 +        * ~ indica el último día del mes
 +        * OnCalendar=Mon -*-10..27 05:30:00
 +      * minutely # Cada minuto
 +      * hourly    # cada hora al comienzo de la hora.
 +      * daily       # una vez al día a medianoche.
 +      * weekly   # una vez a la semana a medianoche del lunes.
 +      * monthly # una vez al mes a la medianoche del primer día del mes.
 +      * yearly    # una vez al año a medianoche del primer día de enero.
 +      * quarterly # trimestral
 +      * semiannually # semianual
 +      * ''man 7 systemd.time''
 +      * ''systemd-analyze calendar weekly''
 +      * ''systemd-analyze calendar "Mon,Tue -*-01..04 12:00:00"''
 +    * Monotonic timers - Temporizadores monotónicos se activan después de un intervalo de tiempo condicionado a un punto de inicio variable. Se detienen si el equipo está temporalmente suspendido o apagado. Hay varios temporizadores monotónicos diferentes
 +      * **OnActiveSec**= Defines a timer relative to the moment the timer unit itself is activated.
 +      * **OnBootSec**= Defines a timer relative to when the machine was booted up. In containers, for the system manager instance, this is mapped to OnStartupSec=, making both equivalent.
 +      * **OnStartupSec**= Defines a timer relative to when the service manager was first started. For system timer units this is very similar to OnBootSec= as the system service manager is generally started very early at boot. It's primarily useful when configured in units running in the per-user service manager, as the user service manager is generally started on first login only, not already during boot.
 +      * **OnUnitActiveSec**= Defines a timer relative to when the unit the timer unit is activating was last activated.
 +      * **nUnitInactiveSec**= Defines a timer relative to when the unit the timer unit is activating was last deactivated.
 +  * ''systemctl enable my.timer''
 +  * ''systemctl start my.timer''
 +  * ''systemctl status my.timer''
 +  * Puede cambiar la frecuencia de su trabajo programado, modificando el valor OnCalendar y luego escribiendo el comando systemctl daemon-reload
 +  * Ejemplos
 +    * <code properties /usr/lib/systemd/system/plocate-updatedb.timer>[Unit]
 +Description=Update the plocate database daily
 +
 +[Timer]
 +OnCalendar=daily
 +RandomizedDelaySec=1h
 +AccuracySec=6h
 +Persistent=true
 +
 +[Install]
 +WantedBy=timers.target
 +</code>
 +    * <code properties /usr/lib/systemd/system/plocate-updatedb.service>[Unit]
 +Description=Update the plocate database
 +ConditionACPower=true
 +
 +[Service]
 +Type=oneshot
 +ExecStart=/usr/sbin/updatedb
 +LimitNOFILE=131072
 +IOSchedulingClass=idle
 +
 +PrivateTmp=true
 +PrivateDevices=true
 +PrivateNetwork=true
 +</code>
 +  * Unidades .timer transitorias (equivalentes a at)
 +    * ''systemd-run %%--on-calendar='2019-10-06 11:30'%% date''
 +    * ''systemd-run %%--on-active="2m" ./foo.sh%%''
 +    * ''man 1 systemd-run''
 +  * Información sobre los timers
 +    * https://wiki.archlinux.org/title/Systemd_(Espa%C3%B1ol)/Timers_(Espa%C3%B1ol%29 - Timers
 +    * ''man 5 systemd.timer''
 +
 +== Mount
 +  * **/etc/fstab**
 +    * El script systemd-fstab-generator(8) traduce todas las entradas presentes en /etc/fstab en unidades de systemd, esto se realiza en el momento del arranque y cada vez que se vuelve a cargar la configuración del gestor del sistema. 
 +    * En un disco particionado con GPT, el script systemd-gpt-auto-generator(8) montará particiones siguiendo la  especificación de particiones detectables , por lo tanto, las mismas se pueden omitir de fstab.
 +  * El nombre del unit file guarda relación con el punto de montaje del sistema de archivos. Si el punto de montaje es **/mnt/backups**, el nombre del unit file debe de ser mnt-backups.mount.
 +  * ''man 5 systemd.mount'' #
 +  * ''man 1 systemd-mount'' #
 +  * ''systemctl -t mount'' #
 +  * https://manuais.iessanclemente.net/index.php/Gesti%C3%B3n_de_Puntos_de_Montaje - Gestión de Puntos de Montaje
 +  * https://wiki.archlinux.org/title/Systemd_(Espa%C3%B1ol)#Montaje - Mount Units
 +
 +== Automount
 +  * Los automounts en systemd son un tipo de unidad que permite montar automáticamente sistemas de archivos en un directorio determinado cuando este es accedido por primera vez, y desmontarlos cuando ya no son necesarios.
 +  * Para cada automount en systemd es necesario tener un mount correspondiente.
 +    * ''man 5 systemd.automount''
 +    * ''systemctl -t automount''
 +    * ''systemctl list-automounts''
 +    * ''systemctl cat proc-sys-fs-binfmt_misc.automount''
 +
 +MATE EXTRA: [[https://community.hetzner.com/tutorials/automount-filesystems-with-systemd]]
 +
 +== PATH
 +  * https://www.linux.com/topic/desktop/systemd-services-monitoring-files-and-directories/ - Systemd Services: Monitoring Files and Directories
 +  * systemctl list-paths #
 +
 +
 +== Temporales
 +  * Hay varios servicios que crean o borran ficheros o directorios:
 +    * systemd-tmpfiles-clean.service
 +    * systemd-tmpfiles-setup-dev.service
 +    * systemd-tmpfiles-setup.service
 +      * systemctl cat systemd-tmpfiles-setup.service # Para su configuración
 +== Configuración
 +  * Los archivos de configuración se almacenan en los siguientes directorios:
 +    * /usr/lib/tmpfiles.d/
 +    * /run/tmpfiles.d/
 +    * /etc/tmpfiles.d/
 +  * Los archivos de configuración se proporcionan normalmente junto con los archivos de servicio, y reciben su nombre en el estilo /usr/lib/tmpfiles.d/**programa**.conf
 +  * ''cat /usr/lib/tmpfiles.d/tmp.conf'' # Vemos el contenido de tmp.conf
 +    * q /tmp     1777 root root 10d
 +    * q /var/tmp 1777 root root 30d
 +  * ''systemd-tmpfiles %%--cat-config%%'' # Vemos la configuración de TODOS los ficheros
 +  * Para ver la sintaxis de la creación, borrado o gestión de los temporales:
 +    * 🇬🇧 https://www.freedesktop.org/software/systemd/man/latest/tmpfiles.d.html - Página man
 +    * man 5 tmpfiles.d # Para verlo en local
 +  * Si hacemos un cambio en algún fichero, no lo va a ver hasta que rebotemos el sistema, o hasta que ejecutemos los siguientes comandos:
 +    * ''systemd-tmpfiles %%--create%%'' # Crea los temporales especificados
 +    * ''systemd-tmpfiles %%--remove%%'' # Borra los temporales especificados
 +    * ''systemd-tmpfiles %%--clean%%''  # Vacía el contenido de los temporales especificados
 +    * Es posible especificar las tres opciones juntas en una sola orden. En ese caso, ''%%--create%%'' siempre es lo que se ejecuta lo último.
 +  * Los usuarios pueden tener sus propios ficheros temporales, definidos en el siguiente directorio:
 +    * **~/.config/user-tmpfiles.d/** 
 +    * ''systemd-tmpfiles %%--user --create%%'' # Para gestionar sus propios temporales
 +    * ''systemd-tmpfiles %%--user --cat-config%%'' # Para verlos
 +  * Uso
 +    * ''df -t tmpfs -h'' # Para ver los sistemas de ficheros de tipo **tmpfs** montados en memoria
 +    * ''journalctl -b -u systemd-tmpfiles'' # Para ver los logs
 +    * ''systemctl cat systemd-tmpfiles-clean.timer'' # Se ejecuta una vez al día, y 15 minutos después de arrancar
 +  * Información general
 +    * https://wiki.archlinux.org/title/Systemd_(Espa%C3%B1ol)#Archivos_temporales
 +    * https://wiki.archlinux.org/title/Tmpfs_(Espa%C3%B1ol)
 +    * https://mastering-linux.com/engineer/systemd#managing-temporary-files
 +    * 🇬🇧 https://www.baeldung.com/linux/systemd-tmpfiles-configure-temporary-files
 +
 +== Seguridad, monitorización, análisis
 +  * https://www.linuxjournal.com/content/systemd-service-strengthening - Systemd Service Hardening con el comando systemd-analyze security
 +  * 🇬🇧 https://0pointer.de/blog/projects/security.html - Explicación de algunas de las características de seguridad
 +  * 🇬🇧 https://github.com/tim-seoss/rest-server/commit/76d995edfc45b7ed913c1125c3a95f626841276e - Ejemplo de mejora de la seguridad de un comando
 +
 +=== Arranque
 +  * ''systemd-analyze plot > graph1.svg ; eog graph1.svg'' # Crea un gráfico de todo el arranque del sistema, y lo visualiza con la app gráfica eog
 +  * ''systemd-analyze blame | less'' # Lo mismo, pero en modo texto, aunque no muestra dependencias ni paralelismo. Ordena la salida por tiempo que tarda cada componente en estar disponible, para poder ver a quien culpar (blame) en caso de retardo
 +  * ''systemd-analyze dot %%'avahi-daemon.'%%'' | dot -Tsvg > avahi.svg ; eog avahi.svg # Para ver las dependencias de un componente concreto en modo gráfico
 +  * ''systemd-analyze critical-chain'' # Muestra el árbol de dependencias de targets y de los servicios que bloquean la activación de cada target
 +  * 🇬🇧 https://www.thegeekdiary.com/systemd-analyze-command-examples-in-linux/ - Info
 +
 +=== Monitorización
 +  * ''systemctl status'' # Estado general de SystemD, mostrando todos los procesos lanzados con sus PIDs
 +  * ''systemctl %%--no-page --state=failed%%'' # Para ver si alguna unidad ha fallado
 +  * ''systemctl %%--no-page%%'' # Para ver todas las unidades lanzadas, ordenadas por tipo
 +
 +=== Logs
 +== journalctl
 +  * https://atareao.es/tutorial/trabajando-con-systemd/journalctl-y-logs-en-systemd/ - Buen resumen
 +  * https://www.solvetic.com/tutoriales/article/4051-administrar-logs-eventos-systemd-journalctl-linux/ - Cómo hacer persistentes los logs con journalctl, si no están almacenando
 +  * Ejemplos de comandos:
 +    * journalctl -u ruiz-tapiador.service # Mensajes generados por el servicio y por SystemD
 +      * journalctl UNIT=ruiz-tapiador.service # Mensajes generados por SystemD (arranque del servicio, parada, etc...)
 +      * journalctl _SYSTEMD_UNIT=ruiz-tapiador.service # Mensajes generados por el propio servicio (problemas al cargar algo, errores..)
 +    * journalctl -p emerg..err # Mensajes con prioridad entre emerg y err
 +      * journalctl -p 0..4    # Mensajes con prioridad entre emerg y err
 +      * journalctl -p 4       # Mensajes con prioridad entre emerg y err
 +      * journalctl -p 4..4    # Mensajes con prioridad err
 +      * Colores de las prioridades:
 +        * 3-0 - rojo
 +        * 4 - amarillo
 +        * 5 - blanco en negrita
 +        * 6 - blanco
 +        * 7 - gris
 +      * 
  • info/cursos/pue/ethical-hacker/extras/sincara-systemd.1740653054.txt.gz
  • Darrera modificació: 27/02/2025 02:44
  • per mate