Red Hat Enterprise Linux 8 新機能をわかりやすく解説【RHEL8】

Red Hat Enterprise Linux 8 のアイキャッチ画像

Red Hat Enterprise Linux 8RHEL8)が、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
Bash

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
Bash

 

(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
Bash

 

(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
Bash

 

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
.....
Bash

 

(4) モジュールをインストール・アンインストールする

dnf module install <モジュール名>:<Stream>/<プロファイル> でインストールできます。

#インストール
$ dnf module install postgresql:10/server

#アンインストール
$ dnf module remove postgresql:10/server
Bash

各パッケージのバージョンアップ

プリインストールされているパッケージや、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専用コマンドは使いません)
  • ネットワーク層以外のプロトコルも管理可能に(entablesarptablesは、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
Bash

 

また、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
Bash

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
Bash

また、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
Bash

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.
Bash

コマンド例中でも表示されているように、新しいポリシーを適用するにはシステムの再起動(推奨)か、対象アプリケーションの再起動が必要になります。

削除された機能

  • デフォルトユーザー “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

 

 

あわせて読みたい

コメントを残す

質問・感想などお気軽にどうぞ。
*が付いている項目は入力必須です。メールアドレス以外の項目が公開されます。
スパム防止のため、コメント反映まで少々時間がかかります。