如何在没有 sudo 权限的情况下绑定挂载 .bashrc 中的目录

如何在没有 sudo 权限的情况下绑定挂载 .bashrc 中的目录

注意:我正在 WSL2 中工作,但我的问题完全在于 Linux 方面。如果这不是合适的地方,请告诉我。

每当 .bashrc 来源时我都需要mount --bind一个目录 - 使用以下命令:

if ! mountpoint -q -- "/mnt/wsl/$WSL_DISTRO_NAME"; then
    mount --bind --make-private / "/mnt/wsl/$WSL_DISTRO_NAME"
fi

我收到[预期]错误:only root can use "--bind" option

我尝试通过以下方式提升我的用户权限/etc/sudoers

[myusername] ALL=(ALL) NOPASSWD: /bin/mount

我还尝试将以下内容添加到/etc/fstab

/       /mnt/wsl/Ubuntu-18.04   none    bind,user       0 0

但似乎没有什么效果。我想尽可能负责任地完成此任务,而不给予我的用户永久管理员/根权限......或任何其他类似的“懒惰”选项。

答案1

您可以在任何需要 root 权限的命令前加上前缀

wsl.exe -u root <command>

或者,如果您需要将命令用引号引起来:

wsl.exe -u root /bin/sh -c "<command>" \
  && <another command>

这将启动一个单独的 WSL 进程并以 root 身份运行您的命令。您可以将命令全部放在一行中,使用前缀运行多个命令,或者将脚本放入单独的文件中。

请注意,如果您以这种方式以 root 身份运行,显然~会解析为用户的主目录root。如果需要访问运行此命令的用户的主目录,请先将其保存到变量中。

例子

wsl.exe -u root service docker status >/dev/null || wsl.exe -u root service docker start >/dev/null

请注意,上述命令不是启动服务的最佳方式,因为您可以添加一个[boot]条目来wsl.config代替。因此,您也可以为您的命令执行此操作。

选择

/etc/wsl.conf

[boot]
systemd = true

/etc/wsl.config

[boot]
command="service docker start"

注意事项

wsl.exe -u root在 WSL 连接的 Visual Studio Code 中打开终端时,将此类用法放入.bashrc 文件中将会中断。 VSCode 具有防止使用此权限升级的保护措施。

相关内容