2017年9月13日 CentOS7.4 (1708) がリリースされました。RHEL7.4のリリースから約40日でのリリースになります。前バージョンCentOS7.3(1611)のリリースからは9ヶ月ぶりのバージョンアップです。今回のバージョンアップの目玉はなんといっても OpenSSL 1.0.2 の導入です。これにより ALPN がサポートされましたので WEBサーバーの HTTP/2 対応がやりやすくなりました。また、SSH1.0 や SSL2.0 など古い暗号アルゴリズムやプロトコルが廃止されセキュリティが強化されています。さっそく、CentOS7.4 で LAMP構成をインストールする手順をメモしておきました。
(関連記事)HTTP/2 に対応した Apache を yum でインストール
- CentOS 7.4 (1708) リリースノート
- CentOS 7.4 (1708) のダウンロード
- マシン構成
- CentOS 7.4 (1708) のインストール
- ネットワーク関連設定
- 基本パッケージのインストール
- yum アップデート
- 不要サービスの停止
- SELinux無効設定
- firewalld設定
- Chrony設定(NTP)
- Gmailリレー設定
- yum リポジトリの追加
- 各種ミドルウェアインストール
- Apache httpd の設定
- 自己署名のサーバー証明書の作成(HTTPS用)
- Apache HTTPS(SSL/TLS)の設定
- PHPの設定
- Memcachedの設定
- MySQL 5.7 の設定
- ログローテーション設定
- 自動起動の設定確認
CentOS 7.4 (1708) リリースノート
CentOSのリリースノートを見ると、タイトルに「7.4」という表記は無く、CentOS-7 (1708) となっていますが、この記事では都合上、CentOS7.4 と表記しています。
CentOS 7.4 (1708) のダウンロード
はじめに、CentOSのダウンロードページから CentOS-7-x86_64-DVD-1708.iso をダウンロードしておきます。
マシン構成
○仮想マシン構成
メモリ:1024MB
○ネットワークデバイス
アダプター1:NAT
アダプター2:ホストオンリーアダプター
○ネットワーク構成(※ご自分の環境に書換えてください)
ホスト名: centos74
IPアドレス:192.168.56.201/24
DNSサーバ: 8.8.8.8
CentOS 7.4 (1708) のインストール
[CentOS 7]
[↑]キーで「Install CentOS 7」を選択して、エンターを押します
[WELCOME TO CENTOS 7.]
「日本語 Japanese」「日本語」を選択して「続行」をクリックします
[インストールの概要]
「インストール先」をクリックし、インストール先のデバイスを選択して「完了」
上記の設定が済んだら「インストールの開始」をクリック
パーティションの作成とインストールが開始します
[ユーザーの設定]
「rootパスワード」をクリックし、パスワードを設定したら「完了」
~~~ インストールが完了するまでしばらく待ちます ~~~
[完了しました!]
「再起動」をクリックします
ネットワーク関連設定
NICの設定
・ネットワークデバイス名の確認
nmcli dev s
DEVICE TYPE STATE CONNECTION enp0s3 ethernet disconnected -- enp0s8 ethernet disconnected --
アダプター1(NAT)は「enp0s3」、アダプター2(ホストオンリーアダプター)は「enp0s8」がネットワークデバイス名です。 ネットワークデバイス名は、環境によって異なるようです。ご自分の環境にあわせて設定してください。
アダプター1(NAT)の設定
アダプター2(ホストオンリーアダプター)の設定(設定が反映されるまで1分ほどかかります)
nmcli con mod enp0s8 ipv4.addresses "192.168.56.201/24"
nmcli con mod enp0s8 ipv4.method manual
上記設定で sshログインができるようになります。※DNSサーバの設定前のため、ログインに時間がかかることがあります
DNSサーバの設定
手動で設定するため、DHCPでのDNSサーバ設定を無効にします。
DNSサーバを設定し、NetworkManager を再起動します
systemctl restart NetworkManager
・DNSサーバが設定されていることを確認します
cat /etc/resolv.conf
nameserver 8.8.8.8
ホスト名の設定
ホスト名「centos74」を設定し、hostnamed を再起動します
systemctl restart systemd-hostnamed
基本パッケージのインストール
開発ツールなど、基本的なパッケージをインストールしておきます。
yum -y groupinstall development
yum -y groupinstall network-tools
yum アップデート
インストール済みのパッケージを、最新版にアップデートします。
不要サービスの停止
下記のコマンドを実行
systemctl disable abrt-oops
systemctl disable abrt-vmcore
systemctl disable abrt-xorg
systemctl disable abrtd
systemctl disable atd
systemctl disable auditd
systemctl disable avahi-daemon
systemctl disable kdump
systemctl disable mdmonitor
systemctl disable dmraid-activation
SELinux無効設定
・下記を変更
vim /etc/sysconfig/selinux
↓
SELINUX=disabled
OSを再起動します
firewalld設定
・現在の設定の確認
firewall-cmd --list-all
interfaces: enp0s3 enp0s8
sources:
services: dhcpv6-client ssh
(略)
初期設定では publicゾーンに ssh のみ許可されています。
追加で HTTP(80/tcp) と HTTPS(443/tcp) を許可しておきます
firewall-cmd --add-port=443/tcp --permanent
設定を読込みます
・設定を確認します
firewall-cmd --list-ports --zone=public
-----(以下のような表示があればOK)-----
Chrony設定(NTP)
初回は手動で時間合わせをします
オリジナルのコンフィグをバックアップ
・コンフィグを作成
vim /etc/chrony.conf
server ntp.nict.jp
server ntp.nict.jp
起動
自動起動設定
・10分ほど経過したら動作を確認します。
chronyc sources -v
-----(以下のような表示があればOK)-----
^- ntp-b2.nict.go.jp 1 6 77 61 +1423us[+1423us] +/- 3830us
^* ntp-a2.nict.go.jp 1 6 77 62 +269us[ +547us] +/- 4458us
Gmailリレー設定
・GmailのSMTP認証情報ファイルの作成
vim /etc/postfix/gmail
パスワードを書いているので、パーミッションを変更(root のみアクセス可)
PostfixのDBファイルを生成
・Postfixの設定
vim /etc/postfix/main.cf
-----(下記を最終行に追加)-----
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/gmail
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes
設定した内容を読込みます
・root宛メールの送信先を変更します
vim /etc/aliases
-----(下記を最終行に追加)-----
メールエイリアスのDBファイルを更新します
root宛のメールが、Gmailのアドレスに届くことを確認します
yum リポジトリの追加
EPEL
Remi
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
MySQL
・Remi リポジトリを有効化
vim /etc/yum.repos.d/remi.repo
(略)
enabled=0
↓
enabled=1
vim /etc/yum.repos.d/remi-php71.repo
(略)
enabled=0
↓
enabled=1
【補足】
現時点で一番サポート期間の長いPHP7.1をインストールします。PHP5.6をインストールしたい場合は、remi-php56 リポジトリを有効にしてください。
vim /etc/yum.repos.d/remi.repo
(略)
enabled=0
↓
enabled=1
▽ PHP: Supported Versions
http://php.net/supported-versions.php
各種ミドルウェアインストール
※バージョンは2017年9月15日時点のものです。
Apache httpd(2.4.6-67)
yum -y install mod_ssl
PHP(7.1.9-1)
yum -y install php-devel
yum -y install php-pdo
yum -y install php-mysqlnd
yum -y install php-mbstring
yum -y install php-mcrypt
yum -y install php-gd
yum -y install php-pear
yum -y install php-pecl-apc-devel
yum -y install zlib-devel
MySQL(5.7.19-1)
yum -y install mysql-server
Memcached(1.5.1-1)
yum -y install php-pecl-memcache
Apache httpd の設定
不要なコンフィグを読込まないようにしておきます。
mv -i /etc/httpd/conf.d/userdir.conf /etc/httpd/conf.d/userdir.conf.org
mv -i /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.org
オリジナルのコンフィグをバックアップ
・コンフィグを作成します。
vim /etc/httpd/conf/httpd.conf
起動
自動起動設定
自己署名のサーバー証明書の作成(HTTPS用)
秘密鍵の作成
・CSR(証明書署名要求)の作成(入力するのは2箇所だけです)
openssl req -new -key server.key > server.csr
State or Province Name (full name) []:<空エンター>
Locality Name (eg, city) [Default City]:<空エンター>
Organization Name (eg, company) [Default Company Ltd]:<空エンター>
Organizational Unit Name (eg, section) []:<空エンター>
Common Name (eg, your name or your server's hostname) []: www.example.com
Email Address []:<空エンター>
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<空エンター>
An optional company name []:<空エンター>
自己署名のサーバー証明書の作成(有効期限10年)
秘密鍵とサーバー証明書を適切な場所に移動
mv -i server.crt /etc/pki/tls/certs/
パーミッションを変更
chmod 600 /etc/pki/tls/certs/server.crt
CSRを削除
Apache HTTPS(SSL/TLS)の設定
SSL設定ファイルのオリジナルをバックアッップします
SSL設定ファイルを作成します。
vim /etc/httpd/conf.d/ssl.conf
(関連記事)「安全な SSL/TLS 設定にするための10のポイント(Apache httpd 2.4)」
設定ファイルを再読込します
WEBブラウザで HTTPSで接続できることを確認します(自己署名のサーバー証明書の場合は警告が表示されます)
PHPの設定
エラーログの出力先を作成
chown apache /var/log/php
chmod 755 /var/log/php
・PHPの設定
vim /etc/php.ini
↓
expose_php = Off
;date.timezone =
↓
date.timezone = 'Asia/Tokyo'
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
↓
error_reporting = E_ALL & ~E_NOTICE
;error_log = php_errors.log
↓
error_log = "/var/log/php/php_errors.log"
・セッションの保存先をmemcacheに設定
vim /etc/php.d/40-memcache.ini
↓
session.save_handler=memcache
;session.save_path="tcp://localhost:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
↓
session.save_path="tcp://localhost:11211"
vim /etc/httpd/conf.d/php.conf
php_value session.save_path "/var/lib/php/session"
↓
#php_value session.save_handler "files"
#php_value session.save_path "/var/lib/php/session"
Memcachedの設定
vim /etc/sysconfig/memcached
運用で様子をみて適度に変更(CACHESIZEの単位はMBです)
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
起動
systemctl reload httpd
自動起動設定
MySQL 5.7 の設定
ログの出力先を作成
chown -R mysql:mysql /var/log/mysql
オリジナルのコンフィグをバックアップします
・コンフィグを作成します。
vim /etc/my.cnf
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow_query.log
long_query_time=1
min_examined_row_limit=1000
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
log_timestamps=SYSTEM
explicit_defaults_for_timestamp=TRUE
skip-character-set-client-handshake
character-set-server=utf8
MySQL5.7.4から5.7.10までは、パスワードの有効期限のデフォルト値が360日でしたが、これには問題があったため(Bug #77277)MySQL5.7.11以降、有効期限のデフォルト値が「default_password_lifetime=0」となり無期限になりました。
7.3.6 Password Expiration Policy | MySQL 5.7 Reference Manual
起動
自動起動設定
・root の初期パスワードの確認
grep password /var/log/mysql/mysqld.log
セキュリティ設定
これから設定するパスワードは、8文字以上、英数大文字小文字と記号が含まれていないとポリシー違反で弾かれてしまいます。オススメはしませんが PasswordValidationプラグインを外してポリシーを無効にすることもできます。
6.1.2.5 The Password Validation Plugin | MySQL 5.7 Reference Manual
mysql_secure_installation
対話式で設定が始まります。(不要なユーザやDBを削除してくれます)
Enter password for user root: <初期パスワード>
The existing password for the user account root has expired. Please set a new password.
New password: <パスワード>
Re-enter new password: <パスワード>
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : <空エンター>
(略)
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
(略)
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
(略)
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
(略)
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.
All done!
MySQL5.7は、いくつかの設定デフォルト値が変わっていますので、リファレンスマニュアルを確認しておくことをオススメします。
5.1.4 Server System Variables | MySQL 5.7 Reference Manual
ログローテーション設定
設定ファイルのバックアップ用ディレクトリを作成しておきます。
Apacheログのローテーション設定
オリジナルの設定ファイルをバックアップします
・設定ファイルを作成します
vim /etc/logrotate.d/httpd
/var/log/httpd/*log /var/log/php/*log { daily missingok dateext rotate 60 create 644 apache apache sharedscripts postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript }
・確認します
logrotate -dv /etc/logrotate.d/httpd
-----(下記のような表示であればOKです)-----
Handling 1 logs
rotating pattern: /var/log/httpd/*log /var/log/php/*log after 1 days (60 rotations)
empty log files are rotated, old logs are removed
(略)
MySQLログのローテーション設定
オリジナルの設定ファイルをバックアップします
・設定ファイルを作成します
vim /etc/logrotate.d/mysql
/var/log/mysql/*log { daily missingok dateext rotate 60 sharedscripts postrotate if test -x /usr/bin/mysqladmin && \ /usr/bin/mysqladmin --defaults-extra-file=/root/.my.cnf ping &>/dev/null then /usr/bin/mysqladmin --defaults-extra-file=/root/.my.cnf flush-logs fi endscript }
・MySQL の root ユーザのパスワードファイルを作成
vim /root/.my.cnf
user=root
password="<パスワード>"
パスワードを書いているのでパーミッションを変更
chmod 600 /root/.my.cnf
・確認します
logrotate -dv /etc/logrotate.d/mysql
-----(下記のような表示であればOKです)-----
Handling 1 logs
rotating pattern: /var/log/mysql/*log after 1 days (60 rotations)
empty log files are rotated, old logs are removed
(略)
自動起動の設定確認
systemctl list-unit-files | grep -e httpd -e mysqld -e memcached -e chronyd
-----(下記のような表示であればOKです)-----
httpd.service enabled
memcached.service enabled
mysqld.service enabled
mysqld@.service disabled
一度OSを再起動して、各種サービスが起動している事を確認しましょう。
ps aux | grep -e httpd -e mysqld -e memcached -e chronyd
以上です。設定お疲れ様でした!
コメント