CentOS8で構築する自宅サーバ:OSの基本設定

CentOS8Firewallパソコン自宅サーバ

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

fstabの変更

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

インストール直後は

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

#
# /etc/fstab
# Created by anaconda on Fri Feb 14 07:10:31 2020
#
# 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=38b41aad-167a-476e-bf12-4fafcf49e909 /                       xfs     defaults        0 0
UUID=b5813a80-9e74-4abd-a35f-e648bcccea7a /boot                   ext4    defaults        1 2
UUID=53877d0f-38fb-431f-906a-657cf0f10a93 swap                    swap    defaults        0 0
[root@ace ~]#

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

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

[root@ace ~]# blkid
/dev/sda1: LABEL="boot" UUID="b5813a80-9e74-4abd-a35f-e648bcccea7a" TYPE="ext4" PARTUUID="d37eb7b2-01"
/dev/sda2: LABEL="swap" UUID="53877d0f-38fb-431f-906a-657cf0f10a93" TYPE="swap" PARTUUID="d37eb7b2-02"
/dev/sda3: LABEL="root" UUID="38b41aad-167a-476e-bf12-4fafcf49e909" TYPE="xfs" PARTUUID="d37eb7b2-03"
[root@ace ~]#

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

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

#
# /etc/fstab
# Created by anaconda on Fri Feb 14 07:10:31 2020
#
# 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                   ext4    defaults        1 2
LABEL=swap swap                    swap    defaults        0 0
[root@ace ~]# systemctl daemon-reload
[root@ace ~]#

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

SELinuxの無効化

いきなり結論。自宅サーバにはSELinuxは必要ありません。無効化します。

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

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

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

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

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

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

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

で、無効化の方法ですが2通りあります。一つは

[root@ace ~]# grep SELINUX= /etc/selinux/config
# SELINUX= can take one of these three values:
SELINUX=enforcing
[root@ace ~]# vi /etc/selinux/config
[root@ace ~]# grep SELINUX= /etc/selinux/config
# SELINUX= can take one of these three values:
SELINUX=disabled
[root@ace ~]#

のように、/etc/selinux/configのSELINUX=をenforcingからdisabledに変えることです。

もう一つはgrubの設定ですが、これは後で記述します。

また、各ファイルにはSELinuxの拡張属性がついています。例えば

[root@ace ~]# ls -alZ
合計 28
dr-xr-x---.  2 root root system_u:object_r:admin_home_t:s0      135  2月 14 21:50 .
dr-xr-xr-x. 17 root root system_u:object_r:root_t:s0            224  2月 14 21:11 ..
-rw-------.  1 root root unconfined_u:object_r:admin_home_t:s0  297  2月 14 22:03 .bash_history
-rw-r--r--.  1 root root system_u:object_r:admin_home_t:s0       18  5月 12  2019 .bash_logout
-rw-r--r--.  1 root root system_u:object_r:admin_home_t:s0      176  5月 12  2019 .bash_profile
-rw-r--r--.  1 root root system_u:object_r:admin_home_t:s0      176  5月 12  2019 .bashrc
-rw-r--r--.  1 root root system_u:object_r:admin_home_t:s0      100  5月 12  2019 .cshrc
-rw-r--r--.  1 root root system_u:object_r:admin_home_t:s0      129  5月 12  2019 .tcshrc
-rw-------.  1 root root system_u:object_r:admin_home_t:s0     1793  2月 14 21:20 anaconda-ks.cfg
[root@ace ~]#

lsコマンドで-Zオプションを使うと表示される「system_u:object_r:admin_home_t:s0」のようなものが、SELinuxの拡張属性です。

SELinuxを無効化すると、この拡張属性がついたのと、つかないのと混在して気持ち悪いので、以下のコマンドですべての拡張属性を削除します。

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

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

[root@ace ~]# ls -alZ
合計 28
dr-xr-x---  2 root root ?  135  2月 14 21:50 .
dr-xr-xr-x 17 root root ?  244  2月 15 01:06 ..
-rw-------  1 root root ? 1210  2月 15 01:07 .bash_history
-rw-r--r--  1 root root ?   18  5月 12  2019 .bash_logout
-rw-r--r--  1 root root ?  176  5月 12  2019 .bash_profile
-rw-r--r--  1 root root ?  176  5月 12  2019 .bashrc
-rw-r--r--  1 root root ?  100  5月 12  2019 .cshrc
-rw-r--r--  1 root root ?  129  5月 12  2019 .tcshrc
-rw-------  1 root root ? 1793  2月 14 21:20 anaconda-ks.cfg
[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:
  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:
  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)と有効になっているゾーンだけ抜粋しています。

grubの変更

OSを起動する時の設定を変更しておきます。

[root@ace ~]# grep GRUB_CMDLINE_LINUX= /etc/default/grub
GRUB_CMDLINE_LINUX="resume=UUID=53877d0f-38fb-431f-906a-657cf0f10a93 rhgb quiet"
[root@ace ~]#
[root@ace ~]# vi /etc/default/grub
[root@ace ~]# grep GRUB_CMDLINE_LINUX= /etc/default/grub
GRUB_CMDLINE_LINUX="resume=LABEL=swap quiet consoleblank=0 selinux=0"
[root@ace ~]#
[root@ace ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
done
[root@ace ~]#

/etc/default/grubのGRUB_CMDLINE_LINUX=行を変更しておきます。変更点は

  • resume=はswapパーティションを指定するのでUUIDからLABEL名に変更します。
  • rhgbはRed Hat Graphical Bootの意味らしい。起動画面のグラフィックアニメですが、しょぼいので削除し、文字が流れるようにした。
  • quietはを外すともっと文字が出るけど、それだとうざいのでそのまま。
  • consoleblank=0は、コンソール画面のスリープモード抑止する。スリープモードにならなくて問題ないので、付け加えた。
  • selinux=0で、起動時から即、SELinuxを無効化する。

/etc/default/grub を変更したら、忘れずに「grub2-mkconfig -o /boot/grub2/grub.cfg」を実行します!その後、再起動して効果を確認します。

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

ログイン時、「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 ~]# sh /etc/profile.d/motd.sh
[root@ace ~]# su zeke
Welcome to ace.lo.zeke.ne.jp!
This system is running on CentOS Linux release 8.1.1911 (Core)
and launched from 2020-02-15 10:18:57.
[zeke@ace root]$ exit
[root@ace ~]# ls -l /etc/profile.d/motd.sh
-rw-r--r-- 1 root root 284  2月 15 11:17 /etc/profile.d/motd.sh
[root@ace ~]#

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

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

kdumpの無効化

インストールのときに、kdumpを無効化しているはずだったのだけど、

シスログに不審なエラーが出ていました。

[root@ace ~]# cat /var/log/messages
:
省略
:
Feb 15 21:50:47 ace systemd[1]: Starting Crash recovery kernel arming…
Feb 15 21:50:47 ace systemd[1]: Starting System Logging Service…
Feb 15 21:50:47 ace kdumpctl[1228]: No memory reserved for crash kernel
Feb 15 21:50:47 ace kdumpctl[1228]: Starting kdump: [FAILED]
Feb 15 21:50:47 ace systemd[1]: kdump.service: Main process exited, code=exited, status=1/FAILURE
Feb 15 21:50:47 ace systemd[1]: kdump.service: Failed with result 'exit-code'.
Feb 15 21:50:47 ace systemd[1]: Failed to start Crash recovery kernel arming.
:
省略
:
[root@ace ~]#
[root@ace ~]# systemctl list-unit-files --type=service | grep kdump
kdump.service                              enabled
[root@ace ~]#
[root@ace ~]# systemctl status kdump
● kdump.service - Crash recovery kernel arming
   Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor prese>
   Active: failed (Result: exit-code) since Sat 2020-02-15 21:50:47 JST; 1h 3mi>
  Process: 1228 ExecStart=/usr/bin/kdumpctl start (code=exited, status=1/FAILUR>
 Main PID: 1228 (code=exited, status=1/FAILURE)
 2月 15 21:50:47 ace.lo.zeke.ne.jp systemd[1]: Starting Crash recovery kernel a>
 2月 15 21:50:47 ace.lo.zeke.ne.jp kdumpctl[1228]: No memory reserved for crash>
 2月 15 21:50:47 ace.lo.zeke.ne.jp kdumpctl[1228]: Starting kdump: [FAILED]
 2月 15 21:50:47 ace.lo.zeke.ne.jp systemd[1]: kdump.service: Main process exit>
 2月 15 21:50:47 ace.lo.zeke.ne.jp systemd[1]: kdump.service: Failed with resul>
 2月 15 21:50:47 ace.lo.zeke.ne.jp systemd[1]: Failed to start Crash recovery k>
[root@ace ~]#

起動時に実行するようになっています。無効化したためか、エラーが出て実行できなかったようですが。

速やかに、設定を変更しておきましょう。

[root@ace ~]# systemctl disable kdump
Removed /etc/systemd/system/multi-user.target.wants/kdump.service.
[root@ace ~]#

これで起動時に実行することはなくなります。

[root@ace ~]# systemctl status kdump
● kdump.service - Crash recovery kernel arming
   Loaded: loaded (/usr/lib/systemd/system/kdump.service; disabled; vendor pres>
   Active: inactive (dead)
[root@ace ~]#

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

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

[root@ace ~]# systemctl list-unit-files --state=enabled
UNIT FILE                                  STATE
auditd.service                             enabled
autovt@.service                            enabled
chronyd.service                            enabled
crond.service                              enabled
dbus-org.fedoraproject.FirewallD1.service  enabled
dbus-org.freedesktop.nm-dispatcher.service enabled
dbus-org.freedesktop.timedate1.service     enabled
firewalld.service                          enabled
getty@.service                             enabled
import-state.service                       enabled
irqbalance.service                         enabled
loadmodules.service                        enabled
microcode.service                          enabled
NetworkManager-dispatcher.service          enabled
NetworkManager-wait-online.service         enabled
NetworkManager.service                     enabled
nis-domainname.service                     enabled
rngd.service                               enabled
rsyslog.service                            enabled
selinux-autorelabel-mark.service           enabled
sshd.service                               enabled
sssd.service                               enabled
syslog.service                             enabled
timedatex.service                          enabled
tuned.service                              enabled
sssd-kcm.socket                            enabled
remote-fs.target                           enabled
dnf-makecache.timer                        enabled
unbound-anchor.timer                       enabled

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

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

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

自分の場合は、import-state.service(ネットワークストレージ は使わない)、irqbalance.service(CPUは一つだけ)、selinux-autorelabel-mark.service(SELinuxは使わない)は明らかに不要です。

[root@ace ~]# systemctl disable import-state.service
Removed /etc/systemd/system/sysinit.target.wants/import-state.service.
[root@ace ~]# systemctl disable irqbalance.service
Removed /etc/systemd/system/multi-user.target.wants/irqbalance.service.
[root@ace ~]# systemctl disable selinux-autorelabel-mark.service
Removed /etc/systemd/system/sysinit.target.wants/selinux-autorelabel-mark.service.
[root@ace ~]#

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

お勧めのKindle本です!

コメント