Product SiteDocumentation Site

8.9. Altre configurazioni: Sincronizzare l'orario, log, condivisione dell'accesso…

È bene conoscere i molti elementi elencati in questa sezione per chiunque voglia padroneggiare tutti gli aspetti di configurazione di un sistema GNU/Linux. Tuttavia sono trattati brevemente e i riferimenti alla documentazione sono frequenti.

8.9.1. Fuso orario

Il fuso orario, configurato durante l'installazione iniziale, è un elemento di configurazione del pacchetto tzdata. Per modificarlo, utilizzare il comando dpkg-reconfigure tzdata, che consente di scegliere il fuso orario da utilizzare in modo interattivo. La sua configurazione è memorizzata nel file /etc/timezone. Inoltre, /etc/localtime diventa un collegamento simbolico al file corrispondente in /usr/share/zoneinfo; quest'ultimo, contiene le regole che disciplinano le date in cui si adotta l'ora legale (DST) per i Paesi che la utilizzano.
Quando si necessita di cambiare temporaneamente il fuso orario si può utilizzare la variabile d'ambiente TZ che ha priorità rispetto alla configurazione predefinita di sistema:
$ date
Thu Sep  2 22:29:48 CEST 2021
$ TZ="Pacific/Honolulu" date
Thu 02 Sep 2021 10:31:01 AM HST

8.9.2. Sincronizzazione del tempo

La sincronizzazione dell'orario, che può sembrare superflua in un computer, è molto importante in una rete. Poiché gli utenti non hanno permessi per poter modificare data ed ora, è importante che questa informazione sia precisa per evitare confusione. Inoltre, avere tutti i computer sincronizzati sulla rete, permette di ottenere comparazioni migliori tra le informazioni dei log delle varie macchine. Così, in caso di attacco, è più semplice ricostruire la sequenza cronologica delle azioni sulle macchine interessate dalla compromissione. I dati raccolti per propositi statistici non avrebbero molto senso se non fossero sincronizzati.

8.9.2.1. Per le postazioni di lavoro

Poiché le postazioni di lavoro sono regolarmente riavviate (anche solo per risparmiare energia) sincronizzarle con NTP all'avvio è sufficiente. Per farlo si può installare il pacchetto ntpdate. Se è necessario bisogna cambiare il server NTP usato modificando il file /etc/default/ntpdate.

8.9.2.2. Per i server

I server sono riavviati raramente ed è estremamente importante che il loro tempo di sistema sia corretto. Per mantenere costantemente corretto il tempo si dovrebbe installare un server NTP locale, un servizio offerto dal pacchetto ntp. Nella configurazione predefinita il server si sincronizza con pool.ntp.org e fornisce il tempo in risposta alle richieste che arrivano dalla rete locale. È possibile configurarlo modificando il file /etc/ntp.conf e la modifica più significativa riguarda il cambio dei server NTP a cui fa riferimento. Se la rete ha molti server può essere interessante avere un server del tempo locale che si sincronizza con i server pubblici e viene usato come sorgente del tempo dagli altri server nella rete.

8.9.3. Ruotare i file di log

I file di log crescono, velocemente, ed è necessario archiviarli. Lo schema più comune è "ruotare" gli archivi: i file log vengono regolarmente archiviati e solo gli ultimi X archivi vengono mantenuti. logrotate, il programma responsabile di queste rotazioni, segue le direttive specificate nel file /etc/logrotate.conf ed in tutti i file all'interno della directory /etc/logrotate.d/. L'amministratore può modificare questi file, se desidera adattare le politiche di rotazione definite da Debian. La pagina di manuale logrotate(1) descrive tutte le opzioni disponibili per questi file di configurazione. Si potrebbe desiderare l'incremento del numero di file mantenuti nella rotazione dei log oppure spostare i file di log in una directory dedicata specifica per archiviarli anziché cancellarli. I log si possono anche inviare via email per archiviarli in altro luogo.
Il programma logrotate viene eseguito giornalmente dal software di programmazione cron (descritto nella Sezione 9.7, «Pianificare attività con cron e atd»).

8.9.4. Condivisione dei privilegi di amministrazione

Frequentemente diversi amministratori lavorano nella stessa rete. Condividere le password di root non è molto elegante ed apre le porte ad abusi legati all'anonimato che questa condivisione genera. La soluzione a questo problema è il programma sudo che consente a certi utenti di eseguire determinati comandi con privilegi speciali. Nel caso d'uso più comune sudo consente ad un utente fidato di eseguire qualsiasi comando come root. Per farlo l'utente esegue semplicemente sudo comando e si autentica utilizzando la propria password personale.
Quando installato, il pacchetto sudo concede completi privilegi di root ai membri del gruppo Unix sudo. Per delegare questi privilegi, l'amministratore deve usare il comando visudo, che consente di modificare il file di configurazione /etc/sudoers (ancora una volta, questo eseguirà l'editor vi o qualsiasi altro editor indicato nella variabile d'ambiente EDITOR). In alternativa si possono inserire le regole in piccoli file in /etc/sudoers.d/ purché questa directory sia inclusa da /etc/sudoers tramite @includedir /etc/sudoers.d, che per Debian è l'impostazione predefinita. L'aggiunta di una riga con nomeutente ALL=(ALL) ALL permette all'utente in questione di eseguire qualsiasi comando come root.
Configurazioni più sofisticate consentono di autorizzare solo specifici comandi ad alcuni utenti. I dettagli delle varie combinazioni sono riportati nella pagina di manuale sudoers(5).

8.9.5. Lista dei punti di mount

Il file /etc/fstab fornisce la lista di tutti i possibili montaggi che avvengono automaticamente all'avvio o manualmente per i dispositivi di archiviazione removibili. Ogni punto di montaggio è definito da una riga con i diversi campi separati da spazi:
  • file system: indica dove si trova il filesystem da montare, che può essere un dispositivo locale (partizione del disco rigido, CD-ROM) o un filesystem remoto (come NFS o anche SSHFS).
    Questo campo è frequentemente sostituito con l'ID univoco del filesystem (che può essere determinato con blkid dispositivo) ed è preceduto da UUID=. Questo mette al riparo da un eventuale cambio nel nome del dispobitivo in caso di aggiunta o rimozione di dischi o se i dischi vengono individuati in un ordine diverso. Per maggiori dettagli vedere Sezione 8.8.1, «Identificare i dischi».
  • punto di montaggio: questa è la posizione nel filesystem locale dove il dispositivo, sistema remoto, o partizione dev'essere montata.
  • tipo: questo campo definisce il filesystem usato sul dispositivo da montare. ext4, ext3, vfat, ntfs, btrfs, xfs sono solo alcuni esempi.
    Una lista completa dei filesystem conosciuti è disponibile nella pagina di manuale mount(8). Il valore speciale swap è per le partizioni di swap. Il valore auto specifica al programma mount di individuare automaticamente il filesystem (cosa particolarmente utile per i lettori e le chiavette USB, poiché ognuna può avere un filesystem diverso dall'altra);
  • opzioni: ne esistono molte, in base al filesystem, e sono documentate nella pagina di manuale mount. Le più comuni sono
    • rw o ro, significano rispettivamente che il dispositivo può essere montato con i permessi di lettura/scrittura oppure sola lettura.
    • noauto disattiva il montaggio automatico all'avvio.
    • nofail permette all'vvio del sistema di procedere anche quando non è presente alcun dispositivo. Assicurasi di abilitare questa opzione per i dischi esterni che potrebbero essere scollegati all'avvio, poichè systemd garantisce che realmente tutti i pinti di mount che devono montati automaticamente siano effettivamente montati prima di lasciare che il processo di avvio continui fino alla fine. Si noti che è possibile combinare questa opzione con x-systemd.device-timeout=5s per dire a systemd di aspettare non più di 5 secondi che venga rilevato il dispositivo (si veda systemd.mount(5)).
    • user autorizza tutti gli utenti a montare questo filesystem (un'operazione che sarebbe altrimenti consentita al solo utente root).
    • defaults imposta un insieme di opzioni predefinite: rw, suid, dev, exec, auto, nouser e async, ognuna delle quali può essere singolarmente disabilitata dopo defaults aggiungendo nosuid, nodev e così via per bloccare rispettivamente suid, dev ecc. Aggiungere l'opzione user la riattiva, dato che defaults include nouser.
  • dump: questo campo è quasi sempre impostato a 0 ed è una sorta di reliquia. Quando è maggiore di zero, indica allo strumento dump che la partizione contiene dati per i quali deve essere fatto un frequente backup. Lo strumento supporta solo i filesystem Ext2/3/4 e utilizzerà questo valore quando è eseguito con dump -W o dump -w per determinare su quali partizioni deve essere eseguito il backup. Considerare gli esempi presenti in /usr/share/doc/dump/examples/ se si vuole utilizzare questa funzionalità. Ma esistono migliori alternative per fare il backup di un filesystem, come fsarchiver.
  • pass: questo ultimo campo indica quando l'integrità del filesystem dovrebbe essere controllata all'avvio e l'ordine in cui deve essere fatto. Se è 0 non viene eseguito nessun controllo. Il filesystem radice dovrebbe sempre avere il valore 1, mentre altri filesystem permanenti dovrebbero avere il valore 2.

Esempio 8.5. Esempio di file /etc/fstab

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# systemd generates mount units based on this file, see systemd.mount(5).
# Please run 'systemctl daemon-reload' after making changes here.
#
# <file system>                           <mount point>   <type>      <options>         <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=7a250fb8-c16d-4a4e-9808-ec08ae92b6c6 /               ext4        errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
UUID=13f367ae-dbaf-40ed-85c0-4072a2ebe426 none            swap        sw                0       0
/dev/sr0                                  /media/cdrom0   udf,iso9660 user,noauto       0       0
/dev/fd0                                  /media/floppy   auto        rw,user,noauto    0       0
arrakis:/shared                           /shared         nfs         defaults          0       0
L'ultima riga dell'esempio corrisponde ad un filesystem di rete (NFS): la directory /shared/ sul server arrakis è montata su /shared/ della macchina locale.
Il formato del file /etc/fstab è documentato nella pagina di manuale fstab(5).

8.9.6. locate e updatedb

Il comando locate può trovare la posizione di un file quando si conosce solo una parte del nome. Restituisce un risultato quasi istantaneo, poiché consulta un database che memorizza la posizione di tutti i file sul sistema; questo database viene aggiornato quotidianamente dal comando updatedb. Esistono diverse implementazioni del comando locate e Debian ha scelto mlocate come sistema standard. Se si vuole considerare un'alternativa, si può provare plocate che fornisce le stesse opzioni da riga di comando e può essere considerato a tutti gli effetti un sostituto.
locate è abbastanza intelligente da restituire solo i file che sono accessibili all'utente che esegue il comando anche se utilizza un database in cui sono presenti tutti i file del sistema (sin dalla sua implementazione updatedb viene eseguito con i privilegi di root). Per una maggiore sicurezza, l'amministratore può utilizzare PRUNEDPATHS in /etc/updatedb.conf per escludere alcune directory dall'indicizzazione.