尽管我使用 sudo 运行,如何调试权限被拒绝的挂载失败?

尽管我使用 sudo 运行,如何调试权限被拒绝的挂载失败?

permission denied假设我使用 sudo 运行它,那么如何调试挂载失败?

为什么 sudo 命令会导致权限被拒绝?

$ cd ~
$ mkdir foo bar
$ sudo mount --bind ./foo/ ./bar/
mount: /workspaces/codespace-container/bar: permission denied.

$ ll
drwxrwxrwx+ 8 vscode root   4096 Jul 17 06:10 ./
drwxr-xrwx+ 5 vscode root   4096 Jul 16 07:31 ../
drwxrwxrwx+ 2 vscode vscode 4096 Jul 17 06:10 bar/
drwxrwxrwx+ 2 vscode vscode 4096 Jul 17 06:10 foo/

$ getfacl bar
# file: bar
# owner: vscode
# group: vscode
user::rwx
group::rwx
other::rwx
default:user::rwx
default:group::rwx
default:other::rwx

docker 文件用作mcr.microsoft.com/vscode/devcontainers/base:0-jammy基础镜像,不执行任何具体更改权限的操作。可以找到完整的 docker 文件https://github.com/kingces95/codespace-container/blob/main/.devcontainer/Dockerfile及其变量https://github.com/kingces95/codespace-container/blob/main/.devcontainer/devcontainer.json

我的总体目标是在这个用 devcontainer 构建的代码空间中挂载目录,https://github.com/kingces95/codespace-container就像在默认代码空间中一样。


谷歌搜索“如何调试权限被拒绝”> https://unix.stackexchange.com/questions/375872/how-do-i-debug-filesystem-permissions>https://www.thegeekstuff.com/2011/11/strace-examples/> 建议尝试使用 strace

$ strace sudo mount --bind ./foo/ ./bar/

最后得到了这颗小宝石:

有效 uid 不为 0,/usr/bin/sudo 位于具有“诺苏伊德'选项集或没有root权限的NFS文件系统?

答案1

添加devcontainer.json

    "runArgs": [
        "--cap-add=SYS_PTRACE",
        "--security-opt",
        "seccomp=unconfined",
        "--privileged",
        "--init"
    ],

这就是默认universal容器使用的。请参阅https://github.com/microsoft/vscode-dev-containers/blob/main/containers/codespaces-linux/.devcontainer/devcontainer.json。可能是那个--privileged标志。将针对模板打开 PRdevcontainer.json以添加该块

相关内容