EC2(AmazonLinux2)内のNginxを1.20.2にバージョンアップする方法
はじめに
この記事のゴール
EC2(AmazonLinux2)内のNginxを1.20.2にバージョンアップする
amazon-linux-extrasでは、1.20.0が最新版だったため、公式CentOSからインストールします。
[ec2-user@ip-10-0-11-158 yum.repos.d]$ yum --showduplicate list nginx
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
インストール済みパッケージ
nginx.x86_64 1:1.20.0-2.amzn2.0.4 @amzn2extra-nginx1
利用可能なパッケージ
nginx.x86_64 1:1.12.2-2.amzn2.0.2 amzn2extra-nginx1
nginx.x86_64 1:1.16.1-1.amzn2.0.1 amzn2extra-nginx1
nginx.x86_64 1:1.18.0-1.amzn2.0.1 amzn2extra-nginx1
nginx.x86_64 1:1.18.0-1.amzn2.0.2 amzn2extra-nginx1
nginx.x86_64 1:1.20.0-2.amzn2.0.1 amzn2extra-nginx1
nginx.x86_64 1:1.20.0-2.amzn2.0.3 amzn2extra-nginx1
nginx.x86_64 1:1.20.0-2.amzn2.0.4 amzn2extra-nginx1
バージョンアップの背景
現在使っているバージョン(1.20.0)に以下の脆弱性が見つかったためバージョンアップに至りました。
ウェブサーバ「nginx」の開発チームは、脆弱性を修正したアップデートをリリースした。
「nginx」において、名前解決を行うリゾルバに脆弱性「CVE-2021-23017」が明らかとなったもの。設定ファイルで「resolverディレクティブ」を有効化している場合にのみ影響を受けるという。
細工したDNS応答を送りつけられ、脆弱性を悪用されると、「worker」のプロセスがクラッシュしたり、コードを実行されるおそれがある。重要度は4段階中、上から3番目にあたる「中(Medium)」としている。
開発チームでは、「nginx 1.21.0」「同1.20.1」にて修正。あわせてパッチをリリースしている。
環境
- AWSのEC2(AmazonLinux2)
- nginx/1.20.0
実践
現状確認
現状確認①
$ nginx -v
nginx version: nginx/1.20.0
現状確認②
[ec2-user@ip-10-0-11-183 ~]$ sudo systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since 日 2022-03-27 07:39:55 UTC; 5s ago
Process: 3455 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 3452 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 3451 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Main PID: 3458 (nginx)
CGroup: /system.slice/nginx.service
├─3458 nginx: master process /usr/sbin/nginx
└─3459 nginx: worker process
nginxのレポジトリを追加
sshでEC2内にログインしたあと、下記で権限変更
$ sudo su
※これより先はsudo権限で進めます。
yumインストールする際のNginxリポジトリを作成
/etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/amzn2/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/amzn2/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
※/etc/yum.repos.dは、yumでインストールする際のパッケージの情報を書いておくディレクトリ
mainlineリポジトリを使えるようにする
[root@ip-10-0-10-26 yum.repos.d]# yum-config-manager --enable nginx-mainline
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
======================================================= repo: nginx-mainline ========================================================
[nginx-mainline]
async = True
bandwidth = 0
base_persistdir = /var/lib/yum/repos/x86_64/2
...
デフォルトではstableが有効となっていますので、mainlineを使いたい場合は上のコマンドを実行する必要があります。
amazon-linux-extrasのnginxを無効化する
amazon-linux-extrasのパッケージがyumで優先表示されるため、無効化する
[root@ip-10-0-10-26 yum.repos.d]# amazon-linux-extras disable nginx1
Beware that disabling topics is not supported after they are installed.
0 ansible2 available \
[ =2.4.2 =2.4.6 =2.8 =stable ]
2 httpd_modules available [ =1.0 =stable ]
...
利用可能なパッケージを表示させる
[root@ip-10-0-10-26 yum.repos.d]# yum info nginx
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
amzn2-core | 3.7 kB 00:00:00
amzn2extra-docker | 3.0 kB 00:00:00
amzn2extra-kernel-5.10 | 3.0 kB 00:00:00
nginx-mainline | 2.9 kB 00:00:00
nginx-stable | 2.9 kB 00:00:00
nginx-mainline/2/x86_64/primary_db | 27 kB 00:00:00
インストール済みパッケージ
名前 : nginx
アーキテクチャー : x86_64
エポック : 1
バージョン : 1.20.0
リリース : 2.amzn2.0.4
容量 : 1.7 M
リポジトリー : installed
提供元リポジトリー : amzn2extra-nginx1
要約 : A high performance web server and reverse proxy server
URL : https://nginx.org
ライセンス : BSD
説明 : Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and
: IMAP protocols, with a strong focus on high concurrency, performance and low
: memory usage.
利用可能なパッケージ
名前 : nginx
アーキテクチャー : x86_64
エポック : 1
バージョン : 1.21.6
リリース : 1.amzn2.ngx
容量 : 796 k
リポジトリー : nginx-mainline/2/x86_64
要約 : High performance web server
URL : https://nginx.org/
ライセンス : 2-clause BSD-like license
説明 : nginx [engine x] is an HTTP and reverse proxy server, as well as
: a mail proxy server.
利用可能なパッケージが増えているためOK
利用可能なバージョンの表示
[root@ip-10-0-10-26 yum.repos.d]# yum --showduplicate list nginx
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
インストール済みパッケージ
nginx.x86_64 1:1.20.0-2.amzn2.0.4 @amzn2extra-nginx1
利用可能なパッケージ
nginx.x86_64 1:1.20.0-1.amzn2.ngx nginx-stable
nginx.x86_64 1:1.20.1-1.amzn2.ngx nginx-stable
nginx.x86_64 1:1.20.2-1.amzn2.ngx nginx-stable
nginx.x86_64 1:1.21.0-1.amzn2.ngx nginx-mainline
nginx.x86_64 1:1.21.1-1.amzn2.ngx nginx-mainline
nginx.x86_64 1:1.21.2-1.amzn2.ngx nginx-mainline
nginx.x86_64 1:1.21.3-1.amzn2.ngx nginx-mainline
nginx.x86_64 1:1.21.4-1.amzn2.ngx nginx-mainline
nginx.x86_64 1:1.21.5-1.amzn2.ngx nginx-mainline
nginx.x86_64 1:1.21.6-1.amzn2.ngx nginx-mainline
1.20.2のバージョンが表示されているためOK
バージョンを指定してインストール
$ yum install nginx-1.20.2 -y
・・・
依存性関連をインストールしました:
openssl11.x86_64 1:1.1.1g-12.amzn2.0.7
更新:
nginx.x86_64 1:1.20.2-1.amzn2.ngx
完了しました!
このときバージョンを指定せずinstallすると最新版(1.21.6)が入ってくる
反映させる
設定を再読み込み
sudo systemctl reload nginx
systemctl status nginx
もしこれでできなかったら、以下コマンドで停止から起動する
nginxを起動
systemctl stop nginx
systemctl start nginx
systemctl status nginx
変更後確認
確認①
[root@ip-10-0-10-26 yum.repos.d]# nginx -v
nginx version: nginx/1.20.2
確認②
[root@ip-10-0-11-183 ec2-user]# systemctl status nginx
● nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since 日 2022-03-27 07:39:55 UTC; 4min 37s ago
Docs: http://nginx.org/en/docs/
Main PID: 3458 (nginx)
CGroup: /system.slice/nginx.service
├─3458 nginx: master process /usr/sbin/nginx
└─3459 nginx: worker process
参考記事
ありがとうございました。
Discussion