In Part 13 van deze LFCS (Linux Foundation Certified Sysadmin) serie hebben we uitgelegd hoe GRUB te gebruiken om het gedrag van het systeem te wijzigen door opties door te geven aan de kernel voor het doorlopende opstartproces.

Op dezelfde manier kun je de opdrachtregel in een draaiend Linux-systeem gebruiken om bepaalde runtime-kernelparameters te wijzigen als een eenmalige wijziging, of permanent door een configuratiebestand te bewerken.

U mag dus zonder veel moeite kernelparameters on-the-fly in- of uitschakelen wanneer dit nodig is vanwege een vereiste wijziging in de manier waarop het systeem naar verwachting zal werken.

Introductie van het /proc bestandssysteem

De nieuwste specificatie van de bestandssysteemhiërarchiestandaard geeft aan dat: /proc vertegenwoordigt de standaardmethode voor het verwerken van proces- en systeeminformatie, evenals andere kernel- en geheugeninformatie. Bijzonder, /proc/sys is waar je alle informatie over apparaten, stuurprogramma’s en enkele kernelfuncties kunt vinden.

De werkelijke interne structuur van /proc/sys hangt sterk af van de gebruikte kernel, maar je zult waarschijnlijk de volgende mappen aantreffen. Elk van hen zal op zijn beurt andere submappen bevatten waar de waarden voor elke parametercategorie worden bijgehouden:

  1. dev: parameters voor specifieke apparaten die op de machine zijn aangesloten.
  2. fs: bestandssysteemconfiguratie (bijvoorbeeld quota’s en inodes).
  3. kernel: kernel-specifieke configuratie.
  4. net: Netwerk configuratie.
  5. vm: gebruik van het virtuele geheugen van de kernel.

Om de runtime-parameters van de kernel te wijzigen, gebruiken we de sysctl. Het exacte aantal parameters dat kan worden gewijzigd kan worden bekeken met:

# sysctl -a | wc -l

Als u de volledige lijst met kernelparameters wilt bekijken, doet u het volgende:

# sysctl -a 

Omdat de uitvoer van de bovenstaande opdracht uit VEEL regels zal bestaan, kunnen we een pijplijn gebruiken gevolgd door minder om deze nauwkeuriger te inspecteren:

# sysctl -a | less

Laten we eens kijken naar de eerste paar regels. Houd er rekening mee dat de eerste tekens in elke regel overeenkomen met de namen van de mappen erin /proc/sys:

Linux /proc-bestandssysteem begrijpen

Bijvoorbeeld de gemarkeerde regel:

dev.cdrom.info = drive name:        	sr0

geeft aan dat sr0 is een alias voor de optische drive. Met andere woorden, dat is hoe de kernel sees die schijf en gebruikt die naam om ernaar te verwijzen.

In de volgende sectie zullen we uitleggen hoe u andere kunt wijzigen: more important kernel runtime-parameters in Linux.

Hoe Linux Kernel Runtime-parameters te wijzigen of aan te passen

Op basis van wat we tot nu toe hebben uitgelegd, is het gemakkelijk te zien dat de naam van een parameter overeenkomt met de directorystructuur erin /proc/sys waar het te vinden is.

Bijvoorbeeld:

dev.cdrom.autoclose → /proc/sys/dev/cdrom/autoclose
net.ipv4.ip_forward → /proc/sys/net/ipv4/ip_forward

Controleer de Linux-kernelparameters

Dat gezegd hebbende, kunnen we de waarde van een bepaalde Linux-kernelparameter bekijken met een van beide sysctl door de naam van de parameter of het lezen van het bijbehorende bestand:

# sysctl dev.cdrom.autoclose
# cat /proc/sys/dev/cdrom/autoclose
# sysctl net.ipv4.ip_forward
# cat /proc/sys/net/ipv4/ip_forward
Controleer de Linux-kernelparameters
Controleer de Linux-kernelparameters

Linux-kernelparameters instellen of wijzigen

Om de waarde voor een kernelparameter in te stellen kunnen we ook gebruik maken van sysctlmaar met behulp van de -w en gevolgd door de naam van de parameter, het gelijkteken en de gewenste waarde.

Een andere methode bestaat uit het gebruik van echo om het bestand dat bij de parameter hoort te overschrijven. Met andere woorden, de volgende methoden zijn equivalent om de pakketdoorstuurfunctionaliteit in ons systeem uit te schakelen (wat trouwens de standaardwaarde zou moeten zijn wanneer een box geen verkeer tussen netwerken mag doorgeven):

# echo 0 > /proc/sys/net/ipv4/ip_forward
# sysctl -w net.ipv4.ip_forward=0

Het is belangrijk op te merken dat kernelparameters die zijn ingesteld met sysctl wordt alleen afgedwongen tijdens de huidige sessie en verdwijnt wanneer het systeem opnieuw wordt opgestart.

Om deze waarden permanent in te stellen, bewerkt u /etc/sysctl.conf de gewenste waarden. Om bijvoorbeeld pakketdoorschakeling uit te schakelen in: /etc/sysctl.conf zorg ervoor dat deze regel in het bestand verschijnt:

net.ipv4.ip_forward=0

Voer vervolgens de volgende opdracht uit om de wijzigingen toe te passen op de actieve configuratie.

# sysctl -p

Andere voorbeelden van belangrijke runtime-parameters voor de kernel zijn:

fs.file-max specificeert het maximum aantal bestandshandles dat de kernel aan het systeem kan toewijzen. Afhankelijk van het beoogde gebruik van uw systeem (web / database / bestandsserver, om een ​​paar voorbeelden te noemen), wilt u deze waarde misschien wijzigen om aan de systeembehoeften te voldoen.

Anders ontvangt u een Too many open files in het beste geval een foutmelding en kan in het slechtste geval voorkomen dat het besturingssysteem opstart.

Als u zich door een onschuldige fout in deze laatste situatie bevindt, start dan op in de modus voor één gebruiker (zoals uitgelegd in Deel 13 – Linux Grub Boot Loader configureren en problemen oplossen) en bewerk /etc/sysctl.conf zoals eerder aangegeven. Om dezelfde beperking per gebruiker in te stellen, raadpleegt u Deel 14 – Gebruik van Linux-proceslimieten bewaken en instellen van deze serie.

kernel.sysrq wordt gebruikt om de SysRq in uw toetsenbord (ook bekend als de printscreen-toets) zodat bepaalde toetscombinaties noodacties kunnen uitvoeren wanneer het systeem niet meer reageert.

De standaardwaarde (16) geeft aan dat het systeem de Alt+SysRq+key en voer de acties uit die worden vermeld in de sysrq.c documentatie gevonden in kernel.org (waarbij sleutel één letter is in het bz-bereik). Bijvoorbeeld, Alt+SysRq+b zal het systeem krachtig herstarten (gebruik dit als laatste redmiddel als uw server niet meer reageert).

Waarschuwing! Probeer deze toetsencombinatie niet op een virtuele machine in te drukken, omdat dit uw hostsysteem kan dwingen opnieuw op te starten!

Wanneer ingesteld op 1, net.ipv4.icmp_echo_ignore_all zal ping-verzoeken negeren en deze op kernelniveau laten vallen. Dit wordt getoond in de onderstaande afbeelding – merk op hoe ping-verzoeken verloren gaan na het instellen van deze kernelparameter:

Ping-verzoeken blokkeren in Linux
Ping-verzoeken blokkeren in Linux

Een betere en eenvoudigere manier om individuele runtime-parameters in te stellen, is het gebruik van .confis binnen /etc/sysctl.dgroeperen ze op categorieën.

Bijvoorbeeld, in plaats van instelling net.ipv4.ip_forward=0 en net.ipv4.icmp_echo_ignore_all=1 in /etc/sysctl.confkunnen we een nieuw bestand maken met de naam net.conf binnen /etc/sysctl.d:

# echo "net.ipv4.ip_forward=0" > /etc/sysctl.d/net.conf
# echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.d/net.conf

Als u ervoor kiest om deze aanpak te gebruiken, vergeet dan niet om diezelfde regels te verwijderen uit /etc/sysctl.conf.

Overzicht

In dit artikel hebben we uitgelegd hoe u de runtime-parameters van de kernel kunt wijzigen, zowel persistent als niet-persistent, met behulp van sysctl, /etc/sysctl.confen bestanden binnen /etc/sysctl.d.

In de sysctl docs vindt u meer informatie over de betekenis van meer variabelen. Die bestanden vormen de meest complete bron van documentatie over de parameters die via sysctl kunnen worden ingesteld.

Vond je dit artikel nuttig? We hopen zeker dat u dat deed. Aarzel niet om het ons te laten weten als je vragen of suggesties hebt om te verbeteren.