Znajdowanie wartości opcji jądra związanych z sysctl.conf i sysctl.d

20

Na moim komputerze Ubuntu w /etc/sysctl.confpliku mam opcje filtrowania odwrotnej ścieżki domyślnie skomentowane w następujący sposób:

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

ale w /etc/sysctl.d/10-network-security.confnich (ponownie domyślnie) nie komentowano:

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

Czy więc włączono filtrowanie odwrotnej ścieżki? Które lokalizacje konfiguracji mają pierwszeństwo? Jak sprawdzić bieżące wartości tych i innych opcji jądra?

Desmond Hume
źródło

Odpowiedzi:

32

Sprawdzanie wartości zmiennej sysctl jest tak proste, jak

sysctl <variable name>

a przy okazji, ustawienie zmiennej sysctl jest tak proste, jak

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

ale zmiany dokonane w ten sposób prawdopodobnie będą obowiązywać tylko do następnego ponownego uruchomienia.

Co do tego, która z lokalizacji konfiguracji /etc/sysctl.conflub /etc/sysctl.d/, ma pierwszeństwo, oto, co /etc/sysctl.d/READMEmówi plik:

Użytkownicy końcowi mogą korzystać z 60 - *. Conf i wyższych lub bezpośrednio /etc/sysctl.conf , który zastępuje cokolwiek w tym katalogu .

Po edycji konfiguracji w dowolnej z dwóch lokalizacji można zastosować zmiany

sudo sysctl -p
Desmond Hume
źródło
Czy to nie jest sysctl -edo edycji i sysctl -fdo wykonania konfiguracji?
Nils,
@Nils linux.die.net/man/8/sysctl
Desmond Hume
Racja - dziwnie obie opcje działają.
Nils,
2

Tego rodzaju rzeczy zwykle znajdują się w interfejsach jądra /proci / lub /sysjądra (po pierwsze, pamiętajcie, że nic w tych katalogach nie jest zwykłym plikiem na dysku, wszystkie są bezpośrednimi liniami do jądra).

Więc np .:

»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

Wygląda na to, że mam ustawiony rp_filter dla em1, wlan0 i „default”. Możesz je ustawić lub rozbroić, pisząc do uchwytu pliku:

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

Jak wspomniano, jest to bezpośrednia komunikacja z jądrem, dzięki czemu działa natychmiast. To nie są pliki konfiguracyjne. Jeśli spróbujesz zrobić coś złego:

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

Oczywiście nie można powiedzieć, że nie można tego popsuć. I koniecznie przeczytaj poniższe komentarze.

Złotowłosa
źródło
Wolę trzymać się plików konfiguracyjnych, ponieważ w ten sposób mogę przechowywać dziesiątki wierszy mojej preferowanej konfiguracji w postaci zwykłego pliku tekstowego i ponownie wykorzystywać (niektóre) w razie potrzeby. Napisanie skryptu w tym celu wydaje się niepotrzebną komplikacją. Ale dziękuję za informacje na temat metody sprawdzania bieżących wartości.
Desmond Hume,
Zdecydowanie korzystanie z plików konfiguracyjnych jest znacznie lepsze. Nie sugerowałem, żebyś napisał skrypt, po prostu pokazując, że nie są to wartości „tylko do odczytu” i mogą być użyte do ręcznych poprawek. ;)
goldilocks,
1
Ten skrypt powłoki jest dość interesującym sposobem na ponowne napisanie sysctl -a...
derobert
To prawda, ale (w zależności od charakteru przeglądarki plików) uważanie, że proc / sys może być uważane za wygodniejsze, jest to jeden z powodów, o których warto wiedzieć. Innym jest to, że WRT do programowego uzyskiwania informacji, interfejs ten jest bardziej wydajny niż sprzęt typu „system (sysctl)” i działa niezależnie od języka, dostępnych bibliotek itp.
goldilocks
1
Nie rozumiesz, co mam na myśli programowo , być może muszę wyjaśnić: nie miałem na myśli skryptów powłoki. Istnieje natywny odpowiednik C sysctl(patrz man 2 sysctl), jednak nie jest on przenoszony do większości innych języków (w niektórych jest), aw takich przypadkach najlepszą opcją jest czytanie lub pisanie do proc. Może się zdarzyć, że bash echomoże się nie powieść, ponieważ mogę powiedzieć, że funkcje We / Wy strumienia wysokiego poziomu dostępne w C i innych językach mogą. Jednak niski poziom odczytu / zapisu nie będzie. W każdym razie wiedza o interfejsie proc jest ważna, dlatego go
wspomniałem
0

Aby uzupełnić zaakceptowaną odpowiedź , chociaż prawdą jest, że /etc/sysctl.confustawienia mają pierwszeństwo przed tymi w /etc/sysctl.d/, przykład przedstawiony w pierwotnym pytaniu pokazuje dwie zmienione komentarze w /etc/sysctl.conf:

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

i te same zmienne nieskomentowane w /etc/sysctl.d/10-network-security.conf:

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

Może to być mylące, ponieważ komentarz nie jest ustawieniem, a jedynie uwagą na temat tego, co może być ustawieniem.

W tej sytuacji zmienne są faktycznie ustawione na 1, mimo że w silniejszym pliku konfiguracyjnym zostały skomentowane.

W razie /etc/sysctl.confmieliśmy:

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

wtedy zmienne zostaną ostatecznie ustawione na 0.

Bozzy
źródło