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