Qubes OS
Z
信頼度ランク
| S | 公式ソース確認済み |
| A | 成功実績多数・失敗例少数 |
| B | 賛否両論 |
| C | 動作未確認・セキュリティリスク高 |
| Z | 個人所感 |
Qubes OS で開発環境を構築する実践ガイド
Qubes OS 上にプロジェクト別の隔離された開発環境を構築する方法。Python/Node.js/Javaの設定、Gitリポジトリの管理、VS Codeの使い方を解説します。
一言結論
Qubes OSで開発環境をクライアント別・プロジェクト別のVMに分離すると、あるクライアントのシークレットが別クライアントに漏れる事故を構造的に防止でき、怪しいコードの解析も使い捨てVMで安全に実行できる。
Qubes OS で開発する利点
- プロジェクト別に完全隔離 された環境が作れる
- クライアントAのコードがクライアントBに漏れない
- マルウェアを含む可能性があるコードを安全に扱える
- テスト環境を使い捨て(DisposableVM)にできる
開発用VMの設計
dev-personal ← 個人プロジェクト(Fedora, 青ラベル)
dev-client-a ← クライアントA専用(Fedora, 青ラベル)
dev-client-b ← クライアントB専用(Debian, 青ラベル)
dev-dangerous ← 怪しいコードの解析(Fedora, オレンジラベル)
dev-vault ← シークレット(.env, SSH鍵)(ネットワークなし, 黒ラベル)
テンプレートの準備
# 開発用テンプレートを作成
qvm-clone fedora-40 fedora-40-dev
# テンプレートに開発ツールをインストール
qvm-run fedora-40-dev "xterm"
# fedora-40-dev のターミナルで
sudo dnf install -y \
git \
vim \
tmux \
python3 \
python3-pip \
nodejs \
npm \
java-17-openjdk \
java-17-openjdk-devel \
docker \
docker-compose \
curl \
wget \
jq
sudo poweroff
Python 開発環境
# dev-personal AppVM のターミナルで
# pyenv でバージョン管理(/home に入るので永続化される)
curl https://pyenv.run | bash
# .bashrc に追加
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
# Python バージョンのインストール
pyenv install 3.12.0
pyenv global 3.12.0
# 仮想環境の作成
python3 -m venv ~/.venv/myproject
source ~/.venv/myproject/bin/activate
pip install requests flask pytest
Node.js 開発環境
# nvm でバージョン管理
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc
nvm install 20 # LTS
nvm use 20
# プロジェクト初期化
mkdir ~/projects/myapp && cd ~/projects/myapp
npm init -y
npm install express
Git の設定
# AppVM のターミナルで
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
# SSH 鍵の生成(vault VM で生成して公開鍵だけ取り出す)
# vault VM で:
ssh-keygen -t ed25519 -C "your@email.com"
# 公開鍵を vault から dev VM にコピー
# dev VM で
cat ~/.ssh/id_ed25519.pub
# → GitHub/GitLab に登録する
SSH エージェントの設定(VM間)
vault VM に SSH 鍵を保管しつつ、dev VM から使う場合:
# vault VM のターミナルで
eval $(ssh-agent)
ssh-add ~/.ssh/id_ed25519
# dom0 ターミナルで SSH エージェントを dev VM に転送
# (SSH Agent Forwarding は設定が複雑なため、鍵を直接 dev VM に置く方が現実的)
VS Code のセットアップ
# テンプレートにVS Codeをインストール
qvm-run fedora-40-dev "xterm"
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
# リポジトリの追加
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
sudo dnf install -y code
sudo poweroff
# dev AppVM でVS Codeを起動
qvm-run dev-personal "code"
Qubes OS での VS Code リモート開発
VS Code のリモート開発機能は通常Qubes OSでは使えませんが、代替として:
- VM 内で直接 VS Code を使う
- または SSH + ポートフォワーディングで別VMから接続
Docker の使用
Qubes OS では Docker の使用にいくつか制限があります:
# テンプレートで Docker をインストール
sudo dnf install -y docker docker-compose
sudo systemctl enable docker
# AppVM のrc.localに追加
echo "sudo systemctl start docker" >> /rw/config/rc.local
# Docker を使う
docker run hello-world
docker-compose up -d
注意: HVMではなく通常のAppVM(Xen PV)での Docker の動作は制限される場合があります。StandaloneVM または Fedora 40 以降での KVM 使用が推奨される場合もあります。
シークレットの管理
# .env ファイルは vault VM で保管
# vault VM のターミナルで
cat ~/secrets/client-a.env
# 必要な時だけ dev VM にコピー(使用後は削除)
qvm-copy-to-vm dev-client-a ~/secrets/client-a.env
# dev-client-a で使用後に削除
rm ~/QubesIncoming/vault/client-a.env
まとめ
Qubes OS での開発は最初に設定が必要ですが、一度整えると:
- プロジェクト間の隔離が自動的に保たれる
- マルウェアが含まれる可能性のあるコードを安全に扱える
- クライアントごとに完全に独立した環境を持てる
「面倒くさい」のと「安全」はトレードオフですが、セキュリティを重視する開発者には最高の環境です。