LANDISK HACKING DIARY
Since2005/8/17
TOPへ戻る

   INDEX
 
1. LANDISK環境からdebian環境への完全移行
2. 自動起動設定




 
   LANDISK環境からdebian環境への完全移行

 

 


さてと…一通り主要なサーバーをインストールし、正常に動いているようなので、そろそろ真剣に考えなければいけないことがある。当サイトを最初から読んできた方なら既に気づいていただろうが、面倒そうなので気づかないフリをしてきたはずだ。今までは、LANDISKにログインする際に、一旦、LANDISK環境にログインし、次に、debian_start スクリプトを実行することで debian 環境に移行していた。たいした手間ではないが、この作業、かなり面倒だとは思わないだろうか?いや、かなり面倒だ。それに、LANDISKを再起動した場合、全て初期状態にリセットされるので、その度にdebian_start を実行し、サーバーを稼動させるのではこれも手間になる。こういった面倒な作業を全て自動化させ、ログインする際には、直接debian 環境にログインしたい。以下ではその方法について説明していく。

まず、これからしなければならないことを考えてみる。LANDISK環境で稼動している主要なデーモンをまずリストアップしてみる。

inet(ftp、telnet)、cron、samba、ssh、lpd、httpd

LANDISK環境に必要のないものは、ftp、cron、samba、ssh、lpd、httpd である。つまり、これらのデーモンは全てdebian 環境に移行させるからだ。LANDISK環境とdebian環境での2重起動にならないようにきちんと設定を施しておく必要があるだろう。ひとつだけ、telnet のみ残したが、これは、LANDISK環境にログインするために必要となるからである。通常はLANDISK環境にログインすることはないが、設定ミスなどをした場合にLANDISKにログインできる最後の手段として残しておく(追記:LANDISK環境のssh はなにも停止させる必要はありません。debian 環境のssh を22番で起動させ、LANDISK環境のssh を他のポート番号で起動させればよいだけです。LANDISKのメモリ量と相談し、ssh をダブル起動させるかべきか否か判断してください)。

■xinetd のインストール

最初に debian 環境に、inetd よりもセキュリティに強いxiened を導入する。現在、LANDISK環境では、inetd 経由で telnetd と wu-ftpd が起動している。telnetd は最悪の事態を想定して起動させたままにしておくとして、wu-ftpd は debian 環境に proftpd を導入するため、必要はない。なので、wu-ftpd をLANDISK起動時に起動しないように設定しておく。

$ sudo su
# cp /etc/inetd.conf /etc/inetd.conf.bak
# mount -o rw,remount /
# vi /etc/inetd.conf
#ftp stream tcp nowait root /usr/sbin/in.ftpd -l -a
# /etc/rc.d/init.d/S15inet restart
# ps aux | grep inetd
root 5625 0.0 0.9 1732 584 ? S 02:08 0:00 inetd


次に、debian環境にログインし、inetd を使わないように設定する。

landisk:~# /etc/init.d/inetd.real stop


上記のように、inetd 停止させてしまうのが1番早いが、update-inetd コマンドを使って使用できないようにすることもできるので一例として紹介してみる。

landisk:~# update-inetd --disable swat

再び使用できるようにするには、

landisk:~# update-inetd --enable swat


次に、xinetd をインストールする。

landisk:~# apt-get install xinetd


xinetd は、/etc/xinetd.d/ 以下に各サービスの設定ファイルを置くようになっている。デフォルトでは、以下の4ファイルがあるはずだ。 echo、chargen、discard、daytime、time、talk、ntalk などは危険を伴うので使わないのならば停止させてしまって構わないだろう。以下の4つのファイルの中身をみてみればわかると思うが、デフォルトで、「disable = yes」となっている。つまり、初期状態で使わない状態になっているということだ。

landisk:~# vi /etc/xinetd.d/
chargen daytime echo time


インストールを終えたら、次にxinetd 経由で起動させたいサービスを/etc/xinetd.d 以下に追加していく。追加し終えたら、再起動する。

landisk:~# vi /etc/xinetd.d/swat
service swat
{
  disable = no
  port = 901
  socket_type = stream
  wait = no
  only_from = 127.0.0.1 172.16.50.0/27
  user = root
  server = /usr/sbin/swat
  log_on_failure += USERID
}

landisk:~# vi /etc/xinetd.d/proftpd
service ftp
{
  disable = no
  flags = REUSE
  socket_type = stream
  protocol = tcp
  wait = no
  user = root
  server = /usr/sbin/proftpd
}

landisk:~# /etc/init.d/xinetd restart


■debian 環境に sshd をインストールする

次に、debian環境にopenssh をインストールする。直接ログインする場所を、debian 環境にするように設定していく。今までは、sshd でログインしていた場所は、/root だったが、今度からは/mnt/hda3/debian/root になるわけだ。だが、root でログインできるようにしておくのは、危険を伴うので予めユーザを作成しておく。

landisk:~# adduser kororo


上記で作成したユーザーに対して全権限を与えるように sudo をインストールし、適切に設定しておく。debian 環境のデフォルトでは、sudo はインストールされていないはずなので、apt-get してインストールしておく。

landisk:~# apt-get install sudo
landisk:~# visudo
kororo ALL=(ALL) ALL


sshd のインストールをする。

landisk:~# apt-get install ssh


次に、ユーザ、kororo でログインし、公開鍵・秘密鍵を作成する。作成された id_rsa を Windows 上にコピーしておく。コピーし終えたら、元の id_rsa は削除しておく。

landisk:~$ su kororo
landisk:~$ ssh-keygen -t rsa
landisk:~$ cd .ssh/
landisk:~$ cp -p id_rsa.pub authorized_keys


ここまで設定できたら、Windows 上からTeratermを起動し、debian 環境のルートディレクトリへログインできるかどうか確かめておく。ログインプロンプトが今までとは違う画面で表示されるはずである。sudo して root シェルにログインすることができれば、sshd はひとまず成功である。

Most of the programs included with the Debian GNU/Linux system are
freely redistributable; the exact distribution terms for each program
are described in the individual files in /usr/share/doc/*/copyright

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

Last login: Wed Aug 31 00:10:34 2005 from aaa.kororo.jp
kororo@landisk:~$ sudo su -
landisk:root#


最後に、/etc/ssh/sshd_config を設定しておく。

# vi /etc/ssh/sshd_config
PermitRootLogin no
RSAAuthentication yes
PermitEmptyPasswords no
PasswordAuthentication no

# /etc/init.d/ssh restart





     自動起動設定
   
ここまでで完全移行への環境はだいたい揃いましたが、最後にやらなければいけないことがあります。それは、LANDISK起動時に自動起動するデーモンを起動しないように設定し、自動起動するようになっていない debian 環境のデーモンを自動起動させるようにすることです。とりあえず、停止させたいサービスと起動させたいサービスを整理してみることにする。

■起動時に停止させるサービス in LANDISK環境

  wu-ftpd、cron、samba、ssh、lpd、httpd

■起動時に起動させておくサービス in LANDISK環境

  inetd (telnet)、dhcpcd

■起動時に起動させておくサービス in debian環境

  apache2、bind9、cron、mt-daapd、ntp-server、samba、squid、ssh、lpd など



×失敗例

以下のようにして、samba が自動起動しないようにリネームし、LANDISKを再起動させたらなんとシステムが起動しなくなりました。赤と緑のランプが両方点滅しているので、IPアドレスを取得できなかったのかと思い、作業用マシンを192.168.0.0/24 のネットワークに変更してから再度アクセスしてもアクセスできなかった。なぜ…?samba が起動できないことで、システムを起動させるのに何らかの支障がでてくるんだろうか?結局原因がわからないので筐体を開けて違うマシンで直すハメに…。再度、起動させてから、S91samba を見てみたらやけに長い起動スクリプト。なんとなくいろんなことやってそうだったので、いじるのはやめておくことにした(筐体を何度も開けたくない…)。

# cd /etc/rc.d/init.d
# mount -o rw,remount /
# mv S91samba .S91samba




LANDISK環境の sshd を自動起動しないようにしておく。

# cd /etc/rc.d/init.d
# mount -o rw,remount /
# mv ssh .ssh


/etc/rc.d/rc.local を編集し、debian 環境のデーモンが自動起動するように設定する。rc.local とはシステムが起動する際に最後に実行されるスクリプトのことである。Webサーバーに関しては、apache と apache2 の混在環境は可能なので、LANDISK環境の apache はそのまま起動させておき、IO-DATAのWeb設定画面にアクセスできるようにしておく。debian 環境では、apache2 を8080 番で起動させ、公開用Webサーバーとする(予定)。作成したrc.local 次第では、LANDISKのPOWERランプ(緑)が、システム起動後もずっと点滅し続けたりすることがある。推測するに、システム起動時に、LANDISK環境の httpd(apache)は起動している状態でないとPOWERランプは点滅したままの状態になってしまうので、無理にapache を停止させることはやめることにした。以下のスクリプトで、筆者の環境では特に支障なく起動するようになったが、使用する際には責任は持ちません。

#!/bin/sh

root=/mnt/hda3/debian

if [ ! -e $root/proc/cpuinfo ]; then
$root/usr/sbin/chroot $root mount -t proc proc /proc
fi

if [ ! -e $root/share/disk ]; then
mount --bind /mnt/hda3/share $root/share
fi

/etc/rc.d/init.d/S91samba stop
/etc/rc.d/init.d/S60lpd stop
/etc/rc.d/init.d/S40cron stop
sleep 5;

$root/usr/sbin/chroot $root /etc/init.d/syslog-ng start
$root/usr/sbin/chroot $root /etc/init.d/ssh start
$root/usr/sbin/chroot $root /etc/init.d/bind9 start
$root/usr/sbin/chroot $root /etc/init.d/xinetd start
$root/usr/sbin/chroot $root /etc/init.d/squid start
$root/usr/sbin/chroot $root /etc/init.d/lpd start
$root/usr/sbin/chroot $root /etc/init.d/samba restart
$root/usr/sbin/chroot $root /etc/init.d/ntp-server start
$root/usr/sbin/chroot $root /etc/init.d/apache2 start
$root/usr/sbin/chroot $root /etc/init.d/cron start
$root/usr/sbin/chroot $root /bin/mount -t ext2 /dev/sda1 /share/usb1
$root/usr/sbin/chroot $root /etc/init.d/mt-daapd start

exit 0


ここまでの設定を終えれば無事に、LANDISK環境から debian 環境への移行が完成しただろう。あとは、sshd を使って直接、debian 環境にログインすれば良い。あまりお勧めできる方法とは言えないが、debian 環境では再起動をかけることができないので、一旦、LANDISK環境でtelnet ログインしてから再起動をかけることになる分、若干面倒になるのは否めない。ただ、不用意な再起動を防げるという点では意義があるだろう。その際に、予め、debian 環境のデーモンを停止させるスクリプトを実行しておくとよいだろう。

landisk:~# vi debian_stop
#!/bin/sh
/etc/init.d/ssh stop
/etc/init.d/xinetd stop
/etc/init.d/squid stop
/etc/init.d/lpd stop
/etc/init.d/samba stop
/etc/init.d/ntp-server stop
/etc/init.d/apache2 stop
/etc/init.d/cron stop
/etc/init.d/bind9 stop
/etc/init.d/mt-daapd stop
/etc/init.d/syslogd stop

/bin/umount /share/usb1

あるいは、LANDISK環境からdebian 環境のデーモンを停止させ、再起動をかけるには、以下のようなシェルスクリプトを使っている。

# vi reboot.sh
#!/bin/sh

root=/mnt/hda3/debian
PATH=$PATH:/usr/local/bin
export PATH

$root/usr/sbin/chroot $root /etc/init.d/ssh stop
$root/usr/sbin/chroot $root /etc/init.d/xinetd stop
$root/usr/sbin/chroot $root /etc/init.d/squid stop
$root/usr/sbin/chroot $root /etc/init.d/lpd stop
$root/usr/sbin/chroot $root /etc/init.d/samba stop
$root/usr/sbin/chroot $root /etc/init.d/ntp-server stop
$root/usr/sbin/chroot $root /etc/init.d/apache2 stop
$root/usr/sbin/chroot $root /etc/init.d/cron stop
$root/usr/sbin/chroot $root /etc/init.d/bind9 stop
$root/usr/sbin/chroot $root /etc/init.d/mt-daapd stop

umount $root/share/usb1
umount $root/proc
umount $root/share





TOPへ戻る
 
Copyright © KORO All Rights Reserved.