Debian初心者のA2Z -7-

サーバ..

ファイルサーんバ/Samba

Samba の設定は /etc/samba/smb.conf を直接編集してもいいですが、GUI設定ツール SWAT(Samba Web Administration Tool、パッケージ swat)をインストールして、ブラウザから http://localhost:901/ で行うのが簡単です。"localhost" の部分は Sambaサーバ名 あるいは IPアドレス でもいいです。設定には root のパスワードが必要となります。

SWAT を使うために /etc/hosts.deny 及び /etc/hosts.allow を設定します。(参考

/etc/hosts.deny

swat: ALL(あるいは ALL: ALL。他ホストからのアクセスを拒否)

/etc/hosts.allow

swat: LOCAL .foo.ne.jp

その後、/etc/inetd.conf の swat 起動エントリを確認します。

#<service_name><sock_type><proto><flags>     <user> <server_path>   <args>
swat           stream     tcp    nowait.400  root   /usr/sbin/tcpd  /usr/sbin/swat

そして、inetd を再起動します。

# kill -HUP `cat /var/run/inetd.pid`

SWAT を起動し、Global Parameters に dos, unix, display 各 charset が表示されないときは View を Advanced とし、環境に応じて charset 等のパラメータ、その他 Share Parameters などを変更します。変更後はコマンド $ testparm でエラーの出ないことを確認します。
  dos charset:CP850 → CP932、Windows で使用する日本語文字コード
  unix charset:UTF-8、Samba サーバが使用する文字コード
  display charset:LOCALE、Samba, SWAT が画面表示に使用する文字コード(一般的には unix charset と同じにする)

Samba サーバにアクセスするためには、Samba が動いている Linux システムにユーザ登録してあっても、コマンド # smbpasswd -a ユーザ名 による登録が必要です。

Linux マシンから Windows 共有ディレクトリにアクセスするには smbclient をインストールし、

$ smbclient //サーバ名/共有名 (プロンプト smb: \> で使えるコマンドのヘルプは help)

Windows 共有ディレクトリをマウントするには smbfs をインストールし、

$ smbmount //サーバ名/共有名 マウントポイント [-o [username=ユーザ名][,password=パスワード][,ro][,rw]]

あるいは、/etc/fstab に、マウントポイント、タイプ smbfs、オプション user などを書いておくと、一般ユーザが $ mount コマンドでマウントできるようになります。

マウントを解除するには $ smbumount マウントポイント (# umount コマンドでも可)です。

Web サーバ/Apache2

基本的設定

apache 2.2.3

/etc/apache2/apache2.conf (抜粋)

ServerRoot "/etc/apache2" ・・・ サーバの設定ファイルが置かれるルートディレクトリ

User www-data ・・・ (apache2.2.9/lenny:/etc/apache2/envvars)
Group www-data

HostnameLookups Off ・・・ ログのホスト情報はIPアドレス  ホスト名にするなら On

# Include module configuration:
Include /etc/apache2/mods-enabled/*.load ・・・ cgid, userdir -> /etc/apache2/mods-available/*.load
Include /etc/apache2/mods-enabled/*.conf ・・・ cgid, userdir -> /etc/apache2/mods-available/*.conf

# Include all the user configurations:
Include /etc/apache2/httpd.conf

# Include ports listening
Include /etc/apache2/ports.conf

# Include generic snippets of statements
Include /etc/apache2/conf.d/

# ServerTokens
# Set to one of:  Full | OS | Minor | Minimal | Major | Prod
ServerTokens Full ・・・ (apache2.2.9/lenny:/etc/apache2/conf.d/security)

# Optionally add a line containing the server version and … to server-generated pages
# Set to one of:  On | Off | EMail
ServerSignature On ・・・ (apache2.2.9/lenny:/etc/apache2/conf.d/security)

#AddDefaultCharset ISO-8859-1 ・・・ (apache2.2.9/lenny:/etc/apache2/conf.d/charset)

# To use CGI scripts outside of ScriptAliased directories:
# (You will also need to add "ExecCGI" to the "Options" directive.)
#AddHandler cgi-script .cgi ・・・ CGI スクリプトを /usr/lib/cgi-bin/ に置くならこのままでOK
                            (apache2.2.9/lenny:/etc/apache2//mods-available/mime.conf)

# Include the virtual host configurations:
Include /etc/apache2/sites-enabled/ ・・・ 000-default -> /etc/apache2/sites-available/default

/etc/apache2/mods-available/dir.conf

<IfModule mod_dir.c>

    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml

</IfModule>

/etc/apache2/mods-available/userdir.conf

<IfModule mod_userdir.c>
    UserDir public_html ・・ ユーザのホームディレクトリに public_html というディレクトリを作成すれば
    UserDir disabled root                           http://サーバ名/~ユーザ名/ にアクセス可能となる

    <Directory /home/*/public_html>
        AllowOverride FileInfo AuthConfig Limit
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    </Directory>
</IfModule>

有効/無効にしたいモジュールは、# a2enmod/# a2dismod コマンド実行後、そのモジュールを選ぶ。その後、# /etc/init.d/apache2 force-reload

/etc/apache2/httpd.conf

(設定なし)

/etc/apache2/conf.d/charset

AddDefaultCharset UTF-8

/etc/apache2/sites-available/default

default を(例えば)my_site としてコピーし修正後、# a2dissite default ; # a2ensite my_site
/etc/apache2/sites-enabled/000-default が消え、/etc/apache2/sites-enabled/my_site -> /etc/apache2/sites-available/my_site が作成されます。

修正を反映させるために # /etc/init.d/apache2 reload

NameVirtualHost * ・・・ (apache2.2.9/lenny:/etc/apache2/ports.conf -> *:80)
<VirtualHost *>   ・・・ (apache2.2.9/lenny:-> *:80)
    ServerAdmin webmaster@localhost ・・・ サーバ管理者のメールアドレス

    DocumentRoot /var/www/ ・・・ http://サーバ名/ でアクセスするときのトップページのディレクトリ
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>                           DirectoryIndex(index.html等)が存在しないときに
        Options Indexes FollowSymLinks MultiViews ・・ ファイル一覧を表示させないなら Indexes を削除
        IndexOptions Charset=UTF-8              ・・・ ファイル一覧の文字化け対策
        AllowOverride None
        Order allow,deny
        allow from all
        # This directive allows us to have apache2's default start page
        # in /apache2-default/, but still have / go to the right place
        RedirectMatch ^/$ /apache2-default/ ・・ URI が / で終わるとき /apache2-default/ を表示させる
    </Directory>                                 /index.html を表示させたいなら行頭に # を付加

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined ・・・(ログのフォーマット指定)
    ServerSignature On ・・・(エラーページのフッタ(バージョン、OS名等)を表示させないときは Off)

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

フッタ

サーバが生成するドキュメント(エラーメッセージ等)の最下行に表示するフッタの内容は、/etc/apache2/apache2.conf の ServerTokens の内容(Prod[uctOnly], Major, Minor, Min[imal], OS, Full/または未指定)により変わります。この設定はサーバ全体に適用されます。

Full    Apache/2.x.y (Debian) PHP/5.x.y-z+etch‥ Server at 192.168.xx.x Port 80
OS      Apache/2.x.y (Debian) Server at 192.168.xx.x Port 80
Minimal Apache/2.x.y Server at 192.168.xx.x Port 80
Minor   Apache/2.x Server at 192.168.xx.x Port 80
Major   Apache/2 Server at 192.168.xx.x Port 80
Prod    Apache Server at 192.168.xx.x Port 80

/etc/apache2/apache2.conf の ServerSignature が Off になっていても、/etc/apache2/sites-available/my_site の ServerSignature が On であればフッタを表示します。フッタ表示をしないときは /etc/apache2/sites-available/my_site の ServerSignature を Off にします。

CGI

Perl へのパス #!/usr/bin/perl

ScriptAlias ディレクティブにより、/cgi-bin/ ディレクトリ下の全てのファイルは CGI プログラムとして扱われます。そのため、/cgi-bin/ ディレクトリ下の gif 画像は CGI プログラムによってはエラーとなって表示されないこともあります。対策として、画像ファイル(CGIファイル以外)はドキュメント用のディレクトリ下に置きます。(例えば、/var/www/img/ に置く。/cgi-bin/ 側からみると、そのディレクトリは /img/ となる。)
あるいは、/etc/apache2/sites-available/default の <Directory "/usr/lib/cgi-bin"> に AddHandler の記述を追加します。

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
        ・・・
    AddHandler image/gif .gif ・・・ この他に image/jpeg .jpg など(/etc/mime.types 参照)
</Directory>

エラーコード500(Internal Server Error)は Perl の文法誤りか改行コードを疑います。Windows 端末で作ったファイル(shift-jis-dos)を FTP アスキー(テキスト)モード転送せずに cp コマンドでコピーするときはあらかじめ shift-jis-unix に変換しておきます。(アスキーモード転送では改行コードを相手に合わせて変換してくれます。)

ブラウザで文字コード自動判別に設定していても読み込んだときに文字化けするときは、CGIスクリプトでContent-typeを記述している1行を次のようにしてみます(Shift_JISの場合)。

print "Content-type: text/html; charset=Shift_JIS\n\n";

Digest 認証

あるページ(例えば http://サーバ名/private/)を特定メンバーのみがアクセスできるように Digest 認証を行います。(Basic 認証はクライアント(ブラウザ)からサーバへパスワードを暗号化せずに送りますが、Digest 認証では暗号化して送ります。)

# a2enmod auth_digest

/etc/apache2/sites-available/my_site に次の記述を追加します。

<Directory /var/www/private/>
    AuthType Digest
    AuthName "private room"          ・・ 認証を行う場所に付ける名前で、認証画面に表示される
    AuthUserFile /path/to/passwdfile ・・ パスワードファイル(Webからアクセスできないディレクトリに置く)
    Require valid-user
</Directory>

メンバー(username)登録を行います。(メンバー登録を初めて行うときのみ、オプション -c を付けます。既にファイル passwdfile が存在するときにオプション -c を付けるとそのファイルは削除後に再作成されます。)

# htdigest -c /path/to/passwdfile "private room" username
Adding password for username in realm private room.
New password:

設定を反映させるために # /etc/init.d/apache2 reload

その他

ロボット対策

ドキュメントルートに次の内容の robots.txt を置きます。

User-agent: *
Disallow: /

または、HTML文書に記載します。

<meta name="ROBOTS" content="NOINDEX,NOFOLLOW">
リダイレクト

/etc/apache2/sites-available/my_site に記述追加し、特定のディレクトリ、ファイル(例えば、/test/, /robots.txt以外へのアクセスを他のサーバ(例えば another-server)の同名ディレクトリ、ファイルへリダイレクトさせる例です。

RedirectMatch ^/((?!(test|robots))/?.*)$  http://another-server/$1

メールサーバ

メールサーバ/Exim4

デフォルトでインストールされる Exim4 (exim4-daemon-light) の設定変更は # dpkg-reconfigure exim4-config を実行します。(または、/etc/exim4/update-exim4.conf.conf, /etc/mailname を修正し # update-exim4.conf を実行します。)

(設定例)
設定を小さなファイルに分割しますか:いいえ
(単一ファイル /etc/exim4/exim4.conf.template を使用)
メール設定の一般的なタイプ:スマートホストでメール送信; SMTP または fetchmail で受信する
(動的IPアドレスのシステムでは送出するメールを別のマシン(スマートホスト)に送るように設定。
 迷惑メール対策 Outbound Port25 Blocking でメールがブロックされるため)
システムメール名:domain.example
(ローカルホストのメールアドレスが foo@domain.example の場合。/etc/mailname。
 書き換えを有効にするとこの名前はメールのFrom:に現れない)
入力側 SMTP 接続をリスンするIPアドレス:(空白)
(全ての利用可能なネットワークインタフェースの接続をリッスン。外部接続しないなら127.0.0.1)
メールを受け取るその他の宛先:domain.example
(ローカルドメイン。空白にするとローカル配送は行われない)
メールをリレーするマシン:192.168.xx.xx
(自らもスマートホストとなり、他ホスト192.168.xx.xxからのメールを中継する)
送出スマートホストの IP アドレスまたはホスト名:
(メールの送出先/スマートホスト/メールサーバ。プロバイダ指定の中継用メールサーバ)
送出するメールでローカルメール名を隠しますか:はい
(メールヘッダ From, Reply-To, Sender, Return-Path を書き換える)
表示するローカルユーザのドメイン名:(DDNSサービスで取得したドメイン名)
(送信者アドレスをこのドメイン名で書き換える)
DNSクエリの数を最小限に留めますか(ダイヤルオンデマンド):いいえ
(常時接続)
ローカルメールの配送方式:mbox
(mbox/単一ファイル形式 または Maildir/分割ファイル形式)

メールシステムが不正中継利用されることのないよう、次のサイト等でチェックを行っておきます。
 第三者中継チェック/RBL.JPMail relay testing/abuse.net

exim4-daemon-light に代えて exim4-daemon-heavy をインストールするといろいろ楽しめそうです。

POP3 サーバ/qpopper

qpopper をインストールします。起動、アクセス制限を xinetd 等により行います。

なお、Maildir 形式対応を求めるなら dovecot-pop3d、IMAP を利用するなら dovecot-imapd 等をインストールします。

データベース/MySQL

mysql-server-5.0 をインストールします。phpmyadmin もインストールすると MySQL を管理しやすくなると思います。

MySQL の root(admin) パスワードはインストール直後は設定されていません。

$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

データベース一覧を表示してみます。(データベース名やテーブル名は大文字・小文字を区別しますが、それ以外は区別しません。)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |  情報スキーマ:テーブル、ユーザ等の情報を参照するためのデータベース
| mysql              |  mysql:MySQL の管理用データベース
+--------------------+

登録されているユーザを確認してみます。

mysql> select Host, User, Password from mysql.user;
+-----------+------------------+------------------+
| Host      | User             | Password         |
+-----------+------------------+------------------+
| localhost | root             |                  |
| localhost | debian-sys-maint | 1234567890abcdef |
+-----------+------------------+------------------+

MySQL の root パスワード(例えば abc)を設定します。システムの root パスワードと異なるものを設定して下さい。

mysql> set password for root@localhost=password('abc');

コマンド mysqladmin を使ってパスワードを設定することもできます。

$ mysqladmin -u root -hlocalhost password abc

root パスワードを設定した後、次のようなエラーが返ることを確認しておきます。

$ mysql -u root
ERROR 1045 : Access denied for user 'root'@'localhost' (using password: NO)

パスワード設定後、データベース mysql に接続するには、

$ mysql -u root -p mysql
Enter password:

MediaWiki

インストール

MediaWiki1.7 には次の環境が必要です。Web server (apache2 is suggested), PHP ≥ 5.0, MySQL ≥ 4.0

etch(linux-2.6.18), apache2(2.2.3), apache2-mpm-prefork(2.2.3) 環境に mediawiki1.7(1.7.1), mysql-server-5.0(5.0.24), php5(5.2.0), php5-mysql(5.2.0) の他、php5-gd(5.2.0), php5-cli(5.2.0) 等をインストールします。

参考にするサイト:Manual:Running MediaWiki on Debian GNU/Linux

MySQL の設定

root(admin) パスワードを設定しておきます。

PHP の設定

/etc/php5/conf.d/mysql.ini, /etc/php5/conf.d/gd.ini に、それぞれ extension=mysql.so, extension=gd.so の記載があることを確認しておきます。

次のスクリプト php_test.php を Apache2 ドキュメントルート(/var/www/)に置き、ブラウザで http://127.0.0.1/php_test.php にアクセスして PHP のインストール環境が表示されることを確認しておきます。(確認を終えたら php_test.php は削除します。)

<?php
phpinfo();
?>

Apache2 の設定

モジュール php5 が有効(/etc/apache2/mods-enabled/ -> /etc/apache2/mods-available/)になっていることを確認しておきます。

MediaWiki の設定

/etc/mediawiki1.7/apache.conf

Alias /mediawiki /var/lib/mediawiki1.7

<Directory /var/lib/mediawiki1.7/>
        Options +FollowSymLinks
        AllowOverride All
        order allow,deny
        allow from all
</Directory>

# some directories must be protected
<Directory /var/lib/mediawiki1.7/config>
        Options -FollowSymLinks
        AllowOverride None
</Directory>
<Directory /var/lib/mediawiki1.7/upload>
        Options -FollowSymLinks
        AllowOverride None
</Directory>

ブラウザで http://localhost/mediawiki/config/ を開きます。

Site config
* サイト名
* サイトを管理するユーザ名(WikiSysop)及びパスワード
Database config
* データベース名 (wikidb)
* データベースにアクセスするユーザ名(wikiuser)及びパスワード
* データベースのスーパユーザ名(root)及びパスワード(MySQL での設定 abc

インストールボタンを押します。

MediaWiki 1.7.1 installation

Checking environment...

    * PHP 5.1.6-5 installed
    * Found database drivers for: MySQL
    * PHP server API is apache2handler; ok, using pretty URLs (index.php/Page_Title)
    * Have XML / Latin1-UTF-8 conversion support.
    * PHP's memory_limit is 8M. If this is too low, installation may fail! 
     Attempting to raise limit to 20M... ok.
    * Have zlib support; enabling output compression.
    * Neither Turck MMCache nor eAccelerator nor APC are installed, 
     can't use object caching functions
    * Found GNU diff3: /usr/bin/diff3.
    * Found GD graphics library built-in, image thumbnailing will be enabled
     if you enable uploads.
    * Installation directory: /var/lib/mediawiki1.7
    * Script URI path: /mediawiki
    * Environment checked. You can install MediaWiki.
     ・・・
      Generating configuration file...
     ・・・
    * Finished update checks.
      Creating LocalSettings.php...
      Installation successful!
      To complete the installation, please do the following:
        1. Move /config/LocalSettings.php to /var/lib/mediawiki1.7/LocalSettings.php
          for normal install, root of your install for multisite, with rights 640
        2. Start using your wiki!

ファイル /var/lib/mediawiki1.7/config/LocalSettings.php を /var/lib/mediawiki1.7/ に移動し、アクセス権を 640 にします。セキュリティを高めるためにフォルダ /var/lib/mediawiki1.7/config を削除しておきましょう。

カスタマイズ

ユーザ関連

/var/lib/mediawiki1.7/LocalSettings.php

$wgGroupPermissions['*']['createaccount'] = false;  新規ユーザ登録不可
$wgGroupPermissions['*']['edit'] = false;           編集は登録ユーザのみ
$wgShowIPinHeader = false;                          IPアドレス非表示
タイムゾーン

/var/lib/mediawiki1.7/LocalSettings.php

$wgLocaltimezone = "Asia/Tokyo";                    timezone設定(全ユーザ共通)
$oldtz = getenv("TZ");                             (デフォルトは UTC)
putenv("TZ=$wgLocaltimezone");
$wgLocalTZoffset = date("Z") / 60;
putenv("TZ=$oldtz");
URL

http://localhost/mediawiki/index.php/メインページ を http://localhost/wiki/メインページ とします。

/var/lib/mediawiki1.7/LocalSettings.php

$wgScriptPath       = "/mediawiki";
$wgScript           = "$wgScriptPath/index.php";

# $wgArticlePath    = "$wgScript/$1";
$wgArticlePath      = "/wiki/$1";

/etc/apache2/conf.d/mediawiki1.7.conf

Alias /wiki /var/lib/mediawiki1.7/index.php
Alias /index.php /var/lib/mediawiki1.7/index.php
ナビゲーション

特別ページ/表示メッセージ一覧/Sidebar

* navigation
** mainpage|mainpage
** portal-url|portal
** currentevents-url|currentevents
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help
** sitesupport-url|sitesupport
その他

/var/lib/mediawiki1.7/LocalSettings.php

$wgLogo = "$wgStylePath/common/images/wiki.png";    ロゴ画像の変更

$wgCapitalLinks = false;            ページ名の最初の1文字を自動的に大文字にしない

その他、参考とするサイト:MediaWiki Help: Configuration settings

自宅サーバ/DDNS

ADSL で常時接続、といっても、プロバイダから割り振られた グローバルIP アドレスが変わることがあります。自宅サーバを公開しようとしても、その都度 IP アドレスを皆に知らせるわけにもいきません。そういうときは、ダイナミック DNS サービスを利用しましょう。自分の利用するサブドメイン名への IP アドレスの設定を随時、簡単に行うことができます。

私は 家サーバー・プロジェクト(ieServer.Net)を利用しております。ドメイン名(myhome.cx, or.tp, jpn.ph, fam.cx, dip.jp)の中から好きなものを一つ選び、ユーザ名(サブドメイン名になります)、メールアドレス、パスワードを登録するだけです。もちろん、無料です。

自宅 LAN(ローカルIPアドレス例 192.168.0.*)内の PC から同一 LAN 内の自宅サーバ(例 192.168.0.80)にアクセスする場合、IPアドレスを指定すると Web ページが表示されるがドメイン名を指定するとルータ(例 192.168.0.1)の設定画面となることがあります。このときは、/etc/hosts にドメイン名とローカルIPアドレス(例 192.168.0.80)の対応付けを追加記入すればいいです。

外部から自宅サーバ/Webページがどのように見えているかを次のサイトで確認できます。
 WWWサーバテスト/パソコンおやじ