AlamLinux9 初期設定

スポンサーリンク

インストール直後に行う初期設定をまとめていきます。

■SELinuxの設定

AlmaLinux9からはSELinuxの設定方法が少々変更になりました。

従前は/etc/sysconfig/selinuxファイルの編集でいけてました。

vi /etc/sysconfig/selinux

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
# See also:
# https://docs.fedoraproject.org/en-US/quick-docs/getting-started-with-selinux/#getting-started-with-selinux-selinux-states-and-modes
#
# NOTE: In earlier Fedora kernel builds, SELINUX=disabled would also
# fully disable SELinux during boot. If you need a system with SELinux
# fully disabled instead of SELinux running with no policy loaded, you
# need to pass selinux=0 to the kernel command line. You can use grubby
# to persistently set the bootloader to boot with selinux=0:
#
#    grubby --update-kernel ALL --args selinux=0
#
# To revert back to SELinux enabled:
#
#    grubby --update-kernel ALL --remove-args selinux
#
SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

太字のところで示したよう、disableにするには上のコマンドを実行してくださいとあるので、その通りにします。

# grubby --update-kernel ALL --args selinux=0
# reboot

再起動後、以下のコマンドで無効になっていることを確認します。

# getenforce
Disabled

本機能はセキュリティ上、有効にしておくことが奨励されているものの、有効のままだと色んなアプリの使用に支障がでるため、現実的には無効にしているところのほうが多いのではないかと思われます。


■Runlevelの変更

インストール時に最小限のインストールを選択するとデフォルトではCLI起動となりますが、GNOMEデスクトップなどを選択するとGUI起動となります。こういった場合にはCLI起動に変更したい場合やその逆の場合もあるでしょう。

現在がどのようになっているのか確認するコマンドが下記です。下記ではgraphical.targetに設定されておりGUIログインの設定となっております。

# systemctl get-default
graphical.target

これを例えばmulti-user.targetのCLIログインに変更する場合は以下のようにコマンドを実行します。

# systemctl set-default multi-user.target

Runlevelは3か5の場合がほとんどなので5に戻したい場合はgraphicalに戻せば良いです。

# systemctl set-default graphical.target


■リポジトリの追加

AlmaLinux9でリポジトリを追加します。

# dnf search epel
Last metadata expiration check: 4:09:36 ago on Fri Apr 21 10:27:54 2023.
================================================== Name Matched: epel ==================================================
epel-release.noarch : Extra Packages for Enterprise Linux repository configuration

# dnf install epel-release

以下の2つのファイルがインストールされます。

# cat /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever

[epel-debuginfo]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Debug
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/debug/
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Source
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/$releasever/Everything/source/tree/
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1
# cat /etc/yum.repos.d/epel-testing.repo
[epel-testing]
name=Extra Packages for Enterprise Linux $releasever - Testing - $basearch
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/testing/$releasever/Everything/$basearch/
metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-epel$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever

[epel-testing-debuginfo]
name=Extra Packages for Enterprise Linux $releasever - Testing - $basearch - Debug
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/testing/$releasever/Everything/$basearch/debug/
metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-debug-epel$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1

[epel-testing-source]
name=Extra Packages for Enterprise Linux $releasever - Testing - $basearch - Source
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/testing/$releasever/Everything/source/tree/
metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-source-epel$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1


■起動サービスについて

AlmaLinux9はインストール直後には様々なサービスが有効になっていますので不要なものは停止するよう設定します。あくまで私の環境化なので一例ということで記載しております。

systemctl disable atd
systemctl disable auditd
systemctl disable bluetooth
systemctl disable irqbalance
systemctl disable kdump
systemctl disable lvm2-monitor
systemctl disable mcelog
systemctl disable mdmonitor
systemctl disable microcode
systemctl disable nis-domainname
systemctl disable nvmefc-boot-connections
systemctl disable smartd
systemctl disable sssd
systemctl disable tuned

次回以降、起動しなくなるので一旦再起動します。

reboot


■時刻同期について

AlmaLinux9では時刻同期にChronyサービスがデフォルトでインストールされています。基本的にここではNTPサーバとしてではなく、NTPクライアントとして設定することを前提としています。

chronyの設定ファイルは/etc/chrony.confです。

# cat /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (https://www.pool.ntp.org/join.html).
pool 2.almalinux.pool.ntp.org iburst

# Use NTP servers from DHCP.
sourcedir /run/chrony-dhcp

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2

# Allow NTP client access from local network.
#allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
#local stratum 10

# Require authentication (nts or key option) for all NTP sources.
#authselectmode require

# Specify file containing keys for NTP authentication.
keyfile /etc/chrony.keys

# Save NTS keys and cookies.
ntsdumpdir /var/lib/chrony

# Insert/delete leap seconds by slewing instead of stepping.
#leapsecmode slew

# Get TAI-UTC offset and leap seconds from the system tz database.
leapsectz right/UTC

# Specify directory for log files.
logdir /var/log/chrony

# Select which information is logged.
#log measurements statistics tracking

指定したい好みのNTPサーバがあればそれを指定すれば良いのですが、基本的に何も設定は触らなくて大丈夫です。このままでも時刻同期できます。次のコマンドで同期の状態を確認できます。

# chronyc tracking

Reference ID    : 5EC69F0B (nts1.time.nl)
Stratum         : 2
Ref time (UTC)  : Fri Apr 21 07:18:53 2023
System time     : 0.001896059 seconds fast of NTP time
Last offset     : +0.000915421 seconds
RMS offset      : 0.003955518 seconds
Frequency       : 21.477 ppm slow
Residual freq   : +0.365 ppm
Skew            : 3.018 ppm
Root delay      : 0.202217773 seconds
Root dispersion : 0.002127213 seconds
Update interval : 195.7 seconds
Leap status     : Normal

実際に時刻同期を行っているサーバは以下のコマンドで確認できます。同期を行っているサーバとのところで*がついています。

# chronyc sources

MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^+ ntp2.belbone.be               2   7   377   129   +440us[+1354us] +/-  137ms
^* nts1.time.nl                  1   6   377   129    +15ms[  +16ms] +/-  105ms
^+ vmi586073.contaboserver.>     2   7   377    63  -8298us[-8298us] +/-  133ms
^+ mx.ae9.eu                     2   6   377     0  -6169us[-6169us] +/-  190ms


■logrotateの設定について

AlamLinuxをMinimalでインストールしたからなのか、理由がよくわからないのですが、logrotate自体はインストールされているものの/var/log配下のcronやmessageなどのファイルが肥大化しつづけていました。これは追加でrsyslog-logrotateをインストールする必要がありました。

# dnf install rsyslog-logrotate

これにより/etc/logrotate.confが生成され、デフォルトは週ローテイトで4世代まで保存されます。

週単位でローテイトする場合、ログによっては肥大化が大きく、細かくわけたい場合もあります。そういった場合は毎日ローテイトするということももちろん可能です。以下は毎日30世代分保存する例です。

# vi /etc/logrotate.conf

<省略>
# rotate log files weekly
#weekly
daily

# keep 4 weeks worth of backlogs
#rotate 4
rotate 30
<省略>

事前テストをする際にはlogrotateに-dvオプションをつけてエラーがないか確認します。

# logrotate -dv /etc/logrotate.conf

<省略>

今すぐ実行するには-fオプションをつけます。

# logrotate -f /etc/logrotate.conf

<省略>

このlogrotateについて動作のトリガーになっているのは軽く調べたらほとんどのサイトでcronまたはanacronということが書かれているのですが、本サーバで調べてもcronからキックされている様子がなく、不思議に思って調査するとsystemd-timerから起動されていることがわかりました。

systemdとはCentOS7から標準導入されるようになったシステム運用の仕組みで、この元で動くタイマーがsystemd-timerです。できることはcronと同じなのですがsystemdを使って管理するところが大きく異なります。まず、logrotateのtimerサービスを確認してみます。

# systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES >
Thu 2024-04-11 14:30:00 JST 43s left Thu 2024-04-11 14:20:00 JST 9min ago sysstat-collect.timer sysstat-co>
Thu 2024-04-11 15:28:34 JST 59min left Thu 2024-04-11 13:46:37 JST 42min ago dnf-makecache.timer dnf-makeca>
Thu 2024-04-11 19:02:30 JST 4h 33min left Wed 2024-04-10 19:02:30 JST 19h ago systemd-tmpfiles-clean.timer systemd-tm>
Fri 2024-04-12 00:00:00 JST 9h left Thu 2024-04-11 00:00:00 JST 14h ago logrotate.timer logrotate.>
Fri 2024-04-12 00:00:00 JST 9h left Thu 2024-04-11 00:00:00 JST 14h ago mlocate-updatedb.timer mlocate-up>
Fri 2024-04-12 00:00:00 JST 9h left Thu 2024-04-11 00:00:00 JST 14h ago unbound-anchor.timer unbound-an>
Fri 2024-04-12 00:07:00 JST 9h left Thu 2024-04-11 00:07:19 JST 14h ago sysstat-summary.timer sysstat-su>

7 timers listed.

<以下、参考>
# systemctl disable lorotate.timer
# systemctl enable lorotate.timer
# systemctl stop lorotate.timer
# systemctl start lorotate.timer
# systemctl status logrotate.timer
● logrotate.timer - Daily rotation of log files
Loaded: loaded (/usr/lib/systemd/system/logrotate.timer; enabled; preset: enabled)
Active: active (waiting) since Thu 2024-02-29 18:36:24 JST; 1 month 11 days ago
Until: Thu 2024-02-29 18:36:24 JST; 1 month 11 days ago
Trigger: Fri 2024-04-12 00:00:00 JST; 9h left
Triggers: ● logrotate.service
Docs: man:logrotate(8)
man:logrotate.conf(5)

Notice: journal has been rotated since unit was started, output may be incomplete.

logrotateが深夜0時にタイマーされていることがおわかり頂けます。

logrotateに関して大きく関係するファイルは以下の2つです。

・/usr/lib/systemd/system/logrotate.service
・/usr/lib/systemd/system/logrotate.timer

timerの方では時間指定を行っております。dailyとなっているので日時で起動します。また、同時に他のプロセスも起動した場合に備えてAccuracySecの分、ランダムに時間を変更できるよう指定しています。

# more /usr/lib/systemd/system/logrotate.timer
[Unit]
Description=Daily rotation of log files
Documentation=man:logrotate(8) man:logrotate.conf(5)

[Timer]
OnCalendar=daily
AccuracySec=1h
Persistent=true

[Install]
WantedBy=timers.target

logrotate.serviceが実際の実行ファイルです。上で編集したlogrotate.confを指定して実行していることがわかります。

# more /usr/lib/systemd/system/logrotate.service
[Unit]
Description=Rotate log files
Documentation=man:logrotate(8) man:logrotate.conf(5)
RequiresMountsFor=/var/log
ConditionACPower=true

[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/logrotate.conf

# performance options
Nice=19
IOSchedulingClass=best-effort
IOSchedulingPriority=7

# hardening options
# details: https://www.freedesktop.org/software/systemd/man/systemd.exec.html
# no ProtectHome for userdir logs
# no PrivateNetwork for mail deliviery
# no NoNewPrivileges for third party rotate scripts
# no RestrictSUIDSGID for creating setgid directories
LockPersonality=true
MemoryDenyWriteExecute=true
PrivateDevices=true
PrivateTmp=true
ProtectClock=true
ProtectControlGroups=true
ProtectHostname=true
ProtectKernelLogs=true
ProtectKernelModules=true
ProtectKernelTunables=true
ProtectSystem=full
RestrictNamespaces=true
RestrictRealtime=true

基本的に中身を変えることはないと思うのですが、1時間おきとかに変更したい場合は以下のコマンドで設定を反映させる必要があります。

# systemctl daemon-reload

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする