こんにちは。イッシーですʕ→ᴥ←ʔ キュンキュン!世の中ドキュメントはHTMLという流れですね。オフィスで残すのも管理が大変なので、ちゃっかりブログに載せちゃえ主義を貫こうと思います。

さて、プラスアールではクラウドを利用してサービスを運営しています。そこで本日はAWSでサーバをたてます。硬派なインストール方法(ソースからビルド)をせず、yumしまくってますがご了承ください。m(__)m

※Amazon Linuxの32bitを使用しております。

■Apache

いわゆるWebサーバです。

[cc lang="bash"]
sudo yum install httpd
sudo chkconfig httpd on
[/cc]

インストール及びマシン起動時の設定が完了しました。特にサーバーとしては問題なく動作するのですがセキュリティ上望ましくない部分もありますので設定を変更します。

設定

以下のコマンドで設定ファイルを編集します。

[cc lang="bash"]
sudo vi /etc/httpd/conf/httpd.conf
[/cc]

HTTPヘッダ内のApacheのバージョン

特定のバージョンに存在する未知の脆弱性というものも存在するかもしれません。以下の部分を

[cc lang="bash"]
ServerTokens OS
[/cc]

以下のように編集しバージョンを隠すようにしましょう。

[cc lang="bash"]
ServerTokens ProductOnly
[/cc]

サーバーネームの変更

[cc lang="bash"]
#ServerName www.example.com:80
[/cc]

以下のように変更する。

[cc lang="bash"]
ServerName hogehoge.com:80
[/cc]

ディレクトリの一覧表示を禁止

ディレクトリの中身が見えてしまうというのはセキュリティ上好ましくありません。以下の部分を

[cc lang="bash"]
Options Indexes FollowSymLinks
[/cc]

以下のように変更して一覧を表示させないようにしましょう。

[cc lang="bash"]
Options -Indexes FollowSymLinks
[/cc]

htaccessの使用を許可

これは用途によりますが大概のWebアプリケーションはhtaccessファイルを使用しているのではないかと思います。<Directory “/”>内の以下の部分を

[cc lang="bash"]
AllowOverride None
[/cc]

以下のように変更します。

[cc lang="bash"]
AllowOverride All
[/cc]

.htaccessファイルは外から見られるとセキュリティリスクになります。以下の記述が見つからない場合は追記しましょう。

[cc lang="xml"]

Order allow,deny
Deny from all

[/cc]

エラーページにおけるサーバ情報の表示禁止

これは一番最初の設定項目と同様の理由です。不要な情報は極力表示させないようにしましょう。以下の部分を

[cc lang="bash"]
#ServerSignature On
[/cc]

以下のように変更します。

[cc lang="bash"]
ServerSignature Off
[/cc]

起動

以下のコマンドで起動します。

[cc lang="bash"]
sudo /etc/init.d/httpd start
[/cc]

ちなみに初期設定の場合は以下のディレクトリのファイルが参照されます。

[cc lang="bash"]
/var/www/html/
[/cc]

従ってそこにindex.htmlを設置すれば参照できますね。Webサーバーσ°▽°)σ ゲッツ!

■MySQL

いわゆるDBです。Amazon RDSを使用しても良いのですが今回は同マシン内でMySQLも動かしてみます。

[cc lang="bash"]
sudo yum install mysql mysql-server mysql-devel
sudo chkconfig mysqld on
[/cc]

設定

以下のコマンドで設定ファイルを編集します。

[cc lang="bash"]
sudo vi /etc/my.cnf
[/cc]

文字コード

MySQLのデフォルトの文字コードはコンパイルオプションで指定しないとlatin1です。試しに以下のコマンドで確認します。

[cc lang="bash"]
mysql> show variables like ‘character_set%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
[/cc]

マルチバイト圏に生まれて凹みますね。でも大丈夫。以下の記述を設定ファイルに加えましょう。

[cc lang="bash"]
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[/cc]

以下のように生まれ変わります!

[cc lang="bash"]
mysql> show variables like ‘character_set%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
[/cc]

僕はunicode以外の文字コードは嫌いです(●´⌓`●)

パスワード

インストール直後のMySQLはrootのパスワードがありません。セキュリティを考えて必ず設定しておきましょう。

[cc lang="bash"]
myql -u root
[/cc]

以下のSQLを実行します。

[cc lang="sql"]
SET PASSWORD FOR root@localhost=PASSWORD(‘fugafuga’);
exit;
[/cc]

実はもっと沢山の設定項目がありますが本題から外れてしまいそうなのでサクっと終わらせます。

起動

以下のコマンドで起動します。

[cc lang="bash"]
sudo /etc/init.d/mysqld start
[/cc]

MySQLサーバーσ°▽°)σ ゲッツ!

■PHP

みんな大好き”ゆとり言語”PHPです!必要に応じてパッケージは追加してください。

[cc lang="bash"]
sudo yum install php php-devel php-pdo php-pear php-mcrypt php-mysql php-mbstring
[/cc]

Amazon LinuxリポジトリのPHPバージョンは5.3.6。キュンキュンするバージョンですね。ʕ→ᴥ←ʔ キュンキュン!

PHP設定

以下のコマンドを実行し設定ファイルを編集します。

[cc lang="bash"]
sudo vi /etc/php.ini
[/cc]

文字コード

以下の項目を探して下記を例に変更しましょう。

[cc lang="bash"]
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_output = UTF-8
[/cc]

※携帯サイトの場合はSJISかもしれません。

PHPのバージョン表示

PHPには特定のバージョンに存在する脆弱性が存在します。以下の部分を

[cc lang="bash"]
expose_php = On
[/cc]

以下のように変更し

[cc lang="bash"]
expose_php = Off
[/cc]

バージョン情報をクライアントに送信しないようにしましょう。

タイムゾーンの設定

以下の部分を

[cc lang="bash"]
;date.timezone =
[/cc]

以下のように書き換えましょう。

[cc lang="bash"]
date.timezone = Asia/Tokyo
[/cc]

動作確認

[cc lang="bash"]
sudo /var/www/html/index.php
[/cc]

以下のように記述します。

[cc lang="php"]
phpinfo();
[/cc]

キタ━━━━。゚+.ヽ(´∀`*)ノ ゚+.゚━━━━!!ドキュメント化に30分くらいかかってしまいましたが、上述の作業だけだったら10分でできるかと思います。自分で書いたタイトルですが「普通のウェブアプリケーション」って何をもってして普通なんでしょうね・・・

Post Navigation