まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

このブログエントリの続きです。

SD カードアダプタの皮を被った Linux、CLF-WF01。なぜか標準で telnetd (と ftpd も)が動いていて、パスワード無しで telnet 接続ができることを発見しました。今回はこいつのカスタマイズに挑戦します。

で、そのカスタマイズ方法ですが、実はこの CLF-WF01 のカーネルやユーティリティは最小限に削られているようで、標準状態では vi すら導入されていません。なので telnet で接続しても、そのままカスタマイズに挑むのはちょっと無理があるのでした。

でもここでは先人の知恵を拝借することにしました。実はこの CLF-WF01 で使われているファームウェア(に相当するもの)を解析している方がいらっしゃるようで、とりあえず「とんすけ」様のビルド成果を使わせていただきます: m(__)m
『Flucard でプログラムとかCGIとか』

上記リンク先から deploy_20120420.zip をダウンロード&展開し、出てきた DCIM/122_TREK フォルダを、CLF-WF01 で使うマイクロ SD カードの DCIM フォルダにまるごとコピーします(マイクロ SD カード内に DCIM/122_TREK フォルダができるようにします)。また展開後の直下ディレクトリにある autorun.sh をマイクロ SD カードのルート直下にコピーします。コピーは FTP で行ってもいいですし、マイクロ SD カードのみを取り出して PC に接続し、直接書き込んでも構いません。これで準備はOK。

簡単に解説すると、DCIM/122_TREK 内にこの CLF-WF01 用の vi 等を含めた各種バイナリが用意されており、足りない機能を補充しています。またマイクロ SD カード直下に autorun.sh というファイルがあると、Linux 起動直後に読み込まれて、その中に記述された命令が実行される、という特徴があることが分かっています。この特性を利用して、CLF-WF01 のパスの通ったディレクトリから DCIM/122_TREK 内のバイナリにシンボリックリンクを貼り、命令が直接実行できるように準備しています。またデフォルトでは無効になっていた sshd も起動するようにしています(デフォルトのままアクセスする場合は ID:root , PW:admin)。

この状態で改めて CLF-WF01 の Linux を起動し、PC から無線 LAN で接続してみます。今回は sshd を有効にしているので SSH クライアントからアクセスしてみます(ユーザーID : root, パスワード : admin autorun.sh で変更することも可能です)。
2014012610

おー!ssh クライアントからもアクセスできました。しかも上図のように、このモジュールを使うと PHP 5.3.10 も初めから使える状態になっていて、かなり便利です。

また、/www/cgi-bin/ フォルダ内には CGI 用のプログラムがサンプルでいくつか用意されています。これらのプログラムは CGI 経由でウェブブラウザから利用することもできます。自分で CGI など作る場合はここに入れておけばいいわけね:
2014012611

個人的にはここまでの環境ができれば充分すぎる感じ。とんすけ様、便利なツールの提供ありがとうございます!







 

秋葉原で久しぶりに面白そうなアイテムをゲット!
2014012601

株式会社デジナビから発売されている CloudFlash (型番 CLF-WF01)という製品です:



SD カードアダプタのような形状をしていて、実際にマイクロSDカードを挿入して使います。ただし、単なる SD カードアダプタではありません。本体にも "Wireless LAN" の記述がありますが、最大の特徴はこの CLF-WF01 自体が無線 LAN サーバーになる機能を持っています。要はデジタルカメラなどに装着する SD カードをこの CLF-WF01 にすると、そのデジタルカメラが無線 LAN サーバーになって、PC や iPhone, スマホと直接接続してマイクロ SD カード内の画像/動画データの送受信ができるようになる、というものです。最近のデジカメには標準で無線 LAN 機能が付いているものもありますが、この CLF-WF01 はその外付け機能の役割を担うことになります。ウェブサイトはこちら
 
実際に使ってみるとこんな感じになります。まずは CLF-WF01 をデジカメに装着してプレビューモードで起動すると、無線 LAN ステーションになります。そのステーションに対して、例えば PC から専用の SSID に接続します。
2014012602

(注 この段階で PC と CLF-WF01 とが無線 LAN で接続されたことになりますが、その間は PC からはインターネットにアクセスすることはできず、CLF-WF01 にだけアクセスすることができます。インターネットにアクセスするにはこの接続を一旦切断して、改めて PC をインターネットの使える SSID に接続し直す必要があります)


 この状態で PC からは "http://192.168.1.1/" にブラウザでアクセスすることで CLF-WF01 の HTTPD サーバーに接続できます。各種設定変更もこの画面から行うことが可能です。
2014012603

もちろんこの画面からマイクロ SD カード内のデータにアクセスすることも可能です。今回は画像以外のデータも含まれているマイクロ SD カードを使ったので画面が乱れていますが、デジカメ専用のマイクロ SD カードであれば、ここでサムネイル画面が表示され、ここから PC 内にダウンロードすることも可能です。
2014012604

上記例では PC からの利用方法を紹介しましたが、iPhone やスマホからは専用アプリをダウンロードして使うことでより簡単にデジカメのマイクロ SD カード内にアクセスすることができます。 これでデジカメで撮った写真をいちいちカードを取り外して PC に取り込んだり、そこから更に iPhone やスマホに取り込む、、なんて作業を行う必要はなくなります。直接デジカメから取り出せるようになるので、確かに便利なツールだと思います。


ここまでが普通のレビューですね。本番はここから下です。

ただ僕が試したかったのはこういう使い方ではなく、この CLF-WF01 をハックすることです。とりあえず HTTP サーバーが動いていることは確実なので、なんらかの OS があって、その上で HTTP サービスが稼働しているということです。ということは telnetd が動いている可能性もあるよね。。

というわけで試してみよう(笑)。アドレスは 192.168.1.1 だと分かっているので直接やったれ:
2014012605

で、Enter キー。すると・・・
2014012606

ユーザー ID もパスワードも聞かれずにログインできてしまった。しかも root で(笑)。
2014012607

SD カードは /mnt/sd にマウントされてるっぽいことも確認。パーティションサイズも一致しているので恐らく合ってる:
2014012608

ハードウェアの種類と OS のバージョンを調べてみた。CPU は ARM 版で、Ubuntu-Desktop ベースの Linux 2.6.32 が使われてるっぽい。
2014012609

つまりこの CLF-WF01 は SD カードアダプタ型の Ubuntu(Linux) だったということです。

なかなか興味深いが今日はここまで。
これで PHP とか CGI とか動いたら面白そうだ。

追記  続きはこちら

CentOS に仮想化環境の KVM を導入する手順を紹介します。

KVM は Kernel-based Virtual Machine で、仮想化環境のハイパーバイザーです。VMWare などと同様に、KVM 環境の中に仮想のマシン(「ゲストOS」といいます)を作って、あたかも独立した一台のマシンがあるかのように利用することができます。大きな特徴としてまず「無料である」こと、加えて名前の由来になっているように Linux のカーネルの一部として、標準搭載されている機能なので、導入が比較的容易であることが挙げられます。またハイパーバイザー型であるため、KVM 自体は1台の物理的な Linux マシン(「ホストOS」といいます)の中で動き、その制御も Linux を通して行うことになります。例えば管理用のコンソール機能などもホストOS上の Linux アプリケーションとして提供されており、仮想HDDはホストOSからは1つのファイルとして扱います。

上記でも触れましたが、KVM は Linux のカーネルに含まれる形で実装されています。今回は Linux ディストリビューションとして CentOS を利用する前提で説明します。CentOS 自体のインストール方法については過去のブログエントリを参照してください:
『CentOS の導入』

KVM を利用するにはハードウェア的な条件があります。CPU が仮想化支援機構(Intel-VT, AMD-V)に対応している必要がある、ことです。

/proc/cpuinfo に flags として vmx が含まれていれば仮想化支援機構に対応済みと判断できます。
/proc/cpuinfo に flags として vmx (Intel版)か svm (AMD版)が含まれていれば仮想化支援機構に対応済みと判断できます(2016/Mar/20 修正)。
# cat /proc/cpuinfo | grep '(vmx|svm)'
(この結果、何かが表示されれば対応していることになる)

また利用する前に BIOS の設定を変更し、この仮想化支援機構の機能を有効にしておきます。


では CentOS に KVM を導入する手順を紹介します。まずは yum で KVM に必要なモジュールをまとめてインストールします:
# yum -y install libguestfs libguestfs-tools libguestfs-tools-c libvirt libvirt-client python-virtinst qemu-kvm virt-manager virt-top virt-viewer

インストールできたら KVM(libvirt) の自動起動を ON にしておきます。これで CentOS の起動と同時に KVM が有効になります:
# chkconfig libvirtd on

この段階で一度再起動して、KVM が有効になった状態で OS を起動します:
# shutdown -r now

再起動後、ホストOSにブリッジインターフェース(br0)を作成します。 このあと KVM 内に作成する全てのゲストOSはこのブリッジインターフェースを経由してインターネットを含めた外部ネットワークにアクセスすることになります。

ブリッジインターフェースは eth0 をベースに作成することにします。 そのため、まずは ifcfg-eth0 をコピーして ifcfg-br0 を作り、ここから br0 の雛形を作成します:
# cd /etc/sysconfig/network-scripts
# cp ifcfg-eth0 ifcfg-br0

ifcfg-br0 を編集します。内容は基本的に eth0 のものをそのまま使いますが、TYPE 属性を Bridge に変更します(大文字小文字に注意):
# vi ifcfg-br0

DEVICE=br0
TYPE=Bridge
ONBOOT=yes
 :

続いて ifcfg-eth0 を編集します。こちらは「(設定済みの)br0 経由で使う」ことを宣言することになります(大文字小文字に注意)。加えて IP アドレス関連の設定は br0 の方で行っていて、そちらへのブリッジをするだけなので eth0 では不要です(コメントアウトします):
# vi ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br0
#IPADDR=192.168.0.2
#PREFIX=24
#GATEWAY=192.168.0.1
#DNS1=192.168.0.1

DEFROUTE=yes
 :

この状態でネットワークを再起動します:
# /etc/init.d/network restart

ブリッジインターフェース(br0)が追加されたことを確認します:
# brctl show

bridge name bridge id STP enabled interfaces
br0 8000.002185aba9e1 no eth0
virbr0 8000.525400ca36c8 yes virbr0-nic

ブリッジインターフェースが2つ(br0, virbr0)確認できます。今作成した方(br0)ではない、もう1つのブリッジインターフェース virbr0 は KVM の導入と同時に作成されるものです。
これもブリッジインターフェースとして使えることは使えますが、パフォーマンスが悪いので明示的に br0 を作ったのでした。

この状態では virbr0 は不要なので削除します。また再起動時に自動作成されないよう設定します:
# virsh net-destroy default
# virsh net-autostart default --disable

以下のコマンドで default の State が inactive になっていて、 かつ Autostart が no になっていることが確認できれば設定完了です:
# virsh net-list --all
Name State Autostart
-----------------------------------------
default inactive no


ここまでの設定で KVM 関連ツール(仮想マシンマネージャーとか)が使えるようになっているはずです。KVM の使い方については別の機会に。
kvm01

 

このページのトップヘ