📚 シリーズ目次
- ①QEMUでDebianを動かしてみる
- ②rcloneで暗号化フォルダを作る
- ③HTTPSサーバを構築してみる
- ④SNVサーバを構築してみる
- ⑤Gitサーバを構築してみる
- ⑥サーバ構成を改変してみる
本シリーズは、作業の一部で Linux Mint 22.2 Cinnamon Edition を使用します。
( Windows 11 での作業手順も併記しています。)
1. はじめに
昨今のAndroid OSでは、SDカード全体を暗号化する機能が廃止に向かっている模様。SDカードは比較的安価にストレージ容量を確保できて便利なのですが、スマホ紛失時の情報漏洩リスクを考えるとどうしたものかと頭を抱えていました。そんな日々に差し込んだ一筋の光、「gocryptfs」の運用を試して…ダメだぁ。マウントができない。
Android 10から更新されたFUSEのアクセス制御により、root化していないスマホはマウントで失敗するとのこと。これは、マウントへの執着を捨てきれなかったエンジニアが、透過的な暗号化フォルダアクセスを求めて右往左往したお話です。
本記事では、非rootのスマホに仮想マシンを導入し、Android OS上でネイティブなLinuxサーバを稼働させることを目指します。
2. 暗号化フォルダについて
2.1 透過的なアクセスとは
gocryptfsを使用すると、ローカルの暗号化フォルダを復号化せずに、仮想的な平文フォルダを通して読み書きできます。この読み書きは「透過的」と表現されます。では、「透過的」ではないアクセスはどうなるのか。以下のようになります。
運用上は、必要なときに必要なファイルだけという訳にもいかないので、フォルダごと復号化してからのアクセスになると思います。スクリプトで自動化できたにしても、デメリットとリスクが山盛りなので避けたい。でも、スマホもroot化したくない。
2.2 仮想マシンでのマウント
仮想マシン上では、Androidから縛られずにOSが稼働できるため、マウントが使えます!Androidのファイルシステム上にある暗号化フォルダをSFTP経由で仮想マシンにマウントし、さらにgocryptfsを使用することで透過的なアクセスを実現できます。が、rclone cryptだともっと単純にできるので、今回はrclone cryptを採用します。
3. Termuxのセットアップ
3.1 Termuxのインストール
まずは、Termuxのセットアップから始めます。以下のサイトを開いてスクロールしていくと、F-Droidクラインアントのインストールがお勧めされています。「F-DROIDをダウンロード」ボタンをタップし、F-Droid.apk をダウンロードしてインストールしてださい。スマホから警告が出ますが、適宜対応くださいw
インストールできたら、F-Droidを開いて「Termux」を検索します。何やらいっぱい出てきますが、説明に以下の文言があるものを選んでインストールします。Termuxはサーバ運用するので、インストール後はバッテリの最適化をオフにすると良いでしょう。
- パッケージを伴ったターミナル・エミュレーター
3.2 パッケージの更新
Termuxがインストールできたら、ソフトウェアソースを選択してパッケージを更新します。Termuxを起動して以下のコマンドを実行すると。設定画面が表示されます。
termux-change-repo
「Single mirror」をSpaceキーで選択して、Enterキーをタップしてください。
「KuronekoServer」をSpaceキーで選択したら、Enterキーをタップします。
ソフトウェアソースを選択するとパッケージ情報が更新されますので、以下のコマンドを実行してパッケージをバージョンアップします。途中、確認のプロンプトが出ますが、すべてデフォルト動作で問題ないのでEnterキーをタップしてください。
pkg upgrade
3.3 SSH接続の準備
スマホ画面からポチポチではなかなか話も進まないので、PCからSSHで接続できるようにしてしまいましょう。以下のコマンドで「OpenSSH」をインストールします。
pkg install openssh
続いて、接続用のパスワードを設定します。
passwd
接続に必要なユーザ名とIPアドレスは、以下のコマンドで確認できます。
whoami
ifconfig
最後に、SSHデーモンを起動します。
sshd
3.4 SSH鍵認証の設定
PCのターミナルで以下のコマンドを実行して、SSH認証用の鍵ペアを作成します。作成先フォルダとファイル名はデフォルトでOKです。パスフレーズも空で良いでしょう。~/.ssh に秘密鍵 id_ed25519 と公開鍵 id_ed25519.pub が作成されます。サーバ側で管理しやすいように、公開鍵末尾にホスト名を付与しています。
ssh-keygen -t ed25519 -C "$(hostname)"
Windowsも同じコマンドで作成します。作成先は C:\Users\ユーザ名\.ssh です。
PCのターミナルから以下のコマンドを実行すると、スマホのTermuxに接続できます。初回接続時は、未知の接続先として警告が出ますので yes と入力してください。
ssh u0axxx@192.168.x.x -p 8022
PCからSSHで接続できたら、TermuxにSSH鍵認証を設定します。以下のコマンドで authorized_keys ファイルを開いてください。PCで作成した id_ed25519.pub をテキストエディタで開いて、中身の文字列をまるっと authorized_keys にコピペで追加します。追加したら「Ctrl + O」からの「Enter」で保存し、「Ctrl + X」で終了します。
nano ~/.ssh/authorized_keys
追加後は、PC側のSSHクライアント設定ファイルを準備します。config ファイルを作成して、以下のように記載してください。
Host termux-ssh
HostName 192.168.x.x
User u0axxx
Port 8022
IdentityFile ~/.ssh/id_ed25519
Windowsも同じ記載で機能します。作成先は C:\Users\ユーザ名\.ssh です。
これで、以降は以下のコマンドで接続できるようになります。パスワードは不要です。
ssh termux-ssh
3.5 SSHデーモンの起動設定
今回は常時起動ではなく、使用したいときだけ起動する運用方法とします。.bashrc と .bash_logout を以下のように作成してください。これでTermuxの起動時と終了時に、SSHデーモンも起動と終了することができます。Termux終了時は、exit コマンドまたは「Ctrl + D」で終了してください。
nano ~/.bashrc
if [[ ! $SSH_CONNECTION ]]; then
termux-wake-lock
sshd
fi
SSH接続時のシェルプロンプトを改変する場合はこちら。
if [[ ! $SSH_CONNECTION ]]; then
termux-wake-lock
sshd
else
USER="termux"
HOSTNAME="Redmi-12-5G"
PS1="\[\e]0;$USER@$HOSTNAME: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]$USER@$HOSTNAME\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "
fi
nano ~/.bash_logout
if [[ ! $SSH_CONNECTION ]]; then
pkill sshd
termux-wake-unlock
fi
4. Debianの起動
4.1 QEMUのインストール
TermuxでDebianを稼働させるにはQEMUが必要です。今回はArm64版を使用します。以下のコマンドでインストールしてください。
pkg install qemu-common
pkg install qemu-system-aarch64-headless
4.2 Debianのダウンロード
Debianの公式サイトからQEMU用のクラウドイメージをダウンロードして使用します。インストール作業なしで起動できるようなので、手間がなくて良いですね。以下のコマンドで、Debian用にフォルダを作成してクラウドイメージをダウンロードします。
mkdir -p ~/qemu/debian-arm64
cd ~/qemu/debian-arm64
curl -LO \
https://cloud.debian.org/images/cloud/trixie/latest/debian-13-nocloud-arm64.qcow2
4.3 QEMUの実行
それでは、いよいよDebianを起動してみます。CPUのコア数とメモリは、Amazon EC2のインスタンスタイプ「t4g.micro」を参考にしています。以下のコマンドを実行すると、CLI環境のDebianが起動します。
qemu-system-aarch64 \
-machine virt \
-cpu cortex-a55 \
-m 1024 \
-smp 2 \
-bios /data/data/com.termux/files/usr/share/qemu/edk2-aarch64-code.fd \
-drive if=none,file=debian-13-nocloud-arm64.qcow2,id=hd0,format=qcow2 \
-device virtio-blk-device,drive=hd0 \
-netdev user,id=net0,hostfwd=tcp::8122-:22,hostfwd=tcp::8443-:443 \
-device virtio-net,netdev=net0 \
-nographic
-cpu はお使いのスマホに合わせて設定してください。上記の cortex-a55 は「Snapdragon 4 Gen 2」搭載スマホ向けの設定です。
…画面を眺めていると、ターミナル上でDebianの起動プロセスがもりもり動いているので、なんというか不思議な感覚になります。ほどなくしてログインプロンプトが表示されるので、root でログインしてください。
localhost login: root
今回はここまでです。poweroff コマンドでDebianをシャットダウンします。
root@localhost:~# poweroff
5. おわりに
QEMU上のDebianは、思っていたよりもだいぶ素直に動きました。QEMUの起動はオプション山盛りですが、運用してみて必要なら見直す方向で。次の記事では、暗号化フォルダを作成してDebianのファイルシステム上にマウントします。
| ◀️ 前の記事 | 次の記事 ▶️ |
|---|---|
| Core 2 DuoでもMintしたい!④Gitサーバよ、ついでに稼働する? | セキュアサーバに、なりたいな「ハイ!rclone crypt」②rcloneで暗号化フォルダを作る |

