AlmaLinux 10 サーバー初期設定10項目|SELinux・firewalld・dnf・SSH鍵認証

HOMEリナックスマスター.JP 公式ブログAlmaLinux, Linux学習ガイド > AlmaLinux 10 サーバー初期設定10項目|SELinux・firewalld・dnf・SSH鍵認証
宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
「AlmaLinux 10をminimal構成でインストールしたものの、本番投入前に何を入れて何を切るのか、CentOS時代の作法をそのまま流用していいのか分からない」
そう感じている方に向けて、1ページで運用開始まで到達できる初期設定10項目をまとめます。

インストール直後のAlmaLinux 10は、いわば素のままのスーツです。寸法を直してから現場に出さないと、ちょっとした風で着崩れます。私自身、検証用VPSや社内検証機で10系を何度も初期設定してきましたが、毎回同じ順序でこなしています。順番を間違えるとSSHから締め出されたり、firewalldのリロードで自分のセッションを切ったりと、笑えない事故が起きます。

この記事ではAlmaLinux 10サーバーで最初にやるべき初期設定10項目を、コマンド例と実出力を交えて順番通りに解説します。AlmaLinux 10の特徴やMIRACLE LINUXとの関係を先に把握したい方は「AlmaLinux 10とは|CentOS後継本命の特徴・MIRACLE LINUX統合・サポート期間まとめ」を、まだインストールが済んでいない方は「AlmaLinux 10 インストール手順|USB作成からminimal/server/workstation構成別設定」を先に読むと、本記事の内容がそのまま手を動かす流れにつながります。

この記事のポイント

・初期設定はSSH鍵→firewalld→自動更新の順で進めると事故が少ない
・SELinuxはenforcingのまま運用、無効化は最終手段
・dnf-automaticでセキュリティ更新だけ自動化するのが現実解
・最後に動作確認10コマンドで「自分の手で固めた」状態を可視化する


AlmaLinux 10 サーバー初期設定10項目|SELinux・firewalld・dnf・SSH鍵認証
「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

1. dnf updateとリポジトリの確認

最初にやるのはパッケージリストの更新と既存パッケージのアップグレードですが、その前に有効リポジトリを確認しておきます。AlmaLinux 10のMinimal Installでは baseosappstreamextras の3つが標準で有効です。

EPEL(Extra Packages for Enterprise Linux)は標準では入っていません。Fail2banやhtopなど、現場でよく使う補助ツールはEPELから入るので、最初に有効化しておくと後の作業が止まりません。

# 現在のリポジトリを確認する $ sudo dnf repolist repo id repo name appstream AlmaLinux 10 - AppStream baseos AlmaLinux 10 - BaseOS extras AlmaLinux 10 - Extras # パッケージを最新化する $ sudo dnf update -y # EPELを有効化する(必要な場合のみ) $ sudo dnf install -y epel-release $ sudo dnf repolist repo id repo name appstream AlmaLinux 10 - AppStream baseos AlmaLinux 10 - BaseOS epel Extra Packages for Enterprise Linux 10 extras AlmaLinux 10 - Extras

DNF 5系列の細かい操作は「dnf/yumコマンドの使い方|パッケージのインストール・更新・削除とリポジトリ管理」にまとめています。dnf installdnf remove の基本構文はCentOS 7時代のyumとほぼ同じで、新しく覚える操作はほとんどありません。

EPELは便利な反面、依存パッケージがbaseosのものと衝突するケースが稀にあります。本番サーバーではEPELを必要なパッケージだけ --enablerepo=epel で都度指定し、常時有効にはしない運用も選択肢です。

2. タイムゾーンとロケール設定

サーバー時刻がUTCのままだと、ログを読むたびに9時間引き算する羽目になります。最初にAsia/Tokyoへ変更しておきます。

# 現在のタイムゾーンを確認する $ timedatectl Local time: Sat 2026-04-25 06:23:45 UTC Universal time: Sat 2026-04-25 06:23:45 UTC Time zone: UTC (UTC, +0000) System clock synchronized: yes NTP service: active # Asia/Tokyoに変更する $ sudo timedatectl set-timezone Asia/Tokyo # 変更を確認する $ timedatectl | grep "Time zone" Time zone: Asia/Tokyo (JST, +0900)

NTP同期が active になっていることも確認します。inactive なら sudo systemctl enable --now chronyd で有効化します。AlmaLinux 10のNTPクライアントはchronyが標準です。systemd-timesyncdではない点に注意してください。

ロケールはMinimal Installの場合 C.UTF-8 になっています。日本語メッセージが必要なら追加します。

# 現在のロケールを確認する $ localectl System Locale: LANG=C.UTF-8 VC Keymap: us X11 Layout: us # 日本語ロケールを生成する $ sudo dnf install -y glibc-langpack-ja $ sudo localectl set-locale LANG=ja_JP.UTF-8 # 再ログイン後に確認する $ locale | grep LANG LANG=ja_JP.UTF-8

サーバー用途では C.UTF-8 のままにしておくほうが、エラーメッセージを英語のままWebで検索しやすくて結局速いことも多いです。チーム運用ならどちらに揃えるかは最初に決めておきましょう。

3. ホスト名と/etc/hostsの設定

ホスト名は後から変えるとログ集約や監視ツールの設定がズレるので、最初に確定させます。

# 現在のホスト名を確認する $ hostnamectl Static hostname: localhost.localdomain Icon name: computer-vm Chassis: vm Machine ID: 7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d Boot ID: 0123456789abcdef0123456789abcdef Virtualization: kvm Operating System: AlmaLinux 10.0 (Purple Lion) CPE OS Name: cpe:/o:almalinux:almalinux:10::baseos Kernel: Linux 6.12.0-21.el10.x86_64 Architecture: x86-64 # ホスト名を変更する $ sudo hostnamectl set-hostname web01.example.local # /etc/hostsに自分自身のFQDNを追加する $ sudo vi /etc/hosts

/etc/hosts には自分自身のFQDNを必ず登録します。

# /etc/hostsの編集例 127.0.0.1 localhost localhost.localdomain 127.0.1.1 web01.example.local web01 ::1 localhost localhost.localdomain ip6-localhost ip6-loopback

ここを抜くと、後でPostfixやhttpdを入れた時に「sudo時にunable to resolve hostと出る」「メールが localhost.localdomain から送信される」といった地味なトラブルで時間を溶かします。クラウドのインスタンスを大量に立てる場合は、web01db-stg-01bastion-prd のように役割と環境とインデックスを組み合わせる命名にしておくと、SSHで複数サーバーを行き来する時にプロンプトを見るだけで「今どこに入っているか」が一目で分かります。

4. SSH鍵認証の有効化とパスワード認証の無効化

ここからが本題です。SSH鍵を設定し、パスワード認証を無効化します。順序を間違えるとSSHから自分が締め出されます。

手順は必ず以下の順で進めてください。

手順A:クライアント側で鍵ペアを生成する
手順B:公開鍵をサーバーへ転送する
手順C:鍵だけで接続できることを別ターミナルで確認する
手順D:確認できてからパスワード認証をOFFにする

まずクライアント(手元のPC)側で鍵ペアを作ります。

# クライアント側で鍵ペアを生成する(Ed25519推奨) $ ssh-keygen -t ed25519 -C "your_email@example.com" Generating public/private ed25519 key pair. Enter file in which to save the key (/home/user/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): ******** Enter same passphrase again: ******** Your identification has been saved in /home/user/.ssh/id_ed25519 Your public key has been saved in /home/user/.ssh/id_ed25519.pub # 公開鍵をサーバーへコピーする $ ssh-copy-id user@192.168.1.50

サーバー側で ~/.ssh/authorized_keys のパーミッションが正しいことを確認します。SELinuxが有効な状態でファイル属性がズレていると、鍵があっても認証が通りません。

# サーバー側でパーミッションを確認・修正する $ ls -ld ~/.ssh drwx------. 2 user user 4096 Apr 25 15:30 /home/user/.ssh $ ls -l ~/.ssh/authorized_keys -rw-------. 1 user user 396 Apr 25 15:31 /home/user/.ssh/authorized_keys # 末尾のドット(.)はSELinuxラベルが付いていることを示す # 手動でauthorized_keysを作った場合はラベル付け直し $ restorecon -Rv ~/.ssh

別ターミナルから鍵で接続できることを確認します。Permission denied が出るうちはまだパスワード認証を切ってはいけません。

鍵で入れたら /etc/ssh/sshd_config を編集します。

# sshd_configを編集する $ sudo vi /etc/ssh/sshd_config # 該当行を以下のように変更する PasswordAuthentication no PubkeyAuthentication yes PermitRootLogin no PermitEmptyPasswords no # 設定の構文チェック $ sudo sshd -t # サービスを再起動する $ sudo systemctl restart sshd

AlmaLinux 10ではサービス名が sshd です(Ubuntuの ssh とは異なります)。再起動後、必ず別ターミナルからもう一度接続テストをします。今のセッションは生かしたまま、新しい窓でログインできれば成功です。

SSHのポート番号も変更したい場合は、SELinuxとfirewalldの両方への対応が必要です。手順の詳細は「SSHのポート番号を変更する方法|sshd_configの設定からfirewalld・SELinux対応まで」にまとめています。22番のままでもfail2banやIP制限を併用すれば実用上の問題はありません。「ポート変更すれば安全」という古い考え方は今では通用しないので、鍵認証のみ・root禁止・接続元IP制限の3点をしっかり固めるほうが効きます。

5. firewalldで22/80/443だけ開ける手順とゾーンの考え方

AlmaLinux 10標準のファイアウォールはfirewalldです。iptablesではなくnftablesがバックエンドになっており、ゾーンの考え方を理解しておくと運用が楽になります。

ゾーンは「ネットワーク接続元の信頼度」をまとめたプリセットです。代表的なのは以下の3つです。

public:デフォルトゾーン。インターネット側に向けるインターフェース用。最低限のサービスだけ許可
internal:社内LANや信頼できるVPN経由のインターフェース用。多めに許可してよい
trusted:すべて許可。同一ホスト内のbridgeなど、ファイアウォール不要な場合のみ

インターネット公開サーバーなら通常はpublicゾーンに22/80/443だけ開けます。

# firewalldの状態を確認する $ sudo systemctl status firewalld --no-pager * firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled) Active: active (running) # デフォルトゾーンを確認する $ sudo firewall-cmd --get-default-zone public # 現在のpublicゾーンの設定を見る $ sudo firewall-cmd --zone=public --list-all public (active) target: default services: cockpit dhcpv6-client ssh ports: ... # HTTP/HTTPSを永続的に許可する $ sudo firewall-cmd --permanent --zone=public --add-service=http $ sudo firewall-cmd --permanent --zone=public --add-service=https # 設定を反映する $ sudo firewall-cmd --reload # 反映を確認する $ sudo firewall-cmd --zone=public --list-services cockpit dhcpv6-client http https ssh

特定のIPからのみSSHを許可したい場合はrich ruleを使います。

# オフィスIPからのみSSH許可 $ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" service name="ssh" accept' # 既存のSSHサービス許可を削除する $ sudo firewall-cmd --permanent --zone=public --remove-service=ssh $ sudo firewall-cmd --reload

ポートを直接指定する場合や永続化の使い分けは「firewall-cmdコマンドでポートを開放・管理する方法|ゾーン・サービス・永続化の使い分け」に詳しくまとめています。--permanent を付け忘れたままreloadすると設定が消えるという定番のミスもここで解説しています。
AlmaLinux 10 サーバー初期設定10項目|SELinux・firewalld・dnf・SSH鍵認証 - 解説1

6. SELinuxをenforcingで運用する基本

AlmaLinux 10のインストーラはSELinuxを enforcing(強制モード)でセットします。これがデフォルトで、現代では基本的にこのまま運用するのが正解です。

CentOS 6時代までは「とりあえずSELinuxを切る」が定番でしたが、現在のRHEL 10系ではApache・Nginx・PostgreSQL等の主要パッケージがSELinuxポリシー込みで提供されており、無効化する理由はほぼありません。むしろセキュリティ監査で指摘される時代です。

# 現在のSELinux状態を確認する $ getenforce Enforcing # 詳細状態の確認 $ sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Memory protection checking: actual (secure) Max kernel policy version: 33

サービスがSELinuxで弾かれた時は、audit2allow で例外ポリシーを作るのが筋です。

# audit.logからSELinux拒否ログを抽出してポリシーモジュール化 $ sudo grep "denied" /var/log/audit/audit.log | audit2allow -M mywebpolicy # モジュールを適用 $ sudo semodule -i mywebpolicy.pp # 一時的にpermissive(記録のみ)に切り替えて挙動確認 $ sudo setenforce 0 $ getenforce Permissive # 確認後はenforcingに戻す $ sudo setenforce 1

やむを得ずSELinuxを無効化したい場合の手順は「SELinuxを無効化・確認する方法|enforcing/permissive/disabled切替とgetenforce・sestatus」にまとめています。ただし無効化は最終手段で、まずは audit2allow での例外作成、それでダメならpermissiveでログを取りながら原因切り分け、という順序で対処してください。私のセミナーでも「SELinuxを切らずに直す」を最初に体験してもらうと、ほとんどの受講生が「思ったより楽に解決できる」と感想を残します。

7. 一般ユーザー作成・sudo権限・自動セキュリティ更新

rootで日常作業をするのは事故のもとです。作業用の一般ユーザーを作り、sudo経由で特権操作する形に統一します。

# 一般ユーザーを作成する $ sudo useradd deploy $ sudo passwd deploy Changing password for user deploy. New password: ******** Retype new password: ******** passwd: all authentication tokens updated successfully. # wheelグループに追加する(RHEL系のsudoグループ) $ sudo usermod -aG wheel deploy # 確認 $ id deploy uid=1001(deploy) gid=1001(deploy) groups=1001(deploy),10(wheel)

AlmaLinux 10ではsudoグループはUbuntuの sudo ではなく wheel です。RHEL系の伝統で、/etc/sudoers%wheel ALL=(ALL) ALL が最初から書かれています。

新しいユーザーにもSSH鍵を設定します。手順は項目4と同じです。鍵を ~deploy/.ssh/authorized_keys に配置したら、必ず restorecon -Rv ~deploy/.ssh でSELinuxラベルを付け直してください。

次に自動セキュリティ更新を有効化します。AlmaLinux 10ではdnf-automaticが標準ツールです。

# dnf-automaticをインストール $ sudo dnf install -y dnf-automatic # 設定ファイルを編集 $ sudo vi /etc/dnf/automatic.conf # 主要な設定項目 [commands] upgrade_type = security # securityのみ自動適用 download_updates = yes apply_updates = yes [emitters] emit_via = stdio [email] email_to = root # タイマーを有効化(毎日実行) $ sudo systemctl enable --now dnf-automatic.timer # タイマーの動作確認 $ systemctl list-timers dnf-automatic.timer NEXT LEFT LAST PASSED UNIT ACTIVATES Sun 2026-04-26 06:00 14h left - - dnf-automatic.timer dnf-automatic.service

upgrade_typesecurity にしておくのが現実解です。default(全パッケージ自動更新)にすると深夜に勝手にバージョンが上がって朝動かないという事故が起きます。20年以上現場でサーバーを触ってきた経験から言うと、自動化の便利さと安全のトレードオフは「ちょっとだけ不便な方」を選んだほうが結果的に事故が少ないです。

8. ログとジャーナルの基本確認

AlmaLinux 10では journalctl がメインのログ閲覧コマンドです。systemd-journaldのログサイズ制限を最初に確認しておきます。

# 現在のジャーナルサイズを確認する $ journalctl --disk-usage Archived and active journals take up 96.0M in the file system. # 最大サイズを設定する $ sudo vi /etc/systemd/journald.conf # 該当行のコメントを外して値を設定 SystemMaxUse=500M SystemKeepFree=1G # 設定を反映する $ sudo systemctl restart systemd-journald # 古いジャーナルを掃除する $ sudo journalctl --vacuum-time=30d

伝統的な /var/log/ 配下のテキストログは logrotate が管理しています。デフォルト設定でだいたい問題ありません。独自アプリのログを置くなら /etc/logrotate.d/ に設定ファイルを追加してください。

ディスク容量の枯渇はサーバー停止の典型的な原因です。/var/log が肥大化してルートパーティションを食いつぶすと、SSHログインすらできなくなることがあります。df -h をcronで毎日メールする仕組みか、PrometheusやMackerelのような監視ツールでアラートを設定しておきましょう。

9. 不要サービスの停止とポート確認

Minimal Installでも、用途次第では不要なサービスが動いています。攻撃面を減らすために、使わないものは止めておきます。

# 起動済みサービスを一覧する $ systemctl list-units --type=service --state=running --no-pager UNIT LOAD ACTIVE SUB DESCRIPTION chronyd.service loaded active running NTP client/server crond.service loaded active running Command Scheduler dbus-broker.service loaded active running D-Bus System Message Bus firewalld.service loaded active running firewalld sshd.service loaded active running OpenSSH server daemon ... # 不要なサービス例(用途次第で判断) # - cockpit.socket: Web管理UI、CLI運用なら不要 # - tuned.service: 性能チューニング、デフォルト設定で運用するなら不要 # サービスを停止・無効化 $ sudo systemctl disable --now cockpit.socket $ sudo systemctl disable --now tuned # LISTENポートを確認する $ sudo ss -tlnp State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3)) LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1234,fd=4))

sshd以外がLISTENしていたら、それが本当に必要かを必ず判断してください。「なんとなく入っているから」のサービスを残すのは、攻撃面を広げるだけで何の得もありません。

何を止めて何を残すかの判断軸は「このサーバーの役割」次第です。Webサーバーなら nginxhttpd が動く前提、DBサーバーなら postgresql が動く前提、というふうに役割定義を最初にメモしておくと、不要サービスを切る判断が早くなります。

10. 設定後の動作確認コマンド集

ここまでの設定が正しく入ったかを確認するコマンドを10本まとめます。1セットでチェックすれば見落としがありません。

# 1. OSバージョン $ cat /etc/almalinux-release AlmaLinux release 10.0 (Purple Lion) # 2. タイムゾーンとNTP $ timedatectl | grep -E 'Time zone|synchronized' Time zone: Asia/Tokyo (JST, +0900) System clock synchronized: yes # 3. ホスト名 $ hostnamectl --static web01.example.local # 4. SSHのリッスン状態 $ sudo ss -tlnp | grep ssh LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3)) # 5. SSH設定の確認 $ sudo sshd -T | grep -E 'passwordauthentication|permitrootlogin|pubkeyauthentication' permitrootlogin no pubkeyauthentication yes passwordauthentication no # 6. firewalldの状態 $ sudo firewall-cmd --list-all # 7. SELinuxの状態 $ getenforce Enforcing # 8. dnf-automaticタイマーの動作 $ systemctl is-active dnf-automatic.timer active # 9. wheelグループのユーザー $ getent group wheel wheel:x:10:deploy # 10. 直近のエラーログ $ sudo journalctl -p err -n 20 --no-pager

10項目すべてが想定どおりの結果を返せば、サーバーは本番投入できる状態です。私のセミナーでも、初期設定の最後にこの10コマンドを順に叩いて、受講生に「自分の手で設定が入ったことを目で確認する」体験をしてもらっています。チェックリスト化しておくと、次のサーバーを立てる時にコピペで使えます。
AlmaLinux 10 サーバー初期設定10項目|SELinux・firewalld・dnf・SSH鍵認証 - まとめ

本記事のまとめ

項目 要点
1. dnf updateとリポジトリ baseos/appstream/extras標準、EPELは必要時のみ
2. タイムゾーン・ロケール timedatectl set-timezone Asia/Tokyoを最初に
3. ホスト名・hosts FQDNを/etc/hostsに必ず登録
4. SSH鍵認証 鍵で疎通確認してからPasswordAuthentication no
5. firewalld publicゾーンに22/80/443、--permanent忘れに注意
6. SELinux enforcingのまま、まずaudit2allowで例外作成
7. ユーザー・自動更新 wheelグループ追加、dnf-automaticはsecurityのみ
8. ジャーナル SystemMaxUseで上限、df -h監視を別途
9. 不要サービス cockpit/tunedなど用途外は停止、ss -tlnpで点検
10. 動作確認 10コマンドのチェックリストで全項目検証
ここまでの10項目をなぞれば、AlmaLinux 10サーバーの初期設定はひと通り完了です。所要時間は手順に慣れていれば30分から1時間ほどです。

すでにCentOS 7/8を運用中で、AlmaLinux 10へ乗り換えたい方は「CentOS 7/8からAlmaLinux 10への移行手順|almalinux-deploy実行と失敗時の復旧」の記事は近日公開予定です。almalinux-deployでのin-placeアップグレード手順と、移行中に起きやすい依存破壊・SELinuxラベル再付け・失敗時の復旧パターンを実機検証ベースでまとめます。

20年以上Linuxサーバーの構築・運用を続けてきた中で、初期設定の手抜きが後々のトラブルにつながるケースを何度も見てきました。「とりあえず動いたから本番投入」ではなく、本記事の10項目を通して「自分の手で固めた」状態にしてから運用に入るほうが、結果的に楽です。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Linux Master Pro Seminarでは少人数ハンズオン形式で実践的なスキルをお伝えしています。詳しくはセミナー案内ページをご確認ください。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。


Linux無料マニュアル(図解60P) 名前とメールで30秒登録