基本インストールはデスクトップ編にならう。もちろんXやGNOMEは入れる必要なし。サーバの設定は用途や目的に応じて設定いろいろなので、ドキュメントをきちんと読んで、適切に設定するのが好ましい。
sshをインストールする。
apt-get install ssh
インストール時の質問:
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、ntpdate、ntp-serverをインストールする。
apt-get install ntp ntpdate ntp-server
プロバイダがNTPサーバを用意している場合はそれを用いるのが一番よい。Stratum値が小さいサーバよりもネットワーク的に近いサーバを選ぶほうがよい。プロバイダ別ntpサーバリストやNTP/プロバイダ・機関別が詳しい。
プロバイダがNTPサーバを提供していないようならとりあえずmfeedのものを使うとよいかも。ここではmfeedのもので設定する。
NTPSERVERS="ntp1.jst.mfeed.ad.jp"
参照する上位NTPサーバを指定する
server ntp1.jst.mfeed.ad.jp prefer
127.127.1.0関連はコメントアウトする。これは、時刻あわせに自分自身のシステム時間を参照するための設定である。あとはドキュメントをみながらアクセス制御やらなんやらをいろいろと設定。そしてサーバを再起動。
/etc/init.d/ntp-server restart
しばらくしたら、ntpq -pで動作を確認。指定したNTPサーバ名の左に*がついていれば、現在そのサーバを頼りにしているということ。ntpqの出力についてはドキュメントやらで確認。
Samba3*1をインストールする
apt-get install samba
インストール時の質問:
まずは、[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用パスワードを設定する。そのユーザで
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のどれかが適切でない可能性が高い。
nfs-kernel-serverをインストール。カーネルでNFSのサポートを有効にしていない場合はnfs-user-serverを(その代わり若干遅い)。
apt-get install nfs-kernel-server
ここでは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
起動時に自動的にマウントされるように*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
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
IPv6は使わないのでOff。
UseIPv6 Off
ホームディレクトリにchrootして接続してきたユーザを閉じこめる。
DefaultRoot ~
ファイル名文字コード変換モジュールの設定(サーバのロケールがUTF-8で、クライアント側にWindowsを想定している場合)。
CharsetLocal UTF-8 CharsetRemote CP932
外部の限られた人間に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 コマンドでファイルを取得」をチェックすれば解決できる。
クライアント側に設定変更させたくないときは前のバージョンに戻すしかない……のかも(未調査)。
apacheをインストールする。PHPを利用したい場合はそれもインストールする*8。
apt-get install apache php php-mysql
各自の用途に合わせた設定を行う。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-serverをインストールする。
apt-get install mysql-server
PHPが動作するWebサーバが動いているなら、phpMyAdminを入れてそこからいろいろやるのがいい。ない人はmysqlコマンドから地道にGO。
Debianはスーパーサーバにinetdを利用しているため、inetdによって管理されるサーバのアクセス制御はtcpdを用いて行うことになる。/etc/hosts.allowと/etc/hosts.denyを適切に設定する。基本はhosts.denyで全部拒否して、hosts.allowで必要なものだけ許可。
cupsを用いる。
apt-get install cupsys cupsys-bsd
インストール時の質問:
192.168.0.0/16ネットワークからのアクセスのみを許すようにする。Locationの/と/adminにAllow 192.168.*を追加する。
<Location /> Allow 192.168.* </Location> <Location /admin> Allow 192.168.* </Location>
印刷に必要なデータはクライアント側のドライバで生成するようにし、サーバ側はそのデータをそのまま印刷するような構成にするため、RAWドライバを有効にする。次の行をアンコメントする。
application/octet-stream application/vnd.cups-raw 0 -
同上。
application/octet-stream
サーバ再起動。
/etc/init.d/cupsys restart
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用のドライバをインストールする。
バージョン管理システムといえば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
アクセス制御をこのファイルで行う。[Group]セクションに適当に記述。たとえば、次のように。
[Group] lan = 192.168.* university = *.youruniversity.ac.jp office = *.youroffice.co.jp
新しいリポジトリの作成はsvnadminで行う。リポジトリごとのアクセス制御は、作成したリポジトリのconfディレクトリ内にあるsvnserve.confとpasswdでおこなう。
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
起動スクリプトは出所不明のモノを使っている。自分で書くか、探すかしましょう。で、そのスクリプトを使って再起動。
jibunstyle.net>