Preparazione del PC Ubuntu di un impianto (procedura di Michele)¶
Tipo: modifica, su un PC nuovo prima della consegna al cliente.
Fonte: guide scritte di Michele in raw/michele/UBUNTU - MDM/ (ricevute il 30/10/2026). Le guide originali contengono password e chiavi: non vanno copiate né diffuse (vedi M32). Questa pagina riporta i passi senza i segreti.
È la procedura con cui oggi si prepara il mini PC del cliente (chiamato "receiver" nelle guide): sistema operativo, VPN, progetto televigilanza-mdm con Apache e MySQL, proxy verso gli NVR, software MDM in Docker e accesso remoto. L'installazione del software MDM con lo script del midserver è descritta in nuova-installazione.md.
Ordine dei passi¶
- Installare Ubuntu LTS sul mini PC. Prima di passare a una nuova LTS, verificare che i componenti sotto la supportino.
- Installare il progetto IT MDM (pacchetto distribuito da Michele; il link è nella guida originale).
- Al riavvio, nell'ordine: utente root e
bsqsecurity, WireGuard, Apache, MySQL, NGINX Proxy, peer su pfSense. - Caricare il progetto su CodeCommit e ripristinare il database su MySQL.
- Aprire la pagina
http://<IP del PC>/settings/(con la chiave indicata nella guida originale) e configurare l'impianto.
Utenti e accesso amministrativo¶
- Impostare e sbloccare la password di root (
sudo passwd root,sudo passwd -u root). - Dare a
bsqsecuritysudo senza password: consudo visudoaggiungerebsqsecurity ALL=(ALL) NOPASSWD: ALL, poi riavviare. - Login SSH di root: in
/etc/ssh/sshd_configPermitRootLogin yes, poisudo service ssh restart.
VPN¶
Peer su pfSense, configurazione del client, fix del DNS e controllo automatico ogni 5 minuti: nuovo-peer-wireguard.md.
Apache, PHP e MySQL (progetto televigilanza-mdm)¶
Poi, secondo la guida:
- password di root di MySQL impostata avviando MySQL temporaneamente con --skip-grant-tables --skip-networking;
- creazione di un utente MySQL con host % e tutti i privilegi su tutte le basi dati;
- bind-address commentato in /etc/mysql/mysql.conf.d/mysqld.cnf, per l'accesso remoto al database.
Gli ultimi due punti rendono il database del PC raggiungibile dalla rete con un utente onnipotente (M32).
Componenti del progetto da installare dopo il codice:
| Cosa | Comando | Effetto |
|---|---|---|
| Pulizia dei log | sudo install -o root -g root -m 0644 /var/www/html/controls/televigilanza-log-cleanup.cron /etc/cron.d/televigilanza-log-cleanup |
cron di pulizia; prova prima con sudo -u www-data /usr/bin/php /var/www/html/controls/cleanup_logs.php --dry-run |
| Riavvio dalla pagina comandi | sudo install -o root -g root -m 0440 /var/www/html/deployment/sudoers-televigilanza-reboot /etc/sudoers.d/televigilanza-reboot |
permette a www-data solo shutdown -r +1; verifica con sudo visudo -cf /etc/sudoers.d/televigilanza-reboot e sudo -u www-data /usr/bin/sudo -n -l /usr/sbin/shutdown -r +1 |
NGINX Proxy verso gli NVR del cliente¶
Nginx Proxy Manager in Docker (cartella nginx_proxy, docker compose up -d), immagine jc21/nginx-proxy-manager:latest, porte:
| Porta sul PC | Uso |
|---|---|
| 81 | pannello di amministrazione di Nginx Proxy Manager |
| 8081 → 80, 4443 → 443 | proxy HTTP/HTTPS |
| 10101–10105 | stream TCP verso NVR e telecamere del cliente |
Al primo accesso (localhost:81) si cambiano le credenziali predefinite. Poi si crea uno Stream per ogni porta verso l'IP desiderato nella rete del cliente. Dalla centrale (Cava) si raggiunge così la porta dati dell'NVR quando il cloud del produttore non si può usare; è il traffico VPN più alto (pfsense-rete-vpn.md).
Cosa inoltrare per marca:
| NVR | Porte da inoltrare |
|---|---|
| Uniview | 80 (va bene anche dietro NAT) e 554 (1:1) |
| Hikvision (serie Safire) | solo 8000 (va bene anche dietro NAT) |
Porta 2000: controllo di raggiungibilità (MDM e GANZ)¶
Un servizio systemd ascolta sulla porta TCP 2000 solo per dire "sono raggiungibile"; il controllo degli impianti lo usa (pfsense-rete-vpn.md).
sudo apt update && sudo apt install -y socat
sudo useradd --system --no-create-home --shell /usr/sbin/nologin portlistener
sudo nano /etc/systemd/system/port-2000-listener.service
sudo systemctl enable --now port-2000-listener.service
systemctl status port-2000-listener.service
Contenuto del servizio:
[Unit]
Description=Listener TCP su porta 2000 per check di raggiungibilità
Wants=network-online.target
After=network-online.target
[Service]
User=portlistener
ExecStart=/usr/bin/socat TCP-LISTEN:2000,reuseaddr,fork,keepalive,nodelay -
Restart=always
RestartSec=1
NoNewPrivileges=yes
ProtectSystem=full
ProtectHome=true
PrivateTmp=yes
LockPersonality=yes
CapabilityBoundingSet=
AmbientCapabilities=
MemoryDenyWriteExecute=yes
[Install]
WantedBy=multi-user.target
L'utente portlistener va creato prima di avviare il servizio (nella guida originale il passo viene dopo).
Software MDM in Docker (procedura manuale)¶
- Copiare la cartella
NEWnella home dibsqsecurity. - Installare Docker dal repository ufficiale (
docker-ce,docker-ce-cli,containerd.io,docker-buildx-plugin,docker-compose-plugin). sudo groupadd dockeresudo usermod -aG docker $USER.cd NEW && docker compose up -d.
Per le installazioni nuove si usa lo script installer.sh del midserver (nuova-installazione.md).
Accesso remoto al desktop (facoltativo)¶
Tre alternative, a seconda del PC:
- GNOME Remote Login (RDP, porta 3389): disattivare il servizio utente
gnome-remote-desktop-headless, installaregnome-remote-desktopegdm3, generare un certificato TLS per l'utentegnome-remote-desktop, configurare congrdctl --system rdp(chiave, certificato, credenziali iniziali,enable), avviaregdm3egnome-remote-desktop, verificare conss -lntp | grep 3389. Dopo il collegamento si accede conbsqsecurity. - XRDP con Xvnc e XFCE, tramite lo script
xrdp-installerdi c-nergy.be. - NoMachine: pacchetto
.debdal sito ufficiale, poi riavvio dinxserver.
Problemi noti di questa procedura¶
Riassunti in M32:
- password fisse scritte nelle guide (root di MySQL, pannello di Nginx Proxy Manager), quindi uguali su tutti i PC preparati così;
- MySQL con utente
%con tutti i privilegi e aperto alla rete; - root con password e login SSH di root abilitato;
bsqsecuritycon sudo senza password; - pagina
settingsprotetta solo da una chiave fissa nell'URL, scritta nella guida; - Nginx Proxy Manager con immagine
lateste pannello sulla porta 81 raggiungibile dalla VPN.