[+]dmesg: odczyt bufora jądra nie powiódł się: Operacja niedozwolona

Ogólne pytania dotyczące systemu
Awatar użytkownika
dedito
Moderator
Posty: 3515
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

[+]dmesg: odczyt bufora jądra nie powiódł się: Operacja niedozwolona

Post autor: dedito »

Podczas próby uruchomienia komendy dmesg w Debianie testowym (Stretch) zwraca błąd:

Kod: Zaznacz cały

$dmesg
dmesg: odczyt bufora jądra nie powiódł się: Operacja niedozwolona
w języku angielskim

Kod: Zaznacz cały

$dmesg
dmesg: read kernel buffer failed: Operation not permitted
Z tego co wyszukałem jest to konsekwencja ostatniej zmiany w kernelu Debiana z oficjalnego repozytorium wersji testowej.
Doszukałem się jedynie notki na lunchpad: https://launchpad.net/debian/+source/linux/4.8.4-1~exp1 gdzie wśród zmian znajdziemy:

Kod: Zaznacz cały

* security,printk: Enable SECURITY_DMESG_RESTRICT, preventing non-root users
    reading the kernel log by default (sysctl: kernel.dmesg_restrict)
Ponieważ jestem jedynym użytkownikiem komputera, a jeśli już ktoś z niego korzysta to jest to najbliższa rodzina, przywróciłem sobie poprzednią wartość zmiennej jądra na pozwalającą odczyt bufora jądra przez zwykłych użytkowników.

Aby sprawdzić bieżącą wartość można skorzystać z dwóch alternatywnych metod:
- tradycyjnej:

Kod: Zaznacz cały

$cat /proc/sys/kernel/dmesg_restrict
- lub nowej:

Kod: Zaznacz cały

$sysctl -n kernel.dmesg_restrict
Wartość 1 wskazuje na aktywną restrykcję komendy dmesg.
Aby zdjąć restrykcję należy ustawić 0.

Można to znowu ustawić dwiema alternatywnymi metodami:
- klasyczną

Kod: Zaznacz cały

$echo 0 > /proc/sys/kernel/dmesg_restrict
- nową

Kod: Zaznacz cały

$sysctl -w kernel.dmesg_restrict=0
Od tej pory zwykły użytkownik powinien mieć możliwość korzystania z dmesg.

Zmiana obowiązuje tymczasowo do kolejnego restartu systemu.
Aby obowiązywała również po restarcie należy dopisać, jako root, do pliku /etc/sysctl.conf zmienną:

Kod: Zaznacz cały

kernel.dmesg_restrict=0
Można to zrobić za pomocą preferowanego edytora tekstowego lub wykorzystać do tego komendę echo:

Kod: Zaznacz cały

$echo kernel.dmesg_restrict=0 >> /etc/sysctl.conf
Zablokowany