【问题标题】:fork/exec : operation not permitted Ubuntu 20.04fork/exec:Ubuntu 20.04 不允许操作
【发布时间】:2022-02-01 13:06:45
【问题描述】:

尝试调试 go 应用程序时,我收到以下类似的错误消息。
我最初尝试使用以下 vscode launch.json 调试简单的 golang 程序:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch Package",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${workspaceFolder}"
        }
    ]
}

我得到的是:

无法启动进程:fork/exec /tmp/__debug_bin1874603807:不允许操作

设置"debugAdapter": "legacy" 会导致类似的结果:

无法启动进程:fork/exec /home/user/test/__debug_bin: operation not allowed

从命令行启动 dlv 有相同的输出:

user@my-machine:~/test$ /home/user/go/bin/dlv 调试 无法启动进程:fork/exec /home/user/test/__debug_bin:不允许操作

我已测试允许从 /tmp 运行文件;我尝试在/etc/sysctl.d/10-ptrace.conf 中设置kernel.yama.ptrace_scope = 0,因为我能找到的所有关于此错误的信息都与ptrace (https://github.com/go-delve/delve/issues/515) 有关。

另外值得一提的是,该命令以 root 身份运行:

user@my-machine:~/test$ su root
Password: 
root@my-machine:/home/user/test# export PATH=$PATH:/usr/local/go/bin
root@my-machine:/home/user/test# go version
go version go1.17.6 linux/amd64
root@my-machine:/home/user/test# ../go/bin/dlv debug
Type 'help' for list of commands.
(dlv) quit

删除 dlv 二进制文件并运行 go install github.com/go-delve/delve/cmd/dlv@latest 重新安装 dlv 没有帮助。我有一个全新的 Ubuntu Server 20.04 安装。

如何解决调试问题?

【问题讨论】:

  • 您是否验证了/home/user/test/__debug_bin 实际上具有必要的权限位(即,您的凭据用户或您的凭据组之一的+x)?
  • 啊,看来这个二进制文件是go build 的人工制品;好的,您是否验证了/tmp 没有安装noexec 标志?例如,在我的 Debian Buster (11) 系统上,mount -t tmpfs 显示许多此类文件系统都安装有noexec,这是防止某些类别的 RCE 攻击的常用措施。它不包括 /tmp 但那不是 Ubuntu。
  • @kostix /tmp 未安装,问题有不同的根源。
  • 在将设置放入其中后,您是否重新启动/重新加载了负责读取这些 sysctl 配置的单元?

标签: go ubuntu ubuntu-20.04 delve


【解决方案1】:

我发现设置 kernel.yama.ptrace_scope = 0 出于某种原因不起作用,但是 echo 0 > /proc/sys/kernel/yama/ptrace_scope 有所帮助

【讨论】:

    猜你喜欢
    • 2016-06-20
    • 2012-08-18
    • 1970-01-01
    • 2012-01-03
    • 2021-02-10
    • 2021-01-01
    • 2014-11-01
    • 2014-06-30
    • 2012-03-19
    相关资源
    最近更新 更多