いち早くRocky Linuxでサーバ構築を試す

Rocky Linux は、 Red Hat Enterprise Linux (RHEL)と互換性を持つLinuxディストリビューションです。CentOSの代替えディストリビューションとしてリリースされました。
本稿ではサーバとしては定番とも言える、LAMP環境を構築し、CMSとして有名なWordPressを構築してみます。

Rocky Linuxをインストールしよう

Rocky Linuxをダウンロードしよう

本稿執筆時点でRocky Linux 8.4がダウンロード可能です。予め、こちらのリンクからダウンロードしておきます。本稿では「Minimal」をダウンロードしました。

VirtualBoxの設定をしよう

本稿では「VirtualBox」を使用して、仮想環境上にRocky Linuxをインストールします。

[新規]ボタンをクリックします。

[名前とオペレーティングシステム]の[名前]に任意の名称を入力します。私は「Rocky Linux」としました。
[タイプ]が「Linux」となっていることを確認します。
[メモリーサイズ]はホストマシンのメモリサイズに応じて2〜4GB程度割り当てます。
[仮想ハードディスクを作成する]にチェックが入っていることを確認します。
最後に[作成]ボタンをクリックします。

次の画面で[作成]をクリックします。

左ペインからLocky Linuxの仮想マシンを選択し、[設定]ボタンをクリックします。

VirtualBoxにOSのタイプとディストリビューションを設定します。Rocky Linuxと互換性のあるディストリビューションは「Red Hat」です。
左ペインから[一般]を選択し、[基本]タブの[タイプ]を[Linux]とします。
[バージョン]はプルダウンメニューから[Red Hat(64-bit)]を選択します。

CPUの割当を行います。
左ペインから[システム]を選択し、[プロセッサー]タブをクリックして[プロセッサー数]を変更します。私は「2」としました。

インストールするRocky LinuxのISOイメージを指定します。
左ペインの[ストレージ]をクリックします。
次に中央の[コントローラー:IDE]にある「空」の光学ドライブアイコンをクリックします。
右ペインの[属性]領域にある光学ドライブアイコンをクリックし、メニューから[ディスクファイルを選択]をクリックします。

あらかじめダウンロードしておいた「Rocky Linux」のISOイメージファイルを選択し、右上の「開く」ボタンをクリックします。

ホストマシンから仮想マシンにアクセスできるよう、ネットワークの設定を行います。
左ペインの[ネットワーク]をクリックします。
[アダプター1]タブの[割り当て]を[ブリッジアダプター]にします。
最後に下の[OK]をクリックします。

これでVirtualBoxでの設定が完了しました。

インストールをしよう

左ペインから「Rocky Linux」を選択し、[起動]アイコンをクリックします。

上下矢印キーで[Install Rocky Linux 8]を選択し、[Enter] キーを押します。

正常にインストールが始まると、次の画面が表示されます。

次の画面で[日本語]を選択します。

[ソフトウェアの選択]をクリックします。

本稿では[最小限のインストール]を選択します。
[完了]をクリック。

画面が見切れて表示されます。
[インストール先]をクリック。

デバイスが選択されていることを確認し、完了をクリックします。

[ネットワークとホスト名]をクリックします。

Ethernetのスライドスイッチを[オン]にします。
ホスト名を入力し、[適用]。
最後に[完了]をクリック。

rootアカウントを無効にしたまま、サーバの管理ができる特権ユーザの作成を行います。
[ユーザーの作成]をクリックします。

管理者となるユーザ名を入力します。
続いて、[このユーザーを管理者にする]にチェックを入れます。
[パスワード]および[パスワードの確認]に管理者のパスワードを入力します。

[時刻と日付]をクリックします。

世界地図の日本をクリックし、タイムゾーンを「東京」に設定します。

これで、インストール前のお膳立てが整いました。
これからインストールを始めます。
画面右下の[インストールの開始]をクリックします。

インストール中の画面です。

以下が表示されると、インストール完了です。

再起動する前に、光学ドライブからインストーラを取り除きます。
メニューバーの[仮想マシン]>[設定]をクリック。

設定画面の[ストレージ]>[Rocky-8.4-x86_64-minimal.iso]をクリックします。
[属性]領域の[光学ドライブ]右端にあるアイコンをクリックし、[仮想ドライブからディスクを除去]をクリックします。

次の画面のように、光学ドライブの中身が「空」になります。
[OK]ボタンを押して元の画面に戻ります。

[システムの再起動]をクリックします。

以下の画面から再起動が始まります。

Rocky Linuxにログインできるようになりました。

SSHでリモートから操作しよう

SSHは、サーバ(Rocky Linux)とクライアントPC(WindowsやMac、Ubuntuなど)とで通信し、リモートにあるサーバを管理するための仕組みです。

まず、VirtualBoxのコンソールからログインします。パスワードはエコーバックされません。
次に、以下のコマンドでパッケージをアップデートします。
「$ 」はプロンプトです。

$ sudo dnf -y update

再度パスワードを聞かれるので、入力します。

エディタをインストールしよう

エディタはnanoやvimなど、好みのものをインストールしてください。

nanoの場合は以下のとおりです。

$ sudo dnf -y install nano

vimをインストールする場合は、次のコマンドを実行します。

$ sudo dnf -y install vim

SSHをセキュアに使えるように設定しよう

エディタで/etc/ssh/sshd_configを開きます。
まず、SSHの通信に用いるポートを使用可能にします。ここで、デフォルトの「22」は攻撃の的になりやすいので、「10022」に変更しておきます。

#Port 22

上記の行を、下の行に変更します。

Port 10022

さらに、SSHでリモートから直接rootにログインできなくします。

実はインストール時に、rootを無効化しているため、本来この設定は不要ですが、標準的な手順であるため行っておきます。

PermitRootLogin yes

上記の行を、下の行に変更します。

PermitRootLogin no

/etc/ssh/sshd_configを変更したら、保存してエディタを終了します。

SELinuxとファイアウォールを設定しよう

SELinuxとは、ユーザーと管理者がアクセス制御をより細かく制御できるようにして、万一不正侵入を受けたとしても情報を保護できるように考えられた仕組みです。

SELinuxの設定コマンドをインストールします。

$ sudo dnf -y install policycoreutils-python-utils

SSHのポートにアクセス権を付与します。さらに付与した結果を確認します。

$ sudo semanage port -a -t ssh_port_t -p tcp 10022
$ sudo semanage port -l | grep ssh
ssh_port_t                     tcp      10022, 22

上記のようにポート10022が追加されていれば成功です。

続いてファイアウォールを設定します。

$ sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/

エディタで/etc/firewalld/services/ssh.xmlを開きます。

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="22"/>
</service>

下から2行目の、port=”22″と記述された「22」の部分を下のように「10022」に変更します。

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="10022"/>
</service>

/etc/firewalld/services/ssh.xmlの変更内容をシステムに反映させます。

sudo firewall-cmd --reload
sudo systemctl restart sshd.service

これでクライアントPCからリモートでアクセスできるようになりました。

クライアントPCからリモートログインしてみよう

本稿では、UbuntuのクライアントPCから接続する例を示します。

まず、サーバ(Rocky Linux)のIPアドレスを調べます。サーバは固定IPアドレスの設定などを施していないので、DHCPでリースされたIPアドレスを使用しています。

$ ip route
default via 192.168.1.1 dev enp0s3 proto dhcp metric 100 
192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.23 metric 100 

上記の結果で、192.168.1.23がサーバのIPアドレスとわかります。

SSHコマンドの書式は以下のとおりです。
ssh -p <ポート番号> <ユーザ名>@<IPアドレス>

Ubuntuの「端末」からSSHを使用してリモートログインしている様子を以下に示します。

項目
ポート番号10022
ユーザ名linux
IPアドレス192.168.1.23
$ ssh -p 10022 linux@192.168.1.23
The authenticity of host '[192.168.1.23]:10022 ([192.168.1.23]:10022)' can't be established.
ECDSA key fingerprint is SHA256:ls1zprm1PTXFDuHryzWl5Qw75ayyn4WdNcTnN2kNFKw.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[192.168.1.23]:10022' (ECDSA) to the list of known hosts.
linux@192.168.1.23's password: 
Last login: Wed Jun  9 09:33:11 2021
$

上記の例では、途中でパスワードを入力します。
現在ではWiondowsやmacOSのターミナルから、上記と同様SSHによるログインが可能です。

システムを自動でアップデートするには

自動アップデートのメリットとは

dnfコマンドを使い、手動でアップデートは可能ですが、自動アップデートには以下のメリットがあります。

  1. ソフトウェアのアップデートは頻繁にあるため、自動化しておくとラク
  2. アップデートを忘れて、サーバのセキュリティ脆弱性をつく攻撃をされないで済む

一方で、デメリットもあります。
システムのアップデート内容によっては、それまで正常に動作していたソフトウェアに不具合が生じる可能性があるというデメリットです。

アップデートを自動化するには

システムアップデートの自動化は「dnf-automatic」というパッケージをインストールすることにより実現できます。

$ sudo dnf -y install dnf-automatic

エディタで「/etc/dnf/automatic.conf」を開きます。

まず、「upgrade_type = default」の行に着目します。
「default」オプションはあらゆるアップデートをすべて実施します。また、「security」オプションはセキュリティ関連のアップデートに絞って実行されます。アップデートによるリスクを考慮していずれかを選択します。
私はdefaultオプションを選択しました。

次に「apply_updates = no」の行を以下のように変更します。

apply_updates = yes

本稿での/etc/dnf/automatic.conf編集イメージは以下のとおりです。

[commands]
#  What kind of upgrade to perform:
# default                            = all available upgrades
# security                           = only the security upgrades
upgrade_type = default
random_sleep = 0

 <略>

# Whether updates should be applied when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
apply_updates = yes

次のコマンドを実行し、サービスの起動と、次回のシステム起動時にもシステムのアップデートが行われるようにします。

$ sudo systemctl start dnf-automatic.timer
$ sudo systemctl enable dnf-automatic.timer

これでシステムアップデートが自動化されました。

WordPressを構築してみよう

いよいよ、典型的なLAMPサーバであるWordPressを構築してみましょう。LAMPとは、Linux(OS)、Apache HTTP Server(Webサーバ)、MySQL、MariaDB(DB)、Perl、PHP、Python(スクリプト言語)の頭文字を並べて造られたワードです。すべてオープンソースです。現代的な動きのあるウェブサイトの構築に適していると言われています。

Apacheをインストールしよう

Apache HTTP Server(Apache)とは、高いシェアを持つフリーでオープンソースのWebサーバ・ソフトウェアです。

Apacheのパッケージ名httpdをインストールします。

$ sudo dnf -y install httpd

インストールが完了したら、「/etc/httpd/conf/httpd.conf」を編集します。

#ServerName www.example.com:80

上記の行、先頭の「#」を削除します。削除後の行は以下のとおりです。

ServerName www.example.com:80

Apacheを起動します。また、次回以降のシステム起動時に自動的に起動されるようにします。

$ sudo systemctl start httpd.service
$ sudo systemctl enable httpd.service

HTTPのアクセスを許可しよう

ファイアウォールで80番ポートが使えるように変更します。

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --reload

それではWebサーバにアクセスできるようになったことを確認してみましょう。WebブラウザのアドレスバーにサーバのIPアドレスを入力してみてください。
以下のようなテストページが表示されればOKです。

続いて、HTMLを作成し、表示してみます。
「/var/www/html/」に「testpage.html」というファイルを以下のように作成します。

<html>
        <head>
                <title>Welcom to my page</title>
        </head>
        <body>
                <p>Hello World!</p>
        </body> 
</html> 

ブラウザのアドレスバーから「サーバのIPアドレス/testpage.html」のように入力してみます。「Hello World!」が表示されたでしょうか?

MariaDBをインストールしよう

データベース管理システム(DBMS)であるMariaDBをインストールします。

$ sudo dnf -y install mariadb-server mariadb

続いて以下の設定ファイルをエディタで開き、日本語を正しく処理できるようにします。

/etc/my.cnf.d/mariadb-server.cnf

[mysqld]セクションの最後に、以下の通り1行追加します。

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
character-set-server=utf8         ← 1行追加

/etc/my.cnf.d/client.cnf

[client]セクションに、以下の通り1行追加します

[client]
default-character-set = utf8   ← 1行追加

MariaDBのサービスを起動します。次回以降のシステム起動時にも自動起動するよう設定します。

$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb

MariaDBのセキュリティ関連の設定を行います。
OSとは別にDBのrootのパスワードを管理する必要があります。

$ sudo mysql_secure_installation

 <略>

Enter current password for root (enter for none):   ← [Enter]
OK, successfully used password, moving on...

 <略>

Set root password? [Y/n] y
New password:    ← パスワードを設定
Re-enter new password:    ← パスワード再入力
Password updated successfully!
Reloading privilege tables..
 ... Success!

 <略>

Remove anonymous users? [Y/n] y
 ... Success!

 <略>

Disallow root login remotely? [Y/n] y
 ... Success!

 <略>

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

 <略>

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

PHPをインストールしよう

WordPressはPHPで書かれているので、PHPをインストールします。WordPressでは21年6月時点ではバージョン7.3以上が推奨されています。ここでは、7.4をインストールします。

$ sudo dnf -y module install php:7.4
$ sudo dnf -y install php php-mbstring php-pear php-mysqlnd php-gd php-pecl-zip php-json

PHPのバージョン7.4がインストールされているかを確認します。バージョンの確認結果は以下のとおりです。

$ php --version
PHP 7.4.6 (cli) (built: May 12 2020 08:09:15) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies

ここで、Apacheを再起動し、ApacheがPHPと連携しPHPを実行できるようにします。

$ sudo systemctl restart httpd.service

これでWebサーバ上でPHPが動くようになったので、PHPプログラムを作成して動作確認を行います。
エディタで「/var/www/html/hellophp.php」を作成します。hellophp.phpの中身は次の1行だけ記述します。

<?php echo  phpinfo(); ?>

エディタでファイルを保存したら、ブラウザのアドレスバーから「サーバのIPアドレス/hellophp.php」のように入力してみます。
以下のようなPHPの情報ページが表示されたでしょうか?

確認が済んだらPHPのプログラムを削除しましょう。悪意ある第三者に情報を与えないようにするためです。

$ sudo rm /var/www/html/hellophp.php 

WordPressでつかうデータベースを作成しよう

これから、MariaDBのroot(管理者)となってWordPressの各種データを格納するデータベースの器の部分を作成します。
パスワードは、mysql_secure_installationで設定したものを入力します。

$ mysql -u root -p
Enter password:  ← パスワード入力する
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.3.28-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>  ← MariaDBのプロンプト

これより、SQLを使ってデータベースの作成を行います。本稿では表の値を使用しますが、安全のため他の値に変更してください。

項目
データベース名wpdb
ユーザ名wpadmin
パスワードwppassword
MariaDB [(none)]> create database wpdb;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> grant all privileges on wpdb.* to "wpadmin"@"localhost" identified by "wppassword";
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> exit
Bye
$ 

WordPressをインストールしよう

いよいよ、WordPressをインストールします。

まず、ホームディレクトリに「wp」というディレクトリを作成し、そのディレクトリに移動します。
次に、公式サイトから最新版をcurlコマンドでダウンロードします。

$ cd
$ mkdir wp
$ cd wp
$ curl -LO http:/ja.wordpress.org/latest-ja.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   162  100   162    0     0    200      0 --:--:-- --:--:-- --:--:--   200
100 15.6M  100 15.6M    0     0   112k      0  0:02:22  0:02:22 --:--:-- 1910k
$ ls
latest-ja.tar.gz

ダウンロードしたlatest-ja.tar.gzをtarで解凍します。
ところがなぜかtarコマンドがないので、まずtarをインストールします。

$ sudo dnf -y install tar

tarをインストールしたところでlatest-ja.tar.gzを解凍します。

$ tar xvf latest-ja.tar.gz

解凍したファイルやディレクトリを確認します。

$ ls
latest-ja.tar.gz  wordpress
$ ls wordpress/
index.php    wp-activate.php     wp-comments-post.php  wp-cron.php        wp-load.php   wp-settings.php   xmlrpc.php
license.txt  wp-admin            wp-config-sample.php  wp-includes        wp-login.php  wp-signup.php
readme.html  wp-blog-header.php  wp-content            wp-links-opml.php  wp-mail.php   wp-trackback.php

wordpressというディレクトリ以下が展開されていることがわかります。このwordpressディレクトリを「/var/www/html/」の下に移動します。wordpressの名称のままだとアタックされる恐れがあるので、ここでは「mypage」というディレクトリ名に変更します。

$ sudo mv wordpress/ /var/www/html/mypage

Apacheのプロセスがアクセスできるようにし、wp-config.phpファイルをサンプルからコピーします。

$ sudo chown -R apache:apache /var/www/html/mypage/
$ cd /var/www/html/mypage/
$ sudo mv wp-config-sample.php wp-config.php

wp-config.phpファイルをエディタで編集します。
以下は変更前のファイルです。矢印の3箇所を、あなたが作成したデータベース名、ユーザ名、パスワードに変更します。

// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'database_name_here' ); ← データベース名を変更

/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'username_here' ); ← ユーザ名を変更

/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'password_here' ); ← パスワードを変更

/** MySQL のホスト名 */
define( 'DB_HOST', 'localhost' );

本稿での変更後のイメージは以下のとおりです。

// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'wpdb' );

/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'wpadmin' );

/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'wppassword' );

/** MySQL のホスト名 */
define( 'DB_HOST', 'localhost' );

wp-config.phpをapache以外の第三者から読めなくします。

$ sudo chmod 400 wp-config.php 
$ ll wp-config.php
-r--------. 1 apache apache 3908  6月 12 14:09 wp-config.php

最後にSELinuxを設定します。この設定によってWordPressが起動できるようになります。

$ sudo setsebool -P httpd_dbus_avahi 1
$ sudo setsebool -P httpd_unified 1
$ sudo setsebool -P httpd_tty_comm 1
$ sudo setsebool -P httpd_can_network_connect_db 1
$ sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html/mypage"
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/mypage/wp-content(/.*)?"
$ sudo restorecon -R -v /var/www/html/mypage

WordPressのセットアップを完了させよう

Webブラウザのアドレスバーから、「http://サーバのIPアドレス/mypage/wp-admin/install.php」を入力してみてください。WordPressのインストール画面が表示されます。必要事項を入力して、[WordPressをインストール]ボタンをクリックします。

インストールが完了したら下の画面になります。
[ログイン]ボタンをクリックします。

下の画面が表示されるので、ログインしてみましょう。

WordPressのダッシュボードが表示されました。

さいごに

Rocky LinuxでWebサーバを構築し、WordPressの画面を表示できるところまでを試してみました。
構築の手順は本番サーバを構築する手順に匹敵するものです。ただし、本稿ではIPアドレスの固定は実施していないので、その点ご了承ください。