Sysctl.conf ve sysctl.d ile ilgili çekirdek seçeneklerinin değerlerini bulma


20

Ubuntu makinemde, /etc/sysctl.confdosyada, varsayılan olarak aşağıdaki gibi ters yol filtreleme seçeneklerine sahibim:

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

ancak içinde /etc/sysctl.d/10-network-security.conf(yine varsayılan olarak) yorum yapılmamıştır:

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

Ters yol filtreleme etkin mi, değil mi? Yapılandırma konumlarından hangisi önceliklidir? Bu ve diğer çekirdek seçeneklerinin geçerli değerlerini nasıl kontrol ederim?

Yanıtlar:


32

Bir sysctl değişkeninin değerini kontrol etmek,

sysctl <variable name>

ve bu arada, bir sysctl değişkeni ayarlamak,

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

ancak bu şekilde yapılan değişiklikler muhtemelen yalnızca bir sonraki yeniden başlatmaya kadar devam eder.

Yapılandırma konumlarından hangisine /etc/sysctl.confveya /etc/sysctl.d/öncelikli olduğuna gelince , /etc/sysctl.d/READMEdosyanın söylediği şudur :

Son kullanıcılar bu dizindeki herhangi bir şeyi geçersiz kılan 60 - *. Conf ve üstü veya doğrudan /etc/sysctl.conf komutlarını kullanabilir .

İki konumdan herhangi birinde yapılandırmayı düzenledikten sonra, değişiklikler

sudo sysctl -p

Bu sysctl -edüzenleme ve sysctl -fyapılandırma yürütme için değil mi?
Nils


Sağ - garip bir şekilde her iki seçenek de işe yarıyor.
Nils

2

Bu tür şeyler genellikle /procve / veya /sysçekirdek arayüzlerinde bulunur (ilk olarak, bu dizinlerde hiçbir şeyin normal bir disk dosyası olmadığını unutmayın, hepsi çekirdeğe doğrudan çizgilerdir).

Yani, örneğin:

»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

Görünüşe göre em1, wlan0 ve "varsayılan" için rp_filter ayarlanmış. Yalnızca dosya tanıtıcısına yazarak bunları ayarlayabilir veya kaldırabilirsiniz:

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

Belirtildiği gibi, bu çekirdek ile doğrudan iletişimdir, bu yüzden hemen etkili olur. Bunlar yapılandırma dosyaları değil . Yanlış bir şey yapmaya çalışırsanız:

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

Tabii ki işleri bu şekilde mahvedemeyeceğiniz anlamına gelmez. Ve aşağıdaki yorumları okuduğunuzdan emin olun.


Yapılandırma dosyalarına bağlı kalmayı tercih ederim, çünkü bu şekilde düzinelerce düzinelerce tercih edilen yapılandırmamın düzinelerce satırını tutabilir ve gerektiğinde (bazılarını) yeniden kullanabilirim. Bu amaçla bir senaryo yazmak gereksiz bir komplikasyon gibi geliyor. Ancak mevcut değerleri kontrol etme yöntemiyle ilgili bilgi için teşekkürler.
Desmond Hume

Kesinlikle config dosyalarını kullanmak çok daha iyidir. Bir senaryo yazmanızı önermiyordum, sadece bunların "salt okunur" değerler olmadığını ve manuel ayarlamalar yapmak için kullanılabileceğini göstermedim. ;)
goldilocks

1
Bu kabuk betiği yeniden yazmak için oldukça ilginç bir yol sysctl -a...
derobert

Doğru, ancak (dosya tarayıcınızın doğasına bağlı olarak) proc / sys'i incelemek daha uygun olarak düşünülebilir, bu da bilmeye değer bir nedendir. Başka programlı bilgi almak için bu WRT, o arayüz borulu "sistemi (sysctl)" türü şeyler daha etkilidir ve vb dil, mevcut kütüphaneleri, bağımsız çalışır
goldilocks

1
Programlı olarak ne demek istediğimi yanlış anlıyorsun , belki de açıklığa kavuşturmam gerekiyor: Kabuk komut dosyaları demek istemedim. Doğal bir C eşdeğeri vardır sysctl(bkz. man 2 sysctl), Ancak bu diğer dillere taşınmaz (bazılarında) ve bu durumlarda en iyi seçenek proc'a okumak veya yazmaktır. echoC ve diğer dillerde mevcut olan yüksek seviyeli akış G / Ç işlevlerinin yapabileceğini söyleyebileceğim gibi, bash başarısız olabilir. Bununla birlikte, düşük seviye okuma / yazma olmayacaktır. Her durumda, proc arayüzünü bilmek önemlidir, bu yüzden onu
büyüttüm

0

Kabul edilen cevabı tamamlamak için , /etc/sysctl.confayarların öncekilere göre öncelikli olduğu doğru olsa da /etc/sysctl.d/, orijinal soruda verilen örnek, yorum yapılan iki değişkeni gösterir /etc/sysctl.conf:

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

ve aynı değişkenler /etc/sysctl.d/10-network-security.conf:

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

Bir yorum bir ayar değil , sadece bir ayarın ne olabileceğine dair bir açıklama olduğundan bu yanıltıcı olabilir.

Bu durumda, daha güçlü yapılandırma dosyasında yorum yapılmalarına rağmen, değişkenlerin her ikisi de aslında 1'e ayarlanır.

Eğer /etc/sysctl.confolsaydı:

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

değişkenler en sonunda 0 olarak ayarlanır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.