當我試圖為故意崩潰的程序生成核心文件時,最初的核心文件生成似乎被abrt-ccpp阻礙了.所以我嘗試用vim手動編輯/ proc / sys / kernel / core_pattern:
> 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
最后,根據this post,我嘗試了這個:
>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
題:
為什么編輯,修改和重定向到文件/ proc / sys / kernel / core_pattern的echo輸出都失敗了,只有注意到的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用戶身份編寫:sudo以root身份運行echo,但重定向發生在執行sudo的shell中,并且該shell沒有提升權限.使用sudo bash -c’…> …’,重定向在由sudo啟動并以root身份運行的bash實例中執行,因此寫入成功.
必須允許root設置kernel.core_pattern sysctl的原因是它允許指定命令,并且由于這是一個全局設置,因此任何用戶都可以執行此命令.事實上,所有sysctl設置的情況都是不同程度的:它們都是全局設置,因此只有root才能更改它們. kernel.core_pattern只是一個特別危險的案例.
標簽:linux,permissions,sudo,sysctl,proc
來源: https://codeday.me/bug/20190810/1639812.html