コンテンツ実行ユーザーの作成

コンテンツを実行させるために、権限を最小限に持つユーザーを作ります。
$ sudo adduser flabo
[password]
(名前、部屋番号、等を聴聞してきますので必要に応じて入力します。)

パッケージ設定

時間合わせ・依存関係の無いパッケージの検索 のパッケージインストール
$ sudo apt-get install ntpdate deborphan apmd

AMPPのインストール

(表示上の関係で複数行で表示していますので、そのままコピーしないでください。)
$ sudo apt-get install php5 libapache2-mod-php5  mysql-server php5-mysql
  php5-sqlite phpmyadmin postgresql php5-pgsql phppgadmin

Apache設定

コンテンツ実行用のユーザーになって、アパッチ設定の土台をつくります。
$ su - flabo ← 上で作ったコンテンツ実行用のユーザー名
[password]
$ cd /home/flabo
$ mkdir www
$ mkdir log
$ mkdir ./log/apache2
$ exit
ルートに戻って、アパッチの設定を続けます。
$ sudo vi /etc/apache2/sites-enabled/000-default
以下の様に変更します。
NameVirtualHost *
ServerTokens Prod ←(追加)エラー時のサーバー名の表示を最小にします。
<VirtualHost *>
       ServerAdmin webmaster@localhost

       DocumentRoot /home/flabo/www/   ←Web上のルートとなります。
       <Directory />
               Options FollowSymLinks
               AllowOverride None
       </Directory>
       <Directory /home/flabo/www/>  ←Web上のルートです。
               Options FollowSymLinks MultiViews ←途中の Indexes を削除
               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/  ←コメント化します。
       </Directory>

       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 /home/flabo/log/apache2/error.log ←エラーログの保存場所です。

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

       CustomLog /home/flabo/log/apache2/access.log combined  ←アクセスログ
       ServerSignature Off  ←エラー時のサーバー情報を表示しません。

   Alias /doc/ "/usr/share/doc/"
   <Directory "/usr/share/doc/">
       Options MultiViews FollowSymLinks   ←途中の Indexes を消去します。
       AllowOverride None
       Order deny,allow
       Deny from all
       Allow from 127.0.0.0/255.0.0.0 ::1/128
   </Directory> 

</VirtualHost>
さらに独自の設定ファイルを作ります。
$ sudo vi /etc/apache2/conf.d/flabo.conf
アパッチ実行ユーザーの設定とサーバー名称を設定します。
User flabo
Group flabo
ServerName felix-labo.org:80
UseCanonicalName On
コンテンツを置く場所がflabo/www/ で Apacheを起動するのが、そのファイルのオーナーであるflaboということになります。これで、この中のコンテンツの権限は、
chmod 700 ./*
という様にユーザー以外は何もできないように設定することができます。レンタルサーバーでは決してできない方法ですが、これで、flabo を乗っ取られる以外、内部のファイルを外から変更されることがなくなります。(もちろんrootをとられてしまえば別ですが・・・)加えて万が一flaboを乗っ取られたとしても、flaboは、他のどこにも属さないユーザーなので、/home/flabo/ 以下 の他は触られることがありません。(不便だからといって、flabo に sudo 権限を与えたりしない様にしましょう。)

php.ini の設定

php.iniの内容を書き換えます。主にセキュリティ上の観点です。
sudo vi /etc/php5/apache2/php.ini
書き換える内容は以下のとおりです。コメント化をはずすだけのものもあります。
(447行目付近)
magic_quotes_gpc = Off
(465行目付近)
default_charset = "UTF-8"
(1147行目付近)
mbstring.language = Japanese
(1152行目付近)
mbstring.internal_encoding = UTF-8
(1174行目付近)
mbstring.substitute_character = none;

MySQL の設定

実行ユーザーの設定を行います。まずはルートユーザーのパスワード設定から
$ mysqladmin -u root password pppppppp
(pppppppp の部分にパスワードを設定)
$ mysql -u root -p
[password]
続いて、Webコンテンツ用のデータベース実行ユーザーを設定。上記でつくった最小限ユーザーと同じにします。
mysql> create database webkintai;
mysql> create user flabo@localhost identified by 'pppppppq';
mysql> grant usage on *.* to flabo@localhost;
mysql> grant all on webkintai.* to flabo@localhost;
mysql> quit
簡単に解説をすると一行目でウェブページ用のデータベースを作成し、二行目で実行ユーザーを作ります。三行目で作ったユーザーに対するすべての権限を剥奪(usage)します。その後、Webkintai に対してだけすべての権限を付与します。
次に文字化け防止用に、my.cnf の設定を変更します。
$ sudo vi /etc/mysql/my.cnf
[mysqld]の最後に以下の2行を追加します。
default-character-set=utf8
skip-character-set-client-handshake
再起動して設定を有効にします
$ sudo /etc/init.d/mysql restart

phpMyAdmin

Apacheと一緒にphpMyAdminを入れたのち、Apacheのルートを変更したので、このままだと
localhost/phpmyadmin
のように使えません・・・。(でも/var/www/へも 直接ファイルの置いてある /usr/shar/phpmyadmin からのリンクがはられているだけなので、エイリアスの入った設定ファイルをアパッチの設定ディレクトリへリンクしているUbuntuとはちょっと違うなぁとおもいました。)どうせ変更するので、Ubuntu的にやってみました。
$ sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf.d/phpmyadmin
とし、apache.conf の内容を書き換えていきます。
$ sudo vi /etc/phpmyadmin/apache.conf
以下の様に修正・追記します。
# Configure everything with /etc/phpmyadmin/htaccess file
Alias /phpmyadmin /usr/share/phpmyadmin ←追加
<Directory /usr/share/phpmyadmin/>
   AllowOverride All
   Order deny,allow     ←以下の3行を追加
   Deny from all
   Allow from 192.168.99   ←99の部分はサーバーにより異なります。
</Directory>
<Directory /home/flabo/www/phpmyadmin/> ←変更
   AllowOverride All
</Directory>

# Protect some directories
<Directory /var/lib/phpmyadmin/> ←もしかしたら変えた方がよいかも・・・
   Options -FollowSymLinks
   AllowOverride None
   Order deny,allow
   Deny from all
</Directory>
<Directory /usr/share/phpmyadmin/config/>
   Options -FollowSymLinks
   AllowOverride None
   Order deny,allow
   Deny from all
</Directory>
<Directory /home/flabo/www/phpmyadmin/config/> ←変更
   Options -FollowSymLinks
   AllowOverride None
   Order deny,allow
   Deny from all
</Directory>
重要なのは Order deny,allow ・・・からの三行です。これにより同じLAN内からしかアクセスできなくなります。LAN内からアクセスするときには
http://192.168.99.2(サーバーIPアドレス)/phpmyadmin/
といった具合になります。 最後に blowfish_secret の設定です。
$sudo vi /etc/phpmyadmin/config.inc.php
で、以下の行を最後に追加します。
$cfg['blowfish_secret'] = 'hoge-hoge';

PostgreSQLの設定

phppgadmin の設定

Ubuntuでphppgadminがすんなりうまく言ったので、Debianでも簡単だろうと思っていたのですが、解決までは時間がかかりました。 まずは、ユーザーを追加します。phppgadmin は、postgreSQLの初期ユーザーpostgresを初期状態でログインできない様にしています。このポリシーに合わせて新たなスーパーユーザーを作成したいと思います。
$ sudo passwd postgres
(ここでパスワードを設定します。)
$ su - postgres
(以下で一般的に使用するユーザーを作ります。username を任意の名前にしてください)
postgres@mv1c3e:~$ createuser -P username
(ここでパスワード設定と権限設定をします。特にこだわらなければ、Y でよいと思います。)
postgres@mv1c3e:~$ logout
次にapacheの設定です。
$ cd /etc/apache2/conf.d/
$ sudo ln -s /etc/phppgadmin/apache2.conf ./phppgadmin
続いて、この設定ファイルを修正します。
$ sudo vi ./phppgadmin
以下を追加します。
Alias /phppgadmin /usr/share/phppgadmin/

<DirectoryMatch /usr/share/phppgadmin/>

Options +FollowSymLinks
AllowOverride None

order deny,allow
deny from all
allow from 127.0.0.0/255.0.0.0
allow from 192.168.99              ←この一行を追加。99はLAN設定による
# allow from all
これで、/ホスト名/phppgadmin でLAN内から表示できる様になります。UbuntuのPDT環境ではこれでOKだったのですが、リモートでphppgadminにログインしようとすると、「ログインに失敗しました」と言い放たれます。
postgreSQLのユーザーは接続方法やIPアドレス別パスワード方法で細かに設定出きるのでそこなのか?(← pg_ident.conf ファイル内です。)と思ったのですが、そこは何の設定変更も必要ありませんでした。問題だったのは /etc/postgresql/7.4/main/postgresql.conf の設定でした。
$ cd /etc/postgresql/7.4/main
$ sudo vi ./postgresql.conf
以下を追加。
#tcpip_socket = false
tcpip_socket=true      //30行目付近
ようやくこれでログインできる様になります。

DNS設定

Fedora Core 5 で作る最強の自宅サーバー
Fedora Core 5 で作る最強の自宅サーバー
設置したサーバーを公開するためには、自分のサーバーの位置を示しているIPアドレスと http://・・・ といったURLを組み合わせてドメインを管理しているネームサーバーに登録してもらう必要があります。また、自宅で複数のパソコンをルーティングしてサーバーを設置する場合には、どのパソコンを公開するのかのルーターの設定が必要です。(公開しないパソコンを公開しない設定も合わせて必要でしょう)
更に通常のプロバイダーが各々の自宅のLANに振っているIPアドレスはダイナミック(可変)であることが普通なので、変動していることをネームサーバーへ知らせる必要があります。
以上のことは無料で行うことが可能な反面、サーバー内部では片付かない問題が多く、ルーターの設定のインターフェースがルーターの機種それぞれで異なるために、非常に解説がしにくい問題です。
この問題をすっきり解決しようとおもうと、やはり基礎的な知識が不可欠になるとおもいます。おそらくはサーバーについての書籍を一つ二つ見ながら作業をするべきなのだと思います。サーバーの書籍はWeb公開を実現するために、上記のようなルーター設定やDNSサービス登録といった部分に言及していないものが多数あります。そのあたりが記述してある書籍を選ばれることをおすすめします。: 私もDebianサーバーを置いているのですが、これらのWebサーバー公開のプロセスについては、Fedora Core 5 で作る最強の自宅サーバーが最も参考になりました。
比較的よくまとめられているサイト

バーチャルホストの設定

Apacheは、一つのサーバーで、2つ以上のWebサーバーとして働かせることができます。私の場合には
  1. http://felix-labo.org
  2. http://dreambg.game-host.org
という様に2つのウェブサイト用に一つのサーバーを用いています。上は独自ドメインで下はネームサーバー無料サービスhttps://www.dyndns.com/からドメインを取得しています。IPアドレスと各々のネームサーバーの問題を別として、それぞれのURLが呼び出されたときに表示をするサーバー内のディレクトリを設定します。
まず、ディレクトリとユーザーの設定です。いろいろとやり方考えられるのでしょうが、私の場合、新たに 2.http://dreambg.game-host.org のコンテンツを公開するためのディレクトリを持つユーザー dreambg を作りました。また、公開用のMySQLのデータベースも同様に作成し、そのデータベースにだけ権限を付与します。(上記参照くださいませ)
ここで問題になるのが、1.http://felix-labo.org をflabo というユーザーのディレクトリで公開していて、Apacheもflaboが実行しているという点です。実行ユーザーを二つ持つことができないので、2.http://dreambg.game-host.org のコンテンツを公開するためのディレクトリを持つユーザー dreambg のユーザーグループ dreambg にflabo を登録することにしました。dreambg の公開ディレクトリ内の権限は
$ chmod 770 ./*
といった感じでグループユーザー(実際にはApacheを実行しているflaboだけ)にも自由に権限を与える様にします。これでコンテンツは問題なく稼働し、セキュリティ上も安全となる訳です。
ここまでのユーザー登録とグループ登録は、
$ sudo adduser dreambg
(パスワード登録等)
(mysqlのユーザー登録と権限登録は割愛します。上記ご参照ください。)
$ sudo vi /etc/group
で以下の様に dreambg グループに flabo を追加
dreambg:x:1002:flabo
これ以外にも、Apache実行ユーザーを一人だけとして、そのユーザーが両方のコンテンツユーザーになるというやり方もあるでしょう。
前置きが長くなりましたが、バーチャルな複数Webサーバーの設定方法です。
$ sudo vi /etc/apache2/conf.d/virtualhost
という様に、conf.d 下に新たに設定ファイルを作成します。設定内容は
NameVirtualHost 192.168.99.2

<VirtualHost 192.168.99.2>
       ServerAdmin webmaster@felix-labo.org
       DocumentRoot /home/flabo/www/
       ServerName felix-labo.org
       ErrorLog /home/flabo/log/error_logi
       CustomLog /home/flabo/log/access_log combined
</VirtualHost>

<VirtualHost 192.168.99.2>
       ServerAdmin webmaster@dreambg.game-host.org
       DocumentRoot /home/dreambg/www/
       ServerName dreambg.game-host.org
       ErrorLog /home/dreambg/log/orror_logi
       CustomLog /home/dreambg/log/access_log combined
</VirtualHost>
これで、それぞれのURLごとの表示ページを完全に分離して表示できるようになります。