当我试图为故意崩溃的程序生成核心文件时,最初的核心文件生成似乎被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

Logo

更多推荐