Red Hat Enterprise Linux 8 新機能をわかりやすく解説【RHEL8】
Red Hat Enterprise Linux 8 (RHEL8)が、2019年5月7日にリリースされました。RHEL 7 のリリースが2014年6月だったので、約5年ぶりの新OSとなります。
前回のメジャーアップデートから少し間隔が空いたためか、リリースノートはなんと120ページもあります!(ちなみにRHEL 7は90ページでした)
この記事では、そんな山ほどあるRHEL 8 の新機能や変更点の中から、気になるものをまとめてみました。
また、RHELのクローンである CentOS のメジャーアップデートも近いうちに行われるでしょう。CentOS8でも、これと同様の変更がなされるかと思われるので、参考にしてみてください。
スポンサーリンク
目次
パッケージ管理
DNF(YUM v4) の登場
RHEL 7 に搭載されていたパッケージ管理システムの YUM v3 が YUM v4 にアップグレードされました。
DNFとは、Python 2で書かれていたYUMの後継に位置づけられるパッケージ管理システムで、Python 3を利用しています。
これにより、パフォーマンスの向上と、Application Streams という新しいパッケージ管理法(後述)に対応しました。
これまでのYUMとの互換性は?
パッケージのインストールは、これまでと同様のコマンドで行うことができます。
ただし、YUMのプラグインに関しては互換性がないので、RHEL8用に移植されたもの以外は使用できない可能性があります。
ちなみに、RHELのyumコマンドは、dnf-3コマンドへのシンボリックリンクになっています。また、dnfコマンドもdnf-3へのシンボリックリンクになっており、どれを使っても結果同じコマンドを参照することになります。
$ ll /usr/bin | grep -P "(yum|dnf)"
lrwxrwxrwx. 1 root root 5 2月 14 21:02 dnf -> dnf-3
-rwxr-xr-x. 1 root root 1954 2月 14 21:02 dnf-3
lrwxrwxrwx. 1 root root 5 2月 14 21:02 yum -> dnf-3
DNFの使い方
前述したように、ほとんどの場合、DNFはYUMと同じコマンド操作を使うことができます。
ただし、一部動作が変更になったり、削除された機能があります。DNFのYUMとの相違点をまとめたページ(英語)を挙げておくので、参考にしてください。
Changes in DNF CLI compared to YUM
新しいパッケージ管理法「Application Streams」
YUMのアップデートと共に、パッケージ管理に追加された機能が、Application Streams です。
従来、RHELやCentOSのデフォルトリポジトリのパッケージは、OSリリース時からあまり頻繁にメジャーバージョンアップはされず、バグ修正等のバックポートが主でした。
例えば、RHEL7で現在提供されているOpenSSLは、2年以上前にリリースされたバージョン1.0.2kがベースとなっています。
OpenSSLに限らず、最新のバージョンの新機能を利用するには、ソースコードからのビルドが必要となることが珍しくありませんでした。また、リポジトリでは常に単一のバージョンのみが提供されていました。
Application Streams は、アプリケーションのバージョンをOSのバージョンと独立して柔軟に管理するパッケージ管理の概念です。Application Streams では、いくつかのバージョンから選択してパッケージをインストールすることができます。新しめのパッケージを導入することも、古いパッケージを導入することも可能です。ただし、一度にシステムに導入できるバージョンはどれか一つとなっています。
Application Streams によってインストールされる、特定のアプリケーション / ワークロードを構成するパッケージをまとめたものを、モジュールと呼びます。
Application Streams では、このモジュール単位でパッケージを管理します。(ちなみにFedora では、これと同等の機能をModularityと呼んでいます。)
Application Streams の利用法
AppStream というリポジトリを経由して利用することができます。
(1) まず、現在有効なリポジトリを確認します。subscription-manager コマンドを使用します。
$ subscription-manager repos --list-enabled
+----------------------------------------------------------+
/etc/yum.repos.d/redhat.repo で利用可能なリポジトリー
+----------------------------------------------------------+
リポジトリー ID: rhel-8-for-x86_64-baseos-rpms
リポジトリー名: Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)
リポジトリー URL: https://cdn.redhat.com/content/dist/rhel8/$releasever/x86_64/baseos/os
有効: 1
(2) 有効になっていない場合は、以下のコマンドで有効化します。
#AppStream リポジトリの有効化
$ subscription-manager repos --enable=rhel-8-for-x86_64-appstream-rpms
リポジトリー 'rhel-8-for-x86_64-appstream-rpms' は、このシステムに対して有効になりました。
#有効なリポジトリの確認
$ subscription-manager repos --list-enabled
+----------------------------------------------------------+
/etc/yum.repos.d/redhat.repo で利用可能なリポジトリー
+----------------------------------------------------------+
リポジトリー ID: rhel-8-for-x86_64-baseos-rpms
リポジトリー名: Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)
リポジトリー URL: https://cdn.redhat.com/content/dist/rhel8/$releasever/x86_64/baseos/os
有効: 1
リポジトリー ID: rhel-8-for-x86_64-appstream-rpms
リポジトリー名: Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
リポジトリー URL: https://cdn.redhat.com/content/dist/rhel8/$releasever/x86_64/appstream/os
有効: 1
(3) モジュール一覧を取得します。
$ dnf module list
Updating Subscription Management repositories.
Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
Name Stream Profiles Summary
389-ds 1.4 389 Directory Server (base)
ant 1.10 [d] common [d] Java build tool
container-tools 1.0 common [d] Common tools and dependencies for container runtimes
container-tools rhel8 [d] common [d] Common tools and dependencies for container runtimes
freeradius 3.0 [d] server [d] High-performance and highly configurable free RADIUS server
gimp 2.8 [d] common [d], devel gimp module
go-toolset rhel8 [d] common [d] Go
httpd 2.4 [d] common [d], devel, minimal Apache HTTP Server
idm DL1 common [d], adtrust, client, dns, server The Red Hat Enterprise Linux Identity Management system module
idm client [d] common [d] RHEL IdM long term support client module
inkscape 0.92.3 [d] common [d] Vector-based drawing program using SVG
javapackages-runtime 201801 [d] common [d] Basic runtime utilities to support Java applications
libselinux-python 2.8 common Python 2 bindings for libselinux
llvm-toolset rhel8 [d] common [d] LLVM
mailman 2.1 [d] common [d] Electronic mail discussion and e-newsletter lists managing software
mariadb 10.3 [d] client, server [d], galera MariaDB Module
maven 3.5 [d] common [d] Java project management and project comprehension tool
mercurial 4.8 [d] common [d] Mercurial -- a distributed SCM
mod_auth_openidc 2.3 Apache module suporting OpenID Connect authentication
mysql 8.0 [d] client, server [d] MySQL Module
nginx 1.14 [d] common [d] nginx webserver
nodejs 10 [d] common [d], development, minimal, s2i Javascript runtime
parfait 0.5 common Parfait Module
perl 5.24 common [d], minimal Practical Extraction and Report Language
perl 5.26 [d] common [d], minimal Practical Extraction and Report Language
perl-App-cpanminus 1.7044 [d] common [d] Get, unpack, build and install CPAN modules
perl-DBD-MySQL 4.046 [d] common [d] A MySQL interface for Perl
perl-DBD-Pg 3.7 [d] common [d] A PostgreSQL interface for Perl
perl-DBD-SQLite 1.58 [d] common [d] SQLite DBI driver
perl-DBI 1.641 [d] common [d] A database access API for Perl
perl-FCGI 0.78 [d] common [d] FastCGI Perl bindings
perl-YAML 1.24 [d] common [d] Perl parser for YAML
php 7.2 [d] common [d], devel, minimal PHP scripting language
pki-core 10.6 PKI Core
pki-deps 10.6 PKI Dependencies
postgresql 10 [d] client, server [d] PostgreSQL server and client module
postgresql 9.6 client, server [d] PostgreSQL server and client module
python27 2.7 [d] common [d] Python programming language, version 2.7
python36 3.6 [d] common [d], build Python programming language, version 3.6
redis 5 [d] common [d] Redis persistent key-value database
rhn-tools 1.0 [d] common [d] Red Hat Satellite 5 tools for RHEL
ruby 2.5 [d] common [d] An interpreter of object-oriented scripting language
rust-toolset rhel8 [d] common [d] Rust
satellite-5-client 1.0 [d][e] common [d], gui Red Hat Satellite 5 client packages
scala 2.10 [d] common [d] A hybrid functional/object-oriented language for the JVM
squid 4 [d] common [d] Squid - Optimising Web Delivery
subversion 1.10 [d] common [d], server Apache Subversion
swig 3.0 [d] common [d], complete Connects C/C++/Objective C to some high-level programming languages
varnish 6 [d] common [d] Varnish HTTP cache
virt rhel [d] common [d] Virtualization module
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Stream は、パッケージのバージョンを指します。リストを見ると、現状複数のバージョンが利用できるモジュールは少なめのようです。
Profilesは、モジュールを構成するRPMパッケージのバリエーションのことです。いくつかのモジュールで、サーバ用、クライアント用、開発用など複数のプロファイルが用意されており、用途に適したパッケージのセットがインストールされます。
各プロファイルにどんなパッケージが含まれているのかという情報は、リポジトリのデータをキャッシュしているディレクトリに格納されています。ファイルパスは、/var/cache/dnf/rhel-8-for-x86_64-appstream-rpms-*****/repodata/*****-modules.yaml.gz(*****は数字)です。
#*****は数字(長いので省略)
[root@rhel8b repodata]$ gunzip -c *****-modules.yaml.gz > /tmp/modules.yaml
[root@rhel8b repodata]$ less /tmp/modules.yaml
#例として、Python36のエントリを見てみる
document: modulemd
version: 2
data:
name: python36
------- 中略 -------
profiles:
build: #プロファイル"build"で提供されるパッケージ
rpms:
- python36
- python36-devel
- python36-rpm-macros
common: #プロファイル"common"で提供されるパッケージ
rpms:
- python36
.....
(4) モジュールをインストール・アンインストールする
dnf module install <モジュール名>:<Stream>/<プロファイル> でインストールできます。
#インストール
$ dnf module install postgresql:10/server
#アンインストール
$ dnf module remove postgresql:10/server
各パッケージのバージョンアップ
プリインストールされているパッケージや、RHEL公式のリポジトリ(BaseOSとAppStream)からインストールできる各種パッケージのバージョンも新しいものになっています。代表的なパッケージとそのバージョンを以下に挙げておきます。(2019年5月15日現在の情報です)
システム関連
- kernel 4.18
- rsyslog 8.37
- openssh 7.8p1
- openssl 1.1
- gnome-shell 3.28
プログラミング言語
- python 3.6
- python 2.7(短期サポートのみ)
- php 7.2
- ruby 2.5
- perl 5.26
- node.js 10.14
データベースサーバー
- MariaDB 10.3
- MySQL 8.0
- PostgreSQL 10
- PostgreSQL 9.6
- Redis 5.0
ネットワーク
- iptable 1.8
- firewalld 0.6
- nftables 0.9
- bind 9.11
- chrony 3.3
コンパイラー
- gcc 8.2
- glibc 2.28
- make 4.21
パッケージ管理
- dnf 4.0
- yum 4.0
- rpm 4.14
バージョン管理
- git 2.18
- subversion 1.10
Webサーバー
- httpd 2.4
- nginx 1.14
仮想化
- qemu-kvm 2.12
nftables
nftables は、iptables を置き換える目的で新たに実装されたパケットフィルターです。
とはいえ、デフォルトでは nftablesは RHEL 7 での iptables と同様に、firewalld のバックエンドとして動作するので、既に firewalld に移行している場合はあまり気にならないかもしれません。
nftables を利用するメリット
- フィルターの処理が、線形処理からテーブル探索に(処理速度の高速化)
- IPv4とIPv6をひとつのコマンドで管理可能に(ip6tables のような、IPv6専用コマンドは使いません)
- ネットワーク層以外のプロトコルも管理可能に(entablesとarptablesは、nftablesに統合されました)
- 一貫性があり、簡潔な文法(iptables の –dport のようなプロトコル独自の拡張はありません)
使用方法
nftables の追加により、RHEL8のファイアウォールの使用法は3種類になりました。
(1)firewalld + nftables(デフォルト)
従来通り、フロントエンドは firewalld で、バックエンドが nftables です。
既に firewalld に移行しているのであれば、引き続き同じ使い方ができます。
バックエンドが nftables に変更されていますが、firewalld の使用法に特に変更点はありません。
(2)nftables のみ
firewalld を使わずに、nftables デーモンのみを使ってファイアウォールを操作することも可能です。
nftables を操作するコマンドは、nft です。nft コマンドの詳細な使用法は以下のサイトが参考になります。
https://wiki.archlinux.jp/index.php/Nftables
firewalld から移行することも可能です。コマンドを以下に示します。
#現在のfirewalldの設定を nftables.conf へ上書きコピーする
$ nft list ruleset > /etc/sysconfig/nftables.conf
#firewalld の停止&自動起動無効化
$ systemctl disable firewalld
$ systemctl stop firewalld
# nftables の起動&自動起動有効化
$ systemctl start nftables
$ systemctl enable nftables
また、iptables のコマンドや設定ファイルを、nftables のコマンドや設定ファイルに変換するコマンドも存在するので、iptables の使い方しか知らなくても nftables を利用することができます。詳細は後述します。
(3)iptables のみ
RHEL7の時と同様に、dnf(yum)から iptables-services をインストールすれば、iptables コマンドと iptables ファイルを使ってファイアウォールを操作することができます。
#iptables-service のインストール
$ dnf install iptables-services
#firewalld の停止&自動起動無効化
$ systemctl disable firewalld
$ systemctl stop firewalld
#iptables の起動&自動起動有効化
$ systemctl start iptables
$ systemctl enable iptables
iptables から nftables への変換ツール
iptables-restore-translate や、ip6tables-restore-translate を使えば、iptables の設定ファイルを、nftables 用の設定ファイルに変換することができます。これにより、RHEL7以前の環境の設定ファイル引き継いでnftablesへ移行することが可能です。
#iptablesの設定を出力する
$ iptables-save > /tmp/iptables.dump
#iptablesの設定を変換して、nftables.conf へ上書きコピーする
$ iptables-restore-translate -f /tmp/iptables.dump > /etc/sysconfig/nftables.conf
#nftablesの設定を確認
$ nft list ruleset
#iptables の停止&自動起動無効化
$ systemctl disable iptables
$ systemctl stop iptables
#nftables の起動&自動起動有効化
$ systemctl start nftables
$ systemctl enable nftables
また、iptables-translate を使うと、iptables形式の設定をnftables形式の設定コマンドに変換することができます。
$ iptables-translate -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
nft add rule ip filter INPUT tcp dport 80 counter accept
crypto-policies
サーバーを運用していると、様々なアプリケーションやライブラリで暗号化処理をすることがあります。暗号化関連の設定(特に暗号スイートの設定)は、ただでさえ複雑なことに加え、様々なアプリケーションで同じような設定をする必要があり、暗号化を煩雑なものにしています。
crypto-policiesは、様々なアプリケーションの暗号スイートの設定を、OS側で一元管理することを可能にします。これにより、設定作業の簡略化や、システム全体での一貫したセキュリティーポリシーの確保がしやすくなります。
対応アプリケーション / ライブラリ
RHEL8リリース時点で、以下のアプリケーションやライブラリの暗号化スイートを制御することができます。
- GnuTLS library
- OpenSSL library
- NSS library
- OpenJDK
- Libkrb5
- BIND
- OpenSSH
- Libreswan
設定方法
あらかじめ用意されている4つのポリシーの中から1つを選択して適用します。各ポリシーごとに、許可する暗号スイートの強度に差があります。
各ポリシーの詳細は表のようになっています。
ポリシー名 | 詳細 |
---|---|
LEGACY |
古いシステムとの互換性を維持する。安全性は低い。 プロトコルは、TLS1.0、IKEv1、SSH2と、それ以降のバージョンをサポートする。暗号スイートとしてDSA、3DES、RC4をサポート。RSAとDHパラメーターは1024ビット以上。 |
DEFAULT(既定) |
現代の標準的なポリシーとして適している。 プロトコルは、TLS1.2とTLS1.3、IKEv2、SSH2をサポートする。RSAとDHパラメーターは2048ビット以上。 |
FUTURE |
近い将来の攻撃に耐え得るとされるポリシー。 DEFAULTまでの制限に加え、署名アルゴリズムがSHA-1のものを除外。RSAとDHパラメーターは3072ビット以上。 |
FIPS |
FIPS140-2の要件に準拠したポリシー。 OSをFIPSモードで利用する際に内部的に使用される。 |
ポリシーを変更するには、update-crypto-policies コマンドを使用します。
#現在のポリシーの確認
$ update-crypto-policies --show
DEFAULT
#ポリシーの変更(FUTUREに変更)
$ update-crypto-policies --set FUTURE
Setting system policy to FUTURE
Note: System-wide crypto policies are applied on application start-up.
It is recommended to restart the system for the change of policies
to fully take place.
コマンド例中でも表示されているように、新しいポリシーを適用するにはシステムの再起動(推奨)か、対象アプリケーションの再起動が必要になります。
削除された機能
- デフォルトユーザー “nfsnobody”
- 数字のみで構成されたユーザー名の作成
- ntpデーモン
- Btrfs ファイルシステム
- dmraid
- Apache Tomcat
…などなど
参考
Red Hat Enterprise Linux 8.0 リリースノート(日本語)
Considerations in adopting RHEL 8 (English)
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/
Red Hat Enterprise Linux 8 の暗号化ポリシーによる一貫したセキュリティ(英語)
https://www.redhat.com/en/blog/consistent-security-crypto-policies-red-hat-enterprise-linux-8
スポンサーリンク