VirtualBox php5.6 LAMP環境の構築

VirtualBox CentOS 7 に LAMP(php5.6)環境を構築する手順について

1. Apacheのインストール
yum -y install httpd
httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: Nov 19 2015 21:43:13


2.MySQL Community Serverのインストール
無料で利用できる MySQL Community Server を利用。
MySQLyum installコマンドでインストールするが、MySQLCentOS/RHELyumリポジトリにはない。
MySQLyumでインストールするには、MySQL公式のyumリポジトリを追加必要がある。

MySQLリポジトリの追加を以下のコマンドにより実行
yum -y install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

 

リポジトリをインストールできたらMySQL Community Serveをインストール。
パッケージ名はmysql-server or mysql-community-server
yum -y install mysql-server
yum -y install mysql-community-server
mysqld --version
mysqld Ver 5.6.28 for Linux on x86_64 (MySQL Community Server (GPL))

/etc/my.conf に以下設定を追記。
MySQLのデフォルト文字コードUTF-8に設定しておく事。
また、ストレージエンジンはInnoDBを使用する事。
**********************************************************
[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

#log=/var/log/mysql.log

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

innodb_file_per_table
innodb_buffer_pool_size=64M
innodb_log_file_size=16M
innodb_log_files_in_group=2

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


3.PHP5.6のインストール
epelとremiのリポジトリを追加。
*CentOS 6.5 (6系)用
rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

*CentOS 7.0用
rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/7/x86_64/e/epel-release-7-9.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

yum listでphp5.6がインストールできるか確認。
yum list --enablerepo=remi --enablerepo=remi-php56 | grep php

php5.6をインストール
yum install --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof

php.ini の timezone 設定
vim /etc/php.ini
date.timezone = Asia/Tokyo
cp /usr/share/zoneinfo/Japan /etc/localtime


その他のパッケージをインストール
yum -y install fping iksemel net-snmp-libs openldap curl unixODBC OpenIPMI-libs libssh2


Apacheを起動
service httpd start

 

mysqlを起動
service mysqld start


chkconfig設定
chkconfig httpd on
chkconfig mysqld on

PHP Framework Laravelのインストール

1. Composerのインストール

ライブラリの依存関係を管理するツール
あるライブラリをインストールする前に、特定のライブラリをインストールしなければいけないなどの、
依存関係を自動的にインストールしてくれる便利なツール

curl -sS https://getcomposer.org/installer | php

mv composer.phar /usr/local/bin/composer

 

2. php-mcryptをインストールしておく

Laravelをインストールを試みた際、php-mcryptがインストールさせていないと、

Laravelのインストールが正常に終了せず、ブラウザからHTTPアクセスを行うと

以下のようなエラーメッセージが出てしまう。

…vendor/autoload.php): failed to open stream: No such file or directory 

 

このエラーメッセージの解決策として、以下のコマンドを実行し、

php-mcryptを事前にインストールしておくこと。

yum install --enablerepo=remi,epel,ius php-mcrypt

 

3. Laravelのインストール

Composer Create-Projectによるインストール

/var/www/html/hoce.co.jp/laravel 配下にLaravelがインストールされる

composer create-project laravel/laravel /var/www/html/hoge.co.jp/laravel --prefer-dist

 

Laravelではパーミッションの設定が必要。
storageとvendorフォルダー下にapacheユーザーからの書き込み権限を設定しておく。

chmod -R 777 /var/www/html/hoge.co.jp/laravel/storage

 

 

Mecabのインストール

1. MeCabのインストール

wget https://mecab.googlecode.com/files/mecab-0.996.tar.gz
tar zxfv mecab-0.996.tar.gz
cd mecab-0.996
./configure --enable-utf8-only
make
make install

 

2. 標準辞書 IPAdicのインストール

wget http://sourceforge.net/projects/mecab/files/mecab-ipadic/2.7.0-20070801/mecab-ipadic-2.7.0-20070801.tar.gz
tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801
./configure --with-mecab-config=/usr/local/bin/mecab-config --prefix=/usr/local/ --with-charset=utf8
make
make install

 

MeCab用の辞書が存在する事を確認

more /usr/local/etc/mecabrc 

 

3. php_mecabのインストール

wget https://github.com/downloads/rsky/php-mecab/php-mecab-0.5.0.tgz
tar xzvf php-mecab-0.5.0.tgz
cd php-mecab-0.5.0
phpize
./configure --with-php-config=/usr/bin/php-config --with-mecab=/usr/local/bin/mecab-config
make

make test
make install

 

以下のようなメッセージが表示される

Installing shared extensions:     /usr/lib64/php/modules/

 

以下のコマンドでmecab.soというファイルができていることを確認
ls -l /usr/lib64/php/modules/mecab.so

 

mecab.soを追加

vim /etc/php.ini

extension=mecab.so

 

4. Apache 再起動

 service httpd restart

AWS EC2 php5.4 LAMP環境の構築

1. データベースサーバなどの関連ソフトウェアのインストール

 mysql-serverパッケージがインストールされていない場合は、以下コマンドを実行。

 yum -y install mysql-server

 

  MySQLのデフォルト文字コードを UTF-8に設定しておく事。

  また、ストレージエンジンはInnoDBを使用する事。

 

/etc/my.conf に以下設定を追記。

**********************************************************  

[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

#log=/var/log/mysql.log

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

innodb_file_per_table
innodb_buffer_pool_size=64M
innodb_log_file_size=16M
innodb_log_files_in_group=2

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

**********************************************************  

 

その他のパッケージをインストール

yum -y install mysql fping iksemel net-snmp-libs openldap curl unixODBC OpenIPMI-libs libssh2

 

2. Apacheのインストール

   yum install httpd24

 

3. PHPのインストール

yum -y install php54 php54-gd php54-bcmatch php54-mysql php54-mbstring php54-xml

 

php.ini の timezone 設定   

vim /etc/php.ini

date.timezone = Asia/Tokyo 

cp /usr/share/zoneinfo/Japan /etc/localtime

 

1GBのswap領域を作成
dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
swapon /swapfile

 

Apacheの起動

service httpd start

 

FTPサーバー構築

FTPサーバーの構築手順を記す。

vsftpd インストール

yum -y install vsftpd

 

vsftpdを起動

service vsftpd start

chkconfig vsftpd on

chkconfig --list vsftpd

 

iptablesの 20,21番ポートが開いているのを確認

iptables -vnL

 

パケットフィルタリングに関する設定を施す。 

vim /etc/sysconfig/iptables-config

IPTABLES_MODULES=""

  ↓

IPTABLES_MODULES="ip_conntrack_ftp"

 

iptables を再起動

service iptables restart

 

 

FTP ログイン・ユーザーの制限

FTP接続ユーザーの設定を行う。

etc/vsftpd/ftpusers に設定したユーザーは、FTPでログインすることが不可である。

デフォルトでは、root や nobody などがFTPでログインできないように設定されている。

また、/etc/vsftpd/user_list というユーザーを設定するリストも存在する。

これはデフォルトでは、/etc/vsftpd/ftpusers と同様にブラックリストとして機能する。

しかし、/etc/vsftpd/vsftpd.conf に以下のように記述するとホワイトリストとなる

 

vim /etc/vsftpd/vsftpd.conf

userlist_enable=YES

  ↓

userlist_enable=YES

userlist_deny=NO

userlist_file=/etc/vsftpd/user_list

 

匿名ログインを拒否

anonymous_enable=YES

  ↓

anonymous_enable=NO

 

上記設定をすると/etc/vsftpd/user_list がホワイトリストとして機能する。

userlist_deny=NO(拒否するユーザーリストを拒否=許可するユーザーリストして使う)という設定になる。

 

また、/etc/vsftpd/user_listをホワイトリストとして使用しても、

/etc/vsftpd/ftpusers がブラックリストとして機能することは変わらない。

つまり、/etc/vsftpd/ftpusers に記されたユーザーはFTPログインができない。

 

chrootFTPログイン時にユーザー自身のディレクトリのみを見せる)を有効にする。

#chroot_list_enable=YES

  ↓

chroot_local_user=YES

 

FTPログの保存先を指定する

#xferlog_file=/var/log/xferlog

  ↓

xferlog_file=/var/log/vsftpd.log

 

ホワイトリスト作成

vi /etc/vsftpd/user_list

username

 

FTPログインを許可するユーザーを設定。

vsftpdを再起動

service vsftpd restart

 

FTPクライアントから接続時のエラー対応

下記エラーが表示された時は、SELinuxを無効にし、サーバーを再起動する。

500 OOPS: cannot change directory:/home/username

 

vim /etc/sysconfig/selinux

#SELINUX=enforcing

SELINUX=disabled

 

サーバー再起動を実行

shutdown -r now

 

再度FTP接続が行い、接続可能になった事を確認。

 

SSL 証明書発行

特定ドメインにてhttps(443)アクセスを可能にしたい場合のApache設定手順

 

1. mod_sslの確認とインストール

mod_sslがインストールされているかを確認

rpm -qa mod_ssl

 

何も表示されない場合には mod_ssl のインストールを実行

yum install mod_ssl

 

インストール後、ssl.conf ファイルの存在を確認

ll /etc/httpd/conf.d/

-rw-r--r--. 1 root root  392  8月 14 02:30 2013 README

-rw-r--r--. 1 root root  990  3月  6 00:09 2014 php.conf

-rw-r--r--  1 root root 9473  8月  2 20:59 2013 ssl.conf

-rw-r--r--. 1 root root  299  8月  2 20:59 2013 welcome.conf

 

 

1. keyファイル作成

mkdir /etc/httpd/ssl

cd ssl/

keyファイル作成

openssl genrsa -des3 2048 > hogehoge.co.jp.key

Enter pass phrase: (パスフレーズ入力)

Verifying - Enter pass phrase: (パスフレーズ入力)

 

パスフレーズ解除

openssl rsa -in hogehoge.co.jp.key -out hogehoge.co.jp.key    

Enter pass phrase for hogehoge.co.jp.key:(パスフレーズ入力)

writing RSA key

 

 

2. csrファイル作成

csrファイル作成

openssl req -new -key hogehoge.co.jp.key -out hogehoge.co.jp.csr

 

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:JP

State or Province Name (full name) :Tokyo     

Locality Name (eg, city) [Default City]:Bunkyo

Organization Name (eg, company) [Default Company Ltd]:hoge Inc.

Organizational Unit Name (eg, section) :

Common Name (eg, your name or your server's hostname) :hogehoge.co.jp

Email Address :

 

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password :

An optional company name :

 

 

3. crtファイル作成

openssl x509 -req -in hogehoge.co.jp.csr -signkey hogehoge.co.jp.key -out hogehoge.co.jp.crt

Signature ok

subject=/C=JP/ST=Tokyo/L=Bunkyo/O=hogehoge.co.jp Inc./CN=hogehoge.co.jp

Getting Private key 

 

 

4. Apache confファイル作成

vim /etc/httpd/conf.d/hogehoge.co.jp.conf

<VirtualHost *:443>

    ServerName hogehoge.co.jp:443

    DocumentRoot "/var/www/html/hogehoge.co.jp/htdocs"

    ErrorLog logs/hogehoge.co.jp-ssl_error.log

    TransferLog logs/hogehoge.co.jp-ssl_access.log

    LogLevel warn

    SSLEngine on

    SSLProtocol all -SSLv2

    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW

 

    SSLCertificateFile /etc/httpd/ssl/hogehoge.co.jp.crt

    SSLCertificateKeyFile /etc/httpd/ssl/hogehoge.co.jp.key

    <Files ~ "\.(cgi|shtml|phtml|php3?)$">

        SSLOptions +StdEnvVars

    </Files>

    <Directory "/var/www/cgi-bin">

        SSLOptions +StdEnvVars

    </Directory>

 

    SetEnvIf User-Agent ".*MSIE.*" \

            nokeepalive ssl-unclean-shutdown \            downgrade-1.0 force-response-1.0

 

    CustomLog logs/ssl_request_log \

         "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

 

 

 

5. iptables 443ポート解放

vim /etc/sysconfig/iptables

-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

service iptables restart

iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]

iptables: ファイアウォールルールを消去中:                  [  OK  ]

iptables: モジュールを取り外し中:                             [  OK  ]

iptables: ファイアウォールルールを適用中:                    [  OK  ]

 

443 ポートが解放された事を確認

netstat -lntp

 

 

6. Apache 再起動

service httpd configtest

service httpd restart

 

7. KEYの確認

openssl rsa -text -noout -in hogehoge.co.jp.key

 

7. CSRの確認

openssl req -text -noout -in hogehoge.co.jp.csr

 

9. CRTの確認

openssl x509 -text -noout -in hogehoge.co.jp.crt

 

 

 

su / sudo 権限の設定

≪suコマンドの実行可能ユーザーを制限≫

suコマンドは system グループに所属するユーザーのみが実行出来るように設定する。

 

system グループを作成する

groupadd system

作成された事を確認

grep "system" /etc/group

 

system グループに kmurakoshi ユーザーを追加

usermod -G system kmurakoshi

grep "system" /etc/group

 

/etc/login.defsの編集

/etc/login.defsに以下の行を追記してsuコマンドの制限を有効にする。

vim /etc/login.defs

SU_WHEEL_ONLY yes

 

/etc/pam.d/suの編集

suコマンド実行可能なグループ(system)を設定

vim /etc/pam.d/su

#auth       required      pam_wheel.so use_uid

 ↓ 

auth       required      pam_wheel.so use_uid group=system

 

/etc/groupの編集

/etc/groupの system に、suコマンドの実行を許可するユーザー(kmurakoshi)を追加。

vim /etc/group

system:x:1001:root,kmurakoshi

 

変更した設定を有効にするために、システムを再起動。

shutdown -r now

 

設定確認用のテストユーザー作成

useradd hoge

passwd hoge

 

suコマンド実行可能なユーザー(kmurakoshi)

[kmurakoshi@localhost ~]$ su -

Password:

[root@localhost ~]#

 

suコマンド実行不可能なユーザー(hoge)

[hoge@localhost ~]$ su -

Password:

su: incorrect password

[hoge@localhost ~]$

 

 

≪sudo 権限の設定≫

sudoコマンドは system,manager グループに所属するユーザーのみが実行出来るように設定する。

manager グループを作成する

groupadd manager

作成された事を確認

grep "manager" /etc/group

 

manager ユーザーを作成

useradd manager

passwd manager

 

manager グループに manager ユーザーを追加

usermod -G manager manager

grep "manager" /etc/group

 

/etc/sudoers を visudo コマンドから編集

%manager        ALL=(ALL)       ALL

 %system         ALL=(ALL)       ALL

 

su権限を禁止した場合には以下のような設定を施す

Cmnd_Alias NOTSU = /bin/su

 %manager        ALL=(ALL)       ALL,!NOTSU

 

変更した設定を有効にするために、システムを再起動。

shutdown -r now

 

ユーザーにPATH を通しておく。

su - kmurakoshi

vim .bash_profile

PATH=$PATH:$HOME/bin/

 ↓

PATH=$PATH:$HOME/bin:/sbin:/usr/sbin/

source .bash_profile

 

sudo コマンドの実行確認

su - kmurakoshi

[kmurakoshi@localhost ~]$ sudo service httpd restart

Password: (passwd で設定したパスワードを入力)

Stopping httpd:                                            [  OK  ]

Starting httpd:                                            [  OK  ]