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
以添加该块