概要
一般利用者に配布することを想定した仮想マシンイメージを作成する場合、2つの問題点があります。
- 配布側がパスワードを設定していると、パスワードを変更しないまま使う利用者が多発して、セキュリティ問題を引き起こしやすい。
- 仮想マシンイメージのファイルサイズはきわめて大きいため、サーバに負担をかけやすい。
そのため、本稿では、
- 配布側はパスワードを設定しない。利用者の初回ログイン時にパスワード設定を強制する。
- 仮想マシンイメージのファイルサイズをできるだけ縮小する。
方法を説明します。
なお、ゲスト OS は Debian 系であること、ホスト OS は Linux 系であること、を前提とした記述になっていますので、他の環境に適用する場合には適宜に読み替えて頂くようにお願いします。
仮想マシンイメージの作成
OS のインストール
既存の記事が多数ありますから、どれか適当な記事を参考にして下さい。
VirtualBox Guest Additions のインストール
(1) open-vm-tools パッケージがインストールされている場合は、アンインストール・再起動しておきます。
sudo dpkg --purge remove open-vm-tools
sudo reboot
(2) VirtualBox 上で、「デバイス」→「Guest Additions CD イメージを挿入」とメニューを選択して,ゲスト OS から CD イメージが見えるようにしておきます。これで、ゲスト OS 側からは /media/cdrom0/
以下にイメージが見えるようになっているはず。
(3) 以下のコマンドを実行。
sudo apt-get update
sudo apt-get install linux-headers-amd64 build-essential
sudo sh /media/cdrom0/VBoxLinuxAdditions.run
なお、インストールされている VirtualBox Guest Additions のバージョンは、以下のコマンドで確認できます。
VBoxControl --version
仮想マシンイメージのファイルサイズを縮小
本稿では、一般利用者のログイン用ユーザを example
というアカウント名であることにします。必要に応じて、適当なアカウント名に変更して下さい。
(1) ゲスト OS 上で、ログイン用ユーザを sudo
グループに加えておく。
sudo apt-get install sudo
sudo adduser example sudo
(2) ゲスト OS に、空き領域を開放するためのコマンド zerofree
をインストールしておく。
sudo apt-get install zerofree
(3) ゲスト OS の root
アカウントのパスワードを一時的に設定しておきます。
sudo passwd root
(4) ゲスト OS を再起動して、シングルユーザモードに入ります(この時、前段で設定した root
アカウントのパスワードが必要になります)。その上で、以下のコマンドを実行して、空き領域を開放します。
mount -n -o remount,ro -t ext4 /dev/sda1 /
fsck.ext4 -f /dev/sda1
zerofree -v /dev/sda1
mount -o remount,rw -t ext4 /dev/sda1 /
(5) ゲスト OS の root
アカウントのパスワードを削除し、さらに root
アカウントをロックします。
passwd -d root
passwd -l root
これで、この仮想マシンに root
アカウントでログインすることはできなくなったはずです。
(6) ゲスト OS のログイン用ユーザ example
のパスワードを空にして、かつ期限切れに設定します。
passwd -d example
passwd -e example
これで、次回に example
ユーザでログインする時に、自動的にパスワード設定が強制されます。
(7) ゲスト OS 上のコマンドライン履歴など機微情報を削除しておきます。
history -c
(8) ゲスト OS を停止します。ステップ(4)からここまでが、シングルユーザモードでの作業になります。
shutdown -h now
(8) ホスト側で以下を実行して、ディスクイメージを小さくします。
VBoxManage modifyhd 仮想マシンイメージ名.vdi --compact
(9) 配布用にディスクイメージを圧縮します。
7z a -tzip 配布用ファイル名.zip 仮想マシンイメージ名.vdi
なお、手元で試した限りでは、zip コマンドはファイルが大きすぎて異常終了するので使えませんでした。