CentOS 7, Stream 8 のシステム管理系のコマンドのメモです。
記事の前提環境:
- CentOS 7 / Stream 8 (x86_64)
- インストールタイプ: Minimal Install
- インストール時のキーボードタイプ:
Japanese
を選択
Red Hat Enterprise Linux (RHEL) のドキュメント参考:
- CentOS 7 : Product Documentation for Red Hat Enterprise Linux 7
- CentOS 8/Stream 8 : Product Documentation for Red Hat Enterprise Linux 8
以下、本記事ではRHEL側のドキュメントを参考とする。
基本設定
システム管理でよく使う基本設定のメモ。
OSのバージョン情報
/etc/
の下の *-release
や *-version
ファイルをチェックする。
[CentOS 7/Stream 8 共通]
$ ls -l /etc/*release
-rw-r--r--. 1 root root 37 Nov 24 2020 /etc/centos-release
lrwxrwxrwx. 1 root root 21 Aug 22 23:36 /etc/os-release -> ../usr/lib/os-release
lrwxrwxrwx. 1 root root 14 Aug 22 23:36 /etc/redhat-release -> centos-release
lrwxrwxrwx. 1 root root 14 Aug 22 23:36 /etc/system-release -> centos-release
$ ls -l /etc/*version
[保有パッケージ: CentOS 7]
$ rpm -qf /usr/lib/os-release
centos-release-7-9.2009.1.el7.centos.x86_64
$ rpm -qf /etc/centos-release
centos-release-7-9.2009.1.el7.centos.x86_64
[保有パッケージ: CentOS Stream 8]
$ rpm -qf /usr/lib/os-release
centos-stream-release-8.5-3.el8.noarch
$ rpm -qf /etc/centos-release
centos-stream-release-8.5-3.el8.noarch
CentOS 7/Stream 8 でのファイル内容(例):
[例: CentOS 7 : /etc/centos-release]
$ cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[例: CentOS 7 : /etc/os-release]
$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
[例: CentOS Stream 8 : /etc/centos-release]
$ cat /etc/centos-release
CentOS Stream release 8
[例: CentOS Stream 8 : /etc/os-release]
$ cat /etc/os-release
NAME="CentOS Stream"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Stream 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_SUPPORT_PRODUCT_VERSION="CentOS Stream"
日付と時刻, ロケール, ホスト名
参考:
- Red Hat Enterprise Linux 7 システム管理者のガイド, 第1章 はじめに, 1.1. 環境の基本設定
- Red Hat Enterprise Linux 7 ネットワークガイド, 第6章 ホスト名の設定
- Red Hat Enterprise Linux 8 基本的なシステム設定の構成, 第2章 基本的な環境設定の変更
日付と時刻
$ man 1 date
$ date
Tue Aug 24 16:33:53 JST 2021
$ man 1 timedatectl
$ timedatectl
Local time: Tue 2021-08-24 16:33:42 JST
Universal time: Tue 2021-08-24 07:33:42 UTC
RTC time: Mon 2021-08-23 20:29:03
Time zone: Asia/Tokyo (JST, +0900)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
※設定を更新する際は sudo timedatectl ...
ロケール(システムの言語, 文字コード, キーボードレイアウト)
$ man 1 localectl
$ localectl
System Locale: LANG=en_US.UTF-8
VC Keymap: jp
X11 Layout: jp
※設定を更新する際は sudo localectl ...
ホスト名
man 1 hostnamectl
-
pretty hostname
- 記号など含むホスト名
- 例:
Lennart's Laptop
- 保存先:
/etc/machine-info
(未設定の場合は作成されない?) - see:
man 5 machine-info
-
static hostname
- 起動時に初期化されるkernel用ホスト名
- 例:
lennarts-laptop
- 保存先:
/etc/hostname
- see
man 5 hostname
-
transient hostname
- DHCPなどネットワーク設定で取得するホスト名
- static hostnameが使えないときのfallback用
$ man 1 hostnamectl
$ hostnamectl
Static hostname: centos-7-t01.localdomain
Icon name: computer-vm
Chassis: vm
Machine ID: 6a6bc562612f0247bc92fcfb812ee614
Boot ID: a9f7f9a98f71499cb5c78dc8e43d9113
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-1160.36.2.el7.x86_64
Architecture: x86-64
※設定を更新する際は sudo hostnamectl ...
NTP(chrony) の同期状態
CentOS 7/Stream 8 ではNTPクライアントとして chrony がデフォルトで使われる。
参考:
- manページ
-
man 5 chrony.conf
:/etc/chrony.conf
設定ファイル -
man 8 chronyd
: NTPデーモン -
man 1 chronyc
: NTPクライアント
-
- Red Hat Enterprise Linux 7 システム管理者のガイド
- Red Hat Enterprise Linux 8 基本的なシステム設定の構成
chronyd のインストール:
- インストール時にネットワーク接続を有効化し、NTPをONにすると chronyd がデフォルトでインストールされ、時刻同期が有効化される。
- ネットワーク接続を有効化しても、NTPがOFFのままだと chronyd がインストールされず、時刻同期も行われないケースがあった。
- この場合は、手動で chrony をインストールする必要がある。
$ sudo yum install chrony
or
$ sudo dnf install chrony
$ sudo systemctl enable chronyd
$ sudo systemctl start chronyd
$ sudo systemctl status chronyd
chrony の同期状態の確認:
$ chronyc sources
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- rilynn.me.uk 2 6 377 50 -5138us[-5031us] +/- 140ms
^* i172-105-204-167.poolntp> 3 6 337 47 +258us[ +365us] +/- 5107us
^- 152.115.59.242 2 6 377 46 -36us[ -36us] +/- 157ms
^- ktor1.k-ten.de 2 7 7 36 -1020us[-1020us] +/- 182ms
特に重要な M, S 列の見方(from RHEL7 "18.3.5.2. chrony ソースの確認"):
- M 列
- ソースのモードを示します。
-
^
はサーバーを意味し、=
はピアを意味し、#
はローカルに接続された基準クロックを意味します。
- S 列
- この列は、ソースの状態を示します。
-
*
: chronyd が現在同期しているソースを表します。 -
+
: 選択したソースと結合する、受け入れ可能なソースを表します。 -
-
: 受け入れ可能なソースで、結合アルゴリズムにより除外されたものを表します。 -
?
: 接続が切断されたソース、またはパケットがすべてのテストをパスしないソースを表します。少なくとも 3 つのサンプルが収集されるまで開始時にも表示されます。 -
x
: chronyd が falseticker と考える (つまり、その時間が他の大半のソースと一致しない) クロックを表します。 -
~
: 時間の変動性が大きすぎるように見えるソースを表します。
- 詳細は
chronyc(1)
参照
システムクロックを徐々に調整していく (slew) のを止め、一度に修正 (step) する:
$ sudo chronyc makestep
パッケージ管理(yum, dnf)
- RHEL, CentOS 7 まで
- YUM v3 をベースとした yum コマンドを使っていた。
- RHEL, CentOS 8 以降
- YUM v4 をベースとした dnf コマンドが導入され、今後はこちらがスタンダードとなる見込み。
- 概要: RHEL8, RHEL 8 の導入における検討事項, 第6章 ソフトウェア管理
-
yum
コマンドベースでのパッケージ管理の説明:- RHEL8, 基本的なシステム設定の構成, 第12章 ソフトウェアパッケージの管理
- RHEL8, Configuring basic system settings, Chapter 12. Managing software packages
-
dnf
とyum
コマンドの違い:- Changes in DNF CLI compared to YUM — dnf latest documentation
- 主な yum plugin は dnf の plugin でも提供している。
-
yum-utils
で提供されていたユーティリティコマンドについても dnf の plugin で提供している。 - これらの dnf plugin は
dnf-plugins-core
として、コアのプラグインとして組み込まれている。 -
dnf-plugins-core
が提供するプラグイン一覧については以下参照:- https://dnf-plugins-core.readthedocs.io/en/latest/index.html
- あるいは
rpm -ql dnf-plugins-core
からのmanページ参照 /man -k dnf
コマンド一覧等の参考資料
コマンド一覧(チートシート)等の参考資料:
-
Fedora User Docs / System Administrator’s Guide / Package Management / DNF
- Fedora によるDNFガイドで、全体像を掴みやすい資料になっている。
-
/etc/yum.repos.d/
以下の設定ファイルの書き方やリポジトリ管理も解説している。
-
@IT Linux基本コマンドTips 【dnf】コマンドシリーズ
-
Linuxシステムの勉強に役立つコマンドの紹介 - SSTエンジニアブログ
- 基本的には上記記事の「パッケージ情報の調査」セクションを参考。
- PDF: YUM コマンドチートシート for Red Hat Enterprise Linux
- yum|yum リポジトリの有効/無効
以下、上記参考資料[1] に未掲載のリポジトリ関連の操作を補足として載せる。
パッケージ更新
[CentOS Stream 8]
$ sudo dnf upgrade
-
upgrade
とdistro-sync
の違い:-
upgrade
は新しいパッケージバージョンが出ていればそれに更新する、最も一般的な用途。 -
distro-sync
はユーザが何らかの事情でディストリビューションより新しいバージョンを入れてしまってシステムが壊れてしまったときなどのために、ディストリビューション側の最新に揃え、結果としてダウングレードが発生することもある。- 標準的な公式リポジトリから
dnf install
したりdnf upgrade
しているだけならまず問題にはならないと思うが、他のリポジトリなども登録しているうちに、依存関係などで公式パッケージを上書きしてしまうなど混乱が生じた場合、一旦ディストリビューション公式のパッケージについては公式の最新バージョンに強制的に揃えるためのコマンド・・・だと、推測します。 - 参考
- https://kernhack.hatenablog.com/entry/2015/07/20/113059
- https://forums.fedoraforum.org/showthread.php?310166-What-s-the-differentce-between-the-dnf-commands-quot-distro-sync-quot-and-quot-upgrade-quot
- https://docs.fedoraproject.org/en-US/quick-docs/upgrading-fedora-offline/#sect-using-distro-sync-to-resolve-dependency-issues
- 標準的な公式リポジトリから
-
- Fedora の DNF を使ったシステム更新ガイド: Quick Docs / Upgrading to a new release / Upgrading Fedora using the DNF system upgrade
パッケージの情報取得
# 基本的なパッケージ情報の表示 (インストール済み)
$ rpm -qi procps-ng
# まだインストールしていないパッケージ情報の表示
$ dnf info <<package_name>>
$ dnf repoquery <<package_name>> --info
# どのリポジトリから追加されたのか?を知りたいときは dnf info
$ dnf info procps-ng
(...)
From repo : baseos #<<<<<<<<< リポジトリ情報
(...)
# インストール済みパッケージ一覧
$ rpm -qa
# インストール済みパッケージのファイル一覧
$ rpm -ql <<package_name>>
# 依存パッケージの表示
$ rpm -qR <<package_name>>
# changelogの表示
$ rpm -q --changelog <<package_name>>
# カスタムスクリプトの表示
$ rpm -q --scripts <<package_name>>
$ rpm -q --triggers <<package_name>>
$ rpm -q --triggers --scripts <<package_name>>
NOTE: rpm -q
系で、ローカルファイル上にある .rpm
ファイルの情報を確認したい場合は -q
に p
を加える。例: rpm -qpi
, rpm -qpl
, rpm -qp --changelog
, rpm -qp --triggers --scripts
ファイルの所有者, パーミッション一覧
$ rpm -q --qf "[%{FILEMODES:perms} %{FILEUSERNAME}:%{FILEGROUPNAME} %{FILENAMES}\n]" <package-name>
$ rpm -qp --qf "[%{FILEMODES:perms} %{FILEUSERNAME}:%{FILEGROUPNAME} %{FILENAMES}\n]" foobar.rpm
リポジトリ一覧/詳細/追加
[CentOS 7]
(enabledのみ)
$ sudo yum repolist
$ sudo yum repolist enabled
(disabled含む一覧)
$ sudo yum repolist all
(baseリポジトリの詳細)
$ sudo yum repolist base -v
(リポジトリの追加)
$ sudo yum install -y yum-utils
$ sudo yum-config-manager --add-repo <repository-url>
[CentOS Stream 8]
(enabledのみ)
$ dnf repolist
$ dnf repolist enabled
(disabled含む一覧)
$ dnf repolist all
(baseリポジトリの詳細)
$ dnf repolist baseos -v
(リポジトリの追加)
$ sudo dnf config-manager --add-repo <repository-url>
EPEL(Extra Packages for Enterprise Linux repository configuration) のインストール
[CentOS 7]
$ sudo yum search epel
(...)
============================================================ N/S matched: epel =============================================================
epel-release.noarch : Extra Packages for Enterprise Linux repository configuration
$ sudo yum install epel-release
[CentOS Stream 8]
$ sudo dnf search epel
(...)
============================================================ Name Matched: epel ============================================================
epel-next-release.noarch : Extra Packages for Enterprise Linux Next repository configuration
epel-release.noarch : Extra Packages for Enterprise Linux repository configuration
$ sudo dnf install epel-release
パッケージの検索とインストール例: screen
[CentOS 7]
$ sudo yum --disablerepo=* --enablerepo=base search screen
(...)
=========================================================== N/S matched: screen ============================================================
(...)
screen.x86_64 : A screen manager that supports multiple logins on one terminal
(...)
→ base リポジトリで見つかったので、そのままインストール
$ sudo yum --disablerepo=* --enablerepo=base install screen
[CentOS Stream 8]
$ sudo dnf --disablerepo=* --enablerepo=baseos search screen
→ 見つからない。
$ sudo dnf --disablerepo=* --enablerepo=epel search screen
(...)
====================================================== Name & Summary Matched: screen ======================================================
screen.x86_64 : A screen manager that supports multiple logins on one terminal
(...)
→ EPEL リポジトリにあったのでインストール
$ sudo dnf --disablerepo=* --enablerepo=epel install screen
パッケージグループの情報取得
[CentOS Stream 8]
# パッケージグループ一覧表示
$ dnf group list
# パッケージグループ一覧表示(英語で表示)
$ LANG=C dnf group list
# --hidden | --installed | --available | --ids はどれか一つだけ指定できる。
$ dnf group list --hidden
$ dnf group list --installed
$ dnf group list --available
# (group id を表示したいときは --ids オプション。)
$ dnf group list --ids
(-v をつけても良い)
# 特定のパッケージグループに含まれるパッケージ一覧
$ dnf group info "Development Tools"
(dnf group list --ids で表示されるIDを指定する場合:)
$ dnf group info development
(パッケージのバージョンまで表示したい場合:)
$ dnf -v group info "Development Tools"
$ dnf -v group info development
(info コマンドはインストールしていないパッケージグループでも使える)
# パッケージグループのインストール例
$ sudo dnf group install "Development Tools"
dnf group
コマンド参考:
- How to work with dnf package groups - Linux Tutorials - Learn Linux Configuration
- dnf(yum) groupinstallでは何がインストールされているのか - Qiita
AppStream (RHEL8, CentOS8以降)
参考:
- Red Hat Enterprise Linux 8
- RHEL 8 の導入における検討事項, 第4章 アプリケーションストリーム
-
ユーザー空間コンポーネントのインストール、管理、および削除
- ここに全て書かれてる
- Make & Review | RHEL/CentOS8のAppStream 知識整理
- Red Hat Enterprise Linux 8 で 10年維持されるパッケージはどれ? - 赤帽エンジニアブログ
コマンド抜粋:
[モジュールの一覧/詳細]
$ sudo dnf module list
$ sudo dnf module list (module-name)
$ sudo dnf module info (module-name)
[パッケージインストール前にストリームを有効化]
$ sudo dnf module enable (module-name):(stream)
[モジュールのコンテンツ(=パッケージ一式)をインストール]
$ sudo dnf module install (module-name)
$ sudo dnf module install (module-name):(stream)
$ sudo dnf module install (module-name):(stream)/(profile)
[アクティブなストリームからすべてのパッケージを削除]
$ sudo dnf module remove --all (module-name)
$ sudo dnf module remove --all (module-name):(stream)
$ sudo dnf module remove --all (module-name):(stream)/(profile)
[モジュールを初期状態へのリセット]
$ sudo dnf module reset (module-name)
[モジュールおよびそのストリームの無効化]
$ sudo dnf module disable (module-name)
NetworkManager によるコマンドライン操作
設定ファイルではなく、NetworkManager によるGUI/tui/cui操作で設定する方が無難そう。
コマンドライン操作ではCUIである nmcli(1)
を使う方法がシンプル。
参考:
- Red Hat Enterprise Linux 7 ネットワークガイド
- Red Hat Enterprise Linux 8 ネットワークの設定および管理
man 1 nmcli
- nmcliチートシート - Qiita
- nmcliコマンドの基礎 - えんでぃの技術ブログ
ネットワークインターフェイス名の命名規則
ネットワークインターフェイス名について、CentOS 7, Stream 8 では Predictable Network Interface Names という命名規則を採用している。
以前の kernel起動時に検出した eth0
, eth1
, ... という命名ルールでは、hot-plugデバイスへの対応や検出順序によりインターフェイス名が入れ替わる(ずれる)などの課題があった。
Predictable Network Interface Names を使うことで、全体として一貫した命名規則、つまりデバイス間で一意に名前が定まり、インターフェイス名が入れ替わることも無くなる。
設定により、以前の命名規則に戻すことも可能。
systemd v197 で導入された Predictable Network Interface Names については以下を参照:
- NetworkInterfaceNames - Debian Wiki
- Predictable Network Interface Names
- ほげめも: Debian vs Ubuntu: ネットワークインタフェースの名前
CentOS 7/8 系 = RHEL7/8系でのインターフェイス名命名規則については以下を参照。
- Red Hat Enterprise Linux 7 ネットワークガイド, 第11章 ネットワークデバイス命名における一貫性
- Red Hat Enterprise Linux 8 ネットワークの設定および管理, 第1章 一貫性のあるネットワークインターフェースデバイスの命名
nmcli の使い方
bash-completion
パッケージを入れると nmcli のコマンド補完が有効になるのでおすすめ:
[RHEL7/CentOS7]
$ sudo yum install bash-completion
→ログアウト後、ログインし直す。
[RHEL8/CentOS8/CentOS Stream 8]
$ sudo dnf install bash-completion
→ログアウト後、ログインし直す。
general, networking コマンド例:
[NetworkManager全体のステータス表示]
$ sudo nmcli general
$ sudo nmcli general status
STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN
connected full enabled enabled enabled enabled
[ホスト名(static hostname)の表示]
$ sudo nmcli general hostname
[ホスト名(static hostname)の設定]
$ sudo nmcli general hostname (new-hostname)
[ネットワーク管理のON/OFF]
$ sudo nmcli networking on
$ sudo nmcli networking off
デバイスと接続プロファイル
NetworkManager ではイーサネットアダプタなど物理的な「デバイス」と、そのデバイスでの「接続」設定を分離している。
これにより、例えばイーサネットアダプタのあるノートPCを自宅と職場で持ち歩くときに、1つのデバイス(ノートPCのイーサネットアダプタ)に対して自宅/職場それぞれの接続設定を接続プロファイルとして切り替えるような使い方が可能となる。
nmcli device ...
で始まるコマンドがデバイス、つまりネットワークインターフェイスを操作するコマンドになる。
nmcli connection ...
で始まるコマンドが接続プロファイルを操作するコマンドになる。
デバイスと接続プロファイルについては以下の資料の解説が分かりやすい:
[ネットワークインターフェイス一覧]
$ sudo nmcli device
$ sudo nmcli device status
[ネットワークインターフェイス設定値一覧]
$ sudo nmcli device show (device-name)
[接続プロファイル一覧]
$ sudo nmcli connection show
[接続プロファイルの設定値一覧]
$ sudo nmcli connection show (connection-name)
[接続プロファイルの設定変更]
$ sudo nmcli connection modify (connection-name) (設定項目名) (値)
[例: 接続プロファイル名の変更]
$ sudo nmcli connection modify (old-connection-name) connection.id (new-connection-name)
[接続プロファイルの起動(= 接続)]
$ sudo nmcli connection up (connection-name)
[接続プロファイルの停止(= 切断)]
$ sudo nmcli connection down (connection-name)
[接続プロファイルの削除]
$ sudo nmcli connection delete (connection-name or connection-uuid)
接続プロファイルの自動接続ON/OFF
[自動接続の確認]
$ sudo nmcli -f name,autoconnect connection show
[自動接続ON]
$ sudo nmcli connection modify (connection-name) connection.autoconnect yes
[自動接続OFF]
$ sudo nmcli connection modify (connection-name) connection.autoconnect no
DHCPをON
[DHCP用の接続プロファイルを追加]
$ sudo nmcli connection add con-name (new-connection-name) ifname (device-name) type ethernet
[IPアドレス/ゲートウェイ/DNSの設定を空に戻す]
$ sudo nmcli connection modify (connection-name) ipv4.dns ""
$ sudo nmcli connection modify (connection-name) ipv4.gateway ""
(or
$ sudo nmcli connection modify (connection-name) ipv4.gateway 0.0.0.0
)
$ sudo nmcli connection modify (connection-name) ipv4.addresses ""
※ ipv4.gateway を空にしてから、ipv4.addresses を空にする。逆だとエラーになる。
[DHCPを有効化]
$ sudo nmcli connection modify (connection-name) ipv4.method auto
[既存プロファイルの修正の場合、一度停止]
$ sudo nmcli connection down (connection-name)
[接続プロファイルを起動]
$ sudo nmcli connection up (connection-name)
ipv4.xxx
の手動設定が残ったままだと、DHCPで取得したIP/ゲートウェイ/DNS情報と、手動設定が両方有効な状態となる。
参考:
- Red Hat Enterprise Linux 7 ネットワークガイド, 3.3.7. nmcli を使用した動的イーサネット接続の追加および設定
- Red Hat Enterprise Linux 8 ネットワークの設定および管理, 8.5. nmcli で動的イーサネット接続の設定
DHCPを無効化し、IPアドレス/ゲートウェイ/DNSを手動設定
接続プロファイルのIPアドレスを ipv4.addresses
で設定した後に、 ipv4.method
を manual
に設定する。
( ipv4.addresses
が空の状態で ipv4.method
を manual
に変更しようとすると 「ipv4.addresses
が空の状態で manual
に設定することはできません」という趣旨のエラーメッセージが表示される)
[手動設定用の接続プロファイルを追加]
$ sudo nmcli connection add con-name (new-connection-name) ifname (device-name) type ethernet
[IPアドレス設定]
$ sudo nmcli connection modify (connection-name) ipv4.addresses 192.168.1.10/24
[デフォルトゲートウェイ設定]
$ sudo nmcli connection modify (connection-name) ipv4.gateway 192.168.1.1
[DNS設定]
$ sudo nmcli connection modify (connection-name) ipv4.dns "8.8.8.8 8.8.4.4"
[DHCPを無効化]
$ sudo nmcli connection modify (connection-name) ipv4.method manual
[既存プロファイルの修正の場合、一度停止]
$ sudo nmcli connection down (connection-name)
[接続プロファイルを起動]
$ sudo nmcli connection up (connection-name)
参考:
- Red Hat Enterprise Linux 7 ネットワークガイド, 3.3.8. nmcli を使用した静的イーサネット接続の追加および設定
- Red Hat Enterprise Linux 8 ネットワークの設定および管理, 8.1. nmcli を使用した静的イーサネット接続の設定
DNSの追加/削除
[追加]
$ sudo nmcli connection modify (connection-name) +ipv4.dns 8.8.8.8
$ sudo nmcli connection modify (connection-name) +ipv4.dns "8.8.8.8 8.8.4.4"
[削除]
$ sudo nmcli connection modify (connection-name) -ipv4.dns 8.8.8.8
$ sudo nmcli connection modify (connection-name) -ipv4.dns "8.8.8.8 8.8.4.4"
参考: 公開DNSキャッシュサーバー(パブリックDNS)
-
Google Public DNS
- primary:
8.8.8.8
- secondary:
8.8.4.4
- primary:
- Cloudflare
-
Announcing 1.1.1.1: the fastest, privacy-first consumer DNS service
- primary:
1.1.1.1
- secondary:
1.0.0.1
- primary:
-
Introducing 1.1.1.1 for Families
- Malware Blocking Only
- primary:
1.1.1.2
- secondary:
1.0.0.2
- primary:
- Malware and Adult Content
- primary:
1.1.1.3
- secondary:
1.0.0.3
- primary:
- Malware Blocking Only
- Cloudflareが無料の新DNSサービス「1.1.1.1 for Families」発表。DNSのレベルでアダルトコンテンツやマルウェアをブロック - Publickey
- 1.1.1.1 - Wikipedia
-
Announcing 1.1.1.1: the fastest, privacy-first consumer DNS service
静的ルート/ゲートウェイの設定
参考:
- Red Hat Enterprise Linux 7 ネットワークガイド, 第4章 静的ルートおよびデフォルトゲートウェイの設定
- Red Hat Enterprise Linux 8 ネットワークの設定および管理
静的ルート設定:
[上書き設定]
$ sudo nmcli connection modify (connection-name) ipv4.routes "ip[/prefix] [next_hop]"
$ sudo nmcli connection modify (connection-name) ipv4.routes "ip[/prefix] [next_hop] [metric] [attribute=value] [attribute=value] ..."
[ルートの追加]
$ sudo nmcli connection modify (connection-name) +ipv4.routes "ip[/prefix] [next_hop]"
$ sudo nmcli connection modify (connection-name) +ipv4.routes "ip[/prefix] [next_hop] [metric] [attribute=value] [attribute=value] ..."
[ルートの削除]
$ sudo nmcli connection modify (connection-name) -ipv4.routes "ip[/prefix] [next_hop]"
$ sudo nmcli connection modify (connection-name) -ipv4.routes "ip[/prefix] [next_hop] [metric] [attribute=value] [attribute=value] ..."
複数の接続プロファイルがアクティブなときのデフォルトゲートウェイについては、metric指定をして制御できる:
$ sudo nmcli connection modify (connection-name) ipv4.route-metric (new-metric)
$ sudo nmcli connection modify (connection-name) ipv4.route-metric (new-metric) ipv6.route-metric (new-metric)
ルーティングテーブルの確認:
$ sudo ip r
$ sudo ip -4 r
$ sudo ip -6 r
$ tracepath -n (ip-address)
$ tracepath -n (internet-hostname)
manページのEXAMPLESから抜粋
manページの最後にEXAMPLESがあり、実際のコマンド例がいろいろ紹介されている。
個人的に気になったものをいくつか抜粋する。
-
nmcli connection show --active
- アクティブな接続プロファイルを一覧表示する。
-
nmcli -f name,autoconnect c s
- 接続プロファイル名と
connection.autocnnect
プロパティを一覧表示する。 - 全体的に
-f
で表示するフィールド名を指定できる。
- 接続プロファイル名と
-
nmcli -p connection show "My default em1"
- "My default em1" 接続プロファイルの詳細を表示する。
- 全体的に
-p
により、より分かりやすい表示になる。(-p = --pretty
)
-
nmcli dev disconnect em2
- デバイス em2 を切断する。デバイス自体が利用不可能となるため、 autoconnect が有効な接続プロファイルがあっても接続が確立されない。
- 明示的に
nmcli device connect (device-name)
するか、デバイスのautoconnect
をTRUEにしないと、自動接続が動作しない。
セキュリティ
ファイアウォール(firewalld)
- Red Hat Enterprise Linux 7 セキュリティーガイド, 第5章 ファイアウォールの使用
- Red Hat Enterprise Linux 8 ネットワークの設定および管理, 第48章 firewalld の使用および設定
- firewall-cmdコマンドの使い方 - Qiita
- CentOS 7 firewalld よく使うコマンド - Qiita
コマンド抜粋:
[起動/停止/状態確認]
$ sudo systemctl start firewalld.service
$ sudo systemctl stop firewalld.service
$ sudo systemctl status firewalld.service
$ sudo firewall-cmd --state
[自動起動ON/OFF/確認]
$ sudo systemctl enable firewalld.service
$ sudo systemctl disable firewalld.service
$ sudo systemctl is-enabled firewalld.service
[デフォルトゾーン/アクティブゾーンの確認]
$ sudo firewall-cmd --get-default-zone
$ sudo firewall-cmd --get-active-zones
[すべてのゾーン/指定したゾーンの設定確認]
$ sudo firewall-cmd --list-all-zones
$ sudo firewall-cmd --list-all --zone=(zone-name)
[すべてのゾーン/指定したゾーンの恒久的な設定確認]
$ sudo firewall-cmd --list-all-zones --permanent
$ sudo firewall-cmd --list-all --zone=(zone-name) --permanent
[デフォルトゾーンの変更]
$ sudo firewall-cmd --set-default-zone=(zone-name)
$ sudo firewall-cmd --set-default-zone=(zone-name) --permanent
[アクティブゾーンの変更]
$ sudo firewall-cmd --zone=(zone-name) --change-interface=(if-name)
$ sudo firewall-cmd --zone=(zone-name) --change-interface=(if-name) --permanent
[設定の再読み込み]
$ sudo firewall-cmd --reload
[利用可能なサービス一覧]
$ sudo firewall-cmd --get-services
[許可サービスの追加/削除]
$ sudo firewall-cmd --add-service=(service-name) --zone=(zone-name)
$ sudo firewall-cmd --add-service=(service-name) --zone=(zone-name) --permanent
$ sudo firewall-cmd --remove-service=(service-name) --zone=(zone-name)
$ sudo firewall-cmd --remove-service=(service-name) --zone=(zone-name) --permanent
[ポート番号許可の追加/削除]
$ sudo firewall-cmd --add-port=(port-number)/{tcp|udp} --zone=(zone-name)
$ sudo firewall-cmd --add-port=(port-number)/{tcp|udp} --zone=(zone-name) --permanent
$ sudo firewall-cmd --remove-port=(port-number)/{tcp|udp} --zone=(zone-name)
$ sudo firewall-cmd --remove-port=(port-number)/{tcp|udp} --zone=(zone-name) --permanent
[IPアドレス許可の追加/削除]
$ sudo firewall-cmd --add-source=192.168.0.0/24 --zone=(zone-name)
$ sudo firewall-cmd --add-source=192.168.0.0/24 --zone=(zone-name) --permanent
$ sudo firewall-cmd --remove-source=192.168.0.0/24 --zone=(zone-name)
$ sudo firewall-cmd --remove-source=192.168.0.0/24 --zone=(zone-name) --permanent
[IPアドレス拒否の追加/削除]
$ sudo firewall-cmd --add-source=192.168.0.0/24 --zone=drop
$ sudo firewall-cmd --add-source=192.168.0.0/24 --zone=drop --permanent
$ sudo firewall-cmd --remove-source=192.168.0.0/24 --zone=drop
$ sudo firewall-cmd --remove-source=192.168.0.0/24 --zone=drop --permanent
RHELドキュメントの逆引き
RHELドキュメントはたくさんの種類が公開されており、どこに何が書かれてあるかすぐに探すのが難しい。
そのため、筆者の方で主なRHELドキュメントのトピックを抜粋してみた。
CentOSでシステム構築をする際に、キーワードで探してみて、そこからRHELのドキュメントを逆引きするのに使ってほしい。
RHEL8 ドキュメントの逆引き
全体:
一般的なシステム設定:
-
「基本的なシステム設定の構成」
- 日付と時刻
- システムロケールの設定
- キーボードレイアウトの設定
- ネットワーク設定(基礎編)
- systemd
- ファイアウォールの設定(基礎編)
- SELinuxの設定(基礎編)
- ユーザーアカウント管理, sudo/sudoers管理, rootユーザパスワードのリセットなど
- kdump, syslog設定
- yum によるパッケージ管理, 自動更新設定
- システムのシャットダウン/再起動
- systemd, systemctl によるサービス管理, 独自ユニットファイルの作成
- ファイル権限, umask管理
- chrony による時刻同期
- OpenSSHの設定と管理
- rsyslogによるリモートロギング設定
- Python, PHP, Tcl/Tk の使用ガイド
-
「さまざまな種類のサーバーのデプロイメント」
- Apache HTTPD
- nginx
- samba
- BIND DNS
- NFS
- squid
- データベース (MariaDB, PostgreSQL)
- SMTP(sendmail, postfix), POP/IMAP(Dovecot)
- 印刷(cups)
-
「カーネルの監視および更新の管理」
- kernel RPMパッケージの構成, yum による更新
- kernel モジュールの管理
- kernel コマンドラインパラメータ設定
- sysctl によるパラメータ設定
- データベースサーバ向けのkernelパラメータ調整
- printk, dmesg,
/var/log/boot.log
等の kernel logging (ring buffer) - kdump の詳細な管理と設定
- crash を使ったコアダンプ解析
- kernel の live patch
- コントロールグループ (cgroups v1, v2) の解説とsystemdによる管理
- eBPFとbcc-toolsの紹介
ネットワークとセキュリティ:
-
「ネットワークの設定および管理」
- デバイス名の命名規則
- NetworkManager, nmtui, nmcli によるネットワーク/WiFi設定の詳細
- VLAN/ネットワークブリッジ/チーミング/ボンディング設定の詳細
- VPN, IPSec 設定の詳細
- IPトンネル(IPIP, GRE)の詳細
- ポートミラーリングの設定
- 802.1x標準の使用
- ルーティング設定(デフォルトゲートウェイ, 静的ルート)の詳細
- ダミーインターフェイスとnetconsoleの紹介
- systemd とのインテグレーション
- トラフィック制御 (qdiscs, tc)
- Multipath TCP の使用
- DNSの優先度設定の詳細,
/etc/resolv.conf
の手動設定 - ethtool によるオフロード/コロケーター機能の設定
- ping, host ユーティリティの紹介
- DHCPサービスの詳細
- BIND DNSの設定と管理
- firewalld, nftablesの詳細
- eBPF と bcc-tools の詳細
- その他高度なネットワーク設定の管理
-
「ネットワークのセキュリティー保護」
- OpenSSHの詳細
- RHEL8におけるSSL/TLSの設定詳細
- IPSec, firewalld, nftables の詳細
-
「セキュリティー更新の管理および監視」
- セキュリティ情報の参照先
- セキュリティ更新の一覧取得とインストール
-
「セキュリティーの強化」
- システム全体の暗号化ポリシー設定
- FIPSモードの使用
- Crypto Policies を使ったカスタム暗号ポリシーの設定
- PKCS#11 で暗号化ハードウェアを使用する設定
- 証明書ストアの管理と証明書の追加
- SCAPを使った設定コンプライアンスと脆弱性スキャン
- LUKSを使用したブロックデバイスの暗号化
- auditd を使ったシステム監査
- USBGuard によるUSBデバイスからの保護
- その他高度なセキュリティ設定
-
「SELinuxの使用」
- Permissive/Enforcingモードの切り替えと無効化
- 制限のあるユーザ/ないユーザ, sysadm_u による管理者の制約, sudo と sysadm_r ロールによる制約
- トラブルシューティングとauditログ
- MLS(Multi-Level Security) の詳細
- カスタムSELinuxポリシーの作成
- コンテナのSELinuxポリシーの作成
- SELinux設定のデプロイメント
GNOMEデスクトップ環境:
-
「RHEL 8 でデスクトップ環境の使用」
- GNOME3, GNOME Standard / Classic の紹介と選択方法, カスタマイズ方法
- リモートデスクトップアクセス(VNC)
- GNOME設定 (dconf, gsettings)
- GNOMEのカスタマイズ
- 日本語入力のインストール
開発系:
-
「RHEL 8 での C および C ++ アプリケーションの開発」
- gccによるC/C++のコンパイルとビルド, 静的/動的ライブラリ作成
- make, Makefile によるソースコード管理
- デバッグ情報の使用とgdbによるデバッグ
- strace/ltrace/SystemTap/gdbによるシステムコールのトレースと監視
- コアダンプ解析
- GCC Toolset 9/10 とbinutilsの紹介
-
「Product Documentation for OpenJDK 11」
-
「RHEL での OpenJDK 11 のインストールおよび使用 OpenJDK 11」
- yum/dnfによるOpenJDKのインストールと更新
-
「RHEL での OpenJDK 11 の設定 OpenJDK 11」
- 複数バージョンのOpenJDKのインストールと切り替え方法(
alternatives --config java
など )
- 複数バージョンのOpenJDKのインストールと切り替え方法(
-
「RHEL での OpenJDK 11 のインストールおよび使用 OpenJDK 11」
-
「ソフトウェアのパッケージ化および配布」
- RPMパッケージの作成と署名, サンプル紹介