Scoprire i valori delle opzioni del kernel relative a sysctl.conf e sysctl.d


20

Sulla mia macchina Ubuntu, nel /etc/sysctl.conffile, ho opzioni di filtro del percorso inverso commentate di default in questo modo:

#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1

ma in /etc/sysctl.d/10-network-security.confessi sono (di nuovo, di default) non commentati:

net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1

Quindi è abilitato il filtro per il percorso inverso? Quale delle posizioni di configurazione ha la priorità? Come posso controllare i valori correnti di queste e altre opzioni del kernel?

Risposte:


32

Controllare il valore di una variabile sysctl è facile come

sysctl <variable name>

e, a proposito, impostare una variabile sysctl è semplice come

sudo sysctl -w <variable name>=<value>

ma le modifiche apportate in questo modo probabilmente saranno valide solo fino al prossimo riavvio.

Per quanto riguarda quale delle posizioni di configurazione, /etc/sysctl.confo /etc/sysctl.d/, ha la precedenza, ecco cosa /etc/sysctl.d/READMEdice il file:

Gli utenti finali possono utilizzare 60 - *. Conf e versioni successive oppure utilizzare direttamente /etc/sysctl.conf , che sostituisce qualsiasi cosa in questa directory .

Dopo aver modificato la configurazione in una delle due posizioni, è possibile applicare le modifiche

sudo sysctl -p

Questo non è sysctl -eper la modifica e sysctl -fper l'esecuzione della configurazione?
Nils,


Giusto - stranamente funzionano entrambe le opzioni.
Nils,

2

Questo tipo di cose è di solito nelle interfacce /proce / o /syskernel (in primo luogo, tenere presente che nulla in quelle directory è un normale file su disco, sono tutte linee dirette al kernel).

Quindi, ad esempio:

»for x in /proc/sys/net/ipv4/conf/*/rp_filter; do echo -ne "$x "`cat $x`"\n"; done
/proc/sys/net/ipv4/conf/all/rp_filter 0
/proc/sys/net/ipv4/conf/default/rp_filter 1
/proc/sys/net/ipv4/conf/em1/rp_filter 1
/proc/sys/net/ipv4/conf/lo/rp_filter 0
/proc/sys/net/ipv4/conf/wlan0/rp_filter 1

Sembra che abbia impostato rp_filter per em1, wlan0 e "default". Puoi impostarli o annullarli semplicemente scrivendo sull'handle del file:

»cd /proc/sys/net/ipv4/conf/lo
»echo 1 > rp_filter
»cat rp_filter
1
»echo 0 > rp_filter
»cat rp_filter
0

Come accennato, questa è una comunicazione diretta con il kernel, quindi ha effetto immediato. Questi non sono file di configurazione. Se provi a fare qualcosa di sbagliato:

»echo whatever > rp_filter
bash: echo: write error: Invalid argument

Il che non vuol dire che non puoi rovinare le cose in questo modo, ovviamente. E assicurati di leggere i commenti qui sotto.


Preferirei attenermi ai file di configurazione perché in questo modo posso tenere dozzine di righe della mia configurazione preferita in un file di testo semplice e riutilizzarle (alcune) quando necessario. Scrivere una sceneggiatura per questo scopo sembra una complicazione inutile. Ma grazie per le informazioni su un metodo per verificare i valori correnti.
Desmond Hume,

Sicuramente usare i file di configurazione è molto meglio. Non ti stavo suggerendo di scrivere una sceneggiatura, sto solo illustrando che quelli non sono valori di "sola lettura" e possono essere usati per apportare modifiche manuali. ;)
Riccioli d'oro

1
Quella shell script è un modo piuttosto interessante di riscrivere sysctl -a...
derobert il

Vero, ma (a seconda della natura del tuo browser di file) esaminare proc / sys può essere considerato più conveniente, motivo per cui vale la pena conoscerlo. Un altro è che WRT per ottenere informazioni a livello di codice, quell'interfaccia è più efficiente di roba di tipo "system (sysctl)" e funziona indipendentemente dalla lingua, dalle librerie disponibili, ecc.
goldilocks

1
Capisci male cosa intendo a livello di codice , forse devo chiarire: non intendevo script di shell. Esiste un equivalente C nativo di sysctl(vedi man 2 sysctl), tuttavia, questo non è portato nella maggior parte delle altre lingue (è in alcuni), e in questi casi l'opzione migliore è leggere o scrivere su proc. Può darsi che bash echopossa fallire, come posso dire che le funzioni I / O di streaming di alto livello disponibili in C e in altre lingue possono farlo . Il livello basso di lettura / scrittura non lo farà, tuttavia. In ogni caso, conoscere l'interfaccia proc è importante, motivo per cui l'ho cresciuto ...
goldilocks,

0

Per completare la risposta accettata , mentre è vero che le /etc/sysctl.confimpostazioni hanno la precedenza su quelle in /etc/sysctl.d/, l'esempio esposto nella domanda originale mostra due variabili commentate in /etc/sysctl.conf:

#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1

e le stesse variabili non commentate in /etc/sysctl.d/10-network-security.conf:

net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1

Questo può essere fuorviante perché un commento non è un'impostazione, ma solo un'osservazione di ciò che potrebbe essere un'impostazione.

In questa situazione, le variabili sono effettivamente entrambe impostate su 1, nonostante il fatto che nel file di configurazione più forte siano commentate.

Se dentro /etc/sysctl.confavessimo:

net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0

quindi le variabili verrebbero infine impostate su 0.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.