Mengetahui nilai opsi kernel yang terkait dengan sysctl.conf dan sysctl.d

20

Di mesin Ubuntu saya, dalam /etc/sysctl.conffile, saya punya opsi penyaringan jalur balik yang dikomentari secara default seperti ini:

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

tetapi di /etc/sysctl.d/10-network-security.confdalamnya (sekali lagi, secara default) tidak berkomentar:

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

Jadi apakah penyaringan jalur balik diaktifkan atau tidak? Manakah dari lokasi konfigurasi yang mendapat prioritas? Bagaimana cara memeriksa nilai saat ini dan opsi kernel lainnya?

Desmond Hume
sumber

Jawaban:

32

Memeriksa nilai variabel sysctl semudah

sysctl <variable name>

dan, omong-omong, pengaturan variabel sysctl semudah

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

tetapi perubahan yang dibuat dengan cara ini mungkin hanya akan tahan sampai reboot berikutnya.

Mengenai lokasi konfigurasi mana, /etc/sysctl.confatau /etc/sysctl.d/, yang diutamakan, inilah yang dikatakan /etc/sysctl.d/READMEfile:

Pengguna akhir dapat menggunakan 60 - *. Conf dan di atas, atau menggunakan /etc/sysctl.conf secara langsung, yang menimpa apa pun dalam direktori ini .

Setelah mengedit konfigurasi di salah satu dari dua lokasi, perubahan dapat diterapkan

sudo sysctl -p
Desmond Hume
sumber
Apakah ini bukan sysctl -euntuk edit dan sysctl -funtuk menjalankan konfigurasi?
Nils
@Nils linux.die.net/man/8/sysctl
Desmond Hume
Benar - anehnya kedua opsi bekerja.
Nils
2

Hal-hal semacam ini biasanya ada di dalam /procdan / atau /sysantarmuka kernel (pertama-tama, ingatlah bahwa tidak ada dalam direktori tersebut yang merupakan file disk biasa, semuanya adalah jalur langsung ke kernel).

Jadi, mis:

»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

Sepertinya saya telah menetapkan rp_filter untuk em1, wlan0, dan "default". Anda dapat mengatur atau menghapusnya dengan hanya menulis ke pegangan file:

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

Seperti disebutkan, ini adalah komunikasi langsung dengan kernel, sehingga segera berlaku. Ini bukan file konfigurasi. Jika Anda mencoba dan melakukan sesuatu yang salah:

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

Tentu saja ini bukan berarti Anda tidak dapat mengacaukan hal-hal seperti ini. Dan pastikan untuk membaca komentar di bawah ini.

goldilocks
sumber
Saya lebih suka tetap berpegang pada file konfigurasi karena dengan cara ini saya dapat menyimpan puluhan baris konfigurasi pilihan saya dalam file teks biasa dan menggunakan kembali (beberapa) mereka ketika diperlukan. Menulis naskah untuk tujuan ini terasa seperti komplikasi yang tidak perlu. Tetapi terima kasih atas info tentang metode untuk memeriksa nilai saat ini.
Desmond Hume
Jelas menggunakan file konfigurasi jauh lebih baik. Saya tidak menyarankan Anda menulis skrip, hanya menggambarkan bahwa itu bukan nilai "baca saja" dan dapat digunakan untuk membuat tweak manual. ;)
goldilocks
1
Script shell itu adalah cara yang agak menarik untuk menulis ulang sysctl -a...
derobert
Benar, tetapi (tergantung pada sifat peramban file Anda) membaca dengan teliti proc / sys mungkin dianggap lebih nyaman, yang merupakan salah satu alasan yang perlu diketahui. Lain adalah bahwa WRT untuk mendapatkan informasi secara pemrograman, antarmuka itu lebih efisien daripada mengetikkan "system (sysctl)" jenis pipa, dan bekerja terlepas dari bahasa, lib yang tersedia, dll.
goldilocks
1
Anda salah mengerti apa yang saya maksud dengan pemrograman , mungkin saya perlu mengklarifikasi: Saya tidak bermaksud skrip shell. Ada yang setara dengan C asli sysctl(lihat man 2 sysctl), namun, ini tidak porting ke sebagian besar bahasa lain (itu dalam beberapa), dan dalam kasus ini pilihan terbaik adalah membaca atau menulis ke proc. Mungkin bash's echomungkin gagal, karena saya dapat mengatakan bahwa fungsi I / O aliran tingkat tinggi tersedia dalam C dan bahasa lain dapat. Namun, membaca / menulis tingkat rendah tidak akan terjadi. Bagaimanapun, mengetahui tentang antarmuka proc adalah penting, itulah sebabnya saya membawanya ...
goldilocks
0

Untuk menyelesaikan jawaban yang diterima , sementara memang benar bahwa /etc/sysctl.confpengaturan lebih diutamakan daripada yang masuk /etc/sysctl.d/, contoh yang diekspos dalam pertanyaan asli menunjukkan dua variabel yang dikomentari dalam /etc/sysctl.conf:

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

dan variabel yang sama tidak dikomentari dalam /etc/sysctl.d/10-network-security.conf:

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

Ini mungkin menyesatkan karena komentar bukanlah pengaturan, tetapi hanya komentar tentang apa yang bisa menjadi pengaturan.

Dalam situasi ini, variabel sebenarnya keduanya diatur ke 1, terlepas dari kenyataan bahwa dalam file konfigurasi yang lebih kuat mereka dikomentari.

Jika di dalam /etc/sysctl.confkita memiliki:

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

maka variabel akhirnya akan diatur ke 0.

Bozzy
sumber