25/10/2015
Linux-kernemoduler giver en kraftfuld måde at udvide den eksisterende kernefunktionalitet på uden behov for at omskrive, omkonfigurere eller genkompilere hele kernekoden. Værktøjet modprobe, som er en del af kmod-pakken, er standardmetoden til at administrere disse moduler. Men nogle gange kan man støde på uventede fejl, selv når man kører kommandoer som root-bruger. En af de mere kryptiske fejl er modprobe: ERROR: could not insert 'MODULE': Operation not permitted. Denne artikel vil guide dig igennem årsagen til denne fejl og give en klar løsning.

Forståelse af Kernel og Tilladelser
For at forstå problemet er det vigtigt først at have en grundlæggende forståelse af, hvordan tilladelser fungerer i forhold til Linux-kernen. Kernen og dens relaterede filer ligger typisk i /boot-mappen. Som med andre kritiske systemfiler er ejeren af disse filer root-brugeren.
Lad os se på et eksempel ved at liste filerne i /boot:
$ ls -lh /boot [...] -rw-r--r-- 1 root root 333K Apr 04 03:03 config-6.66.0-100-amd64 -rw-r--r-- 1 root root 33M Apr 04 03:03 initrd.img-6.66.0-100-amd64 -rw-r--r-- 1 root root 83 Apr 04 03:03 System.map-6.66.0-100-amd64 -rw-r--r-- 1 root root 6.6M Apr 04 03:03 vmlinuz-6.66.0-100-amd64Som outputtet viser, er det kun root, der har skriveadgang til disse filer. Dette er en fundamental sikkerhedsforanstaltning. Mens en almindelig bruger kan se en liste over aktuelt indlæste kernemoduler ved hjælp af kommandoen lsmod eller ved at læse filen /proc/modules, er det kun root (eller en bruger med tilsvarende privilegier via sudo), der kan indlæse eller fjerne moduler. Derfor er det overraskende, når man selv som root møder en 'Operation not permitted'-fejl.
En Dybdegående Gennemgang af modprobe
modprobe er det intelligente værktøj til at håndtere kernemoduler. I modsætning til ældre værktøjer som insmod, kan modprobe automatisk håndtere modulafhængigheder, indlæse nødvendige forudsætningsmoduler og udføre forud- og efterinstallationsscripts.
Konfiguration og Kommandoer
Konfigurationen for modprobe findes typisk i filer under /etc/modprobe.d/. Her kan man definere aliaser, blackliste moduler for at forhindre dem i at blive indlæst, eller tilføje specifikke optioner til moduler. De mest almindelige operationer er dog at indlæse og fjerne moduler.
- Indlæs et modul:
modprobe MODULE_NAME - Fjern et modul:
modprobe -r MODULE_NAME
For at give et bedre overblik er her en tabel over nyttige modprobe-flag:
| Kommando/Flag | Beskrivelse |
|---|---|
modprobe <modul> | Indlæser det specificerede modul og dets afhængigheder. |
modprobe -r <modul> | Fjerner (unloader) det specificerede modul. |
modprobe -c eller --showconfig | Viser den aktuelle konfiguration fra alle konfigurationsfiler. |
modprobe -n eller --dry-run | Simulerer en operation uden rent faktisk at udføre den. Nyttigt til fejlfinding. |
modprobe --force | Tvinger indlæsning/fjernelse af modulet. Bør bruges med forsigtighed, da det kan destabilisere systemet. |
Løsning af 'Operation not permitted'-fejlen
Nu til kernen af problemet. Du kører som root, du har tjekket, at modulet eksisterer, men du får stadig denne fejl:
$ sudo modprobe MODULE modprobe: ERROR: could not insert 'MODULE': Operation not permittedDen umiddelbare tanke er, at det er et filrettighedsproblem, men årsagen er ofte en dybere sikkerhedsfunktion i den moderne Linux-kerne: Kernel Lockdown.
Trin 1: Diagnose med dmesg
For at bekræfte, at problemet skyldes kernel lockdown, kan du inspicere kernens logbuffer med kommandoen dmesg. Filtrer outputtet for at finde relevante beskeder:
$ dmesg | grep modprobe Lockdown: modprobe: Loading of unsigned module is restricted; see man kernel_lockdown.7Hvis du ser denne linje, har du fundet synderen. Beskeden fortæller dig direkte, at indlæsning af et usigneret modul er blevet blokeret af kernel lockdown-funktionen.
Trin 2: Forstå Kernel Lockdown
Kernel lockdown er en sikkerhedsfunktion designet til at styrke grænsen mellem user-space (selv root-brugeren) og kernel-space. Når den er aktiveret, forhindrer den selv root i at udføre handlinger, der kan modificere den kørende kerne. Dette inkluderer at indlæse moduler, der ikke er kryptografisk signeret med en nøgle, som kernen stoler på. Formålet er at forhindre rootkits og andre ondsindede angreb, hvor en kompromitteret root-konto bruges til at få kontrol over selve kernen.
Trin 3: Den Midlertidige Løsning (Workaround)
For at omgå denne begrænsning og indlæse dit usignerede modul, kan du midlertidigt deaktivere kernel lockdown via sysrq-mekanismen. Dette kræver to kommandoer, som skal køres med superbruger-privilegier:
1. Aktiver SysRq-funktionaliteten:
$ echo 1 > /proc/sys/kernel/sysrq2. Send kommandoen for at deaktivere lockdown:
$ echo x > /proc/sysrq-triggerEfter at have kørt disse to kommandoer, vil kernel lockdown være deaktiveret for den aktuelle session. Du skulle nu være i stand til at indlæse dit usignerede modul uden at få 'Operation not permitted'-fejlen.
Vigtig bemærkning: Denne løsning reducerer dit systems sikkerhedsniveau, da den fjerner en vigtig beskyttelsesmekanisme. Den bør kun bruges i udviklings- eller fejlfindingsmiljøer, hvor du har fuld kontrol og forstår risiciene. Den ideelle og mest sikre løsning på lang sigt er at signere dine kernemoduler korrekt.
Ofte Stillede Spørgsmål (FAQ)
Hvad er forskellen på et signeret og et usigneret kernel-modul?
Et signeret kernel-modul indeholder en digital signatur, som kernen kan verificere ved hjælp af en offentlig nøgle. Dette bekræfter, at modulet kommer fra en troværdig kilde og ikke er blevet ændret. Et usigneret modul mangler denne verifikation, hvilket gør det til en potentiel sikkerhedsrisiko på systemer med Secure Boot og kernel lockdown aktiveret.
Er løsningen med sysrq permanent?
Nej, den løsning, der er beskrevet ovenfor, er midlertidig og vil blive nulstillet ved næste genstart af systemet. Dette er generelt at foretrække af sikkerhedsmæssige årsager. Hvis du har brug for en permanent deaktivering, kan det gøres via bootloader-konfigurationen (f.eks. GRUB), men dette anbefales generelt ikke på produktionssystemer.
Hvorfor virker `sudo modprobe` ikke, når fejlen opstår?
Fejlen skyldes ikke manglende brugerrettigheder. sudo giver dig root-privilegier, men kernel lockdown er designet til netop at begrænse, hvad selv root kan gøre for at beskytte kernen. Derfor kan sudo ikke omgå denne specifikke sikkerhedsfunktion.
Konklusion
At støde på en 'Operation not permitted'-fejl med modprobe kan være forvirrende, især når man allerede har de nødvendige superbruger-rettigheder. Nøglen til løsningen ligger i at forstå, at moderne Linux-kerner indeholder avancerede sikkerhedsfunktioner som kernel lockdown. Ved at bruge dmesg til at diagnosticere problemet kan man hurtigt identificere årsagen og anvende den korrekte, omend midlertidige, løsning via sysrq-interfacet. Husk altid at overveje sikkerhedsimplikationerne, før du deaktiverer beskyttelsesmekanismer på dit system.
Hvis du vil læse andre artikler, der ligner Løs modprobe 'Operation not permitted' fejl, kan du besøge kategorien Teknologi.
