etchでウェブサーバ
私のメモです。参考になればいいですが、間違っていたらごめんなさい。
戯れ言
--------------------------------------------------------
Thanks to 
メジャーバージョンアップに伴い、woody(3.0)からetch(4.0)へアップデートすることにした。
woodyの際はXなどの余計なパッケージも入れていたが、今回はシンプルにウェブサーバ+
ファイルサーバの構成でインストールすることとした。
○インストール
DVDイメージをBitTorrentでダウンロードしたが、なぜか起動せず。仕方なく、今回も
最小CDイメージからネットワークインストールとなった。
インストール後に気付いたが、ウェブサーバ+ファイルサーバの構成なら最小CDイメージとネットワークインストールでも
十分であった。
Back to MENU
○カーネルの再構築
インストールが済んだら、早速カーネルの再構築である。カーネルソースをインストールする際、
woodyではkernel-source-Versionと入力したが、etchではlinux-source-Versionと
する必要がある。
# apt-get build-dep linux-source-2.6.18
# apt-get install linux-source-2.4.18
# apt-get install libncurses-dev
# cd /usr/src
# tar jxvf linux-source-2.6.18
# ln -s linux-source-2.4.18 linux
# cd /usr/src/linux
|
### ビルドルーツのインストール
### 安定版のカーネルソール
### make menuconfigに必要
### ソースのあるディレクトリに移動
### apt-getでインストールされるのはbz2ファイルなので、それを展開
### 展開して出来たディレクトリkernel-source-2.4.18へのシンボリックリンクlinuxを作成
### /usr/src/linuxへ移動
|
さて、横着して、カーネルが2.4の際の設定ファイルを使って再構築してみた。
make-kpkgを行う前に、以前(ver. 2.4)のconfigファイルをコピーし、make menuconfigを実行直後にsaveして
作成したconfigファイルを使用した。
# cp /mnt/myconfig /usr/src/linux/.config
# make menuconfig
# make-kpkg --revision 20070415 kernel-image
|
### 2.4のconfigファイルをコピー
### make menuconfigを実行し、一切変更せずにsave
### カーネルの再構築
|
最後にできあがったkernel-imageをインストールする。このインストールにより、ブートローダgrubの設定も
自動で更新され、新しいkernelで起動できるように設定が追記される。
# cd ..
# dpkg -i linux-image-2.6.18_20070415_i386.deb
(/etc/lilo.confを確認)
|
### 一つ上のディレクトリ(/usr/src)に移動。コンパイルに成功しているとkernel-image*.debファイルがあるはず。
### dpkgでインストール。liloをインストールするかと聞かれるが、取りあえずはnoを選択。
|
2.4のconfigファイルを使うとうまく行かないこともあるようだが、今回は特に問題なく起動した。
後で分かったのだが、上の方法ではiptablesが有効にならない。そのため、make menuconfigのNetworking→Network options→
Network packet filtering→IP:Netfilter Configuration→IP tables support(とそのサブ項目)を有効にする必要がある。
また、iptablesに必要なNetworking→Network options→Network packet filtering→Core Netfilter Configuration→
Netfilter Xtables supportとそのサブ項目を有効にした。
Back to MENU
○ランレベルのカスタマイズ
次に不要なサービスを停止する。etchではデフォルトのランレベルが2である(/etc/inittab中に記載されている)。
そこで、/etc/rc2.d/にあるシンボリックリンクの名前の頭文字をSからKに変えることでサービスを起動しないようにする。
今回は、使用しない以下のサービスを止めた(頭文字SをKに変更)。
| | S20acpid | 電源管理用デーモン |
| | S20netatalk | AppleTalk用デーモン |
| | S20nfs-kernel-server | ネットワークファイル用デーモン |
| | S20openbsd-inetd | TCP Wrapperの1つ。 |
| | S20winbind | Windowsのログイン名でsambaにアクセスするためのデーモン |
| | S21nfs-common | ネットワークファイル用デーモン |
○apacheの設定
etchではapacheのバージョンが2に上がった。設定ファイルも大きく変わり、次のように
分割されている。
| | apache2.conf | 主にアプリの設定 |
| | httpd.conf | ウェブサーバ固有の設定 |
| | ports.conf | ポートの設定 |
| | site-available/default | 公開するディレクトリの設定 |
| | conf.d/charset | デフォルトの文字の設定 |
まず、httpd.confにサーバ固有の設定として次の1行を追加した。
- ServerName fishers.homeunix.net
次に、ディレクトリの設定をする。元のファイルdefaultをfishersというファイルにコピーし、
fishersで以下の項目を変更した(DirectoryIndexは追加した)。
- ServerAdmin 自分のメールアドレス
- DirectoryIndex index.html index.shtml index.htm
- DocumentRoot サーバの最上階のディレクトリを指定
- <Directory /var/www>を<Directory 上で指定したディレクトリ>
- <Directory /var/www>のオプションにIncludesを追加(SSI用)
- ServerSignature Off
設定変更後、次のコマンドでfishersを有効にする。
# a2dissite default
# a2ensite fishers
|
### defaultを無効にする
### fishersを有効にする。
|
上の設定はapache2を再起動するまで有効にならない。設定が一通り済んでから再起動するので
それまで放っておけばよい。
今度は日本語に関する設定を行う。apache2.confとconf.d/charsetで以下の項目を変更した。
特に、conf.d/charsetを修正しないと、表示されるページが全てUTF-8になるので要注意である。
apache2.conf
conf.d/charset
| | # AddDefaultCharset UTF-8 | コメントアウト |
DebianではSSI用のモジュールはデフォルトで無効である。
そのため、最後にSSI用のモジュールを有効にする。
# a2enmod include
|
### SSI用モジュールincludeを有効にする
|
また、使わないモジュールは無効にしておいた方が良い。
デフォルトではmod_python、php4、perlが有効になっていたので、それを無効にした。
(a2enmodは、mod-enableにmod-availableにある実体へシンボリックリンクを
貼り、2dismodはそれを削除するコマンドである。そのため、OSを再起動しても
設定は保持される。)
# a2dismod mod_python php4 perl
|
### SSI用モジュールincludeを有効にする
|
最後にapache2を再起動して、設定を反映させる。。
# /etc/init.d/apache2 restart
|
### apache2を再起動
|
Back to MENU
○sshdの設定
今回もwoodyの時と同様にsshdを設定した。設定の方針は前回同様に以下の通りである。
- sshdにログインするのは限られたクライアントPCとする
- WindowsでPuTTYを使い、鍵による認証でログインする
PuTTYの設定は、Windowsのページを参考のこと。
まず、sshをインストールする。
# apt-get install ssh
|
### openssh-serverとsshがインストールされる
|
- /etc/ssh/sshd_configの設定
Protocol 2
PermitRootLogin no
RSAAuthentication no
PasswordAuthentication no
|
# sshdが使用するprotocolバージョン。SSH1を使用しないので2のみを記述
# rootでのログインを許可するかどうか。sshログイン用のユーザを作成後に無効にした。
# DSAを使用するためRSAでの認証は許可しない。
# 鍵ではなくパスワード認証によるログインは拒否するのでno
|
- ユーザの作成と公開鍵
woodyで使用したファイルを保存していたため、PuTTYに対しては
ssh_host_*ファイルを/etc/ssh/以下にコピーするだけでOKであった。
また別のUNIX PCからsshでログインする事はないので、今回はユーザを作成しなかった。
Back to MENU
○iptablesの設定
woody同様、/etc/network/interfaceファイルに直接記述する。
woodyで使用したファイルとの変更点は次の通りである。
- DNSサーバを指定する行が追加されている
- tableを有効にするのはupではなくpre-upである
- pre-upを使って、ip forwardを有効にできる
- localdomainは認識されない(hostsファイルに書いてないため)
上記の変更点は次のように記述される。
dns-nameservers DNSサーバのアドレス
pre-up iptables -F
pre-up echo 1 > /proc/sys/net/ipv4/ip_forward
pre-up iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
|
### iptablesをフラッシュ(pre-upの一例)
### iptablesをフラッシュ(pre-upの一例)
### ip forwardを有効にする
### localdomainを192.168.0.0/24に変更した例
|
結局、woodyで使用したファイルで、upをpre-upに、
localdomainを192.168.0.0/24に変更するだけで設定が終了した。
○Samba
によるHDDの共有
最後にsambaの設定である。
今回はsambaの設定の勉強も兼ねて、複数のユーザが居ることを仮定した
次の方針で設定した。
- フォルダ1:全員が読み書き可能
- フォルダ2:特定の人のみ読み書き可能、他の人は読み取りのみ
- フォルダ3:特定の人のみ読み書き可能、他の人は閲覧不可
詳細は設定ファイルsmb.confに譲るとして、
主な点は次の通りである。
- ロケールについて
etchのロケールはUTF-8であるが、woodyのロケールはEUC-JPであった。そのため、woodyで書き込んだ
データはEUC-JPとなっている。etchでのロケールをEUC-JPにすれば良いのだが、これではシェルで
文字化けしてしまう。そこで、
convmvを使ってEUC-JP→UTF-8へ変換した。
# convmv -r -f euc-jp -t utf8
# convmv -r -f euc-jp -t utf8 --notest
|
### 変換後のファイル名を確認
### euc-jpからutf8に変換を実行
|
- Charsetの変更
samba3系列では、サーバのロケールはunix charsetで、クライアントのロケールはdos charsetで設定する
(samba2.2系列ではそれぞれcoding system、client code pageであった)。
今回はサーバのロケールをetchのロケールであるUTF-8にした。クライアントは日本語なのでCP932にした。
unix charset = UTF-8
dos charset = CP932
- 接続可能なホストの制限
hosts allow、hosts denyによってsambaの共有フォルダにアクセス可能なアドレスを制限できる。
LAN内のPCしか接続せず、それらのアドレスは192.168.0.15以下なので、次の行を追加した。
hosts allow = 192.168.0.0/28
hosts deny = all
- サーバに登録されていないユーザの拒否
サーバに登録されていないユーザの拒否を拒否するよう、次の行を加えた。
security = user
また、登録したユーザはシェルログインしないよう、次のコマンドでユーザを追加した。
# useradd -s /bin/false USERNAME
|
### シェルを実行できないよう-s /bin/falseを付加
|
- 書き込みの制御
write listによって書き込み可能なユーザを指定できる。
ユーザだけでなく、"@"を付けることでグループも指定できる(区切りはカンマ)。、
例えば、冒頭の方針で、USER1はフォルダ1〜3の
全てで書き込み可能なユーザ、USER2、USER3はフォルダ1のみ書き込み可能なユーザでnowriteグループに
所属するとすれば、フォルダ1、フォルダ2では次のように書けばよい。
|
[フォルダ1]
write list = USER1,USER2,USER3
或いは
[フォルダ1]
write list = USER1,@nowrite
[フォルダ2]
write list = USER1
|
但し、この場合、共有フォルダとなるディレクトリ(例えば/home/share)は、パーミッションが
777(フルアクセス)とするか、所有者がUSER1、グループはnowriteで、パーミッションは770に
なっていなくてはならない。
- パーミッションの設定
共有フォルダとファイルはユーザとグループのみがアクセスできるよう0770に設定した。
create mask = 0770
directory mask = 0770
|
### ファイルのパーミッション設定
### ディレクトリのパーミッション設定
|
- 閲覧不可の設定
共有フォルダを閲覧禁止にするディレクティブが見つからないので、
共有フォルダになるディレクトリのパーミッション設定によって実現した。
フォルダ3はUSER1のみ読み書き可能、他は閲覧不可で、/home/secretディレクトリが
共有フォルダになる場合は以下のようにする。
# chown USER1 /home/secret
# chmod 700 /home/secret
|
### 所有者をUSER1にする
### USER1のみ読み書き可能にする
|
|
[フォルダ3]
write list = USER1
create mask = 0700
directory mask = 0700
|
### USER1のみ読み書き可能
### ファイルのパーミッションは所有者のみ許可
### ディレクトリのパーミッションは所有者のみ許可
|
実際に共有フォルダが読み書き可能かは、Sambaの設定だけでなくディレクトリの所有者、パーミッション
によって決まる。上の場合、ディレクトリの所有者をUSER1、パーミッションは所有者のみに許可されているので、
Sambaでwrite list = USER1,USER2と指定してもUSER2は閲覧さえ出来ない。
○設定ファイル一覧