Virtuald ノススメ
2000-06-29 作成 福島
TOP > tips > virtuald
SSHサーバをインストールすると、TELNET が不用になります。
TELNET を廃止だけなのは勿体無いので、Virtuald を導入します。
まあ、この際理由はどうでも良い。
・Virtuald とは
※注
必ず SSH を導入した後にして下さい。
そうしないと、root での作業が凄く多いので、
2度とログイン出来なくなるかもしれません。
rootじゃないのは最初だけです。
- コンパイル&設置
$ gcc -o virtuald virtuald.c virtuald をコンパイル
ソースは参考資料[1]からカット&ペーストします。
$ su
# mv virtuald /usr/sbin/. 設置(inetd.conf中に指定できるので他に置いても良い)
# cat > /etc/virtuald.telnet TELNETをバーチャルの対象にするためのファイルを用意
192.168.1.10 /home/virtuald TELNETで 192.168.1.10 に入って来たら
^D /home/virtuald/ に chroot する指定
- inetd.conf を編集
# cp -p /etc/inetd.conf /etc/inetd.conf-org inetd.conf を退避
# vi /etc/inetd.conf inetd.conf を編集
# diff /etc/inetd.conf /etc/inetd.conf-org
36c36
> telnet stream tcp nowait root /usr/sbin/tcpd virtuald /etc/virtuald.telnet /usr/sbin/in.telnetd
---
< telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
- バーチャル用のディレクトリを用意
# mkdir /home/virtuald
# cp -pdR /bin /home/virtuald
# cp -pdR /dev /home/virtuald
# mkdir -m 0755 /home/virtuald/etc
# for i in /etc/* ; do
if [ ! -d "$i" ] ; then
cp -pd $i /home/virtuald/etc/
fi
done
# cp -pdR /etc/* /home/virtuald/etc/ RedHat6.1JはこっちじゃないとPAMで引っかかる
# mkdir /home/virtuald/etc/skel
# mkdir /home/virtuald/UserName UserNameはもちろんユーザ名
# mkdir /home/virtuald/lib
# for i in /lib/* ; do
if [ ! -d "$i" ] ; then
cp -pd $i /home/virtuald/lib/
fi
done
# cp -pdR /lib/security /home/virtuald/lib/ RedHat6.1Jはこれも追加(PAMのため)
# mkdir -m 0555 /home/virtuald/proc
# cp -pdR /sbin /home/virtuald
# mkdir -m 0777 /home/virtuald/tmp
# chmod +t /home/virtuald/tmp
# mkdir -p -m 0755 /home/virtuald/usr/lib
# cp -pdR /usr/lib/*.so* /home/virtuald/usr/lib
# cp -pdR /usr/sbin /home/virtuald/usr
# ln -s /tmp /home/virtuald/usr/tmp
# mkdir /home/virtuald/var
# cp -pdR /var/lock /home/virtuald/var
# mkdir -p /home/virtuald/var/log
# cp /dev/null /home/virtuald/var/log/wtmp
# cp -pdR /var/run /home/virtuald/var
# ln -s /tmp /home/virtuald/var/tmp
- syslog が動作するように環境を変更
# ln -sf /home/virtuald/log /home/virtuald/dev/log syslog のために強制的にソケットへのリンクを作成
# mkdir /virtual
# ps ax | grep syslogd init を書き換えてリブートでも良いけど、
100 ? S 0:00 syslogd -m 0 そんな勇気無いのでこうしてチェック
# kill -KILL 100
# /sbin/syslogd -p /virtual/log
# ln -sf /virtual/log /dev/log
# ln /virtual/log /home/virtuald/dev/log 必ずハードリンクにする
- inetd を再起動
# ps ax | grep inetd
101 ? S 0:00 inetd
# kill -HUP 101
- init.d/syslog を変更
syslogd のパラメータ変更が必要なので /etc/rc.d/init.d/syslog を編集(RedHat6.1Jの場合)
daemon syslogd -m 0
を
daemon syslogd -m 0 -p /virtual/log
に変更する
- 全部うまく行ったらリブート。
参考資料[1]: Virtual-Services-HOWTO.txt