dmesg: 커널 버퍼를 읽지 못했습니다: 권한이 거부되었습니다.

dmesg: 커널 버퍼를 읽지 못했습니다: 권한이 거부되었습니다.

데비안은 최근 기본 동작을 변경했기 때문에 dmesg로컬 사용자만으로는 사용할 수 없습니다.

% dmesg
dmesg: read kernel buffer failed: Operation not permitted

다음에도 적용됩니다.

% cat /dev/kmsg                      
cat: /dev/kmsg: Operation not permitted

버그 추적기에서 주연 역할을 맡아 다음과 같은 결과를 얻습니다.

이 동작을 로컬 사용자가 dmesg를 사용할 수 있도록 허용한 이전 동작으로 다시 변경하려면 어떻게 해야 합니까? 특정 그룹(예: sudoers 또는 이와 유사한 것)을 찾을 수 없습니다.

답변1

따라서 이것은 실제로 사소한 일입니다. 오류 보고서의 마지막 메시지를 살펴보십시오.

위 커널에 대한 변경 로그의 일부:

  • security, printk: 루트가 아닌 사용자가 기본적으로 커널 로그를 읽지 못하도록 방지하는 SECURITY_DMESG_RESTRICT를 활성화합니다(sysctl: kernel.dmesg_restrict).

따라서 해결책은 간단합니다. 한 번만 실행해 보세요.

% sudo sysctl kernel.dmesg_restrict=0
kernel.dmesg_restrict = 0

그러면 로컬 사용자 dmesg가 다시 사용할 수 있습니다. 이것은 원래 가정했던 그룹이 아닌 모든 사용자에게 적용됩니다.

모든 것이 내가 원하는 대로 돌아왔습니다.

% dmesg|wc
   1307   11745   93652

그리고

% cat /dev/kmsg|head|wc
     10      82     857

재부팅 후에도 유지하려면 conf 파일로 저장하십시오.

$ echo kernel.dmesg_restrict = 0 | sudo tee -a /etc/sysctl.d/10-local.conf >/dev/null
$ cat /etc/sysctl.d/10-local.conf 
kernel.dmesg_restrict = 0

Ubuntu를 사용하는 경우 버전 20.10 이상에서는 이를 수행하는 줄이 이미 있습니다 /etc/sysctl.d/10-kernel-hardening.conf. 파일을 변경한 후 변경 사항을 적용하려면 사용자가 재부팅하거나 를 실행해야 합니다 sudo service procps restart.

답변2

이것이 나에게 작동하는 방식입니다.

chown root `which dmesg` 
chmod u+s `which dmesg`

관련 정보