脆弱性の検証に利用する場合や、そこまで積極的な用途でなくとも
一部ソフトウェアでは互換性のあるカーネルバージョンが明確に指定されているケースがある。
その場合現在より古いカーネルバージョンを明示的に指定して利用したい。
手順を調べたのでまとめる。
手順
古いカーネルを導入する
まずは現時点でのカーネルバージョンを確認する。
# uname -a Linux ip-172-31-23-7.ap-northeast-1.compute.internal 4.14.193-149.317.amzn2.x86_64 #1 SMP Thu Sep 3 19:04:44 UTC 2020 x86_64 x86_64 x86_64 GNU/Linu # grubby --default-kernel /boot/vmlinuz-4.14.193-149.317.amzn2.x86_64
現状では4.14.193-149.317.amzn2
が導入されているようだ。
今回はカーネルバージョンkernel-4.9.85-47.59.amzn2
を指定して導入する。
# yum install kernel-4.9.85-47.59.amzn2 読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd amzn2-core | 3.7 kB 00:00:00 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ kernel.x86_64 0:4.9.85-47.59.amzn2 を インストール --> 依存性解決を終了しました。 依存性を解決しました =========================================================================================================================================================================== Package アーキテクチャー バージョン リポジトリー 容量 =========================================================================================================================================================================== インストール中: kernel x86_64 4.9.85-47.59.amzn2 amzn2-core 17 M トランザクションの要約 =========================================================================================================================================================================== インストール 1 パッケージ 総ダウンロード容量: 17 M インストール容量: 75 M Is this ok [y/d/N]: y Downloading packages: Delta RPMs disabled because /usr/bin/applydeltarpm not installed. kernel-4.9.85-47.59.amzn2.x86_64.rpm | 17 MB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction インストール中 : kernel-4.9.85-47.59.amzn2.x86_64 1/1 検証中 : kernel-4.9.85-47.59.amzn2.x86_64 1/1 インストール: kernel.x86_64 0:4.9.85-47.59.amzn2 完了しました!
(必要であれば) デフォルトカーネルを差し替える
AMIの仮想化タイプによってはカーネルをインストール後に手動でデフォルトカーネルを変更する必要がある。
(HVMではなくPVと呼ばれるタイプの仮想化タイプでは手動での変更が必要)
# grubby --default-kernel /boot/vmlinuz-4.9.85-47.59.amzn2.x86_64
今回はインストールされたカーネルがデフォルトカーネルになっているため、そのまま再起動。
# reboot now
(Optional) アップデート対象からカーネル関連モジュールを除外する
検証などに利用するために短期的に利用するだけであれば以下の作業は不要。
本来であれば脆弱性などの問題があるため推奨されない。あくまで自己責任で。
現状は4.14.193-149.317.amzn2
と4.9.85-47.59.amzn2
がインストール済みとなっている。
最新カーネルのバージョンが上がった際にyum updateでカーネルが更新されないように設定を行う。
検証のために新しい方(4.14.193-149.317.amzn2
)を削除する。
# uname -a Linux ip-172-31-23-7.ap-northeast-1.compute.internal 4.9.85-47.59.amzn2.x86_64 #1 SMP Wed Mar 14 21:51:55 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux # grubby --default-kernel /boot/vmlinuz-4.9.85-47.59.amzn2.x86_64 # ls -al /boot/ 合計 75976 dr-xr-xr-x 4 root root 4096 10月 23 18:29 . dr-xr-xr-x 18 root root 257 10月 23 18:21 .. -rw-r--r-- 1 root root 174 9月 3 19:06 .vmlinuz-4.14.193-149.317.amzn2.x86_64.hmac -rw-r--r-- 1 root root 170 3月 14 2018 .vmlinuz-4.9.85-47.59.amzn2.x86_64.hmac -rw------- 1 root root 2829664 9月 3 19:06 System.map-4.14.193-149.317.amzn2.x86_64 -rw------- 1 root root 2900199 3月 14 2018 System.map-4.9.85-47.59.amzn2.x86_64 -rw-r--r-- 1 root root 120243 9月 3 19:06 config-4.14.193-149.317.amzn2.x86_64 -rw-r--r-- 1 root root 104187 3月 14 2018 config-4.9.85-47.59.amzn2.x86_64 drwxr-xr-x 3 root root 17 9月 21 21:10 efi drwx------ 5 root root 79 10月 23 18:29 grub2 -rw------- 1 root root 31826017 9月 21 21:12 initramfs-4.14.193-149.317.amzn2.x86_64.img -rw------- 1 root root 28205290 10月 23 18:29 initramfs-4.9.85-47.59.amzn2.x86_64.img -rw-r--r-- 1 root root 669043 9月 21 21:12 initrd-plymouth.img -rw-r--r-- 1 root root 235508 9月 3 19:07 symvers-4.14.193-149.317.amzn2.x86_64.gz -rw-r--r-- 1 root root 202798 3月 14 2018 symvers-4.9.85-47.59.amzn2.x86_64.gz -rwxr-xr-x 1 root root 5727184 9月 3 19:06 vmlinuz-4.14.193-149.317.amzn2.x86_64 -rwxr-xr-x 1 root root 4936688 3月 14 2018 vmlinuz-4.9.85-47.59.amzn2.x86_64 # yum remove kernel-4.14.193-149.317.amzn2 読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ kernel.x86_64 0:4.14.193-149.317.amzn2 を 削除 --> 依存性解決を終了しました。 依存性を解決しました =========================================================================================================================================================================== Package アーキテクチャー バージョン リポジトリー 容量 =========================================================================================================================================================================== 削除中: kernel x86_64 4.14.193-149.317.amzn2 installed 101 M トランザクションの要約 =========================================================================================================================================================================== 削除 1 パッケージ インストール容量: 101 M 上記の処理を行います。よろしいでしょうか? [y/N]y Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction 削除中 : kernel-4.14.193-149.317.amzn2.x86_64 1/1 検証中 : kernel-4.14.193-149.317.amzn2.x86_64 1/1 削除しました: kernel.x86_64 0:4.14.193-149.317.amzn2 完了しました!
yum list updates
で削除した最新カーネルがリストされることを確認する。
# yum list updates 読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd 更新したパッケージ awscli.noarch 1.18.147-1.amzn2.0.1 amzn2-core ec2-net-utils.noarch 1.4-3.amzn2 amzn2-core kernel.x86_64 4.14.198-152.320.amzn2 amzn2-core kernel-tools.x86_64 4.14.198-152.320.amzn2 amzn2-core p11-kit.x86_64 0.23.21-2.amzn2.0.1 amzn2-core p11-kit-trust.x86_64 0.23.21-2.amzn2.0.1 amzn2-core pam.x86_64 1.1.8-23.amzn2.0.1 amzn2-core python2-botocore.noarch 1.18.6-1.amzn2.0.1 amzn2-core python2-rpm.x86_64 4.11.3-40.amzn2.0.5 amzn2-core rpm.x86_64 4.11.3-40.amzn2.0.5 amzn2-core rpm-build-libs.x86_64 4.11.3-40.amzn2.0.5 amzn2-core rpm-libs.x86_64 4.11.3-40.amzn2.0.5 amzn2-core rpm-plugin-systemd-inhibit.x86_64 4.11.3-40.amzn2.0.5 amzn2-core
初期に入っていた4.14.193-149.317.amzn2
から4.14.198-152.320.amzn2
に上がってしまっているが
古いカーネルを利用している状態だと、kernel関連のモジュールがアップデート対象に含まれることが確認できた。
このままだとyum updateしたタイミングでカーネルのバージョンが上がってしまうため
/etc/yum.confの[main]配下にexclude=kernel*
を追加し、アップデート対象から除外する。
[main] cachedir=/var/cache/yum/$basearch/$releasever keepcache=0 debuglevel=2 logfile=/var/log/yum.log exactarch=1 obsoletes=1 gpgcheck=1 plugins=1 installonly_limit=3 distroverpkg=system-release timeout=5 retries=7 exclude=kernel* # ←ここ # This is the default, if you make this bigger yum won't see if the metadata # is newer on the remote and so you'll "gain" the bandwidth of not having to # download the new metadata and "pay" for it by yum not having correct # information. # It is esp. important, to have correct metadata, for distributions like # Fedora which don't keep old packages around. If you don't like this checking # interupting your command line usage, it's much better to have something # manually check the metadata once an hour (yum-updatesd will do this). # metadata_expire=90m # PUT YOUR REPOS HERE OR IN separate files named file.repo # in /etc/yum.repos.d
更新後再度確認を行う。
# yum list updates 読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd amzn2-core | 3.7 kB 00:00:00 amzn2extra-docker | 3.0 kB 00:00:00 更新したパッケージ awscli.noarch 1.18.147-1.amzn2.0.1 amzn2-core ec2-net-utils.noarch 1.4-3.amzn2 amzn2-core p11-kit.x86_64 0.23.21-2.amzn2.0.1 amzn2-core p11-kit-trust.x86_64 0.23.21-2.amzn2.0.1 amzn2-core pam.x86_64 1.1.8-23.amzn2.0.1 amzn2-core python2-botocore.noarch 1.18.6-1.amzn2.0.1 amzn2-core python2-rpm.x86_64 4.11.3-40.amzn2.0.5 amzn2-core rpm.x86_64 4.11.3-40.amzn2.0.5 amzn2-core rpm-build-libs.x86_64 4.11.3-40.amzn2.0.5 amzn2-core rpm-libs.x86_64 4.11.3-40.amzn2.0.5 amzn2-core rpm-plugin-systemd-inhibit.x86_64 4.11.3-40.amzn2.0.5 amzn2-core
kernel.x86_64,kernel-tools.x86_64がリストされなくなった。
(本来は良くないが)これで古いカーネルを利用し続けることができる。