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 を利用。
MySQLもyum installコマンドでインストールするが、MySQLはCentOS/RHELのyumリポジトリにはない。
MySQLをyumでインストールするには、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
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
Laravelをインストールを試みた際、php-mcryptがインストールさせていないと、
Laravelのインストールが正常に終了せず、ブラウザからHTTPアクセスを行うと
以下のようなエラーメッセージが出てしまう。
…vendor/autoload.php): failed to open stream: No such file or directory
このエラーメッセージの解決策として、以下のコマンドを実行し、
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
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を追加
extension=mecab.so
4. Apache 再起動
service httpd restart
AWS EC2 php5.4 LAMP環境の構築
1. データベースサーバなどの関連ソフトウェアのインストール
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 設定
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ログインができない。
chroot(FTPログイン時にユーザー自身のディレクトリのみを見せる)を有効にする。
#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
#SELINUX=enforcing
SELINUX=disabled
サーバー再起動を実行
shutdown -r now
再度FTP接続が行い、接続可能になった事を確認。
SSL 証明書発行
特定ドメインにてhttps(443)アクセスを可能にしたい場合のApache設定手順
1. mod_sslの確認とインストール
mod_sslがインストールされているかを確認
何も表示されない場合には 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ファイル作成
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ポート解放
-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)
Password:
su: incorrect password
≪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
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 ]