Sto*_*row 7 linux permissions sudo proc sysctl
这个问题与安装了 abrt-hook-cpp 的核心文件在哪里有关?.
当我试图为一个故意崩溃的程序生成一个核心文件时,起初核心文件的生成似乎受到 abrt-ccpp 的阻碍。所以我尝试/proc/sys/kernel/core_pattern
用vim手动编辑:
> sudo vim /proc/sys/kernel/core_pattern
Run Code Online (Sandbox Code Playgroud)
当我尝试保存文件时,vim 报了这个错误:
"/proc/sys/kernel/core_pattern" E667: Fsync failed
Run Code Online (Sandbox Code Playgroud)
我认为这是一个权限问题,所以我尝试更改权限:
> sudo chmod 666 /proc/sys/kernel/core_pattern
chmod: changing permissions of '/proc/sys/kernel/core_pattern\': Operation not permitted
Run Code Online (Sandbox Code Playgroud)
最后,基于这篇文章,我尝试了这个:
>sudo bash -c 'echo /home/user/foo/core.%e.%p > /proc/sys/kernel/core_pattern'
Run Code Online (Sandbox Code Playgroud)
这奏效了。
基于工作解决方案,我也尝试了这些,但失败了:
> 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
Run Code Online (Sandbox Code Playgroud)
问题:
为什么编辑、编辑chmod
和重定向echo
输出到文件/proc/sys/kernel/core_pattern
都失败了,只有注意到的调用sudo bash...
才能覆盖/编辑文件?
问题:
具体来说,sudo
在上述失败的尝试中尝试调用:为什么它们失败了?我以为sudo
用root权限执行了后续命令,我以为你可以在Linux中做任何事情。
Gil*_*il' 11
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 '… >…'
,重定向在 bash 实例中执行,该 bash 实例sudo
以 root 身份启动并运行,因此写入成功。
只有 root 必须被允许设置kernel.core_pattern
sysctl 的原因是它允许指定一个命令,因为这是一个全局设置,这个命令可以由任何用户执行。实际上,所有 sysctl 设置的情况都不同:它们都是全局设置,因此只有 root 可以更改它们。kernel.core_pattern
只是一个特别危险的案例。