RHEL9で作る自宅サーバ:OSの基本設定

RHEL9パソコン自宅サーバ

RHEL9インストール後、基本的な設定を行います。

fstabの変更

これは別にやらなくても良いけど、個人の趣味で/etc/fstabをわかりやすいように変更します。

インストール直後は

[root@ace ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Fri Feb  2 10:05:11 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=00a30021-e6a4-47ca-ba2f-2257a71ba4e3 /                       xfs     defaults        0 0
UUID=3835f475-b721-43f2-b46a-4148080dce2b /boot                   xfs     defaults        0 0
UUID=ce4436ab-3441-4f3b-96a7-227f4ff6b6fd none                    swap    defaults        0 0
[root@ace ~]#

と、各パーテションがUUID(インストール時に一意につけられた名前)になっているのでわかりにくい。

そこで、OSインストール時に設定したラベルに変更します。つけたラベルを忘れちゃった場合は

[root@ace ~]# blkid
/dev/sda3: LABEL="root" UUID="00a30021-e6a4-47ca-ba2f-2257a71ba4e3" TYPE="xfs" PARTUUID="3d8472b3-03"
/dev/sda2: LABEL="swap" UUID="ce4436ab-3441-4f3b-96a7-227f4ff6b6fd" TYPE="swap" PARTUUID="3d8472b3-02"
/dev/sda1: LABEL="boot" UUID="3835f475-b721-43f2-b46a-4148080dce2b" TYPE="xfs" PARTUUID="3d8472b3-01"
[root@ace ~]#

blkidコマンドで確認できます。

[root@ace ~]# vi /etc/fstab
[root@ace ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Fri Feb  2 10:05:11 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
LABEL=root /                       xfs     defaults        0 0
LABEL=boot /boot                   xfs     defaults        0 0
LABEL=swap none                    swap    defaults        0 0
[root@ace ~]# systemctl daemon-reload
[root@ace ~]#

こんな感じに編集して、systemctl daemon-reloadコマンドでエラーが出ないことを確認しておきます。

SELinuxの無効化

いつのものように自宅サーバにはSELinuxは必要ありません。無効化します。

その理由を以下に、ちょこっと書いておきます。

SELinuxとは簡単に言えば、従来のユーザ、グループのパーミッションの高機能版です。特にrootに対しても権限の制限を行えます。

しかし、SELinux及びサーバ上で動かすアプリの機能を全て理解して、ちゃんと設計しておかないと、セキュリティ上の穴が発生し、「使いにくいだけで、役に立たない」ものになってしまいます。

また、SELinuxは、サーバーへの侵入を防ぐ機能ではありません。サーバに侵入された後、被害を拡大させないためにユーザー(特にroot)の権限を制限するものです。それも「クラッカーの行動を少しでも邪魔できたらいいな」レベルです。

個人の自宅サーバレベルでは、クレジットカード情報のような「外部に絶対漏らしてはいけない秘密情報」など持っていません。

また、提供されているパッケージをそのまま使っていれば「セキュリティパッチはすでにテスト済みと考えて即時適用」で問題ないでしょう。まずはサーバの侵入を防ぐことに注力すべきです。

というわけで、SELinuxは管理コストに比べて、効果が少ないので使用しないことにしました。

RHEL9でSELinuxを無効化するにはgrubの変更が必要です。

grubの変更

[root@ace zeke]# grep options /boot/loader/entries/*.conf
/boot/loader/entries/ead4cf21e39848329dfbe4efb933b728-0-rescue.conf:options root=UUID=00a30021-e6a4-47ca-ba2f-2257a71ba4e3 ro resume=UUID=ce4436ab-3441-4f3b-96a7-227f4ff6b6fd
/boot/loader/entries/ead4cf21e39848329dfbe4efb933b728-5.14.0-362.18.1.el9_3.x86_64.conf:options root=UUID=00a30021-e6a4-47ca-ba2f-2257a71ba4e3 ro resume=UUID=ce4436ab-3441-4f3b-96a7-227f4ff6b6fd crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M
/boot/loader/entries/ead4cf21e39848329dfbe4efb933b728-5.14.0-362.8.1.el9_3.x86_64.conf:options root=UUID=00a30021-e6a4-47ca-ba2f-2257a71ba4e3 ro resume=UUID=ce4436ab-3441-4f3b-96a7-227f4ff6b6fd
[root@ace zeke]#

現状の設定を確認します。rootとswapパーティションがUUIDで指定されていますね。これもLABELに直してしまいましょう。
またOS起動時に

[   11.244720] vmwgfx 0000:00:02.0: [drm] *ERROR* vmwgfx seems to be running on an unsupported hypervisor.
[   11.244722] vmwgfx 0000:00:02.0: [drm] *ERROR* This configuration is likely broken.
[   11.244725] vmwgfx 0000:00:02.0: [drm] *ERROR* Please switch to a supported graphics device to avoid problems.

とエラーがでます。ビデオドライバが対応していないようです。VirtualBoxのGuestAditionsをインストールすれば治りそうな気がするのですが、GUIは使わないのでgrabでnomodesetを指定してVGAモードのままで起動するようにします。

さらにSELinuxの無効化のためにselinux=0を加えると

[root@ace zeke]# grubby --update-kernel=ALL --args="root=LABEL=root resume=LABEL=swap selinux=0 nomodeset"
[root@ace zeke]# grep options /boot/loader/entries/*.conf
/boot/loader/entries/ead4cf21e39848329dfbe4efb933b728-0-rescue.conf:options ro root=LABEL=root resume=LABEL=swap selinux=0 nomodeset
/boot/loader/entries/ead4cf21e39848329dfbe4efb933b728-5.14.0-362.18.1.el9_3.x86_64.conf:options ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M root=LABEL=root resume=LABEL=swap selinux=0 nomodeset
/boot/loader/entries/ead4cf21e39848329dfbe4efb933b728-5.14.0-362.8.1.el9_3.x86_64.conf:options ro root=LABEL=root resume=LABEL=swap selinux=0 nomodeset
[root@ace zeke]#

これで再起動してみましょう。

[root@ace zeke]# getenforce
Disabled
[root@ace zeke]#

正常に起動すること(rootとswapパーティションOK)、上記のコマンドでSELinuxが無効であること(selinux=0 OK)コンソール画面がVGAのままであること(nomodeset OK)でちゃんときいていることがかくにんできました。

SELinuxの拡張属性の削除

[root@ace ~]# ls -alZ
合計 28
dr-xr-x---.  3 root root system_u:object_r:admin_home_t:s0      163  2月  3 13:44 .
dr-xr-xr-x. 18 root root system_u:object_r:root_t:s0            255  2月  3 12:57 ..
-rw-------.  1 root root unconfined_u:object_r:admin_home_t:s0  876  2月  3 12:57 .bash_history
-rw-r--r--.  1 root root system_u:object_r:admin_home_t:s0       18  8月 11  2021 .bash_logout
-rw-r--r--.  1 root root system_u:object_r:admin_home_t:s0      141  8月 11  2021 .bash_profile
-rw-r--r--.  1 root root system_u:object_r:admin_home_t:s0      429  8月 11  2021 .bashrc
-rw-r--r--.  1 root root system_u:object_r:admin_home_t:s0      100  8月 11  2021 .cshrc
drwx------.  2 root root system_u:object_r:ssh_home_t:s0          6  2月  2 19:06 .ssh
-rw-r--r--.  1 root root system_u:object_r:admin_home_t:s0      129  8月 11  2021 .tcshrc
-rw-------.  1 root root system_u:object_r:admin_home_t:s0     1486  2月  2 19:12 anaconda-ks.cfg
-rw-r--r--   1 root root ?                                        0  2月  3 13:44 testfile
[root@ace ~]#

SELinuxを無効にするとそれ以降に作成したファイルに拡張属性(system_u:object_r:admin_home_t:s0 の部分)が付きません。これらのファイルが混在すると気持ち悪いですよね?

以下のコマンドですべての拡張属性を削除します。

[root@ace ~]# dnf -y install attr
:
:
[root@ace ~]# find / -exec setfattr -h -x security.selinux {} \;
:
:

こちらの記事を参考にさせていただきました。おかげでスッキリです。

[root@ace ~]# ls -alZ
合計 28
dr-xr-x---  3 root root ?  163  2月  3 13:44 .
dr-xr-xr-x 18 root root ?  255  2月  3 12:57 ..
-rw-------  1 root root ?  876  2月  3 12:57 .bash_history
-rw-r--r--  1 root root ?   18  8月 11  2021 .bash_logout
-rw-r--r--  1 root root ?  141  8月 11  2021 .bash_profile
-rw-r--r--  1 root root ?  429  8月 11  2021 .bashrc
-rw-r--r--  1 root root ?  100  8月 11  2021 .cshrc
drwx------  2 root root ?    6  2月  2 19:06 .ssh
-rw-r--r--  1 root root ?  129  8月 11  2021 .tcshrc
-rw-------  1 root root ? 1486  2月  2 19:12 anaconda-ks.cfg
-rw-r--r--  1 root root ?    0  2月  3 13:44 testfile
[root@ace ~]#

Firewallの変更

インターネットからの接続はルータによって特定のポートにしか届きませんが、さらにIPアドレス単位でも接続制限をかけられるように、Firewallは有効にしておきます。

特に、不正アクセスしてきたIPアドレスは、自動でBANする仕組みを入れられるようにします。

細かい設定は後にして、Firewallの設定はとりあえず、ローカルだけ全許可にしておきます。

[root@ace ~]# systemctl is-enabled firewalld
enabled
[root@ace ~]#
[root@ace ~]# firewall-cmd --permanent --zone=trusted --add-source=192.168.1.0/24
success
[root@ace ~]# firewall-cmd --permanent --zone=trusted --add-source=2001:2c0:cd03:ca00::/64
success
[root@ace ~]# firewall-cmd --permanent --zone=trusted --add-source=fe80::/64
success
[root@ace ~]# firewall-cmd --permanent --zone=public --remove-service=ssh
success
[root@ace ~]# firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
success
[root@ace ~]# firewall-cmd --permanent --zone=public --remove-service=cockpit
success
[root@ace ~]# firewall-cmd --reload
success
[root@ace ~]# firewall-cmd --list-all-zones
:
省略
:
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3
  sources:
  services:
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces:
  sources: 192.168.1.0/24 2001:2c0:cd03:ca00::/64 fe80::/64
  services:
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
:
省略
:
[root@ace ~]#

まずは「systemctl is-enabled firewalld」コマンドで、起動時にfirewalldが有効になっていることを確認。

「firewall-cmd –permanent~」コマンドで各種設定を行います。

内容は

  • ローカルネットのIPアドレス(IPv4&v6 IPv6はリンクローカルも忘れずに!)は、trustedゾーンに入れて、そこからのアクセスは全部許可にしておく。
  • インターフェースenp0s3が入っているゾーンpublicについては、cockpitとdhcpv6-clientは使わないので、外しておく。sshはsshサーバを立てるときに改めて設定するので、外しておく。

です。

「firewall-cmd –reload」コマンドで、設定を反映します。

「firewall-cmd –list-all-zones」で設定確認。(active)と有効になっているゾーンだけ抜粋しています。

歓迎メッセージを表示する

ログイン時、「Last login: ~」だけじゃ味気ないので、メッセージを表示させることにします。固定テキストだけなら/etc/motdに記述すればよいのですが、コマンドを実行させたい場合は、/etc/profile.d/motd.shを新規に作ります。

[root@ace ~]# vi /etc/profile.d/motd.sh
[root@ace ~]# cat /etc/profile.d/motd.sh
#!/bin/bash
#
USER_NAME=$( whoami )
if [ ${USER_NAME} != "root" ]; then
  echo -e "3[1;37mWelcome to "`hostname`"!3[0;39m"
  echo -e "This system is running on 3[1;39m"`cat /etc/redhat-release`"3[0;39m"
  echo -e "and launched from 3[1;39m"`uptime -s`".3[0;39m"
fi

[root@ace ~]# 

自分は一般ユーザでログインして、suコマンドでrootになる習慣ですので、rootにログインしたときは表示しないようにしました。

また、/etc/profile.d/motd.shに対して、実行権限はつけなくとも良いようです。

[root@ace ~]# ls -al /etc/motd.d/
合計 12
drwxr-xr-x  2 root root   29  2月  2 19:07 .
drwxr-xr-x 80 root root 8192  2月  3 13:52 ..
lrwxrwxrwx  1 root root   41  2月  2 19:07 insights-client -> /etc/insights-client/insights-client.motd
[root@ace ~]# rm /etc/motd.d/insights-client
rm: シンボリックリンク '/etc/motd.d/insights-client' を削除しますか? y
[root@ace ~]#

逆にログイン時にinsightsにシステムの登録を促すメッセージが出るので、こちらは削除しておきました。

[root@ace ~]# su zeke
Welcome to ace.zeke.ne.jp!
This system is running on Red Hat Enterprise Linux release 9.3 (Plow)
and launched from 2024-02-03 12:57:41.
[zeke@ace root]$

不要なサービスを停止する

RHEL9標準で入っているけど、使わないサービスは停止することにします。

[root@ace ~]# systemctl list-unit-files --state=enabled
UNIT FILE                          STATE   PRESET
auditd.service                     enabled enabled
chronyd.service                    enabled enabled
crond.service                      enabled enabled
dbus-broker.service                enabled enabled
firewalld.service                  enabled enabled
getty@.service                     enabled enabled
insights-client-boot.service       enabled enabled
irqbalance.service                 enabled enabled
kdump.service                      enabled enabled
microcode.service                  enabled enabled
NetworkManager-dispatcher.service  enabled enabled
NetworkManager-wait-online.service enabled disabled
NetworkManager.service             enabled enabled
nis-domainname.service             enabled enabled
rhsmcertd.service                  enabled enabled
rsyslog.service                    enabled enabled
selinux-autorelabel-mark.service   enabled enabled
sshd.service                       enabled enabled
sssd.service                       enabled enabled
systemd-boot-update.service        enabled enabled
systemd-network-generator.service  enabled enabled
dbus.socket                        enabled enabled
sssd-kcm.socket                    enabled enabled
reboot.target                      enabled enabled
remote-fs.target                   enabled enabled
dnf-makecache.timer                enabled enabled
logrotate.timer                    enabled enabled

27 unit files listed.
[root@ace ~]#

で、有効になっているサービス一覧を表示します。

以下のページでサービスの内容をチェックして、使わないものを無効にします。

自分の場合は、kdump.service(kdumpは使わない)、selinux-autorelabel-mark.service(SELinuxは使わない)は明らかに不要です。

[root@ace zeke]# systemctl disable kdump.service
Removed "/etc/systemd/system/multi-user.target.wants/kdump.service".
[root@ace zeke]# systemctl disable selinux-autorelabel-mark.service
Removed "/etc/systemd/system/sysinit.target.wants/selinux-autorelabel-mark.service".
[root@ace zeke]#

「systemctl disable」コマンドで停止です。起動も速くなって、にっこり。

起動時のエラーをチェックする

dmsegコマンドをたたくと起動時のメッセージが出てきます。

[root@ace zeke]# dmesg
[    0.000000] Linux version 5.14.0-362.18.1.el9_3.x86_64 (mockbuild@x86-64-01.build.eng.rdu2.redhat.com) (gcc (GCC) 11.4.1 20230605 (Red Hat 11.4.1-2), GNU ld version 2.35.2-42.el9) #1 SMP PREEMPT_DYNAMIC Wed Jan 3 15:54:45 EST 2024
[    0.000000] The list of certified hardware and cloud instances for Red Hat Enterprise Linux 9 can be viewed at the Red Hat Ecosystem Catalog, https://catalog.redhat.com.
[    0.000000] Command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-362.18.1.el9_3.x86_64 ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M root=LABEL=root resume=L
:
省略
:

その中で気になったメッセージをチェックします。

Unknown kernel command

Unknown kernel command line parameters "BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-362.18.1.el9_3.x86_64", will be passed to user space.

RedHat社の公式ページによると、想定されるメッセージで無視してよいとのことでした。

RETBleed警告

RETBleed: WARNING: Spectre v2 mitigation leaves CPU vulnerable to RETBleed attacks, data leaks possible!

RedHat社の公式ページによると、仮想マシン間でデータをやり取りできそうな、セキュリティ上問題がありそうだから出している警告メッセージだそうです。
仮想マシンは自分一人で使っているので、問題なさそうなので、公式ページに従って以下のようにメッセージが出ないようにしておきます。

[root@ace zeke]# grep options /boot/loader/entries/*.conf
/boot/loader/entries/ead4cf21e39848329dfbe4efb933b728-0-rescue.conf:options ro root=LABEL=root resume=LABEL=swap selinux=0 nomodeset
/boot/loader/entries/ead4cf21e39848329dfbe4efb933b728-5.14.0-362.18.1.el9_3.x86_64.conf:options ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M root=LABEL=root resume=LABEL=swap selinux=0 nomodeset
/boot/loader/entries/ead4cf21e39848329dfbe4efb933b728-5.14.0-362.8.1.el9_3.x86_64.conf:options ro root=LABEL=root resume=LABEL=swap selinux=0 nomodeset
[root@ace zeke]#
[root@ace ~]# grubby --update-kernel=ALL --args="retbleed=off"
[root@ace ~]# grep options /boot/loader/entries/*.conf
/boot/loader/entries/ead4cf21e39848329dfbe4efb933b728-0-rescue.conf:options ro root=LABEL=root resume=LABEL=swap selinux=0 nomodeset retbleed=off
/boot/loader/entries/ead4cf21e39848329dfbe4efb933b728-5.14.0-362.18.1.el9_3.x86_64.conf:options ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M root=LABEL=root resume=LABEL=swap selinux=0 nomodeset retbleed=off
/boot/loader/entries/ead4cf21e39848329dfbe4efb933b728-5.14.0-362.8.1.el9_3.x86_64.conf:options ro root=LABEL=root resume=LABEL=swap selinux=0 nomodeset retbleed=off
[root@ace ~]#

acpiのエラー

acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended configuration space under this bridge

公式サイトによるとActive-state power management (ASPM)に対応していないため、このメッセージが出るようです。
カーネルのオプションでpcie_aspm=offにすると抑止できそうでしたが、バージョン違いのためかうまくいきませんでした。
acpi=offならメッセージは出なくなりますが、シャットダウンで電源が落ちなくなったので、何も変えずに無視することにしました。

無効なDMIフィールドヘッダー

Detected virtualization oracle.
Detected architecture x86-64.
Invalid DMI field header.

以下のページの事象に似ています。VirtualBoxのバグ臭いです。とりあえず無視することにしました。

Intel(R) PRO/1000 Network Driverはメンテナンスされていない

e1000: Intel(R) PRO/1000 Network Driver
e1000: Copyright (c) 1999-2006 Intel Corporation.
Warning: Unmaintained hardware is detected:  e1000:100E:8086 @ 0000:00:03.0

VirtualBoxがエミュレートしているLANカードが古いから「もうメンテナンスされてません」と警告が出ます。昔からずっと変わっていないので「まぁ、そうだろうな」と思いつつ無視します。VirtualBoxの設定でネットワークカードを「準仮想化ネットワーク(virtio-net)」に変えて試してみましたが、ネットワーク速度が激減しました。相性が悪いんでしょうね。

お勧めのKindle本です!

コメント