Sysctl

Sysctl – narzędzie Kernela

Jako administrator systemu Linux spotkasz się na pewno z sytuacją, w której będziesz zmuszony zmodyfikować parametr przekazywany do jądra systemu. W tym celu posłużysz się tytułowym programem. Działanie polecenia sysctl można bardziej precyzyjnie określić jako modyfikację zachowania jądra systemowego. Przyznam, że najczęściej musimy zmodyfikować jakieś parametry na serwerze, który jest już uruchomiony i zmiany muszą zostać wprowadzone bez konieczności ponownego uruchomienia, czy też chwilowego wyłączenia.

W tym artykule zajmę się wspomnianym sposobem modyfikacji parametrów jądra natomiast, na samym końcu pokażę sposób, aby wprowadzone zmiany mogły zostać w łatwy sposób ponownie ustawione po ponownym uruchomieniu urządzenia.

 

Akcja Wiosenna - Promocja na najnowsze kursy w naszej ofercie!

Do końca marca masz możliwość zakupić najnowsze kursy:

  • Wdrożenie Serwera NGINX w Chmurze
  • NGINX jako Ingress w K8s
  • Kurs Grafany

Dodatkowo odbierz za darmo godzinny wykład "K8s Pod, MultiContainer Pod, Init Containers" na hasło "freek8s"!

Promocja trwa do 31 marca do godziny 23:59. 

Chcesz wziąć udział w kursie? Kliknij w link: https://asdevops.pl/promocja-marzec-2024

 

 

 

 

 

Poznajemy sysctl

Pierwszym miejscem, do którego należy zajrzeć jest oczywiście plik pomocy, który uruchamiamy dzięki poleceniu:

sysctl –help

Składnia:

sysctl [opcje] [zmienna[=wartość] ...]

Opcje:

-a, --all wyświetlenie wszystkich zmiennych

-A alias dla opcji -a

-X alias dla opcji -a

--deprecated dołączenie do listingu parametrów przestarzałych

-b, --binary wypisanie wartości bez nowej linii

-e, --ignore zignorowanie błędów dotyczących nieznanych zmiennych

-N, --names wypisanie nazw zmiennych bez wartości

-n, --values wypisanie tylko wartości podanych zmiennych

-p, --load[=<plik>] odczyt wartości z pliku

-f alias dla opcji -p

--system odczyt wartości ze wszystkich katalogów systemowych

-r, --pattern <wyrażenie>

wybór ustawień pasujących do wyrażenia

-q, --quiet bez wypisywania ustawianej zmiennej

-w, --write włączenie zapisu wartości do zmiennej

-o nic nie robi

-x nic nie robi

-d alias dla opcji -h

-h, --help wyświetlenie tego opisu i zakończenie

-V, --version wypisanie informacji o wersji i zakończenie

Więcej szczegółów w sysctl(8).

Jest to jedno z pierwszych miejsc w których możesz uzyskać informacje o możliwościach danego programu, z którego chcesz skorzystać. Przyznaje, że w większości swoich materiałów, gdy opisuję działanie jakiegoś z systemu Linux, jako pierwsze wskazuje na plik pomocy. Uważam, że to od niego zawsze warto rozpocząć stąd też, jeżeli czytałeś niektóre moje wcześniejsze publikacje już się z tym spotkałeś.

Drugim miejscem jest podręcznik man:

man sysctl

To właśnie w tych podręcznikach uzyskasz bardzo obszerne informacje o każdym z poleceń tak jak w tym wypadku o sysctl. Niemniej jednak nie będę przyklejał tego podręcznika, ponieważ zająłby większą część prezentowanego materiału, dlatego zapoznanie się z nim pozostawiam Tobie.

Warto jeszcze wspomnieć, że zmieniając jakiekolwiek parametry jądra systemu w przypadku, gdy nie wiemy co robimy możemy sprawić, że system nie będzie działał właściwie lub też uszkodzimy nieodwracalnie urządzenie, na którym takich zmian dokonaliśmy. W związku z tym polecam zachować szczególną ostrożność w trakcie wprowadzania jakichkolwiek zmian.

Wyświetlanie parametrów kernela

Aby wyświetlić wszystkie dostępne parametry, zgodnie z plikiem pomocy musimy posłużyć się poleceniem z opcją:

sysctl -a

abi.vsyscall32 = 1

crypto.fips_enabled = 0

debug.exception-trace = 1

debug.kprobes-optimization = 1

dev.hpet.max-user-freq = 64

dev.mac_hid.mouse_button2_keycode = 97

dev.mac_hid.mouse_button3_keycode = 100

dev.mac_hid.mouse_button_emulation = 0

dev.parport.default.spintime = 500

dev.parport.default.timeslice = 200

dev.scsi.logging_level = 0

dev.tty.ldisc_autoload = 1

...

Nie wkleiłem całości ponieważ wszystkie dostępne parametry zajęłyby bardzo dużo miejsca co możesz potwierdzić, jeżeli wpisałeś polecenie u siebie. Lista zawiera nazwę oraz przypisany do niej parametr, czyli w języku programowania można byłoby to określić jako zmienną z ustawioną wartością.

Wyświetlenie tylko jednego parametru

Analizowanie całej listy jest zajęciem bardzo Syzyfowym dlatego przyznam, że najczęściej korzysta się z polecenia wywołując określoną nazwę:

sysctl kernel.version

kernel.version = #1 SMP Debian 5.10.140-1 (2022-09-02)

Tutaj bardzo ważna uwaga. Te dane nie biorą się z niczego. Otóż wszystkie parametry są zapisane w katalogu /proc/sys, dlatego zerknijmy co w nim znajdziemy:

ls

abi crypto debug dev fs kernel net user vm

W katalogu znajdują się inne foldery, w których umieszczone są pogrupowane poszczególne parametry. Natomiast zwróć uwagę na konstrukcję polecenia kernel.version, jeżeli teraz wejdziesz w folder kernel to odszukasz plik noszący nazwę version:

ls version

version

O zawartości:

cat version

#1 SMP Debian 5.10.140-1 (2022-09-02)

W związku z tym, wiesz już, że wartości wypisane przy pomocy poprzedniego polecenia są zapisane w plikach, które znajdują się w wymienionym katalogu.

Wyświetlanie z danej grupy

Korzystamy z systemu Linux dlatego zawsze warto do wyświetlania wykorzystać polecenie grep i załóżmy, że chcemy wyszukać wszystko co dotyczy naszego procesora to wtedy należy wprowadzić polecenie tak jak w poniższym przykładzie:

sudo sysctl -a | grep cpu

W ten sposób otrzymaliśmy wszystkie parametry które dotyczą posiadanego przez nas procesora.

Modyfikowanie parametrów Kernela

Wyświetlać w rozmaity sposób już potrafimy teraz przyszła kolej na modyfikację wartości. Tutaj chcę ponownie wspomnieć, że z tym co teraz będziemy robili należy zachować szczególną ostrożność. Ustawienie niewłaściwych parametrów grozi sporymi konsekwencjami o którym pisałem parę paragrafów wcześniej.

Jednym z najbezpieczniejszych parametrów który każdy z nas ma i możemy go zmienić bez większych konsekwencji to zablokować możliwość przekazywania pakietów IPv4.

Natomiast nim to zrobimy wyświetlmy parametr tego elementu:

sysctl net.ipv4.ip_forward

net.ipv4.ip_forward = 1

Wartość standardowa to 1, w celu zablokowania musimy zmienić ją na 0. Robimy to w następujący sposób:

sysctl -w net.ipv4.ip_forward=0


Teraz sprawdzamy, czy wartość została wprowadzona:

sysctl net.ipv4.ip_forward

net.ipv4.ip_forward = 0

Proces zakończył się powodzeniem co potwierdza powyższy przykład.

Wprowadzanie trwałej zmiany

Jednak prezentowany sposób, pomimo że wprowadzi zmianę od razu to jednak przy restarcie urządzenia przywróci swoją pierwotną wartość. Niestety, w systemie Debian, z którego obecnie korzystam, nie udało mi się odnaleźć rozwiązania umożliwiającego taką automatyczną zmianę. Natomiast przy wielu zmianach w parametrach możemy sobie bardzo uprościć to zadanie. Po uruchomieniu urządzenia zamiana wszystkich parametrów będzie polegała na użyciu jednego polecenia.

Pierwszym krokiem jaki należy wykonać jest edycja pliku znajdującego się /etc/sysctl.conf i wprowadzenie naszych ustawień, czyli albo odnajdujemy parametr w pliku i oznaczamy go usuwając # lub na dole pliku wprowadzasz:

net.ipv4.ip_forward=0

Oczywiście możesz użyć również innych parametrów, to jest tylko przykład.

Następnie w konsoli musisz jeszcze wprowadzić polecenie z opcją:

sysctl -p

I wszystkie parametry zostaną także ustawione względem pliku konfiguracyjnego.

Sysctl – podsumowanie

Zmiana parametrów systemu może okazać się bardzo przydatna szczególnie jeżeli wiemy co jest nam potrzebne do lepszego funkcjonowania systemu czy też serwera. Wyświetlenie listy dostępnych ułatwią nam polecenia linuksowe, a szczególnie jedno, o którym wspominałem w jednym z paragrafów. Jednak pamiętaj, że modyfikacją niektórych z nich możesz zaszkodzić, dlatego zawsze przed zmianą należy się upewnić co taka zmiana wprowadzi i jakie będą tego pozytywne lub negatywne konsekwencje. Masz jakieś wątpliwości czy pytania? Możesz do nas napisać maila!

 

 

Akcja Wiosenna - Promocja na najnowsze kursy w naszej ofercie!

Do końca marca masz możliwość zakupić najnowsze kursy:

  • Wdrożenie Serwera NGINX w Chmurze
  • NGINX jako Ingress w K8s
  • Kurs Grafany

Dodatkowo odbierz za darmo godzinny wykład "K8s Pod, MultiContainer Pod, Init Containers" na hasło "freek8s"!

Promocja trwa do 31 marca do godziny 23:59. 

Chcesz wziąć udział w kursie? Kliknij w link: https://asdevops.pl/promocja-marzec-2024

 
 
 

Promocja na trzy najnowsze kursy w ofercie!

X