Edited at

さくらVPSサーバーの初期設定とLAMP環境構築

More than 3 years have passed since last update.


書いてる人

プログラミング学習サービスやら、ペットサロン予約サービス、風俗検索サービスなど色々とやっている「かずきち」です。

■運営サービス一部

http://crazy-wp.com/

http://webukatu.com/

新宿のホストから不動産・保険の営業を経て、HTMLって何?という状態から3ヶ月独学でプログラミングやデザインを学び、IT業界で1年間実務経験を積んで年収は1本超え。現在は起業家としてサービス運営やら不動産運営をしています。

Qiita内にそれ系の記事も書いてます。

エンジニアで稼ぐために大切な13のコト

WEBサービスで起業したい人に読んで欲しい18のコト


さくらVPSに新しいユーザーを作成

サーバー契約したばかりだとユーザ名がrootのため、セキュリティ的によろしくないので新規作成する。

# useradd 好きなユーザ名

# passwd 好きなユーザ名
Changing password for user 好きなユーザ名.
New UNIX password:パスワード入力
Retype new UNIX password:パスワード再入力
passwd: all authentication tokens updated successfully.


作ったユーザがrootになるようにwheelグループに設定

wheel は root 権限を得られるユーザー グループ

# usermod -G wheel 好きなユーザ名


wheel グループに属するユーザへ、sudo を許可するよう設定

root になっている状態で visudo コマンドを実行する。

# visudo

vi が起動される。その中には、wheel の実行権限がコメントアウトされているので

## Allows people in group wheel to run all commands

# %wheel ALL=(ALL) ALL

2行目の「#」を削除して、コメントアウトを解除して保存。


パスを通す

sudo を通して実行するプログラムは、/usr/sbin や /usr/local/sbin に置かれていることが多いが、初期状態の一般ユーザーではこれらのパスが通っていないためコマンドを呼び出すときにいちいちフルパスで指定しないといけないので面倒。

そこで、パスを通してあげる。

「/home/ユーザ名/」の中に「.bash_profile」というファイルがあるのでviで開く。

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

となっているすぐ下に

PATH=$PATH:/sbin

PATH=$PATH:/usr/sbin
PATH=$PATH:/usr/local/sbin

を追加し保存し、再ログインする。


ポート番号を変更

SSH の接続に使っていたポート 22 番は一般的なポートとして知られているので、そのままにしておくと攻撃対象になる。

攻撃者は 22 番が空いていることがわかると、ユーザーとパスワードを総当たりで侵入を試みるので、対処の1つとしてポート番号を変更しておく。

# vi /etc/ssh/sshd_config

#Port 22
Port 10022

※3行目のポート番号は適当で構わない

変更したら、sshを再起動

# /etc/init.d/sshd restart

2 Stopping sshd: [ OK ]
3 Starting sshd:


CentOS の環境を日本語にする

デフォルトは英語表示になっているので、日本語表示モードに変更する。

$ sudo vi /etc/sysconfig/i18n

LANG="C"

になっているのを

LANG="ja_JP.UTF-8"

に変更する。


iptablesを使ってファイアウォールを設定する

使うポート以外は閉じておく。


iptablesがインストールされてるか確認

$ yum list installed | grep iptables

iptables.x86_64 1.3.5-5.3.el5_4.1 installed
iptables-ipv6.x86_64 1.3.5-5.3.el5_4.1 installed


現在のiptables設定を確認

$ sudo iptables -L

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination


フィルタリングする

今回はSSH、HTTP、FTP、MySQL だけをポート解放し、後は利用しないようにする。

HTTP は 80 番、FTP は 20 と 21 番、MySQL は3306 番を使う。


iptablesファイルを作成する

$ sudo vi /etc/sysconfig/iptables


ファイル内に以下を記述

*filter

:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH, HTTP, FTP1, FTP2, MySQL
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport XXXXX -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT


iptablesを再起動

$ sudo /etc/rc.d/init.d/iptables restart

Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: filter [ OK ]
Unloading iptables modules: [ OK ]
Applying iptables firewall rules: [ OK ]


設定されてるか確認

$ sudo iptables -L


Apacheのインストール

インストールされてるか確認

$ rpm -qa httpd

入ってないので、インストールする。

$ sudo yum -y install httpd

インストールされたか以下のコマンドで確認

$ rpm -qa httpd

$ httpd -v


Apacheの初期設定をする

yum でインストールした場合は自動的に apache というユーザーが作成されている。

$ cat /etc/passwd | grep apache

apache:x:48:48:Apache:/var/www:/sbin/nologin

シェルに /sbin/nologin (稼働専用)となっているので、このユーザをそのまま使用する。


httpd.confのバックアップをとる

$ sudo cp /etc/httpd/conf/httpd.conf $HOME


viでhttpd.confを開き編集する

$ sudo vi /etc/httpd/conf/httpd.conf


1: 44行目のWeb サーバーにアクセスしたクライアントに返す情報を変更する

デフォルトだとhttpレスポンスヘッダにOSの情報が載ることになるので、ハッカーに余計な情報を与えないように

「OS」になっている部分を「Prod」に変える。

これでレスポンスヘッダには Server: Apache しか返らない。

ServerTokens OS


2: 251行目の障害発生時にユーザへ表示する連絡先メアドを適当なアドレスに変更する

ServerAdmin root@localhost


3: 265行目のサーバー名を変更

「#」を外してコメントアウト解除し、サーバーのホスト名を書く。

DNS に登録していないなら IP アドレスを指定。

#ServerName www.example.com:80


4: 320行目のオプション設定を変更

Indexsが設定されていると、もしユーザーがページを開いた時にindex.htmlがなければファイル一覧ページが自動生成されてしまい、ハッカーにファイル構成が知られてしまうので、無効にする。

「Indexes」の前に「-」を加える

Options Indexes FollowSymLinks


5: 524行目のエラーページなどに出力されるサーバー情報を変更

これも情報を与えすぎない様に「Off」にしておく。

ServerSignature On

以上変更したら保存し、設定に問題ないか確認。

$ sudo apachectl configtest

Syntax OK


Apacheを起動する

$ sudo service httpd start

httpd を起動中: [ OK ]

サイトにアクセスしてテストページが表示されればOK。

最後にOS起動時にApacheも自動で起動されるようにする。

$ sudo chkconfig httpd on

$ chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off


MySQLをインストールする

$ sudo yum -y install mysql-server

インストールされたか確認する。

$ rpm -qa mysql-server

mysql-server-5.1.71-1.el6.x86_64


文字コードを設定する

UTF-8にする。

my.cnfファイルをHOMEディレクトリにバックアップしてから、

元ファイルを開く。

$ cd $HOME

$ cp /etc/my.cnf .
$ sudo vi /etc/my.cnf

以下のように記述

[mysqld]

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# character-set
default-character-set=utf8
skip-character-set-client-handshake

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8
"/etc/my.cnf" 23L, 446C

保存する。


自動起動にする

Apacheと同じくOS起動時に自動起動するように設定する。

$ sudo chkconfig mysqld on

$ chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off


MySQLを起動する

$ sudo /etc/rc.d/init.d/mysqld start


rootユーザにパスワードを設定する

データベース操作の全権限を持っているrootユーザにパスワードを設定する

$ sudo mysqladmin -u root password パスワード

rootユーザでログインする

$ mysql -u root -p

パスワード求められるのでさっき設定したパスワードを入れればOK。

「quit」と入力し、ログアウトする。

※実際に運用する時にはrootユーザーのままにせず、新規でユーザー作って権限を制限しないとハッキングされてユーザ権限を奪われた時に被害が大きくなるので注意


PHPをインストールする

画像合成などに使えるgdやpearなどのライブラリもインストールしておく。

sudo yum -y install php php-mbstring php-mcrypt php-mysql php-pear php-gd

php.iniを編集


タイムゾーンを日本時間にする

下記に変える



date.timezone = “Asia/Tokyo”


Subversion(SVN)をインストールする

$ sudo yum -y install subversion

バージョン確認する

$ svn --version --quiet


リポジトリを作成する


全てのリポジトリのルートになるディレクトリを作成

$ sudo mkdir /var/lib/svn


リポジトリを作成する

リポジトリ名は適当に。(今回の場合は、「sample」というリポジトリを作成)

$ sudo svnadmin create /var/lib/svn/sample


所有者を変更する

作成されたレポジトリ内のファイルやフォルダは、初期状態では root 所有となっている。

Apache 経由でリポジトリにアクセスしたい場合、Apache の実行ユーザーから読み書きできるように所有者を変更しておく。

$ sudo chown -R apache:apache /var/lib/svn/owl

確認する。

$ sudo chown -R apache:apache /var/lib/svn/owl

$ ls -l /var/lib/svn/owl


mod_dav_svn のインストールと設定

Apache 経由で Subversion のリポジトリを操作でき、Subversion 専用のポートを開放する必要もない。WebDAV を利用して公開することになるので、ブラウザからもリポジトリを表示できるので便利。


インストール

$ sudo yum -y install mod_dav_svn


専用のconfファイルを追加

$ sudo vi /etc/httpd/conf.d/svn.conf

以下のように編集

<Location /svn>

DAV svn
SVNParentPath /var/lib/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/httpd/conf.d/svn_auth
Require valid-user
</Location>

Location ディレクティブにはリポジトリのルートを指定し、3 行目のリポジトリ指定もルートとしている。この指定の場合、すべてのリポジトリに同じ設定が適用される。リポジトリを追加した場合でも conf ファイルの変更や Apache の再起動が不要なので便利である。

リポジトリごとに設定を分ける場合は、ディレクティブの指定を /svn/リポジトリ名として、SVNParentPath の代りに SVNPath、内容はリポジトリへのパスとする。

4 行目以降は BASIC 認証に関する設定となる。これをおこなっておくことで、ブラウザなどからリポジトリにアクセスしたとき、ユーザーとパスワードによる保護をおこなえる。


パスワードファイルを作成

svn.conf の 6 行目に指定したパスに touch コマンドでファイルを用意し、パスワード設定をおこなう。USERNAME の部分は SVN のリポジトリにアクセスするユーザー。

$ sudo touch /etc/httpd/conf.d/svn_auth

$ sudo htpasswd /etc/httpd/conf.d/svn_auth USERNAME
New password: XXXXXX
Re-type new password: XXXXXX
Adding password for user USERNAME


Apacheの設定確認と再起動

$ sudo apachectl configtest

Syntax OK
$ sudo service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]

http://XXX.XXX.XXX.XXX/svn/リポジトリ名 で入れるか確認。


phpMyAdminをインストールする

MySQLをブラウザ上から簡単に管理できるので便利。

$ wget http://www.phpmyadmin.net/home_page/downloads.php/phpMyAdmin-4.1.4-all-languages.tar.gz

                 ・

                 ・

                 ・

                続く


WEBプログラミングから起業までを一貫して学べるオンライン動画総合学習サービス『ウェブカツ!!』

様々なプログラミング学習サイトやサービスでは正直な所、自分でWEBサービスを作れるようにはならないため、「自分でWEBサービスを作れるようになる!」をゴールとしたオンライン動画総合学習サービス『ウェブカツ!!』を立ち上げました。興味ある方は登録よろしくお願いいたします。

http://webukatu.com/

  • MySQLをインストールする
  • PHPをインストールする
  • Subversion(SVN)をインストールする
  • mod_dav_svn のインストールと設定
  • phpMyAdminをインストールする
  • WEBプログラミングから起業までを一貫して学べるオンライン動画総合学習サービス『ウェブカツ!!』