インストール直後に行う初期設定をまとめていきます。
■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 |