AL2023(Amazon Linux 2023)にdnfコマンドでMySQLをインストールしてみた。

AL2023(Amazon Linux 2023)にdnfコマンドでMySQLをインストールしてみました。その手順を記載しておきます。AL2023はLightsailで使用しています。

まずはリポジトリの取得です。MySQLのダウンロードサイトから「MySQL Yum Repository」を選択します。

リポジトリのセットアップパッケージの中から「Red Hat Enterprise Linux9/Oracle Linux9」を選択します。

ダウンロード画面になります。アカウントがなければ「No thanks, just start my download.」をクリックします。

ファイルがダウンロードされます。ダウンロードされたファイルは mysql84-community-release-el9-1.noarch.rpm というファイル名でした。

これをAL2023にアップロードします。scpコマンドを使います。LightsailDefaultKey.pem は ec2-user の秘密鍵ファイルです。


$ scp -i .ssh/LightsailDefaultKey.pem ./work/mysql84-community-release-el9-1.noarch.rpm ec2-user@xxx.xxx.xxx.xxx:~/

AL2023にrpmファイルがアップロードされていることが確認できたら、リポジトリのインストールをします。rootユーザーで行います。


# dnf install mysql84-community-release-el9-1.noarch.rpm

以下のコマンドで MySQL Yum リポジトリが正常に追加されたことを確認できます。


# dnf repolist enabled | grep "mysql.*-community.*"

インストールするパッケージは mysql-community-server であるため、情報を見てみます。


# dnf info mysql-community-server

dnf info で確認したところ、現状ではバージョン 8.4.0 のものがインストールされます。

それでは実際にMySQLのインストールをします。


# dnf install mysql-community-server

インストールされたMySQLのバージョンを確認しておきましょう。


# mysql --version

MySQLを起動します。


# systemctl start mysqld

起動できたか状態を確認しておきましょう。


# systemctl status mysqld

MySQLサーバーにログインする前にrootのパスワードを確認しておきます。rootのパスワードは /var/log/mysqld.log ファイルに出力されています。


# cd /var/log
# cat mysqld.log

ログファイルに「A temporary password is generated for root@localhost: xxxxx」という文言があるので、探します。xxxxx となっているところがrootの初期パスワードです。

それではMySQLサーバーにログインしてみましょう。


# mysql -u root -p
Enter password: 
 :

Enter password: と尋ねられるのでrootの初期パスワードを入力します。正しくパスワード入力できれば、MySQLサーバーに入ることができます。プロンプトは mysql> という表示です。

rootのパスワードは変更しておきましょう。ALTER USER コマンドで変更します。


mysql> alter user 'root'@'localhost' identified by 'xxxxx';

xxxxx がパスワードになるのですが「Query OK」と表示されれば変更ができています。MySQLのパスワードポリシーにあわないと「ERROR 1819 (HY000): Your password does not satisfy the current policy requirements」と表示されますので、英字大文字小文字、記号を含めて再度パスワードを設定してみてください。

データベースの作成をします。


mysql> create database testdb;

testdb はデータベース名です。これは任意でつけることができます。作成したデータベースを確認しておきます。


mysql> show databases;

一覧に testdb が表示されます。

ユーザーを作成します。


mysql> create user 'test' identified by 'xxxxx';

test がユーザー名です。ユーザー名も任意でつけてください。xxxxx がパスワードですが、rootのパスワードのときと同じくパスワードポリシーにあわないとエラーになりますので気をつけてください。

test ユーザーが testdb を使用できるように権限を付与します。


mysql> grant all on testdb.* to 'test';

これで test ユーザーで testdb データベースに表の作成などができるようになります。一度、MySQLから抜けます。


mysql> exit
Bye

test ユーザーでMySQLにログインしなおします。


$ mysql -u test -p
Enter password: 
 :

testdbを使用するようにします。


mysql> use testdb;

実テーブルを作ってみましょう。


mysql> create table SHOHIN(NUMBER INT(2) NOT NULL PRIMARY KEY, PRODUCT VARCHAR(20), PRICE INT(5));

行をインサートしてみます。


mysql> insert into SHOHIN (NUMBER, PRODUCT, PRICE) values (1, 'Apple', 120);
mysql> insert into SHOHIN (NUMBER, PRODUCT, PRICE) values (2, 'Orange', 150);
mysql> insert into SHOHIN (NUMBER, PRODUCT, PRICE) values (3, 'Banana', 100);
mysql> commit;

select で抽出できることを確認します。


mysql> select * from SHOHIN;

これでMySQLのインストールは完了です。テーブル作成後となりますが、操作イメージの画像をつけておきます。

Amazon Lightsail で作業用ユーザーを作成してssh接続してみた。

Amazon Lightsail(OSは Amazon Linux 2023)ではデフォルトのユーザーとして ec2-user が作成されていますが、これとは別の作業用ユーザーを新規作成してssh接続できるようにしてみます。鍵ファイルは自作して、ssh接続ではポート22から任意のポートに変更をします。

作業手順としては、以下です。

  1. 作業用ユーザーの鍵ファイルの作成
  2. サーバーに作業用ユーザーを作成
  3. サーバーに .ssh フォルダを作成
  4. 鍵ファイルをサーバーに送る
  5. いったん、疎通確認
  6. ファイアーウォールの設定変更
  7. sshd_config の設定変更
  8. 最終確認

【 1 】鍵ファイルを作成します。作成はクライアント側で行います。

[ クライアント側作業 ]
ubuntuにログインしてホームディレクトリ配下の .ssh ディレクトリに移動します。ssh-keygen コマンドで鍵生成をします。鍵の形式は RSA、ビット長は 4096、鍵ファイルの名前は id_rsa.j です。


$ pwd
/home/tak/.ssh
$ ssh-keygen -t rsa -b 4096

カレントディレクトリの配下(/home/tak/.ssh)に以下の名前で鍵ファイルが作成されます。

秘密鍵ファイル・・・id_rsa.j
公開鍵ファイル・・・id_rsa.j.pub

【 2 】サーバーで作業用ユーザーを新規作成します。

[ サーバー側作業 ]
ec2-user でサーバーにログインします。その後、root にスイッチして作業します。adduser で tak ユーザーの作成をし、パスワードの設定をします。LightsailDefaultKey.pem は ec2-user の秘密鍵ファイルです。この鍵ファイルは(クライアント側の)ホームディレクトリ配下の .ssh フォルダに配置している例です。


$ ssh -i .ssh/LightsailDefaultKey.pem ec2-user@xxx.xxx.xxx.xxx
$ su -
# adduser tak
# passwd tak

【 3 】サーバーに.ssh フォルダを作成します。

[ サーバー側作業 ]
rootでの作業をいったん終えて、作業用ユーザーにスイッチしてホームディレクトリ配下に .ssh フォルダを作成します。.ssh フォルダは自身しかアクセスできないように700の権限とします。


# exit
$ su tak
$ pwd
/home/tak
$ mkdir .ssh
$ chmod 700 .ssh

【 4 】鍵ファイルをサーバーに送ります。

[ クライアント側作業 ]
scp コマンドで公開鍵ファイルをサーバーにアップロードします。アップロードには ec2-user のアカウントを使います。


$ scp -i .ssh/LightsailDefaultKey.pem .ssh/id_rsa.j.pub ec2-user@xxx.xxx.xxx.xxx:~/.ssh/

上記の scp コマンドでは公開鍵ファイル(id_rsa.j.pub)を ec2-user のホームディレクトリ配下の .ssh フォルダに配置しています。

[ サーバー側作業 ]
送信された鍵ファイルを【3】で作成した tak の .ssh フォルダ配下に移動させます。rootで作業します。


$ su -
# mv /home/ec2-user/.ssh/id_rsa.j.pub /home/tak/.ssh/
# cd /home/tak/.ssh
# chown tak:tak id_rsa.j.pub
# chmod 600 id_rsa.j.pub
# mv id_rsa.j.pub authorized_keys

ファイルの所有者を ec2-user から tak に変更して、アクセス権限を tak のみ(600)に変更しています。そして、ファイル名を authorized_keys に変更します。

これで ec2-user と同様に tak でも公開鍵認証ができるようになります。

【 5 】tak アカウントでsshログインできることの確認をします。

[ クライアント側作業 ]
ec2-user ではなく tak ユーザーでサーバーにログインできることを確認します。鍵ファイルは作成したもの(id_rsa.j)を使います。


$ ssh -i .ssh/id_rsa.j tak@xxx.xxx.xxx.xxx

問題なく接続できれば、作業を続けます。

【 6 】sshのポートを変更するためファイアーウォールの穴あけをしておきます。

[ サーバー側作業 ]
Lightsail の管理画面に入り、インスタンス → ネットワーキングとたどってファイアーウォールの設定画面にいきます。デフォルトでは、SSHのポート22とHTTPのポート80が開いています。

「+ルールを追加」をクリックしてカスタムとしてポートを追加します。SSHのポートは、このあとにここで開ける番号に変更します。以下が追加したものです。

【 7 】sshd_config の修正をします。

[ サーバー側作業 ]
rootにスイッチして、作業を行います。sshd_config はバックアップを取っておきましょう。


$ su -
# cd /etc/ssh
# cp -p sshd_config sshd_config.20240505
# vi sshd_config

viエディタで sshd_config を編集をします。編集項目は以下です。ポート番号の変更と root でのリモートログインを不許可にしておきます。

編集前
Port 22
#PermitRootLogin prohibit-password

編集後
Port yyyyy(任意)
PermitRootLogin no

なお、Lightsail では PubkeyAuthentication、および、PasswordAuthentication はデフォルトで以下となっています。

#PubkeyAuthentication yes
PasswordAuthentication no

PubkeyAuthentication がコメントにされていますが、PubkeyAuthentication のコメントにされたときのデフォルト値はyesなので、鍵認証は有効、パスワード認証は無効という設定です。

編集をしたら sshd_config を保存します。sshdを再起動します。


# systemctl restart sshd

作業しているセッションは再起動しても維持されます。

【 8 】SSHのポート変更後の接続を確認します。

[ クライアント側作業 ]
別のターミナルを開いて、ssh接続できることを確認します。ポートを変更しているので、-p オプションでポート指定をしてください。


$ ssh -i .ssh/id_rsa.j tak@xxx.xxx.xxx.xxx -p yyyyy

接続ができればポートの変更も完了です。

ただしポートを変更しているので Lightsail からのブラウザでのssh接続はできなくなります。

使用するとエラーになるのでポート変更は各自の責任でお願いします。