Cosa fa#
Interfaccia a riga di comando per controllare systemd, il sistema di inizializzazione e il manager dei servizi (demoni) standard nelle distribuzioni Linux moderne. Permette di gestire il ciclo di vita delle unità di sistema (servizi, socket, target).
In Linux, quasi tutto ciò che gira in background (correndo come un "demone") è un servizio. Quando modifichi un file in /etc/, stai cambiando le "istruzioni scritte" su un foglio di carta, ma il processo che è già in esecuzione in memoria non sa che il foglio è cambiato.
Ecco la logica per orientarti:
1. Il principio della "Rilettura"#
Un servizio legge il suo file di configurazione solo in due momenti:
- All'avvio: quando il sistema parte.
- Al segnale di ricarica: quando gli dici esplicitamente di rileggere i file.
2. Come capire se è un servizio?#
Se la modifica riguarda una funzionalità che deve restare attiva sempre (rete, server web, database, SSH), allora è gestita da un servizio tramite systemd.
- Modifichi la rete? Servizio
networkingoNetworkManager. - Modifichi l'accesso remoto? Servizio
ssh. - Modifichi un firewall? Servizio
ufwonftables.
Architettura di Controllo#
systemctl agisce come client che comunica con il processo systemd (PID 1).
[systemctl] ──── parla con ────► [systemd]
│
gestisce tutti i servizi
│
┌────────────────┼────────────────┐
▼ ▼ ▼
[ssh] [wazuh] [cron]Sintassi#
systemctl [comando] [nome-servizio]
Comandi essenziali#
| Comando | Cosa fa | Note Blue Team |
|---|---|---|
systemctl status <srv> | Mostra stato e log recenti. | Primo passo per il troubleshooting. |
systemctl start <srv> | Avvia il servizio immediatamente. | — |
systemctl stop <srv> | Ferma il servizio ora. | — |
systemctl restart <srv> | Riavvia il servizio. | Necessario dopo modifiche ai file .conf. |
systemctl enable <srv> | Imposta l'avvio automatico al boot. | Crea symlink in /etc/systemd/system/. |
systemctl disable <srv> | Rimuove l'avvio automatico. | Il servizio rimarrà spento al boot. |
systemctl is-enabled <srv> | Verifica lo stato di persistenza. | Restituisce enabled o disabled. |
systemctl list-units --failed | Elenca i servizi crashati. | Fondamentale per la detection di anomalie. |
| Comando | Cosa fa | Note Blue Team |
|---|---|---|
systemctl mask <srv> | Rende il servizio "impossibile" da avviare. | Hardening: Impedisce che un servizio pericoloso venga avviato anche da altri processi o manualmente. |
systemctl unmask <srv> | Annulla il mask. | — |
systemctl list-dependencies | Mostra l'albero delle dipendenze. | Capire quali altri servizi "tirano su" un processo sospetto. |
Verificare l'avvio automatico (Persistenza)#
Nella riga Loaded dell'output di status è possibile verificare se un servizio è configurato per resistere al riavvio:
; enabled;: Il servizio si avvierà automaticamente.; disabled;: Il servizio rimarrà spento fino a comando manuale.
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
^^^^^^^Combinazioni utili#
# Abilita e avvia subito (combo per nuovi servizi)
sudo systemctl enable --now spice-vdagentd
# Ricarica la configurazione di systemd dopo aver modificato un file .service
sudo systemctl daemon-reload
# Visualizza tutte le unità caricate in memoria
systemctl list-unitsScenario Reale (Blue Team Perspective)#
In un contesto di sicurezza, un servizio critico (come wazuh-agent o auditd) che risulta improvvisamente in stato failed o disabled può essere un Indicator of Compromise (IoC). Gli attaccanti spesso tentano di spegnere i processi di monitoraggio per operare indisturbati. Il comando systemctl list-units --failed è uno dei primi controlli da effettuare durante una scansione di salute del sistema.
Dove l'ho usato#
- progetto-lab-vm — Per gestire il demone SSH e abilitare
spice-vdagentper abilitare la clipboard condivisa.
"Hardening & Detection"#
Oltre a enable/disable, un analista deve conoscere il comando mask. Mentre disable toglie l'avvio automatico, il servizio può ancora essere avviato manualmente o da un altro servizio che lo richiede. mask invece collega l'unità a /dev/null, rendendolo totalmente inerte.
# Esempio: Disabilitare totalmente un servizio non necessario (es. bluetooth su un server)
sudo systemctl mask bluetooth🔍 Sezione "Investigazione" (L'arma segreta)#
Spesso gli attaccanti creano servizi malevoli con nomi simili a quelli di sistema. Per vedere da dove viene caricato un servizio (se da una cartella temporanea o sospetta):
systemctl show <nome-servizio> -p FragmentPathSe il percorso non è /lib/systemd/system/ o /etc/systemd/system/, alza la guardia! 🚩
Note personali#
Analyst Tip: Ricorda che
systemctl restartinterrompe brevemente il servizio. Se stai lavorando su una connessione SSH e riavvii il servizio SSH, la tua sessione corrente di solito rimane attiva, ma è buona norma avere una seconda via d'accesso o testare la config consshd -tprima di procedere. Recovery tip: Un servizioactive (running)madisabledgira adesso ma sparisce al prossimo reboot. Sempre verificare entrambi gli stati dopo un recupero — vedi recupero-accesso-ssh-hetzner.
Collegato a#
- system — categoria (Hub)
- journalctl — perché visualizza i log generati dai servizi gestiti
- ssh — servizio spesso gestito tramite systemctl.
- wazuh — agente SIEM che opera come servizio systemd.


