In informatica non esiste uno standard che definisca esattamente cosa è un server e cosa è un servizio, la differenza spesso non è così evidente e i termini vengono spesso confusi anche a causa di traduzioni non precisissime, in questo documento non sono presenti definizioni o trattati tecnici a riguardo e verrà usato il termine demoni (dal termine inglese deamon), termine usato quasi sempre nel mondo GNU LINUX per identificare sia i server sia i servizi. Con le dovute cautele prendiamo per vera la definizione più usata cioè che un demone è un processo in esecuzione in background sempre attivo, senza il bisogno di un gestione diretta dell’utente e che risponde quando viene invocato, un esempio classico è il demone CUPS che gestisce le stampe, questo rimane attivo in background e resta in ascolto finché qualcuno non lo invoca lanciando una stampa.
GNU Linux e Debian forniscono una numerosa proposta di demoni e anche di programmi per l’iterazione con i quelli attivi sul sistema, per esempio il programma netstat permette di monitorare l’interfaccia di rete e di elencare tutte le informazioni utili (socket aperti, routing tables, processi, ecc…) visto la maggior parte dei demoni è disponibile via rete con i protocolli TCP/IP, per ottenere l’elenco completo di tutti i processi attivi in un sistema basta lanciare il comando:
# netstat -l | grep tcp
Per avere un quadro completo della situazione, bisogna anche guardare il file:
/etc/services
dove sono indicate tutte le porte numeriche ad una descrizione del demone associato.
Una caratteristica base di tutti i sistemi operativi derivati da Unix (tra i quali appunto GNU Linux e Debian) è che qualsiasi elemento del sistema viene visto come se fosse un file, anche i demoni sono dei file anche se un bel po’ speciali e si possono osservare in maniera dettagliata: lo strumento principe per questo scopo è lsof (LS Open Files), per esempio se con netstat abbiamo visto che netbios è arrivo sul nostro sistema, basta lanciare il comando:
# lsof -i
per avere in risposta l’elenco dettagliato di tutti i demoni in esecuzione con tutte le informazioni, per esempio:
smbd 4089 root 21u IPv4 8082 TCP *:netbios-ssn (LISTEN)
E’ anche possibile lanciare il comando:
# lsof -i | grep www
per vedere se il demone Apache è attivo nel sistema.
Da notare che in GNU Linux quasi tutto è un demone, il sistema di stampa e la condivisione di file in rete sono gli esempi più semplici e in questo capitolo vedremo come installare i più semplici e utili demoni disponibili nella nostra distribuzione, notare che quando abbiamo installato il sistema base, abbiamo già installato alcuni demoni tra qui il demone grafico X (con i desktop) e il sistema della shell che usiamo per lanciare i comandi. Per quanto riguarda i demoni specifici di web-server e database vengono presentati nella sezione dedicata alla programmazione, in questa sezione sono presentati solo i demoni utili per l’utilizzo generico in modo da permettere ad un lettore di poter saltare il capitolo della programmazione se non interessato all’argomento.
In GNU Linux la gestione dei servizi per stampare e la gestione delle stampanti come periferiche viene gestito dal progetto CUPS che mette a disposizione un insieme di demoni e programmi per stampare, il problema principale è che non tutte le case produttrici di stampanti sviluppano driver per i sistemi GNU Linux, la situazione è molto migliorata nell’ultimo decennio e ormai tutte le stampanti di ultima generazione hanno driver disponibili automaticamente su Debian oppure è possibile usare un driver generico che funziona su tutti i modelli di una generazione. Il demone CUPS (acronimo di Common UNIX Printing System) è semplice come installare tutte le applicazioni che abbiamo già visto: con Synaptic bisogna installare i pacchetti cups, apsfilters e foomatic-db senza il pacchetto lpr che è un sostituto molto vecchio.
Una volta installati i pacchetti necessari il tutto, basta aprire un browser e andare all’indirizzo:
http:\\localhost:631\
per accedere al programma web di gestione del server di stampa. Da questa comoda interfaccia si possono gestire le stampanti (installarle, cancellarle, fermarle) e si possono anche gestire i processi di stampa. Oltre all’interfaccia web di CUPS, i vari Desktop manager mettono a disposizione vari programmi per la configurazione le stampanti oppure è possibile usare il pannello di controllo WebMin. Per condividere una stampante locale in una rete locale è necessario aver installato anche il demone SAMBA e dal condivisione potrà essere configurata direttamente dal pannello di amministrazione.
Il servizio per la condivisione di file, cartelle periferiche in una rete LAN è compreso nel KernelLinux e non deve essere installato nessun pacchetto supplementare: il protocollo SSL è disponibile grazie ai pacchetti openssh-server
e openssh-client
. Per collegare due o più nodi con i sistemi GNU Linux basta collegarsi usando il protocollo ssh o sftp, standard ormai usato in tutti i sistemi. Se nella rete invece sono presenti nodi con altri sistemi operativi è necessario usare il servizio di rete Samba che permette di condividere file e stampanti tra i vari sistemi operativi, per attivarlo vi basta installare il pacchetto Samba: il demone della condivisione con il protocollo NetBios usato dal sistema operativo MsWindows e anche dai sistemi operativi di Apple. La configurazione del demone può essere fatta nel file specifico:
/etc/samba/smb.conf
modificando il file manualmente si possono aggiornare le sezione già presenti oppure aggiungere le righe mancanti. Fino alle versione 8 di Debian era presente anche un software web per la configurazione di Samba ma swat è stato tolto dai repository quindi vi sconsiglio di installarlo perché non più aggiornato. Dopo ogni modifica del file di configurazione bisogna però riavviare il server con il comando
# systemctl restart smbd
Tipicamente il firewall di GNU Linux è configurato di default per bloccare tutte le connessioni “sconosciute”, comprese le connessioni generate dalla rete nella LAN, quindi una volta configurate le condivisioni SAMBA è consigliato di controllare il firewall: per abilitare la rete basta verificare che i nodi della rete (gli indirizzi IP) non vengano bloccati, in tal caso dovete abilitare gli indirizzi IP ad accedere al vostro sistema, potete usare il programma e inserire l’IP del vostro sistema nella sezione Trust per abilitare le condivisioni. L’alternativa è permettere a tutti di accedere al servizio Samba, aprendo il firewall a tutte le connessioni con i comandi:
# ufw allow 139 # ufw allow 445
Da notare che l’accesso è limitato agli utenti del computer in cui è in esecuzione il demone, quindi si dovrà fare l’autenticazione con username e password, anche se si è all’interno di un dominio di rete. Se non si è all’interno di un dominio gestito bisogna, per ogni utente abilitato alla connessione, settare la password di accesso via Samba con il comando:
# smbpasswd -a <nomeUtente>
così sarà possibile accedere via Explorer inserendo nella barra degli indirizzi l’indirizzo IP preceduto da due parre oppure eseguendo il mount con il comando dalla console dei comandi di MsWindows:
net use L: \\myserver\myshare /u:myuser mypassword
Un runlevel è uno stato logico del sistema in cui è possibile eseguire un insieme di operazioni, nei sistemi basati su Debian si usa lo standard SysV ed esistono 7 livelli, tutti i livelli sono basati su script eseguiti come link e contenuti in una cartella predefinita:
/etc/init.d
questi script vengono usati anche per controllare i demoni: avviare un demone all’avvio del sistema e poi spegnere il demone prima dello spegnimento del sistema, nel dettaglio per esaminare come è composta questa sezione basta osservare il contenuto della cartella
# ls -la /etc/init.d/
questi script devono prevedere almeno uno dei tre parametri: start, stop e restart, eventualmente possono avere anche reload, stats e status; per esempio per avviare il demone apache basta lanciare lo script corrispondente con il parametro “start”. Tutti questi script sono collegato con un link in alcune directory dedicare al singolo demone, questo per differenziare i vari comandi e permettere le esecuzioni degli script in maniera automatica al momento giusto. I livelli dei demoni sono :
- 0 : Quando il sistema si trova in questo in questo stato, vengono arrestati tutti i demoni, smontate le periferiche e viene preparato per lo spegnimento.
- 1 : In questo stato, è consentito l’accesso ad un utente solo, e gran parte dei servizi non vengono avviati; è usato prevalentemente per la manutenzione straordinaria del sistema.
- da 2 a 5 : Modalità Normali: In Debian non esistono distinzioni tra gli stati 2, 3, 4 e 5 e viene lasciata all’utente la possibilità di modificarli. Di default viene utilizzato il 2.
- 6 : Quando il sistema si trova questo stato, viene preparato per un riavvio; avvengono tutte le cose indicate per il runlevel zero, ma viene inviato un segnale di reboot invece che di shutdown.
- S : Runlevel speciale, che viene eseguito sempre al boot della macchina, prima di passare al runlevel di default.
Nelle precedenti versioni di Debian i runlevel erano configurabili tramite un sistema chiamato inittab e le configurazioni del sistema erano indicate nel file
/etc/inittab
dove venivano definiti i comportamenti principali del sistema e per ogni riga del file:
id:runlevel:azione:comando
venivano definire le informazioni:
- id = identificativo di rappresenta di una voce specifica dell’inittab
- runlevel = quali runlevel deve essere analizzata l’istruzione, con uno o più runlevel
- azione = l’azione da compiere (per es. “wait” per attende il termine dell’esecuzione del comando, “respawn” per eseguire ciclicamente il comando ogni volta che esso termina, “boot” il comando viene eseguito durante il boot del sistema e il contenuto di runlevel viene ignorato);
Nelle precedenti versioni di inittab erano presenti gli script /etc/init.d/rcS
con la funzione di invocare tutti gli script “S*” (cioè file che iniziano per S maiuscola) contenuti nella cartella /etc/rcS.d/ in ordine numerico/alfabetico; lo script /etc/init.d/rc si occupa di lanciare, in ordine numerico/alfabetico, gli script presenti in /etc/rcX.d/ partendo per quelli “K*” per passare a quelli “S*” e accetta come parametro il numero del runlevel.
Il nuovo sistema di gestione introdotto con la versione 8, si chiama Systemd e ha sostituito completamente inittab, questo nuovo demone per la gestione centralizzata del sistema definisce alcuni comandi molto utili:
$ systemctl
la lista di tutti i demoni disponibili$ systemctl status
mostra lo stato del sistema generale$ systemctl status apache2
mostra lo stato di un particolare demone# systemctl start apache2
lancia l’avvio di un demone# systemctl stop apache2
ferma immediatamente un demone in esecuzione# systemctl restart apache2
ferma e poi avvia un demone in esecuzione
per maggiori informazioni sul questo sistema di gestione dei demoni è disponibile la pagina ufficiale. Anche se è considerato deprecato dalla versione di Systemd, è ancora possibile usare il file:
/etc/rc.local
che contiene tutti i comandi eseguiti all’avvio del sistema, è sempre sconsigliato modificare questo per evitare di compromettere l’avvio del sistema e il corretto funzionamento del sistema ma se necessario è possibile aggiungere righe con istruzioni da eseguire all’avvio dei demoni prima della riga “exit 0”, per esempio è possibile aggiungere la cancellazione di tutti i file dentro alle cartelle del cestino, questo è possibile inserendo la riga:
#rm -r /home/alnao/.local/share/Trash/files/*
Per amministrare al meglio questi componenti potete modificare i file e gli script a mano oppure io consiglio di usare il pannello webmin dove è disponibile tutta una sezione per la gestione e la modifica dei componenti dei runlevel, nell’ambiente grafico è possibile trovare l’applicazione rcconf disponibile sui repository Debian e quindi installabili tramite Synaptic.
Un demone base di tutti i sistemi GNU Linux si chiama crontab e permette la schedulazione e l’esecuzione di comando ad un orario e/o frequenze prefissati, tale demone viene lanciato in backgrouond all’avvio del sistema e si basa sul file di configurazione
/etc/crontab
per le voci di sistema (chiamate entry) e i file contenuti nelle cartelle:
/etc/cron.d/ /var/spool/cron/crontabs
in questa ultima cartella si trova un file per ogni utente dove sono contenute le schedulazioni personalizzate dall’utente visto che di default tutti gli utenti su Debian possono eseguire il comando crontab e possono schedulare script o programmi a meno che non siano censiti nel file /etc/cron.deny, tutti i job di ciascun file sono caricati in memoria e rimangono finché non il demone crontab non viene spento o riavviato.
Ci sono alcune cartelle di Cron molto importanti:
/etc/cron.hourly
: in questa directory sono contenuti gli script da eseguire ogni ora/etc/cron.daily
: in questa directory sono contenuti gli script da eseguire ogni giorno/etc/cron.weekly
: in questa directory sono contenuti gli script da eseguire ogni settimana/etc/cron.monthly
: in questa directory sono contenuti gli script da eseguire ogni mese
La data/ora in cui vengono eseguiti gli script contenuti in queste directory è quella specificata nel file
/etc/crontab
In questi file ogni riga corrisponde ad un comando da eseguire e devono seguire il seguente schema:
* * * * * comando
dove in questo schema ogni carattere * corrisponde ad una “colonna” di schedulazione:
- la prima colonna sono i minuti (indicata con m) con il range 0-59
- la seconda colonna sono le ore (indicata con h) con il range 0-23
- la terza colonna è il giorno del mese (indicato con dom) con il range 1-31
- la quarta colonna è il mese (indicato con mon) con il range 1-12
- la quinta colonna è il il giorno della settimana (indicato con dow) con il range 0-6 dove 0 è la domenica
per esempio la riga:
12 * * * * /mnt/Dati/daEseguire.sh
esegue il comando tutti i giorni, a tutte le ore al minuto 12, un altro esempio di schedulazione:
30 * 7 * * /mnt/Dati/daEseguire.sh
esegue il comando il settimo giorno del mese a qualsiasi ora ma al minuto 30.
Si possono anche mettere combinazioni di numeri, per esempio un range indicando “1-10” si indica tutti i minuti da 1 al 10; un elenco per esempio “1,12,31” avvia ai minuti 1,21 e 31; indicare la frequenza per esempio “*/2” indica da eseguire ogni due minuti, un esempio pratico è:
6-12 */2 1,3,6,10 * * /comando/da/eseguire
dove vengono indicati tutti i minuti da 6 a 12, ogni due ore, nei giorni 1,3,6,10 del mese, di tutti i mesi. Altro esempio:
*/30 13,20 * 1-7,9-12 1-5 /comando/da/eseguire
il comando verrà eseguito nei giorni feriali (da lunedì a venerdì) di tutti i mesi tranne agosto, alle 13,00 – 13,30 – 20,00 – 20,30. Quando si scrivono questi comandi bisogna ricordarsi di analizzare anche dove vengono eseguiti: di default vengono eseguiti in background e un utente eventualmente collegato al sistema non si accorge di nulla, per esempio se si vuole visualizzare la finestra ad una certa ora questa non verrà visualizzata sul desktop se non si indicano i giusti parametri nel comando cron: prima del comando bisogna indicare DISPLAY=:0.0
che indica al cron di eseguire il comando indicato nel desktop attivo e non in background, in questo caso un esempio è:
23 21 * * 1 DISPLAY=:0.0 /home/alnao/messaggio.sh
Bisogna sempre tenere conto che cron esegue gli script al momento indicato solo se il sistema è acceso e il server crontab è avviato, se il sistema è spento o se il demone crontab viene arrestato, il comando non viene eseguito nemmeno quando crontab viene avviato successivamente. Come indicato per altri demoni, anche questo demone può essere facilmente configurato da WebMin senza la necessità di modificare il file a mano ma basta utilizzare l’interfaccia web per configurare il demone della schedulazione.
Per il controllo da remoto dei sistemi è possibile usare rdesktop compatibile il sistema di condivisione di MsWindows e potete provare il programma TeamViwever che permette di controllare da remoto in maniera indipendente. Uno dei programmi più usati è VNC, per installare VNC dovete installare i pacchetti
x11vnc vnc-java
Il pacchetto xrdp è una implementazione per GNU Linux del protocollo RDP sviluppato da Microsoft, grazie a questo demone è possibile utilizzare un sistema GNU Linux come server RDP quindi una postazione di un sistema di desktop remoto, dando la possibilità ad un sistema Windows di collegarsi con il suo client di Remote-Desktop. Per funzionare correttamente, il sistema xrdp necessita del server grafico X e di un desktop manager configurato. Da notare che il collegamento con questo sistema non usa la stessa sessione, come con VNC, ma con Xrdp si crea una nuova sessione sfruttando la tecnica del multi-utente oltre all’ovvio multi-tasking. Dopo la installazione del demone bisogna attivare la sicurezza, perché il pacchetto base non imposta alcuna sicurezza e chiunque può collegarsi al sistema, per impostare la sicurezza basta modificare il file
#nano /etc/xrdp/xrdp.ini
e bisogna aggiungere la riga
encrypt_level=high
Tipicamente la porta usata dal server è la 3389, che nei sistemi GNU Linux è bloccata, per sbloccarla basta modificare il file
/etc/polkit-1/localauthority.conf.d/02-allow-colord.conf
aggiungendo la riga
ufw allow 3389/tcp
Come client è possibile utilizzare il programma Remmina, grazie al quale è possibile utilizzare il protocollo RDP per collegarsi ad un server remoto.
Oltre ai più comuni demoni indispensabili in un ambiente di casa o workstation, sono disponibili una serie di demoni per la gestione di servizi avanzati per determinate situazioni:
- Se si vuole installare un demone FTP, la scelta più semplice è ProFTPD che si installa semplicemente scegliendo il pacchetto proftpd-basic da Synaptic (oppure da riga di comando tramite apt), l’installazione del pacchetto il sistema configurerà automaticamente tutto con dei valori di default che permettono già di usare il protocollo, grazie alle configurazioni base ogni utente di sistema può accedere con un client FTP alla home directory degli utenti con le credenziali del sistema. Per le configurazioni del demone è consigliato l’uso del pannello di controllo WebMin.
- Se si necessita di un Proxy per la vostra rete LAN, i sistemi GNU Linux dispongono di un server molto potente di nome Squid, ma vi sconsiglio di installarlo se non ne avete bisogno in quanto il server potrebbe rallentare il sistema anche se non lo utilizzate, questo demone ha una vasta varietà di usi: rendere più veloce un demone web usando una cache per richieste ripetute e fornisce un servizio di ottimizzazione per la cache di rete anche per l’uso di risorse condivise all’interno della rete e, infine, filtri sul traffico permesso o bloccato.
- Postfix è un demone mail e potete installarlo dal pacchetto omonimo e per le configurazioni conviene sempre usare WebMin oppure cercare i vari file di configurazioni a mano, per i servizi pop e imap è necessario installare e configurare courier tramite WebMin, è consigliato anche provare PostfixAdminm: una applicazione web per la gestione del demone mail ma solamente se è veramente usato, altrimenti è sconsigliata l’installazione di un demone così pesante se inutile.