
TeraStation で遊ぼう - シリアルコンソールと SSH
2007.07.24 更新
[TeraStation で遊ぼう - TOP]
■シリアルコンソール化 [HD-HTGL, HS-DTGL]
- シリアルコネクタ付近 (改造部付近の写真)
- R440, R437, R441 の 0Ω抵抗を外し、R438, R439, R442 に移動
- R76 をショート
- UPS の自動シャットダウン機能は使えなくなる
- PC との接続はクロスケーブル(2-3, 3-2, 5-5 の 3 線だけで可)
- 通信設定は 57600bps, 8bit, stop:1, pari:N, flow:N
- 出力されるメッセージの例(firmware 1.01):
起動時 /
シャットダウン時
- 出力されるメッセージの例(firmware 1.02β):
起動時
- システムの状態(firmware 1.01):
ps auxww /
/proc ファイル群 /
実行ファイル
- システムの状態(firmware 1.02β):
ps auxww /
/proc ファイル群 /
実行ファイル
■シリアルコンソール化 [TS-TGL]
シリアルコンソールの有効/無効は、Web 経由で選択可能となっている。
通信設定は、HD-HTGL の場合と同様。
下記 URI を直打ちするとシリアルコンソールが有効になる。管理画面からの
リンクはされていない。ファームウェアバージョン 1.00, 1.02 および 1.09 で確認。
http://{TeraStation の IP アドレス}/cgi-bin/task.cgi?task=console¶m=on
選択状態は揮発メモリに記憶されるため、主電源を落とさなければ(電源コードを抜かなければ)その状態は保持され、ブート時からシリアルコンソールを有効にすることが可能であるらしい。なお、筆者の TS-TGL はハードウェア的に改造してしまったため、本段落の記述については伝聞である。
■root 権限奪取
方法は、firmware のバージョンにより異なる。
この他、ファームウェアアップデータに細工して
乗っ取る方法もある。
1. firmware 1.01 (HD-HTGL 初期出荷 version) の場合
- シリアルコンソールから admin でログイン
- /usr/local/bin/mailtest.sh あたりの設定用スクリプト群が go+w で置かれている(!!)ので、その末尾付近で
echo 'admin ALL = (ALL) ALL' > /etc/sudoers
chmod 440 /etc/sudoers
の記述を追加
- web設定画面から定時報告→テストメール送信を実行
- 一度 /etc/sudoers が作成できたら、mailtest.sh の記述は元に戻しておく
- sudo bash して admin から root に化けてみる
2. firmware 1.02β / 1.04 / 1.04a の場合
何もしなくてもシリアルコンソールから root でログイン可能。
ただし root で直接ログインするのは好ましくなく、また ssh のデフォルトでは
root ログイン不可なので、admin から sudo コマンドで root になれる設定
(上記 /etc/sudoers の設定) は行っておくことを推奨。その上で、
root パスワードを新たに設定することも強く推奨。
3. firmware 3.16 (TS-TGL ファームウェア 1.09) の場合
手順が面倒くさいので概略のみ。
- シリアルコンソールから admin でログイン
- httpd.conf のあるディレクトリが go+rwx なのでごにょごにょし、どこか適当な書き込み可能ディレクトリで cgi が実行可能なように設定
- そのディレクトリに以下のようなスクリプトを置く (当然 chmod +x を忘れずに)
#!/bin/sh
echo 'admin ALL = (ALL) ALL' > /etc/sudoers
chmod 440 /etc/sudoers
- TeraStaiton を再起動し、上で置いた cgi を実行(web ブラウザにはエラーと返るはず)
- /etc/sudoers が作成されているはずなので内容を確認し、sudo コマンドで root になれることを確認後、httpd.conf を元に戻す
4. それ以外
未確認。
■rpm2cpio のインストール
- VineLinux PPC 版の rpm コレクション(
ftp://ftp.kddilabs.jp/pub/Linux/packages/Vine/Vine-3.1/ppc/Vine/RPMS/等) から
rpm-4.0.5-1vl8.ppc.rpm
cpio-2.5-1vl1.ppc.rpm
を落としてくる
- TeraStation 上では wget が利用可能
- Vine-4.x 系(VineSeed なども)は kernel が 2.6 ベースなため使用できないので注意
- TeraStation の初期状態では rpm が展開できないので、他のマシンで
rpm2cpio *ファイル名*.rpm | cpio -idv
として usr/bin/rpm2cpio, usr/lib/librpm\*.so, bin/cpio を取り出し、それぞれ
所定の場所に置く
■openssh のインストール
- rpm コレクションから以下の 3 つを取ってきて、所定の場所に展開
openssh-3.9p1-0vl1.ppc.rpm
openssh-clients-3.9p1-0vl1.ppc.rpm
openssh-server-3.9p1-0vl1.ppc.rpm
- openssl (0.9.7b)は最初からインストールされている
- /usr/share 以下のファイルは好みにより展開or削除
- libcrypto.so.4 が見付からないと怒られるので、/usr/lib ディレクトリで
ln -s libcrypto.so.0.9.7 libcrypto.so.4
として誤魔化しておく
- ssh-keygen で host キーを生成するが、キーの保管場所をコマンドラインで
(-f オプションで)指定すると何故か失敗するので、以下のように生成
echo '/etc/ssh/ssh_host_key' | ssh-keygen -t rsa1 -N ""
echo '/etc/ssh/ssh_host_rsa_key' | ssh-keygen -t rsa -N ""
echo '/etc/ssh/ssh_host_dsa_key' | ssh-keygen -t dsa -N ""
- rc*.d スクリプトで利用している /etc/rc.d/init.d/functions 等が無いので、
rpm コレクションからinitscripts-6.51-1vl27.ppc.rpmを取ってきて、
以下のように展開
rpm2cpio *RPMDIR*/initscripts-6.51-1vl27.ppc.rpm |\
cpio -idv ./etc/rc.d/init.d/functions ./sbin/initlog
- TeraStation は /var が ramdisk なので、起動時に毎回 /var/empty/sshd
ディレクトリを生成するよう、start 関数中に
if [ ! -d /var/empty/sshd ]; then
mkdir -p /var/empty/sshd
chown root:sshd /var/empty/sshd
fi
のような記述を追加
/etc/init.d/sshd start
として起動確認、外部からログインできることも確認
- TeraStation ブート時に自動的に起動されるようにするため
ln -s ../init.d/sshd /etc/rc.d/rc3.d/S55sshd
等(数字は適当)とし、rc*.d スクリプトとして登録