HD-120LAN ジェイルでハックキット


chroot で HackKit を / に見えるようにしておいてから、 Vine の各種サーバを動かすと、 ハックキットそのものに見えるんではないだろうかと考えた。
ハックキットというジェイル(jail:牢獄)の中で 全サーバを動かすわけである。
普通、ジェイルというと、必要最小限の物しか置かないのだが、 OS が一式揃ったジェイルとは、また豪勢なもんである。

不要なプロセスの終了

ジェイルを構築するのに不要なプロセスを終了する。
root@SECO:~# ps aux
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
root         1 10.4  1.0  1448  644 ?        S    00:28   0:05 init
root         2  0.0  0.0     0    0 ?        SW   00:28   0:00 [keventd]
root         3  0.0  0.0     0    0 ?        SWN  00:28   0:00 [ksoftirqd_CPU0]
root         4  0.0  0.0     0    0 ?        SW   00:28   0:00 [kswapd]
root         5  0.0  0.0     0    0 ?        SW   00:28   0:00 [bdflush]
root         6  0.0  0.0     0    0 ?        SW   00:28   0:00 [kupdated]
root        35  0.0  0.0     0    0 ?        SW   00:28   0:00 [kreiserfsd]
root        73  0.0  0.9  1436  596 ?        S    00:28   0:00 dhcpcd -t 10 eth0
root       118  0.0  1.2  1592  788 ?        S    00:28   0:00 /sbin/syslogd -m 
root       120  0.0  1.0  1432  640 ?        S    00:28   0:00 /sbin/klogd -x
root       128  0.0  1.0  1584  672 ?        S    00:28   0:00 /usr/sbin/ap_serv
root       133  0.0  0.9  1424  572 ?        S    00:28   0:00 /usr/sbin/inetd
root       137  0.0  1.5  1980  952 ?        S    00:28   0:00 /usr/sbin/thttpd 
root       140  0.0  1.3  2020  820 ?        S    00:28   0:00 /usr/sbin/cron
root       147  0.0  2.1  2596 1336 ?        S    00:28   0:00 /bin/sh /etc/rc.d
root       151  0.0  2.9  4824 1840 ?        S    00:28   0:00 /usr/sbin/smbd -D
root       153  0.0  2.7  3644 1732 ?        S    00:28   0:00 /usr/sbin/nmbd -D
root       156  0.0  3.0  3916 1888 ?        S    00:28   0:00 /usr/sbin/atalkd 
root       157  0.0  0.7  1408  456 ?        S    00:28   0:00 /usr/sbin/ppc_uar
root       159  0.3  2.4  2756 1552 ttyS0    S    00:28   0:00 -bash
root       162  3.0  2.7  3836 1724 ?        R    00:29   0:00 /usr/bin/nbprgstr
root       163  0.0  1.4  2804  928 ttyS0    R    00:29   0:00 ps aux
root@SECO:~# cd /etc/rc.d/init.d/
root@SECO:/etc/rc.d/init.d# ./atalk stop
Stop servecies: atalkd afpd
root@SECO:/etc/rc.d/init.d# ./smb stop
Stop services: smbd nmbd
root@SECO:/etc/rc.d/init.d# ./cron stop
Stopping periodic command scheduler: cron.
root@SECO:/etc/rc.d/init.d# ./thttpd stop
Stop services: thttpd
root@SECO:/etc/rc.d/init.d# ./inetd stop
Stopping internet superserver: inetd.
root@SECO:/etc/rc.d/init.d# ./ppc_uartd stop
Stop services: ppc_uartd
root@SECO:/etc/rc.d/init.d# ./apservd stop
Stop AP serv daemon:root@SECO:/etc/rc.d/init.d# ./syslog stop
Stopping system log daemon: klogd syslogd.
root@SECO:/etc/rc.d/init.d# ./networking stop
Deconfiguration network interface: lo eth0
dhcpcd[73]: terminating on signal 1

root@SECO:/etc/rc.d/init.d# ps aux
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
root         1  4.6  1.0  1448  644 ?        S    00:28   0:05 init
root         2  0.0  0.0     0    0 ?        SW   00:28   0:00 [keventd]
root         3  0.0  0.0     0    0 ?        SWN  00:28   0:00 [ksoftirqd_CPU0]
root         4  0.0  0.0     0    0 ?        SW   00:28   0:00 [kswapd]
root         5  0.0  0.0     0    0 ?        SW   00:28   0:00 [bdflush]
root         6  0.0  0.0     0    0 ?        SW   00:28   0:00 [kupdated]
root        35  0.0  0.0     0    0 ?        SW   00:28   0:00 [kreiserfsd]
root       128  0.0  1.0  1584  672 ?        S    00:28   0:00 /usr/sbin/ap_serv
root       159  0.1  2.5  2764 1604 ttyS0    S    00:28   0:00 -bash
root       240  0.0  1.4  2800  920 ttyS0    R    00:30   0:00 ps aux
root@SECO:/etc/rc.d/init.d# 
ap_servd が死なない。もう一回 apservd stop
root@SECO:/etc/rc.d/init.d# ./apservd stop
Stop AP serv daemon:root@SECO:/etc/rc.d/init.d# ps aux
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
root         1  4.1  1.0  1448  644 ?        S    00:28   0:05 init
root         2  0.0  0.0     0    0 ?        SW   00:28   0:00 [keventd]
root         3  0.0  0.0     0    0 ?        SWN  00:28   0:00 [ksoftirqd_CPU0]
root         4  0.0  0.0     0    0 ?        SW   00:28   0:00 [kswapd]
root         5  0.0  0.0     0    0 ?        SW   00:28   0:00 [bdflush]
root         6  0.0  0.0     0    0 ?        SW   00:28   0:00 [kupdated]
root        35  0.0  0.0     0    0 ?        SW   00:28   0:00 [kreiserfsd]
root       128  0.0  1.0  1584  672 ?        S    00:28   0:00 /usr/sbin/ap_serv
root       159  0.1  2.5  2764 1604 ttyS0    S    00:28   0:00 -bash
root       246  0.0  1.4  2800  916 ttyS0    R    00:30   0:00 ps aux
root@SECO:/etc/rc.d/init.d# 
仕方がないので、kill
root@SECO:/etc/rc.d/init.d# kill -9 128
/etc/rc.d/init.d/apservd を見ると、stop のコードがない。手抜き。
root@SECO:/etc/rc.d/init.d# ps aux
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
root         1  3.9  1.0  1448  644 ?        S    00:28   0:05 init
root         2  0.0  0.0     0    0 ?        SW   00:28   0:00 [keventd]
root         3  0.0  0.0     0    0 ?        SWN  00:28   0:00 [ksoftirqd_CPU0]
root         4  0.0  0.0     0    0 ?        SW   00:28   0:00 [kswapd]
root         5  0.0  0.0     0    0 ?        SW   00:28   0:00 [bdflush]
root         6  0.0  0.0     0    0 ?        SW   00:28   0:00 [kupdated]
root        35  0.0  0.0     0    0 ?        SW   00:28   0:00 [kreiserfsd]
root       159  0.1  2.5  2764 1612 ttyS0    S    00:28   0:00 -bash
root       247  0.0  1.4  2800  916 ttyS0    R    00:30   0:00 ps aux
こんなところか。

chroot で init 起動

root@SECO:/etc/rc.d/init.d# cd /mnt
root@SECO:/mnt# HackKit/usr/sbin/chroot HackKit init 3
root@SECO:/mnt# 
ん?何も起こらない。

chroot してから init 起動

root@SECO:/mnt# HackKit/usr/sbin/chroot HackKit
[root@SECO /]# init 3
[root@SECO /]# 
何も起こらない。
init 3 って、chroot しては動かせないの?
まあ、普通は動くと困るだろうけど。

chroot してからサーバ起動

chroot した後、Vine が起動時に実行する rc スクリプトを手動で実行してみる
[root@SECO /]# cd /etc/rc.d/rc3.d/
[root@SECO rc3.d]# ls
K35dhcpd  K74ntpd     S12syslog  S25netfs  S56rawdevices  S90crond  S99local
K45named  S10network  S20random  S50inet   S75keytable    S95atd
[root@SECO rc3.d]# for f in ./S*
> do
> $f start
> done
ネットワークパラメータを設定中:  [  OK  ]
Bringing up loopback interface:  [  OK  ]
インターフェース eth0を活性化中:  [  OK  ]
システムロガーを起動中: [  OK  ]
カーネルロガーを起動中: [  OK  ]
乱数発生源を初期化中:  [  OK  ]
grep: /proc/mounts: No such file or directory
grep: /proc/mounts: No such file or directory
grep: /proc/mounts: No such file or directory
grep: /proc/mounts: No such file or directory
他のファイルシステムをマウント中:  hda3: bad access: block=2, count=2
end_request: I/O error, dev 03:03 (hda), sector 2
EXT3-fs: unable to read superblock
mount: wrong fs type, bad option, bad superblock on /dev/hda3,
       or too many mounted file systems
       (could this be the IDE device where you in fact use
       ide-scsi so that sr0 or sda or so is needed?)
[失敗]
Starting INET services: [  OK  ]
crondを起動中: 
[root@SECO rc3.d]# ps -aux
Error: /proc must be mounted
  To mount /proc at boot you need an /etc/fstab line like:
      /proc   /proc   proc    defaults
  In the meantime, mount /proc /proc -t proc
[root@SECO rc3.d]# mount /proc
[root@SECO rc3.d]# ps -aux
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT    START   TIME COMMAND
root         1  2.2  1.0  1448  652 ?        S       00:28   0:05 init
root         2  0.0  0.0     0    0 ?        SW      00:28   0:00 [keventd]
root         3  0.0  0.0     0    0 ?        SWN     00:28   0:00 [ksoftirqd_CPU
root         4  0.0  0.0     0    0 ?        SW      00:28   0:00 [kswapd]
root         5  0.0  0.0     0    0 ?        SW      00:28   0:00 [bdflush]
root         6  0.0  0.0     0    0 ?        SW      00:28   0:00 [kupdated]
root        35  0.0  0.0     0    0 ?        SW      00:28   0:00 [kreiserfsd]
root       159  0.0  2.5  2768 1620 ttyS0    S       00:28   0:00 -bash
root       250  0.2  2.4  3420 1556 ttyS0    S       00:31   0:00 /bin/bash -i
root       447  0.5  1.5  2260  988 ?        S       00:32   0:00 syslogd -m 0
root       452  0.0  0.9  1500  620 ?        S       00:32   0:00 klogd -2
root       506  0.0  1.0  1628  664 ?        S       00:32   0:00 inetd
root       532  0.0  1.6  3252 1024 ttyS0    R       00:32   0:00 ps -aux
[root@SECO rc3.d]# 
とりあえず、なんか動いているみたい。

と、思っていたら、いきなりリブートが始まった。
ppc_uartd ぐらいは動かしとかないとだめなのかな?

それなりに動き出したハックキット

試行錯誤の上、
LinkStation Linux 側では、
/etc/rc.d/init.d/atalk stop
/etc/rc.d/init.d/smb stop
/etc/rc.d/init.d/cron stop
/etc/rc.d/init.d/thttpd stop
/etc/rc.d/init.d/inetd stop
/etc/rc.d/init.d/syslog stop
/etc/rc.d/init.d/apservd stop
kill 128 (apservd の kill)
/etc/rc.d/init.d/networking stop
を実行して不要なプロセスを停止し、
ハックキットを新たに展開しなおし、
HackKit/usr/sbin/chroot HackKit
を実行して、ハックキットに chroot し、
ハックキット側では、
cd /etc/rc.d/rc3.d/
for f in ./S*; do $f start; done
を実行すると、それなり(?)に動くようになったみたいに見える。
[root@SECO /]# ps -aux
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT    START   TIME COMMAND
root         1  1.8  1.0  1448  644 ?        S       01:28   0:05 init
root         2  0.0  0.0     0    0 ?        SW      01:28   0:00 [keventd]
root         3  0.0  0.0     0    0 ?        SWN     01:28   0:00 [ksoftirqd_CPU
root         4  0.0  0.0     0    0 ?        SW      01:28   0:00 [kswapd]
root         5  0.0  0.0     0    0 ?        SW      01:28   0:00 [bdflush]
root         6  0.0  0.0     0    0 ?        SW      01:28   0:00 [kupdated]
root        35  0.0  0.0     0    0 ?        SW      01:28   0:00 [kreiserfsd]
root       157  0.0  0.7  1408  480 ?        S       01:28   0:00 /usr/sbin/ppc_
root       159  0.0  2.5  2756 1596 ttyS0    S       01:28   0:00 -bash
root       221  0.0  2.4  3412 1532 ttyS0    S       01:29   0:00 /bin/bash -i
root       424  0.0  1.5  2260  988 ?        S       01:30   0:00 syslogd -m 0
root       429  0.0  0.9  1500  620 ?        S       01:30   0:00 klogd -2
root       483  0.0  1.0  1628  668 ?        S       01:30   0:00 inetd
root       501  0.0  1.3  2016  848 ?        S       01:30   0:00 crond
root       615  0.0  1.6  3256 1028 ttyS0    R       01:33   0:00 ps -aux
PID=157 の ppc_uartd までが Linkstation Linux 側で動作していて、
PID=424 の syslog からが ハックキット側で動作している。

HD-120LAN に telnet

HD-120LAN で inetd が動き出したので、HD-HGLAN から telnet してみる。
[yasunari@giga yasunari]$ telnet hackkit
Trying 192.168.1.6...
Connected to hackkit.
Escape character is '^]'.

Vine Linux 2.6 (La Fleur de Bouard)
Kernel 2.4.17_mvl21-sandpoint on a ppc
login: guest
Password: (初期パスワード)
bash-2.04$ 
世界初!かな??。 HD-120LAN (Ver.1.x) への telnet 成功! :-)

再現不可

電源を切り、再起動し、不要プロセスを終了、chroot して、 Vine のサーバを起動しても、立ち上がらないものがある。
おそらく、/var/run にある pid,lock ファイルの影響であろう。
ハックキットを新規で展開すると、同じ手順で再現できる。

まだまだ

電源ボタンで、シャットダウンできないし。
シリアルコンソール側で、exit を実行しても、 chroot 後に起動したプロセスは動作しているのだが、
電源を落とすと、確実に最初からやり直し。

もう少し、整備が必要。
シリアルコンソール必須なので、お勧めはできないが、 もう少しこの路線で攻めてみよう
シリアルコンソールは、私にでもできたぐらいだし、、、


LinkStation/玄箱 をハックしよう → HD-120LAN ジェイルでハックキット(2)

Copyright (C) 2004 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp
山下康成京都府向日市