core_pattern 편집이 제한되는 이유는 무엇입니까?

core_pattern 편집이 제한되는 이유는 무엇입니까?

이 질문은 다음과 관련이 있습니다.abrt-hook-cpp가 설치된 핵심 파일은 어디에 있습니까?.

고의로 충돌이 발생한 프로그램에 대해 코어 파일을 생성하려고 했을 때 처음에는 abrt-ccpp에 의해 코어 파일 생성이 차단되는 것 같았습니다. 그래서 /proc/sys/kernel/core_patternvim으로 수동 편집을 시도했습니다 .

> sudo vim /proc/sys/kernel/core_pattern

파일을 저장하려고 하면 vim에서 다음 오류를 보고합니다.

"/proc/sys/kernel/core_pattern" E667: Fsync failed

권한 문제인 줄 알고 권한을 변경해 보았습니다.

> sudo chmod 666 /proc/sys/kernel/core_pattern
chmod: changing permissions of '/proc/sys/kernel/core_pattern\': Operation not permitted

마지막으로,이 게시물, 나는 이것을 시도했습니다 :

>sudo bash -c 'echo /home/user/foo/core.%e.%p > /proc/sys/kernel/core_pattern'

이것은 작동합니다.

작업 솔루션을 기반으로 다음을 시도했지만 실패했습니다.

> echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern
-bash: /proc/sys/kernel/core_pattern: Permission denied
>
> sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern
-bash: /proc/sys/kernel/core_pattern: Permission denied

질문:

출력을 파일로 편집, chmod전송 및 리디렉션하는 작업 이 모두 실패하고 지정된 호출만 파일을 덮어쓰거나 편집할 수 있는 이유는 무엇입니까?echo/proc/sys/kernel/core_patternsudo bash...

질문:

구체적으로 위의 실패한 시도의 호출 시도와 관련하여 sudo: 왜 실패했습니까? sudo루트 권한으로 후속 명령을 실행하면 Linux에서 무엇이든 할 수 있다고 생각합니다 .

답변1

procfs의 항목은 임시 코드로 관리됩니다. /proc/sys파일의 권한과 소유권을 설정하는 코드(아래proc_sys_setattr) 권한 및 소유권을 변경하기 위한 EPERM 사용을 거부합니다. 따라서 이러한 파일의 권한이나 소유권을 완전히 변경할 수는 없습니다. 이러한 변경 사항은 아직 구현되지 않았으므로 루트가 되는 것은 도움이 되지 않습니다.

루트가 아닌 사용자로 쓰려고 하면 권한 오류가 발생합니다. 을 사용해도 루트가 아닌 사용자로 작성하려고 합니다. 즉 , sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern루트로 sudo실행 중이지만 실행 중인 셸 echo에서 리디렉션이 발생하고 sudo해당 셸에는 상승된 권한이 없습니다. 를 사용하면 sudo bash -c '… >…'루트로 시작되고 루트로 실행되는 bash 인스턴스에서 리디렉션이 수행되므로 sudo쓰기가 성공합니다.

루트만이 sysctl 설정을 허용하는 이유 kernel.core_pattern는 명령을 지정할 수 있도록 하기 위함이고, 이는 전역 설정이므로 모든 사용자가 명령을 실행할 수 있기 때문입니다. 사실 이는 모든 sysctl 설정에 대해 어느 정도 사실입니다. 전역 설정이므로 루트만 변경할 수 있습니다. kernel.core_pattern특히 위험한 경우입니다.

답변2

Ubuntu 18.04에서는 다음을 사용하여 스키마를 업데이트할 수 있습니다.

sudo bash -c 'echo "/data/app_crash/%t.%e.core.%p" > /proc/sys/kernel/core_pattern'

/etc/sysctl.conf다음 줄을 업데이트하고 추가할 수도 있습니다 .

kernel.core_pattern = /data/app_crash/%t.%e.core.%p

그러나 kernel.core_pattern재부팅한 후에는 다른 줄이 설정되어 있지 않더라도 모드가 다시 기본값으로 설정됩니다./etc/sysctl.conf/etc/sysctl.d/*

$ sudo sysctl -a | grep kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P

apport이것이 내가 변경한 내용을 덮어쓰는 것으로 나타났습니다 . 제거한 apport다음 sudo apt-get remove apport변경 사항을 사용했습니다.

답변3

우분투 16.04 LTS에서는

 sudo bash -c 'echo /home/user/foo/core.%e.%p > /proc/sys/kernel/core_pattern'

실패한

No such file or directory

나는 달려야 한다

sudo sysctl -w kernel.core_pattern=/home/user/foo/core.%e.%p

관련 정보