0.前書き
私がインフラ園児ニアになって、1年が経ちました。
これまでいろいろな記事を揚げてきましたが、去年唯一できなかったTLS1.3を喋るサーバの構築を行おうと思います。とは言いつつもウェブサーバはすでにあるし、何を建てよう?
そう考えていると、ふと我が家には監視ツールがほとんどないことに気づきました。
Fortigateに直接つながった機器の生死監視しかしていません。
というわけでZabbixサーバを構築して、webアクセスをTLS1.3にしようと思います。
本記事はその前段階に当たるOpenSSLのバージョンアップです。
AlmaLinux9.1にはOpenSSL3.0.1がプレインストールされていますが、昨年の11月ごろに結構大きな脆弱性が見つかったバージョンなので、最新の3.0.7に上げようという算段です。
2023年2月11日追記
OpenSSL3.0.7で脆弱性が見つかり、OpenSSL3.0.8が公開されました。
先んじてバージョンアップしたところ問題なく動きました。
以下すべてのコマンドの「3.0.7」を「3.0.8」に置換すればOpenSSL3.0.8のバージョンアップが可能です。
2023年7月1日追記
現在、Almaのリポジトリから3.0.7までバージョンアップできるようなので、本手順不要です
↓こんな面倒なことせずdnfでバージョンアップしてください
1.環境説明
①Zabbixサーバ (導入予定)
構築システム:OpenSSL3.0.7(2023年2月現在最新)
ホスト名:zabbixserver
OS:AlmaLinux release 9.1 (Lime Lynx)
IPアドレス:172.16.1.6
※OSインストール済みで、NTP,DNS,ホスト名は設定完了しているものとします。またSELinuxは無効化している前提です。
②ドメイン環境
DNSドメイン名:home.miyamo83.com
2.構築手順
赤字の設定値は環境に合わせて変更してください。
まず現行パッケージのアップデートです。
# dnf -y update
OpenSSL3.0.7はソースからインストールするため、コンフィグレーションに必要なPerlをインストールします。
# dnf install -y perl
ソースコードインストール前にカレントディレクトリを移動します。
# cd /usr/local/src
ソースコードをパクってきます。
# wget https://www.openssl.org/source/openssl-3.0.7.tar.gz
tarファイルを展開し、移動します。展開前の圧縮フォルダの削除もやってやりましょう。
# tar xvzf openssl-3.0.7.tar.gz ;cd openssl-3.0.7 ;rm -f ../openssl-3.0.7.tar.gz
インストール先のフォルダを作成しておきます。
# mkdir -p /usr/local/ssl/openssl-3.0.7
Makefileを作っちゃいましょう。
以下間違ったコマンドです。
# ./config -fPIC --shared --prefix=/usr/local/ssl/openssl-3.0.7
正解コマンドです。こっちを使ってください
# ./config -fPIC --shared --prefix=/usr/local/ssl/openssl-3.0.7 enable-md2
また後で出てきます…
いずれのコマンドもエラーなく通り、以下のように返ってきます。
Configuring OpenSSL version 3.0.7 for target linux-x86_64
Using os-specific seed configuration
Created configdata.pm
Running configdata.pm
Created Makefile.in
Created Makefile
Created include/openssl/configuration.h
**********************************************************************
*** ***
*** OpenSSL has been successfully configured ***
*** ***
*** If you encounter a problem while building, please open an ***
*** issue on GitHub <https://github.com/openssl/openssl/issues> ***
*** and include the output from the following command: ***
*** ***
*** perl configdata.pm –dump ***
*** ***
*** (If you are new to OpenSSL, you might want to consult the ***
*** ‘Troubleshooting’ section in the INSTALL.md file first) ***
*** ***
**********************************************************************
ではコンパイルです。-j4は4コアでマルチプロセスでの処理を可能にします。
# make -j4
インストールします。
# make install -j4
./config時に指定したインストール先フォルダに移動します。
# cd /usr/local/ssl/openssl-3.0.7
sslというフォルダがありますが、現行を引き継ぐために今あるものの名前を変えます。
# mv ssl ssl.bk
現行フォルダである「/etc/pki/tls」にシンボリックリンクを作成します。
# ln -s /etc/pki/tls /usr/local/ssl/openssl-3.0.7/ssl
フォルダ内はこんな感じ
drwxr-xr-x 2 root root 37 2月 5 23:03 bin
drwxr-xr-x 3 root root 21 2月 5 23:03 include
drwxr-xr-x 5 root root 173 2月 5 23:03 lib64
drwxr-xr-x 4 root root 28 2月 5 23:03 share
lrwxrwxrwx 1 root root 12 2月 5 23:04 ssl -> /etc/pki/tls
drwxr-xr-x 5 root root 140 2月 5 23:02 ssl.bk
「/usr/local/ssl/openssl-3.0.7/lib64」はデフォルトでは共有ライブラリとして認識されないので、以下のファイルにパスを書き込みます。一番上とかでいいです。
# vi /etc/ld.so.conf
/usr/local/ssl/openssl-3.0.7/lib64
(openssl-1.1.xはlib64ではなくlibだった気がします。)
設定反映させる前に今の状態を確認してみましょう。
# ldconfig -p | grep ssl
こんな感じで返ってきました。
libxmlsec1-openssl.so.1 (libc6,x86-64) => /lib64/libxmlsec1-openssl.so.1
libxmlsec1-openssl.so (libc6,x86-64) => /lib64/libxmlsec1-openssl.so
libssl3.so (libc6,x86-64) => /lib64/libssl3.so
libssl.so.3 (libc6,x86-64) => /lib64/libssl.so.3
libevent_openssl-2.1.so.7 (libc6,x86-64) => /lib64/libevent_openssl-2.1.so.7
では設定反映です。
# ldconfig
うまくいったか確認してみましょう。
# ldconfig -p | grep ssl
こんな感じで返ってきました。
libxmlsec1-openssl.so.1 (libc6,x86-64) => /lib64/libxmlsec1-openssl.so.1
libxmlsec1-openssl.so (libc6,x86-64) => /lib64/libxmlsec1-openssl.so
libssl3.so (libc6,x86-64) => /lib64/libssl3.so
libssl.so.3 (libc6,x86-64) => /usr/local/ssl/openssl-3.0.7/lib64/libssl.so.3
libssl.so.3 (libc6,x86-64) => /lib64/libssl.so.3
libssl.so (libc6,x86-64) => /usr/local/ssl/openssl-3.0.7/lib64/libssl.so
libevent_openssl-2.1.so.7 (libc6,x86-64) => /lib64/libevent_openssl-2.1.so.7
libcrypto.so.3 (libc6,x86-64) => /usr/local/ssl/openssl-3.0.7/lib64/libcrypto.so.3
libcrypto.so (libc6,x86-64) => /usr/local/ssl/openssl-3.0.7/lib64/libcrypto.so
この状態でOpenSSLのバージョンを確認すると、エラーになります。
# openssl version
openssl: /usr/local/ssl/lib64/libcrypto.so.3: version `OPENSSL_3.0.1′ not found (required by openssl)
新しいバージョンをインストールして内部の設定が変更されたにもかかわらず、OpenSSLのコマンドが古いバージョンを参照しているのだと思われます。
パスを通しましょう。下の方に書けばよいです。
# vi ~/.bashrc PATH="/usr/local/ssl/openssl-3.0.7/bin:$PATH"
設定を反映させるコマンドです。
# source ~/.bashrc
リベンジします。
# openssl version
OpenSSL 3.0.7 1 Nov 2022 (Library: OpenSSL 3.0.7 1 Nov 2022)
このように返れば成功です。
作業は完了です、お疲れさまでした!!
と言いたいところなのですが、この後Sudoやdnfなどの主要コマンドが軒並み使えなくなりました。
以下エラー内容です。
sudo: /etc/sudo.conf, 14 行目 プラグイン “sudoers_policy” をロード中にエラーが発生しました
sudo: /usr/libexec/sudo/sudoers.so をロードできません: /lib64/libldap.so.2: undefined symbol: EVP_md2, version OPENSSL_3.0.0
sudo: 致命的エラー、プラグインをロードできません
どうやら、/usr/libexec/sudo/sudoers.soと依存関係になっている /lib64/libldap.so.2のmd2というシンボルが参照できないとぬかしています。
カタカタネットサーフィンしていると./configの際に「enable-md2」を付けると解消されるというのを見つけました。フリダシに戻ります。
正しいコマンド「./config -fPIC –shared –prefix=/usr/local/ssl/openssl-3.0.7 enable-md2」を打ち込んだ方は以上で終了となります。
ソースコードのフォルダに戻ります。
# cd -
OpenSSLのアンインストールとコンフィグレーションの削除
# make uninstall -j4 # make distclean -j4
Makefile作成
# ./config -fPIC --shared --prefix=/usr/local/ssl/openssl-3.0.7 enable-md2
以下これまでと同じコマンドですのでコメント省略。
# make -j4 ;make install -j4 # cd /usr/local/ssl/openssl-3.0.7 ;mv ssl ssl.bk # ln -s /etc/pki/tls /usr/local/ssl/openssl-3.0.7/ssl # ldconfig # ldconfig -p | grep ssl # /usr/local/ssl/openssl-3.0.7/bin/openssl version # source ~/.bashrc
確認です。
# openssl version
OpenSSL 3.0.7 1 Nov 2022 (Library: OpenSSL 3.0.7 1 Nov 2022)
問題のsudoも無事解消されていました。
3.後書き
うちの環境では、rootユーザのログインシェルを無効化しているのでSudoが使えなくなると本気で何もできなくなります。
ちなみに、その状態で再起動してしまうと一般ユーザーのシェルすら起動しなくなります。
てへ、いっけな~い。破滅破滅~★
4.参考サイト
コメント