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本です!
コメント