為什麼編輯 core_pattern 受到限制?
這個問題與安裝 abrt-hook-cpp 的核心文件在哪裡有關?.
當我試圖為一個故意崩潰的程序生成一個核心文件時,起初核心文件的生成似乎被 abrt-ccpp 阻礙了。所以我嘗試
/proc/sys/kernel/core_pattern
用vim手動編輯:> 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
ing 和重定向echo
輸出到文件/proc/sys/kernel/core_pattern
都失敗了,只有註意到的呼叫sudo bash...
才能覆蓋/編輯文件?問題:
具體來說,
sudo
在上述失敗的嘗試中呼叫的嘗試:為什麼他們失敗了?我認為sudo
以 root 權限執行後續命令,我認為這可以讓你在 Linux 中做任何事情。
procfs 中的條目由臨時程式碼管理。
/proc/sys
對( )下的文件設置權限和所有權的程式碼proc_sys_setattr
拒絕使用 EPERM 更改權限和所有權。因此,不可能更改這些文件的權限或所有權,句點。此類更改未實施,因此成為 root 也無濟於事。當您嘗試以非 root 使用者身份寫入時,您會收到權限錯誤。即使使用
sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern
,您也嘗試以非 root 使用者身份編寫:以 root 身份sudo
執行echo
,但重定向發生在sudo
執行的 shell 中,並且該 shell 沒有提升的權限。使用sudo bash -c '… >…'
時,重定向是在由 root 啟動sudo
並以 root 身份執行的 bash 實例中執行的,因此寫入成功。必須只允許 root 設置
kernel.core_pattern
sysctl 的原因是它允許指定命令,並且由於這是一個全域設置,因此該命令可以由任何使用者執行。事實上,所有 sysctl 設置在不同程度上都是如此:它們都是全域設置,因此只有 root 可以更改它們。kernel.core_pattern
只是一個特別危險的案例。