【问题标题】:warning: Error disabling address space randomization: Operation not permitted警告:禁用地址空间随机化时出错:不允许操作
【发布时间】:2016-06-21 23:51:36
【问题描述】:

我做错了什么(或没有做)gdb 无法正常工作?

root@6be3d60ab7c6:/# cat minimal.c 
int main()
{
  int i = 1337;
  return 0;
}
root@6be3d60ab7c6:/# gcc -g minimal.c -o minimal
root@6be3d60ab7c6:/# gdb minimal
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
.
.
.
Reading symbols from minimal...done.
(gdb) break main
Breakpoint 1 at 0x4004f1: file minimal.c, line 3.
(gdb) run
Starting program: /minimal 
warning: Error disabling address space randomization: Operation not permitted
During startup program exited normally.
(gdb) 
(gdb) print i   
No symbol "i" in current context.

【问题讨论】:

  • 在 docker 容器中运行时,我收到此错误,直到我将--security-opt seccomp=unconfined 添加到 docker run
  • @CameronTaggart 感谢您的提示!你让我开心。
  • @CameronTaggart 它对我有用,但安全问题 coms

标签: c docker gdb


【解决方案1】:

无论出于何种原因,您的用户帐户都无权为此进程禁用内核的地址空间布局随机化。默认情况下,gdb 将其关闭,因为它使某些类型的调试更容易(特别是,这意味着每次运行程序时堆栈对象的地址都是相同的)。阅读更多here

您可以通过使用set disable-randomization off 禁用 gdb 的此功能来解决此问题。

至于让您的用户获得禁用 ASLR 所需的权限,它可能归结为对 /proc/sys/kernel/randomize_va_space 的写入权限。阅读更多here

【讨论】:

    【解决方案2】:

    如果您使用的是 Docker,您可能需要 --security-opt seccomp=unconfined 选项(以及启用 ptrace):

    docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined
    

    【讨论】:

    • 谢谢你 - 我不知道我已经失去了多少时间来学习这个艰难的方式!
    • 我认为--cap-add=SYS_PTRACE 仅在将gdb 附加到已经运行的进程时才需要。
    • 您能否提供使用这些选项可能涉及的安全问题?
    • 有没有办法将此命令应用于已经运行的实例?因为我不想删除这个实例并开始一个新实例
    【解决方案3】:

    wisbucky's answer(谢谢!)为基础,这里是 Docker compose 的相同设置:

    security_opt:
      - seccomp:unconfined
    cap_add:
      - SYS_PTRACE
    

    安全选项seccomp:unconfined 修复了address space randomization 警告。

    尽管Docker documentation 声明 SYS_PTRACE 是“默认情况下未授予”的功能,但功能 SYS_PTRACE 似乎没有明显的效果。也许我不知道该寻找什么。

    【讨论】:

    • 你有一个错字,它是 unconfined 不是 unconfirmed
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    相关资源
    最近更新 更多