Debian GNU/Linux Sarge インストールメモ
サーバ環境編

基本インストールはデスクトップ編にならう。もちろんXやGNOMEは入れる必要なし。サーバの設定は用途や目的に応じて設定いろいろなので、ドキュメントをきちんと読んで、適切に設定するのが好ましい。

SSHサーバ

sshをインストールする。

apt-get install ssh

インストール時の質問:

/etc/ssh/sshd_configの設定

Rootでのログインを無効にする。

PermitRootLogin no

認証公開鍵のファイル名を指定する。

AuthorizedKeysFile %h/.ssh/authorized_keys

チャレンジ・レスポンス認証を無効にする。

ChallengeresponseAuhentication no

鍵の作成

鍵を作りたいユーザになって実行する。

ssh-keygen -t rsa -f keyname
cd ~/.ssh
mv keyname.pub authorized_keys
chmod 600 authorized_keys 

クライアント

このSSHサーバに接続したいクライアントに秘密鍵~/.ssh/keynameを配布し、クライアントは~/.sshに秘密鍵を配置する。接続するときは

ssh -i keyname username@servername

とする。Windowsの場合、バージョン2のプロトコルに対応しているPuTTYを用いる。同梱のソフトを使って、秘密鍵をPuTTYで使える形式に変換する必要がある。

時刻同期(NTP)

ntp、ntpdate、ntp-serverをインストールする。

apt-get install ntp ntpdate ntp-server

/etc/init.d/ntpdateの設定

プロバイダがNTPサーバを用意している場合はそれを用いるのが一番よい。Stratum値が小さいサーバよりもネットワーク的に近いサーバを選ぶほうがよい。プロバイダ別ntpサーバリストNTP/プロバイダ・機関別が詳しい。

プロバイダがNTPサーバを提供していないようならとりあえずmfeedのものを使うとよいかも。ここではmfeedのもので設定する。

NTPSERVERS="ntp1.jst.mfeed.ad.jp"

/etc/ntp.confの設定

参照する上位NTPサーバを指定する

server ntp1.jst.mfeed.ad.jp prefer

127.127.1.0関連はコメントアウトする。これは、時刻あわせに自分自身のシステム時間を参照するための設定である。あとはドキュメントをみながらアクセス制御やらなんやらをいろいろと設定。そしてサーバを再起動。

/etc/init.d/ntp-server restart

しばらくしたら、ntpq -pで動作を確認。指定したNTPサーバ名の左に*がついていれば、現在そのサーバを頼りにしているということ。ntpqの出力についてはドキュメントやらで確認。

Windowsとのファイル共有(SMB)

Samba3*1をインストールする

apt-get install samba

インストール時の質問:

/etc/samba/smb.confの設定

まずは、[global]セクションの設定。

ファイル名の文字コード変換の設定。dos charsetはWindows側の文字コード(通常、CP932)、unix charsetはLinux側の文字コード(EUC-JPの場合、EUCJP-MS、UTF-8の場合UTF-8)、display charsetは端末などの画面表示時の文字コード(unix charsetと同じ?)。これらは記述されていないので、明示的に追加する。

dos charset = CP932
unix charset = EUCJP-MS
display charset = UTF-8

アクセスにUnixユーザアカウントを必要とするようにする。

security = user

[homes]セクションの設定。

ホームディレクトリの書き込みを有効にし、マスクを好みに変更する。

[homes]
writable = yes
create mask = 0644
directory mask = 0755

Samba用ユーザとパスワードの設定

Sambaでファイル共有を行いたいユーザにSamba用パスワードを設定する。そのユーザで

smbpasswd

するか、Rootで

smbpasswd -U username

とする。できたらサーバ再起動。

/etc/init.d/samba restart

クライアント

Windows側からアクセスするには、エクスプローラでアドレスバーに

\servername\username

と入力する*2。Linux側でアクセスするにはsmbclient*3や、

smbclient //servername/username

smbfsとしてマウント*4

mount -t smbfs -o username=username,password=xxxxxxxx,iocharset=euc-jp,codepage=cp932 //servername/username /mnt/mountpoint

nautilusなどからアクセスする方法

場所バーに
smb://servername/username

などがある。最後に、Windows、Linux(nautilus、smbclient)双方の環境で日本語ファイル名のファイルを作成して、すべての環境で化けないかチェックする。化けている場合はunix/dos/display charsetのどれかが適切でない可能性が高い。

Linux間でのファイル共有(NFS)

nfs-kernel-serverをインストール。カーネルでNFSのサポートを有効にしていない場合はnfs-user-serverを(その代わり若干遅い)。

apt-get install nfs-kernel-server

/etc/exportsの設定

ここでは192.168.0.0/16のネットワークに/homeとホームディレクトリを公開する設定を行う。サーバ側とクライアント側でのuid/gidのミスマッチを解決するために、all_squashを指定してすべてのファイルをanonuidとanongidを所有にするよう設定する。たとえば、uid=1000, gid=1000のusernameというユーザの場合は以下のようにする。

/home   192.168.0.0/16(rw,async,wdelay,all_squash,anonuid=0,anongid=0)
/home/username   192.168.0.0/16(rw,async,wdelay,all_squash,anonuid=1000,anongid=1000)

サーバを再起動。

/etc/init.d/nfs-kernel-server restart

/etc/fstabの設定

起動時に自動的にマウントされるように*5/etc/fstabを設定する

servername:/home    /mnt/servername_home        nfs     rw,_netdev,auto 0       0
servername:/home/username    /home/username/mnt/servername_username        nfs     rw,_netdev,auto,user    0       0

ファイル転送(FTP)

proftpd 1.2.10をインストールする。ファイル名文字コード変換パッチを当てたパッケージを作成して、それをインストールする。

まず、ソースとパッチを取得し、ビルドに必要なパッケージをインストールする。

# 1.2.10版
cd /usr/local/src
wget http://www.hakusan.tsg.ne.jp/tjkawa/software/misc/proftpd-iconv/pack/proftpd-1.2.10-iconv.patch.gz
apt-get source proftpd
apt-get build-dep proftpd
# 1.3.0版
cd /usr/local/src
wget http://www.hakusan.tsg.ne.jp/tjkawa/software/misc/proftpd-iconv/pack/proftpd-1.3.0-iconv.patch.gz
apt-get source proftpd
apt-get build-dep proftpd

次に、パッチを適用する。

# 1.2.10版 (1.3版と同様に、dpatchを使ったやり方の方が望ましい)
cd proftpd-1.2.10/upstream/tarballs
tar jxvf proftpd-1.2.10.tar.bz2
cd proftpd-1.2.10
zcat ../../../../proftpd-1.2.10-iconv.patch.gz | patch -p1
cd ..
tar jcvf proftpd-1.2.10.tar.bz2 proftpd-1.2.10
rm -rf proftpd-1.2.10
# 1.3.0版
gunzip proftpd-1.3.0-iconv.patch.gz
cd proftpd-dfsg-1.3.0
cp ../proftpd-1.3.0-iconv.patch .
dpatch-edit-patch ../proftpd-1.3.0-iconv.patch
patch -p1 < proftpd-1.3.0-iconv.patch
exit
echo proftpd-1.3.0-iconv.patch.dpatch >> debian/patches/00list

次に、rulesファイルを編集して、configureのオプションに--with-modules=mode_codeconvが指定されるようにする。どうやらEXTRAMODSに使用したいモジュール名を記述すればいいらしい*6

# 1.2.10版
cd ../../debian
vi rules
    EXTRAMODS = mod_codeconv:mod_ratio:mod_tls:mod_rewrite:mod_radius:mod_wrap:mod_quotatab_file:mod_delay:
# 1.3.0版
vi debian/rules
    CONF_ARGS := (中略) --with-modules=mod_readme:mod_codeconv (後略)

パッチを当てたことによるtarballの違いによるエラーを抑制するために*.diff.gz, *.dsc, *.orig.tar.gzを削除する。ちなみにDebianパッケージについて熟知していないので、こんなことしていいのかどうかはわからない。私的利用なので強引にやっているが、もし不特定多数に公開するのなら、きちんとパッケージについての知識を得て適切な手続きでパッケージを作成することをおすすめする。

# 1.2.10版
cd ../../
rm *.diff.gz *.dsc *.orig.tar.gz
# 1.3.0版
(作業不要)

最後に、ビルドして完成。本当ならバージョン情報とか書き換えた方がよいと思う。

# 1.2.10版
cd proftpd-1.2.10
dpkg-buildpackage -us -uc
# 1.3.0版
dpkg-buildpackage -us -uc

できあがったパッケージをインストールする。バックエンドにldapやらmysqlやら使いたい人はそちらのパッケージをどうぞ。

# 1.2.10版
cd ../
dpkg -i proftpd_1.2.10-9_*.deb proftpd-common_1.2.10-9_*.deb
# 1.3.0版
cd ../
dpkg -i proftpd_1.3.0-19_*.deb

意図しないバージョンアップを防ぐために、/etc/apt/preferencesを設定。

#1.2.10版
vi /etc/apt/preferences
    Package: proftpd
    Pin: version 1.2.10*
    Pin-Priority: 1001
#1.3.0版
vi /etc/apt/preferences
    Package: proftpd
    Pin: version 1.3.0*
    Pin-Priority: 1001

/etc/proftpd.conf(1.3.0では/etc/proftpd/profotpd.conf)の設定

IPv6は使わないのでOff。

UseIPv6    Off

ホームディレクトリにchrootして接続してきたユーザを閉じこめる。

DefaultRoot    ~

ファイル名文字コード変換モジュールの設定(サーバのロケールがUTF-8で、クライアント側にWindowsを想定している場合)。

CharsetLocal    UTF-8
CharsetRemote    CP932

FTP用ユーザの作成

外部の限られた人間にFTPサーバを公開する場合、シェルを持たないFTP用のユーザを作成して対応する。Anonymousユーザを用いないのは、パスワードを与えたいから。

adduser ftpuser --shell /bin/false

proftpdはシェルのないユーザをはじいてしまうので、/etc/shellsを編集して/bin/falseをシェルの一覧に加える。

クライアント

Linuxで唯一のまともなGUIを持つFTPクライアントであるgFTPはリモート側の文字コードを明示的に指定することができるようだが、まともに動作しているとは思えない。事実上、自分のロケール以外の文字コードで記述されたファイル名は読めないといっていいかもしれない。Wineなどを使ってWindows用の優れたFTPクライアントソフトを使うほうがよいと思われる*7。また、ダウンロードだけならFirefoxなどのWebブラウザから行うという手もある(文字コードも自動認識してくれて便利)。サーバとクライアントのロケールが同じで、NFSやSMBなどのネットワークファイルシステムがあるなら、そちらからファイルをやりとりするというのも手だ。

Windowsなら自分の好きなクライアントを使うといいだろう。個人的にはRootFTPが好き。長いことバージョンアップされてない上に公式ページが消えたけど。

Windowsで広く普及しているFTPクライアントソフトFFFTPは、NLSTコマンドにRFC959で許されていないオプション指定を標準で利用しているため、RFCに厳密になった1.2.10以降のproftpdでうまく動作しない問題がある。これは、FFFTPの設定で「NLST -R を使って高速に再帰検索」のチェックを外した後、その上にある「LIST コマンドでファイルを取得」をチェックすれば解決できる。

クライアント側に設定変更させたくないときは前のバージョンに戻すしかない……のかも(未調査)。

Webサーバ(Apache)

apacheをインストールする。PHPを利用したい場合はそれもインストールする*8

apt-get install apache php php-mysql

/etc/apache/httpd.confの設定

各自の用途に合わせた設定を行う。Apacheの設定は参考文献があふれかえっているのでわからない場合は適当にGoogle検索すべし。一応、とりあえずやっておく項目を次にあげる。

日本語を最優先にする。

LanguagePriority ja en da nl ...

日本語ページの文字化けを防ぐため、デフォルトでキャラクタセットを送信しない。サーバに設置するファイルの文字コードが一つだけである場合、明示的にその文字コードを指定してもよい。

AddDefaultCharset off

PHP、CGIを有効にする。

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
AddHandler cgi-script .cgi

サーバの再起動。

/etc/init.d/apache restart

(補足)apache2のための補足

/etc/apache2/conf.d/charsetに

AddDefaultCharset UTF-8

の記述が追加されている。ホストするすべてのWebページがUTF-8でない場合はOffに修正すべき。相当ハマった……。

データベースサーバ(MySQL)

mysql-serverをインストールする。

apt-get install mysql-server

PHPが動作するWebサーバが動いているなら、phpMyAdminを入れてそこからいろいろやるのがいい。ない人はmysqlコマンドから地道にGO。

アクセス制御(tcpd)

Debianはスーパーサーバにinetdを利用しているため、inetdによって管理されるサーバのアクセス制御はtcpdを用いて行うことになる。/etc/hosts.allowと/etc/hosts.denyを適切に設定する。基本はhosts.denyで全部拒否して、hosts.allowで必要なものだけ許可。

プリンタサーバ(CUPS)

cupsを用いる。

apt-get install cupsys cupsys-bsd

インストール時の質問:

/etc/cups/cupsd.confの設定

192.168.0.0/16ネットワークからのアクセスのみを許すようにする。Locationの/と/adminにAllow 192.168.*を追加する。

<Location />
    Allow 192.168.*
</Location>
<Location /admin>
    Allow 192.168.*
</Location>

/etc/cups/mime.convsの設定

印刷に必要なデータはクライアント側のドライバで生成するようにし、サーバ側はそのデータをそのまま印刷するような構成にするため、RAWドライバを有効にする。次の行をアンコメントする。

application/octet-stream application/vnd.cups-raw 0 -

/etc/cups/mime.typesの設定

同上。

application/octet-stream

サーバ再起動。

/etc/init.d/cupsys restart

RAWプリンタの追加

Webブラウザでhttp://servername:631/にアクセスし、設定を行う。「プリンタ」からプリンタの追加を選び、名前と説明を適当に入れる(場所は空でOK)。次の画面で使用したいプリンタを選ぶ。メーカ名、モデル名、ドライバ名ではRawを選択。

クライアント

インクジェットならgimp-printドライバで大概のプリンタをサポートできる。国内と海外で製品名が違う場合があるので、ドライバを選ぶときは注意。

CanonのBJシリーズならBJプリンタ海外機種一覧に対応があったりする。

にたような名前のドライバを使えば大概うまくいくので、あとはtry&errorで適切なドライバを捜そう。

GNOMEなら、gnome-cups-managerでプリンタを追加できる。プリンタの種類にCUPSプリンタ(IPP)を選んで、URIにhttp://servername:631/printers/printernameと記述。適切なデバイスドライバを選ぶ。テストページが正しく印刷されればOK。

Windowsなら、プリンタの追加からネットワークプリンタを選び、同様にURIを入力する。すると、「サーバ側にドライバがインストールされてないから、クライアントにドライバをインストールしなさい」とのメッセージがでるので、そのプリンタのWindows用のドライバをインストールする。

バージョン管理システム(Subversion)

バージョン管理システムといえばCVSだが、こいつはもはやobsoleteだ! ということでsubversionをインストールする。

apt-get install subversion

SubversionにはsvnserveというSubversionサーバが付属している。しかし起動スクリプトがないので、次のようなファイルを起動スクリプトとして、/etc/init.d/subversionに保存する。

#! /bin/sh
#
# svnserve
#

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON="/usr/bin/svnserve"
NAME=svnserve
DESC="Subversion server daemon"

PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

case "$1" in
  start)
        echo -n "Starting $DESC: $NAME"
        start-stop-daemon --start --quiet --pidfile $PIDFILE \
                --user svn --group svn --exec $DAEMON -- -r /var/svn/ -d
        if [ "$?" -eq 0 ]
        then
            pidof $DAEMON > $PIDFILE
        fi
        echo "."
        ;;
  stop)
        echo -n "Stopping $DESC: $NAME"
        start-stop-daemon --stop --quiet --pidfile $PIDFILE \
                --exec $DAEMON
        rm -f $PIDFILE
        echo "."
        ;;
  restart|force-reload)
        echo -n "Restarting $DESC: $NAME"
        start-stop-daemon --stop --quiet --oknodo --pidfile \
                $PIDFILE --exec $DAEMON
        rm -f $PIDFILE
        sleep 1
        start-stop-daemon --start --quiet --pidfile \
                 $PIDFILE --user svn --group svn --exec $DAEMON -- -r /var/svn/
-d
        if [ "$?" -eq 0 ]
        then
            pidof $DAEMON > $PIDFILE
        fi
        echo "."
        ;;
  *)
        # echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0

これの実行のための諸作業。

chmod 755 /etc/init.d/svnserve
update-rc.d svnserve defaults 99
adduser --shell /bin/false --no-create-home --disabled-login svn
mkdir /var/svn
chown root:svn /var/svn
chmod g+w /var/svn

/etc/subversion/serversの設定

アクセス制御をこのファイルで行う。[Group]セクションに適当に記述。たとえば、次のように。

[Group]
lan = 192.168.*
university = *.youruniversity.ac.jp
office = *.youroffice.co.jp

新しいリポジトリの作成はsvnadminで行う。リポジトリごとのアクセス制御は、作成したリポジトリのconfディレクトリ内にあるsvnserve.confとpasswdでおこなう。

DDNS更新ツール

DDNSを利用している場合、DiCEを使ってIPの変更をDDNSサーバに通知することができる。

cd /usr/local
wget http://www.hi-ho.ne.jp/cgi-bin/user/yoshihiro_e/download.cgi?p=diced019
tar zxvf diced01911.tar.gz
ln -s DiCE/diced bin/

設定を行う。EUC-JP以外のロケールだと化けまくるので注意。

diced

起動スクリプトは出所不明のモノを使っている。自分で書くか、探すかしましょう。で、そのスクリプトを使って再起動。

Copyright © ymkn <ymkn@jibunstyle.net>