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

しかし、何も動作しないようです。私はユーザーに永続的な管理者/root権限や他の同様の「怠惰な」オプションを与えることなく、できるだけ責任を持ってこれを行いたいと思います。

答え1

root権限を必要とするコマンドの前には、次のものを付けることができます。

wsl.exe -u root <command>

または、コマンドを引用符で囲む必要がある場合:

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

その後、別々のWSLプロセスが開始され、rootとしてコマンドが実行されます。すべてのコマンドを 1 行に入力したり、プレフィックスを使用して複数のコマンドを実行したり、スクリプトを別々のファイルに配置したりできます。

この方法で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.bashrcファイルにこれらの使用法を置くと、WSL接続を介してVisual Studio Codeで端末を開くと中断されます。 VSCodeには、これらの昇格の使用を防ぐための保護装置があります。

関連情報