有没有一种方法可以将kptr_restrict设置为0?

20

我目前在运行Linux perf时遇到了麻烦,主要是因为/proc/sys/kernel/kptr_restrict当前设置为1。

然而,如果我尝试像以下这样通过将0回显到其中来更改/proc/sys/kernel/kptr_restrict ...

echo 0 > /proc/sys/kernel/kptr_restrict

我遇到了权限被拒绝的错误。我不认为我能够改变它的权限。

有没有什么直接设置它的方法?我是超级用户。我不认为 perf 在没有设置这个的情况下能正常运行。

2个回答

31

在你的例子中,echo 正在以 root 权限运行,但你的 shell 是以你自己的身份运行的。

因此,请尝试执行以下命令:

sudo sh -c " echo 0 > /proc/sys/kernel/kptr_restrict"

16
执行此命令将限制内核指针的访问权限,即禁止非特权用户读取/proc/kallsyms和/proc/modules等文件以及/proc/sys/kernel/*中与内核有关的任何信息。要执行此命令,请在终端中键入以下内容:echo 0 | sudo tee /proc/sys/kernel/kptr_restrict - cdyson37

25

所有位于/proc/sys的文件只能被root修改(实际上是99.9%的文件,可通过ls -l进行检查)。因此,您必须使用sudo来修改这些文件(或您喜欢的以root身份执行命令的方式)。

修改/proc/sys中的文件的正确方法是使用sysctl工具。请注意,您应该将斜杠(/)替换为点号(.),并省略/proc/sys/前缀......请阅读详细手册。

读取当前值:

$ sysctl kernel.kptr_restrict 
kernel.kptr_restrict = 1

修改数值:

$ sudo sysctl -w kernel.kptr_restrict=0
sysctl kernel.kptr_restrict=1
为了使您的修改持久化,您应该编辑 /etc/sysctl.conf 或在 /etc/sysctl.d/50-mytest.conf 中创建一个文件(以 root 或使用 sudoedit 编辑文件),包含以下内容:
kernel.kptr_restrict=1

如果出现这种情况,您应执行以下命令以重新加载配置:

$ sysctl -p /etc/sysctl.conf

顺便说一下,在虚拟文件中可以直接编写。https://stackoverflow.com/users/321730/cdyson37命令非常优雅:echo 0 | sudo tee /proc/sys/kernel/kptr_restrict


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接