📚 シリーズ目次
- ①QEMUでDebianを動かしてみる
- ②rcloneで暗号化フォルダを作る
- ③HTTPSサーバを構築してみる
- ④SNVサーバを構築してみる
- ⑤Gitサーバを構築してみる
- ⑥サーバ構成を改変してみる
本シリーズは、作業の一部で Linux Mint 22.2 Cinnamon Edition を使用します。
( Windows 11 での作業手順も併記しています。)
1. はじめに
前回の記事では、AndroidスマホのTermuxからQEMUを使用することで、Androidの制限から開放された(はずの)Debianを起動することができました。マトリョーシカ状態なので、パフォーマンス面が心配ではありますが。今回は、スマホのSDカード上に暗号化フォルダを作成して、Debianから透過的にアクセスできる環境を構築します。
本記事では、非rootのスマホに仮想マシンを導入し、Android OS上でネイティブなLinuxサーバを稼働させることを目指します。
2. Debianの運用について
2.1 GUIは使わないの?
以前の記事でCore 2 Duo搭載機をDebianサーバにした際はGUIもセットアップしていましたが、サーバの構築にも運用にもGUIは無用だな…と感じた次第。加えて、非rootのスマホではKVMが使用できないため、実用的な速度ではGUIが描画されない模様。本記事は、GUIの運用をばっさりと切り捨てた内容となっていますw
2.2 暗号化フォルダのアクセス
シンボリックリンクでTermux環境内に配置したフォルダを、SFTP経由でDebian環境にマウントする計画です。メディアフォルダにもアクセスできるようにします。
3. Debianのセットアップ
3.1 Debianの起動
では、前回の続きです。まずは、PCのターミナルからTermuxに接続してください。
ssh termux-ssh
接続できたら、以下のコマンドでDebianを起動します。Debianが起動してログインプロンプトが表示されたら、root でログインしてください。
cd ~/qemu/debian-arm64
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
3.2 SSH接続の準備
root でログインしたら、パッケージを更新してOpenSSHサーバをインストールします。以下のコマンドを実行してください。
apt update
apt upgrade
apt install openssh-server
続いて、SSH接続用のユーザを作成します。以下のコマンドで作成してください。作成後に、ユーザをsudoグループに追加します。
adduser --shell /bin/bash --gecos "Debian,,," debian
usermod -aG sudo debian
作成したユーザにSSH鍵認証を設定します。以下のコマンドで authorized_keys ファイルを作成してください。PCで作成した id_ed25519.pub をテキストエディタで開いて、中身の文字列をまるっと authorized_keys にコピペで追加します。
mkdir /home/debian/.ssh
nano /home/debian/.ssh/authorized_keys
作成したファイルとフォルダは、所有者が root になっているため変更します。以下のコマンドで所有者を変更してください。
chown -R debian:debian /home/debian/.ssh
3.3 PCからの接続
PC側のSSHクライアント設定ファイルに、Debian接続用の設定を追加します。config ファイルを開いて、以下の項目を追加してください。
Host termux-qemu
HostName 192.168.x.x
User debian
Port 8122
IdentityFile ~/.ssh/id_ed25519
Windows環境では C:\Users\ユーザ名\.ssh\config に追加してください。
PCで新しくターミナルを開いて、以下のコマンドでDebianに接続します。
ssh termux-qemu
接続できたら、Debianのホスト名を変更してみましょう。問題ないようであれば、Debianを一旦シャットダウンします。
sudo hostnamectl set-hostname Redmi-12-5G
sudo poweroff
3.4 QEMUの起動設定
Termuxの起動時にDebianも起動するようにします。Termuxに接続して、.bashrc に以下を追加してください。DebianがシャットダウンするとTermuxも終了します。
nano ~/.bashrc
if [[ ! $SSH_CONNECTION ]]; then
termux-wake-lock
sshd
+ cd ~/qemu/debian-arm64
+ 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
+ exit
fi
4. 暗号化フォルダのマウント
4.1 シンボリックリンクの作成
暗号化フォルダのマウントに先立って、Termux環境内にシンボリックリンクを作成します。Termuxに接続して以下のコマンドを実行すると、SDカードと内部ストレージの共有フォルダへのアクセスができるようになります。
termux-setup-storage
コマンドを実行すると、~/storage 配下に以下のシンボリックリンクが作成されます。
| リンク名 | リンク先 |
|---|---|
| external-1 | /storage/xxxx-xxxx/Android/data/com.termux/files |
| shared | /storage/emulated/0 |
| dcim | /storage/emulated/0/DCIM |
| downloads | /storage/emulated/0/Download |
| movies | /storage/emulated/0/Movies |
| music | /storage/emulated/0/Music |
| pictures | /storage/emulated/0/Pictures |
続いて、SDカードのルートディレクトリへのリンクを ~/storage 配下に作成します。まずは、SDカードのマウントポイント(/storage/xxxx-xxxx の部分)を確認します。以下のコマンドを実行してください。
ls -l ~/storage/external-1
マウントポイントが確認できたら、シンボリックリンクを作成します。
ln -s /storage/xxxx-xxxx ~/storage/sdcard
スマホのOSによっては、SDカードのアクセスがアプリ専用領域のみに制限されるものがあります。この場合は以下のシンボリックリンクで対応ください。
ln -s ~/storage/external-1 ~/storage/sdcard
シンボリックリンクが作成できたら、暗号化データ用のフォルダを作成します。
mkdir ~/storage/sdcard/.secure
4.2 SSH鍵認証の設定
それでは、Debianを再度起動して接続してください。DebianからTermuxに接続するための設定を行います。以下のコマンドでSSH認証用の鍵ペアを作成します。
ssh-keygen -t ed25519 -C "$(hostname)"
鍵ペアが生成できたら、公開鍵の中身を cat コマンドで確認します。
cat ~/.ssh/id_ed25519.pub
公開鍵の中身の文字列を、Termuxの authorized_keys にコピペで追加します。
nano ~/.ssh/authorized_keys
4.3 rcloneのセットアップ
続いて、rcloneのセットアップです。以下のコマンドで必要なパッケージをインストールしてください。フォルダのアクセス権に www-data を設定する都合により、Apacheを先行でインストールしています。
sudo apt install fuse
sudo apt install rclone
sudo apt install apache2
/mnt 配下にマウント用のフォルダを作成します。
sudo mkdir /mnt/shared
sudo mkdir /mnt/sdcard
sudo mkdir /mnt/secure
以下のコマンドでrcloneのリモートを作成します。n) New remote で以下の2つを作成してください。設定は対話式で行います。
sudo rclone config
- type: sftp
- host: 10.0.2.2
- user: u0axxx
- port: 8022
- key_file: /home/debian/.ssh/id_ed25519
- type: crypt
- remote: termux-sftp:storage/sdcard/.secure
- password: *** ENCRYPTED ***
4.4 リモートのマウント
次回以降の記事ではHTTPS接続を行うので、所有者以外のマウントフォルダアクセスを許可する必要があります。設定ファイルを以下のように修正します。
sudo nano /etc/fuse.conf
- #user_allow_other
+ user_allow_other
設定ファイルが修正できたら、以下のコマンドでマウントします。--uid 1000 は debian ユーザ、--gid 33 は www-data グループを指しています。環境によっては異なる場合があるので、適宜確認してください。
sudo rclone mount termux-sftp:storage/shared /mnt/shared \
--uid 1000 \
--gid 33 \
--umask 002 \
--allow-other \
--vfs-cache-mode writes \
--daemon
sudo rclone mount termux-sftp:storage/sdcard /mnt/sdcard \
--uid 1000 \
--gid 33 \
--umask 002 \
--allow-other \
--vfs-cache-mode writes \
--daemon
sudo rclone mount termux-secure: /mnt/secure \
--uid 1000 \
--gid 33 \
--umask 002 \
--allow-other \
--vfs-cache-mode writes \
--daemon
4.5 マウントの確認
Debian上のマウントが機能していることを確認します。以下のコマンドでDebianの /mnt をPCの ~/mnt にマウントしてください。
mkdir ~/mnt
sshfs termux-qemu:/mnt ~/mnt
Windows環境での確認には「WinSCP」がおすすめです。
~/mnt/secure にファイルやフォルダを放り込むと、~/mnt/sdcard/.secure に暗号化されたファイルとフォルダが現れました。意図した通りの動作で顔がニヤけますw
5. おわりに
作業中はLinux Mintのターミナルからあっちこっちにアクセスするので、どの環境に接続しているのかを確認してコマンド実行していました。再セットアップ時に迷わないように、コードブロックのタイトルに環境名を色分けして記載しておきます。
| ◀️ 前の記事 | 次の記事 ▶️ |
|---|---|
| セキュアサーバに、なりたいな「ハイ!rclone crypt」①QEMUでDebianを動かしてみる | セキュアサーバに、なりたいな「ハイ!rclone crypt」③HTTPSサーバを構築してみる |

