ミドルウェア
- DB
- ミドルウェアソフト
等の初期設定やアップデートを示します
- MySQL
- OpenSSL
- Ubuntu20.04のOpenSSLを1.1.1からソースコードを用いて3.1.1にアップグレード。
- ソースコードからインストールしたOpenSSL 3.1.1を3.2.1にアップグレード。(Ubuntu 20.04)
- OpenSSH
- Ubuntu20.04のOpenSSHを8.2p1から9.6.1pにアップグレード。
- ソースコードからインストールしたOpenSSHを9.6.1p→9.7.1にアップデート(Ubuntu 20.04)
- mkcert
- Let's Encrypt
MySQL
mysql_secure_installationを実行したい
概要
5.7以降では実行する必要がなくなったとはいえ、mysql_secure_installationは以下の機能を持つため重要です。
- rootユーザーのパスワードを設定
- リモートからのrootユーザーのログインを無効にする
- 匿名ユーザーアカウントを削除
- testデータベースを削除し、testデータベースへのアクセス権限を持つユーザーを削除
バージョンアップによって、以下の手順が必要になりました。
確認した環境
- Ubuntu 20.04 LTS
- MySQL 8.0.32
mysql設定変更
- 設定ファイルのバックアップ
sudo cp -pi /etc/mysql/mysql.conf.d/mysqld.cnf /path/to/backup/directory/mysqld.cnf.$(date +%Y%m%d)
任意のバックアップディレクトリを指定します。
- バックアップ確認
diff -u /etc/mysql/mysql.conf.d/mysqld.cnf /etc/old/mysqld.cnf.$(date +%Y%m%d)
エラーがなければ(差分がなければ)バックアップは成功です。
- ファイル追記
echo -e "default_authentication_plugin=mysql_native_password" | sudo tee -a /etc/mysql/mysql.conf.d/mysqld.cnf
入力ミスを防ぐため、コマンドラインのみでmysqld.cnfに追記をします。
設定後の差分確認
- 差分確認
diff -u /path/to/backup/directory/mysqld.cnf.$(date +%Y%m%d) /etc/mysql/mysql.conf.d/mysqld.cnf
- 差分内容
+default_authentication_plugin=mysql_native_password
設定反映
sudo systemctl restart mysql.service
mysql rootパスワード変更
sudo mysql
この時点ではパスワードは設定されていません。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
''のpasswordは任意のものを入力ください
flush privileges;
exit
mysql_secure_installation
sudo mysql_secure_installation
質問事項
Enter password for user root:
# 上記で設定したパスワードを入力します
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No:
# Yを入力してEnter
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
# ポリシーに合わせて0/1/2を入力
Estimated strength of the password: 50
Change the password for root ? ((Press y|Y for Yes, any other key for No) :
# 既に設定しているのでn
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) :
# anonymousユーザーを削除するためY
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :
# rootユーザのリモートログインを禁止するためY
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :
# テストDBを削除するためY
Reload privilege tables now? (Press y|Y for Yes, any other key for No) :
# 設定を反映するためy
以上でMySQLの初期設定は完了です。
アカウントファイルを用いたDBログインとバックアップ。
概要
バックアップスクリプトなどでMySQLにログインして処理を行う場合のTIPSです。
さっくりとした手順
- アカウントファイルを作ります。
- ログインできることを確認します。
- アカウントファイルを用いたコマンドでバックアップできることを確認します。
アカウントファイル作成
- ディレクトリ作成
sudo mkdir -p /home/hoge/db_password
運用に合わせて指定ください。
cd /home/hoge/db_password && pwd
指定したディレクトリに移動します
- アカウントファイル作成
以下の内容を教義・信仰に沿ったエディタで作成します。(【】内は取り除き、自分の設定に合わせます)
- アカウントファイル内容
- ファイル例:account.txt
[client]
user = 【RedmineのDBユーザ】
password = "【RedmineのDBユーザ用パスワード】"
password は""で囲みます。
- アカウントファイルのパーミッション変更
chmod 400 account.txt
ls -l account.txt
パーミッションが400であることを確認します。
ファイルを用いてのログインを確認
mysql --defaults-extra-file=/path/to/directory/account.txt
--defaults-extra-file=
は、アカウントファイルの絶対パスです。
ログインできることを確認します。
SHOW DATABASES;
アカウントの権限で指定されたDBの表示を確認します。
EXIT
MySQLから抜けます。
SQL Dumpの取得
- SQL Dump
mysqldump --defaults-extra-file=/path/to/directory/account.txt --no-tablespaces -h [DBサーバ] [DB名] > backup.sql
-
--no-tablespaces
はPROCESS特権がないユーザでもダンプできるようにするためです。 -
バックアップ先も必要に応じて絶対パスで指定できます。
-
ファイル確認
ls -l backup.sql
ファイルの内容にDBがあれば成功です。取り扱いには慎重を期してください。
OpenSSL
Ubuntu20.04のOpenSSLを1.1.1からソースコードを用いて3.1.1にアップグレード。
※本記事のオリジナルは2023年6月に執筆しました。
概要
2023/09/11にサポート終了を迎えるOpenSSL1.1.1。
2023年6月現在の最新安定版である3.1.1にアップデートを行います。
https://www.openssl.org/blog/blog/2023/06/15/1.1.1-EOL-Reminder/
環境
- OS:Ubuntu 20.04
openssl version -a
OpenSSL 1.1.1f 31 Mar 2020
built on: Wed May 24 17:14:51 2023 UTC
platform: debian-amd64
options: bn(64,64) rc4(16x,int) des(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-mSG92N/openssl-1.1.1f=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_TLS_SECURITY_LEVEL=2 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
OPENSSLDIR: "/usr/lib/ssl"
ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-1.1"
Seeding source: os-specific
参考とした手順
https://nextgentips.com/2022/03/23/how-to-install-openssl-3-on-ubuntu-20-04/
さっくりとした手順
- システム全体のバックアップ
- 必要なライブラリをインストールします。
- githubレポジトリから最新安定版のソースコードをダウンロードします。
- ソースからインストールしていきます。
- 設定を行います。(コンフィグを反映させ、パスを通します)
- バージョンアップを確認します。
- 自動アップデートを無効化します。
実施した手順
全体のバックアップを取得します。
- Webアクセスの根幹となるプログラムであること
- 重要なデータが格納されている
ことから、AWS Lightsailのスナップショットを利用して全体のバックアップを取りました。
必要なライブラリのインストール
sudo aptitude install build-essential checkinstall zlib1g-dev git
aptitudeを用いています。必要に応じてaptを使ってください。
root昇格
本作業は管理者権限で実行します。
sudo su -
ソースコードの取得
- 作業用ディレクトリに移動
cd /hoge && pwd
任意のディレクトリを指定します
- git clone
git clone https://github.com/openssl/openssl -b openssl-3.1.1
- ディレクトリ移動
cd openssl
ソースからインストール
- コンフィグ
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib
- make
make
makeは時間がかかります。状況を時折確認しながら待ちましょう。
- 整合性確認
make test
make 同様に時間がかかります。
- インストール
make install
インストール後の設定
- 設定ファイル追記
cat <<- __EOF__ | tee -a /etc/ld.so.conf.d/openssl-3.1.1.conf
/usr/local/ssl/lib64
__EOF__
- 設定反映
ldconfig -v
- 既存プログラムの退避
mv /usr/bin/c_rehash /path/to/backup/c_rehash.$(date +%Y%m%d)
任意の退避ディレクトリを指定します
mv /usr/bin/openssl /path/to/backup/openssl.$(date +%Y%m%d)
任意の退避ディレクトリを指定します
- パスを通す
cat <<- __EOF__ | tee -a /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/ssl/bin"
__EOF__
- 通したパスを反映
source /etc/environment
- パス確認
echo $PATH
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/ssl/bin"
と表示されることを確認します
バージョンアップ後の確認
openssl version -a
OpenSSL 3.1.1 30 May 2023 (Library: OpenSSL 3.1.1 30 May 2023)
built on: Tue Jun 20 01:47:24 2023 UTC
platform: linux-x86_64
options: bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DZLIB -DNDEBUG
OPENSSLDIR: "/usr/local/ssl"
ENGINESDIR: "/usr/local/ssl/lib64/engines-3"
MODULESDIR: "/usr/local/ssl/lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0x7ffaf3ffffebffff:0x27ab
これで、Ubuntu20.04でもOpenSSL3.1.1を利用することが可能になりました。
必要に応じて
- システムの再起動を行います。
- 既存サービスが正常に動くことを確認します。
自動アップグレード無効
強制的に3.1系に上げるので、その後、1.1.xがアップグレードされる可能性を防ぎます。
- apt を使用する場合
sudo apt-mark hold openssl
- aptitude を使用する場合
sudo aptitude hold openssl
ソースコードからインストールしたOpenSSL 3.1.1を3.2.1にアップグレード。(Ubuntu 20.04)
概要
脆弱性やバグフィックス版のOpenSSL3.2.1にアップグレードします。
環境、前提
- Ubuntu 20.04
- こちらの手順を用いてソースコードからOpenSSL3.1.1をインストール・設定済み
さっくりとした手順
- rootに昇格します。
- 作業用ディレクトリにソースコードを取得・展開します。
- ソースからインストール(アップグレード)を行います。
- バージョンアップを確認します。
作業前にバージョン確認
openssl version -a
OpenSSL 3.1.1 30 May 2023 (Library: OpenSSL 3.1.1 30 May 2023)
built on: Thu Jun 22 05:19:59 2023 UTC
platform: linux-x86_64
options: bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DZLIB -DNDEBUG
OPENSSLDIR: "/usr/local/ssl"
ENGINESDIR: "/usr/local/ssl/lib64/engines-3"
MODULESDIR: "/usr/local/ssl/lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0xfffa3203578bffff:0x7a9
rootに昇格
この手の作業はrootで行った方が手間が少ないです。その分、注意を払いましょう。
sudo su -
作業用ディレクトリに移動
cd /hoge && pwd
任意のディレクトリを指定します。
ソースコードの取得
- git clone
git clone https://github.com/openssl/openssl -b openssl-3.2.1
2024/04/02時点での最新安定版を指定します
- ソースコードのディレクトリに移動
cd openssl
ソースからアップグレード(インストール)
- コンフィグ設定
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib
- make
make
makeは時間がかかります。状況を時折確認しながら待ちましょう。
- 整合性確認
make test
同様にmake testも時間がかかります。
- アップグレード(インストール)
make install
アップグレード後のバージョン確認
- SSLのバージョンアップ確認
openssl version -a
OpenSSL 3.2.1 30 Jan 2024 (Library: OpenSSL 3.2.1 30 Jan 2024)
built on: Tue Apr 2 01:28:56 2024 UTC
platform: linux-x86_64
options: bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DZLIB -DNDEBUG
OPENSSLDIR: "/usr/local/ssl"
ENGINESDIR: "/usr/local/ssl/lib64/engines-3"
MODULESDIR: "/usr/local/ssl/lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0xfffa3203578bffff:0x7a9
バージョンが上がっていることを確認します。
必要に応じてサーバの再起動を行い、作業完了です。
OpenSSH
Ubuntu20.04のOpenSSHを8.2p1から9.6.1pにアップグレード。
概要
こちらの記事で、Ubuntu 20.04のOpensslを1.1.1から3.1.1にバージョンアップしました。
しかし、
ssh -V
とすると、
OpenSSH_8.2p1 Ubuntu-4ubuntu0.9, OpenSSL 1.1.1f 31 Mar 2020
OpenSSHが参照しているSSLが前のままです。また、OpenSSHの脆弱性情報もあるのでセキュリティ上よろしくありません。
そこで、
- OpenSSHを最新版にする
- そのとき、参照するOpenSSLも現状に合わせる
作業を行いました。
参考にしたURL:
- https://askubuntu.com/questions/1189747/is-possible-to-upgrade-openssh-server-openssh-7-6p1-to-openssh-8-0p1
- https://qiita.com/zzz0mbie/questions/37262d1f3285500b3f45
環境
- Ubuntu 20.04
- 上記自サイトに則って、OpenSSLを3.1.1にアップデート済み
さっくりとした手順
- コンフィグに必要なディレクトリの作成を行います。
- インストールに必要なパッケージをインストールします。
- 作業用ディレクトリに移動します。
- ソースをダウンロードします。
- OpenSSHをソースからビルドします。
- バージョンアップを確認します。
最初に
本件はSSHを扱います。念のため、サーバへのターミナルクライアントを別ウィンドウで開いておいてください。
- 現行のバージョン確認
ssh -V
OpenSSH_8.2p1 Ubuntu-4ubuntu0.9, OpenSSL 1.1.1f 31 Mar 2020
必要なパッケージのインストール
sudo aptitude install build-essential zlib1g-dev libssl-dev libpam0g-dev libselinux1-dev libkrb5-dev
ディレクトリ作成と設定
sudo mkdir /var/lib/sshd && sudo chmod -R 700 /var/lib/sshd/ && sudo chown -R root:sys /var/lib/sshd/
作業用ディレクトリ移動
cd /hoge && pwd
任意のディレクトリを指定します。
ソースのダウンロードと展開
- ソース取得
wget -c http://mirror.exonetric.net/pub/OpenBSD/OpenSSH/portable/openssh-9.6p1.tar.gz
2023/12/20現在の最新版を指定しています。
- ソース展開
tar -xzf openssh-9.6p1.tar.gz
- ディレクトリ移動
cd openssh-9.6p1
コンフィグ
- OpenSSLの位置を確認
which openssl
- 結果確認
/usr/local/ssl/bin/openssl
筆者の環境です。
- コンフィグ
./configure --with-kerberos5 --with-md5-passwords --with-pam --with-selinux --with-privsep-path=/var/lib/sshd/ --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/ssl
--with-ssl-dir=/usr/local/ssl
は、opensslがあるディレクトリを指定します。
- make
make
- インストール
sudo make install
バージョンアップ確認
- バージョン確認
ssh -V
OpenSSH_9.6p1, OpenSSL 3.1.1
バージョンアップされていることを確認します。
- SSHサービス再起動
sudo systemctl restart ssh.service
- サービス再起動確認
sudo systemctl status ssh.service
active(running)を確認します
この後、バージョンアップを行ったサーバにSSH接続できれば、作業は完了です。
自動アップグレード無効
強制的に9.6系に上げるので、その後、8.xがアップグレードされる可能性を防ぎます。
- apt を使用する場合
sudo apt-mark hold openssh-server
- aptitude を使用する場合
sudo aptitude hold openssh-server
ソースコードからインストールしたOpenSSHを9.6.1p→9.7.1にアップデート(Ubuntu 20.04)
概要
ソースコードからインストールしたOpenSSH9.6p1を、更にOpenSSH9.7p1にバージョンアップします。
前提
Ubuntu 20.04での動作確認です。
上記手順を用いて、ソースコードからOpenSSHをインストールしています。
さっくりとした手順
- 作業用ディレクトリに移動します。
- ソースをダウンロードします。
- OpenSSHをソースからビルドします。
- バージョンアップを確認します。
バージョンアップ前の確認
ssh -V
OpenSSH_9.6p1, OpenSSL 3.2.1 30 Jan 2024
作業用ディレクトリ移動
cd /hoge && pwd
任意のディレクトリを指定します。
ソースのダウンロードと展開
- ソース取得
wget -c http://mirror.exonetric.net/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz
2024/04/04現在の最新版を指定しています。
- ソース展開
tar -xzf openssh-9.7p1.tar.gz
- ディレクトリ移動
cd openssh-9.7p1
コンフィグ
- OpenSSLの位置を確認
which openssl
- 結果確認
/usr/local/ssl/bin/openssl
筆者の環境です。
- コンフィグ
./configure --with-kerberos5 --with-md5-passwords --with-pam --with-selinux --with-privsep-path=/var/lib/sshd/ --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/ssl
--with-ssl-dir=/usr/local/ssl
は、opensslがあるディレクトリを指定します。
- make
make
- インストール
sudo make install
バージョンアップ確認
※別にターミナルを開いて確認します。
- バージョン確認
ssh -V
OpenSSH_9.7p1, OpenSSL 3.2.1 30 Jan 2024
バージョンアップされていることを確認します。
- SSHサービス再起動
sudo systemctl restart ssh.service
- サービス再起動確認
sudo systemctl status ssh.service
active(running)を確認します
必要に応じてサーバの再起動を行ってください。
mkcert
ローカル証明書、 mkcert
Ubuntu 22.04にmkcertをインストールしてローカル証明書を作成する
概要
- ローカルDNSで証明書を作りたい
- 或いはローカルホスト(127.0.0.1)をhttps化したい
場合に役立つコマンド、mkcertをインストールします。
インストール方法
aptitude (apt)によるインストール
sudo aptitude install mkcert
ローカルルート証明書を作成
- ルート証明書の作成
mkcert -install
- ローカルのルート証明書作成確認
ls -l ~/.local/share/mkcert/
-
rootCA-key.pem
→ 秘密鍵 -
rootCA.pem
→ ルート証明書
ホスト名に追記・修正
ファイル /etc/hosts
をルート顕現で、以下のように修正します。
127.0.0.1 agnes-luce
※ Ubuntu系はホスト名に指定したIPがなぜか127.0.1.1
になっています。
証明書作成
- ディレクトリ移動
cd /hoge && pwd
任意のディレクトリに移動します。
- 証明書作成
mkcert -key-file ドメイン名.key.$(date +%Y%m) -cert-file ドメイン名.crt.$(date +%Y%m) ドメイン名
- 作成例
mkcert -key-file agnes-luce.key.$(date +%Y%m) -cert-file agnes-luce.crt.$(date +%Y%m) agnes-luce
Created a new certificate valid for the following names 📜
- "agnes-luce"
The certificate is at "agnes-luce.crt.202404" and the key at "agnes-luce.key.202404" ✅
It will expire on 14 July 2026 🗓
証明書の整合性を確認
- 証明書から公開鍵のハッシュ値を取り出す
openssl x509 -pubkey -in 証明書ファイル -noout | openssl md5
- 秘密鍵から公開鍵のハッシュ値を取り出す
openssl pkey -pubout -in 秘密鍵ファイル | openssl md5
それぞれのハッシュ値が同じであることを確認します。
こうしてできた一式は2年半有効です。
Let's Encrypt
UbuntuサーバにLet's Encryptをインストール。
概要
Ubuntu 24.04にLet's Encryptを導入します。
インストール
sudo aptitude install certbot
証明書発行
ここでは証明書のみを発行する手順です。
sudo certbot certonly --webroot -w /home/www-data -d hoge.example.com
-w
の後にサイトのドキュメントが格納されているディレクトリを、-d
の後にドメインを入れます。
-
Enter email address (used for urgent renewal and security notices)
ではメールアドレスを入れます。 -
order to register with the ACME server. Do you agree?
はYで承諾します。 - メールマガジンへの登録はy/nのいずれかを入力します。
その後、メールアドレスが登録され、
Certificate is saved at: /etc/letsencrypt/live/hoge.example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/hoge.example.com/privkey.pem
と出たらOKです。