Linux

為什麼編輯 core_pattern 受到限制?

  • January 22, 2020

這個問題與安裝 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

問題

為什麼編輯、chmoding 和重定向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_patternsysctl 的原因是它允許指定命令,並且由於這是一個全域設置,因此該命令可以由任何使用者執行。事實上,所有 sysctl 設置在不同程度上都是如此:它們都是全域設置,因此只有 root 可以更改它們。kernel.core_pattern只是一個特別危險的案例。

引用自:https://unix.stackexchange.com/questions/343275