0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windowsへアクセスできない隔離WSL環境を作って、安全にOSSを動かす

Posted at

通常の方法で構築したWSL2環境は /mnt/c/ にWindowsのCドライブがマウントされています。本稿ではWindows側のファイルへアクセスできない隔離されたWSLインスタンスを、通常のWSLとは別で構築してみます。

昨今サプライチェーン攻撃が多発しており、対策のひとつとして「OSSはコンテナ上で動かす」という方法がよく挙げられます。しかしOSSでセルフホストできるタイプのSaaSによくあるような「Docker Composeで起動できるOSS」は、そのままでは同様の方法は取れません。コンテナ内のアプリケーションからは手が出せないとしてもcompose.yamlが強力な機能をいくつか持っているので、たとえば~/.sshなどをマウントして奪い去るような攻撃は考えられます。

そこで、普段使いのWSLとは別に隔離されたWSL環境を作って動かすことでリスクを下げます。

隔離されたWSL2環境構築

まず隔離用WSLインスタンスを構築します。デフォルトだとWSL2はUbuntuが入っていると思うので、Debianなど違うディストリビューションをインストールすると後から区別が付けやすいです。

ホスト側のPowerShell
> wsl --install -d Debian

インストールできたら、WSL内で/etc/wsl.conf を開きます。

隔離WSL内Debian
$ sudo nano /etc/wsl.conf

以下のように記述することでCドライブのマウントの設定を無効化します。

隔離WSL内Debian
$ cat /etc/wsl.conf
[boot]
systemd=true

[automount]
enabled=false  # Cドライブなどを自動マウントしない

[interop]
enabled=false  # Windowsのexeを実行不可にする
appendWindowsPath=false # WindowsのPATHを引き継がない

WSLインスタンスを再起動します。

ホスト側PowerShell
> wsl --terminate Debian
> wsl -d Debian

これで完了です。/mnt/c/を確認すると、ディレクトリはありますが中身は何も無いことが分かります。

隔離WSL内Debian
$ ls -la /mnt/c/
total 8
drwxrwxrwx 2 root root 4096 Dec 21 18:29 .
drwxr-xr-x 5 root root 4096 Dec 21 18:29 ..

実際に使ってみる

構築した隔離WSL環境で、例としてLangfuseを立ち上げてみます。LangfuseはLLMのトラッキングサービスで、docker-compose.yml が用意されておりOSS版をDocker Composeを使ってセルフホストできます。

起動はPodman+Docker Compose構成でやってみます。まずは環境をセットアップします。

隔離WSL内Debian
$ sudo apt update && sudo apt upgrade
$ sudo apt install podman docker-compose
$ systemctl --user enable --now podman.socket
$ export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock

Langfuseをcloneしてきて立ち上げます。

隔離WSL内Debian
$ git clone https://github.com/langfuse/langfuse.git
$ cd langfuse
$ podman compose up

しばらくすると localhost:3000にLangfuseのアプリケーションが立ち上がります。他のWSL2インスタンスやWindowsホスト側のブラウザからも閲覧できます。アカウント作成してキーを発行して、LLMアプリ側からlocalhost:3000に向ければ普通にトレーシングができます。

他のWSLインスタンスにある.env
LANGFUSE_SECRET_KEY = "発行したキー"
LANGFUSE_PUBLIC_KEY = "発行したキー"
LANGFUSE_BASE_URL = "http://localhost:3000"

という感じで、Docker Composeで立ち上げるタイプのOSSを、隔離WSL環境で動作させることができました。

余談: メインで使うWSLを隔離できないのか?

本稿の方法で隔離したWSLインスタンスはWindows側のアプリケーションを呼び出せなくなります。代表的なものとしてVS Codeが呼び出せないので困ります。

隔離WSL内Debian
$ code
-bash: code: command not found

メインで使うWSLインスタンスは通常通り使いつつ、外部から取得したアプリケーションなどを試すときに隔離インスタンスを使うというように使い分けるのが開発体験と安全性のバランスが良いと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?