In Part 13 di questa serie LFCS (Linux Foundation Certified Sysadmin) abbiamo spiegato come usare GRUB per modificare il comportamento del sistema passando le opzioni al kernel per il processo di avvio in corso.

Allo stesso modo, puoi utilizzare la riga di comando in un sistema Linux in esecuzione per modificare determinati parametri del kernel di runtime come modifica una tantum o in modo permanente modificando un file di configurazione.

Pertanto, è consentito abilitare o disabilitare i parametri del kernel al volo senza troppe difficoltà quando è necessario a causa di una modifica richiesta nel modo in cui dovrebbe funzionare il sistema.

Presentazione del filesystem /proc

L’ultima specifica del Filesystem Hierarchy Standard lo indica /proc rappresenta il metodo predefinito per la gestione delle informazioni sul processo e sul sistema, nonché altre informazioni sul kernel e sulla memoria. In particolar modo, /proc/sys è dove puoi trovare tutte le informazioni su dispositivi, driver e alcune funzionalità del kernel.

L’attuale struttura interna di /proc/sys dipende molto dal kernel utilizzato, ma è probabile che all’interno si trovino le seguenti directory. Ciascuno di essi a sua volta conterrà altre sottodirectory in cui vengono mantenuti i valori per ciascuna categoria di parametri:

  1. dev: parametri per dispositivi specifici collegati alla macchina.
  2. fs: configurazione del filesystem (quote e inode, per esempio).
  3. kernel: configurazione specifica del kernel.
  4. net: configurazione di rete.
  5. vm: uso della memoria virtuale del kernel.

Per modificare i parametri di runtime del kernel useremo il file sysctl. Il numero esatto di parametri modificabili può essere visualizzato con:

# sysctl -a | wc -l

Se vuoi visualizzare l’elenco completo dei parametri del kernel, fai semplicemente:

# sysctl -a 

Poiché l’output del comando precedente sarà costituito da MOLTE righe, possiamo utilizzare una pipeline seguita da less per ispezionarla con maggiore attenzione:

# sysctl -a | less

Diamo un’occhiata alle prime righe. Si noti che i primi caratteri di ogni riga corrispondono ai nomi delle directory all’interno /proc/sys:

Comprendere il filesystem Linux /proc

Ad esempio, la riga evidenziata:

dev.cdrom.info = drive name:        	sr0

indica che sr0 è un alias per l’unità ottica. In altre parole, è così che il kernel sees quell’unità e usa quel nome per fare riferimento ad essa.

Nella sezione seguente spiegheremo come cambiare altro more important parametri di runtime del kernel in Linux.

Come modificare o modificare i parametri di runtime del kernel Linux

Sulla base di quanto spiegato finora, è facile vedere che il nome di un parametro corrisponde alla struttura delle directory all’interno /proc/sys dove si può trovare.

Per esempio:

dev.cdrom.autoclose → /proc/sys/dev/cdrom/autoclose
net.ipv4.ip_forward → /proc/sys/net/ipv4/ip_forward

Controlla i parametri del kernel Linux

Detto questo, possiamo visualizzare il valore di un particolare parametro del kernel Linux usando entrambi sysctl dal nome del parametro o leggendo il file associato:

# sysctl dev.cdrom.autoclose
# cat /proc/sys/dev/cdrom/autoclose
# sysctl net.ipv4.ip_forward
# cat /proc/sys/net/ipv4/ip_forward
Controlla i parametri del kernel Linux
Controlla i parametri del kernel Linux

Imposta o modifica i parametri del kernel Linux

Per impostare il valore di un parametro del kernel possiamo anche usare sysctlma usando il -w e seguito dal nome del parametro, dal segno di uguale e dal valore desiderato.

Un altro metodo consiste nell’usare echo per sovrascrivere il file associato al parametro. In altre parole, i seguenti metodi equivalgono a disabilitare la funzionalità di inoltro dei pacchetti nel nostro sistema (che, tra l’altro, dovrebbe essere il valore predefinito quando una scatola non dovrebbe passare il traffico tra le reti):

# echo 0 > /proc/sys/net/ipv4/ip_forward
# sysctl -w net.ipv4.ip_forward=0

È importante notare che i parametri del kernel impostati utilizzando sysctl verrà applicato solo durante la sessione corrente e scomparirà al riavvio del sistema.

Per impostare questi valori in modo permanente, modificare /etc/sysctl.conf i valori desiderati. Ad esempio, per disabilitare l’inoltro dei pacchetti in /etc/sysctl.conf assicurati che questa riga appaia nel file:

net.ipv4.ip_forward=0

Quindi eseguire il comando seguente per applicare le modifiche alla configurazione in esecuzione.

# sysctl -p

Altri esempi di importanti parametri di runtime del kernel sono:

fs.file-max specifica il numero massimo di handle di file che il kernel può allocare per il sistema. A seconda dell’uso previsto del tuo sistema (web/database/file server, per citare alcuni esempi), potresti voler cambiare questo valore per soddisfare le esigenze del sistema.

In caso contrario, riceverai un Too many open files messaggio di errore nella migliore delle ipotesi e potrebbe impedire l’avvio del sistema operativo nel peggiore dei casi.

Se a causa di un errore innocente ti trovi in ​​quest’ultima situazione, avvia in modalità utente singolo (come spiegato nella Parte 13 – Configurazione e risoluzione dei problemi di Linux Grub Boot Loader) e modifica /etc/sysctl.conf come indicato in precedenza. Per impostare la stessa restrizione in base all’utente, fare riferimento alla Parte 14 – Monitorare e impostare l’utilizzo dei limiti di processo Linux di questa serie.

kernel.sysrq viene utilizzato per abilitare il SysRq nella tastiera (noto anche come tasto di stampa dello schermo) in modo da consentire a determinate combinazioni di tasti di richiamare azioni di emergenza quando il sistema non risponde.

Il valore predefinito (16) indica che il sistema rispetterà il Alt+SysRq+key ed eseguire le azioni elencate in sysrq.c documentazione trovata in kernel.org (dove chiave è una lettera nell’intervallo bz). Per esempio, Alt+SysRq+b riavvierà il sistema con forza (usalo come ultima risorsa se il tuo server non risponde).

Avvertimento! Non tentare di premere questa combinazione di tasti su una macchina virtuale perché potrebbe forzare il riavvio del sistema host!

Quando impostato su 1, net.ipv4.icmp_echo_ignore_all ignorerà le richieste di ping e le rilascerà a livello di kernel. Questo è mostrato nell’immagine sottostante: nota come le richieste di ping vengono perse dopo aver impostato questo parametro del kernel:

Blocca le richieste di ping in Linux
Blocca le richieste di ping in Linux

Viene utilizzato un modo migliore e più semplice per impostare i singoli parametri di runtime .confè dentro /etc/sysctl.draggruppandoli per categorie.

Ad esempio, invece di impostare net.ipv4.ip_forward=0 e net.ipv4.icmp_echo_ignore_all=1 in /etc/sysctl.confpossiamo creare un nuovo file chiamato net.conf dentro /etc/sysctl.d:

# echo "net.ipv4.ip_forward=0" > /etc/sysctl.d/net.conf
# echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.d/net.conf

Se scegli di utilizzare questo approccio, non dimenticare di rimuovere quelle stesse righe da /etc/sysctl.conf.

Riepilogo

In questo articolo abbiamo spiegato come modificare i parametri di runtime del kernel, sia persistenti che non persistenti, usando sysctl, /etc/sysctl.confe file all’interno /etc/sysctl.d.

Nel sysctl docs puoi trovare maggiori informazioni sul significato di più variabili. Questi file rappresentano la più completa fonte di documentazione sui parametri che possono essere impostati tramite sysctl.

Hai trovato questo articolo utile? Speriamo sicuramente che tu l’abbia fatto. Non esitate a farci sapere se avete domande o suggerimenti per migliorare.