この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
そう感じている方に向けて、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コマンドで「自分の手で固めた」状態を可視化する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
1. dnf updateとリポジトリの確認
最初にやるのはパッケージリストの更新と既存パッケージのアップグレードですが、その前に有効リポジトリを確認しておきます。AlmaLinux 10のMinimal Installではbaseos・appstream・extras の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 install や dnf 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)
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
web01・db-stg-01・bastion-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
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許可 $ 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
--permanent を付け忘れたままreloadすると設定が消えるという定番のミスもここで解説しています。
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
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
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)
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_type は security にしておくのが現実解です。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))
何を止めて何を残すかの判断軸は「このサーバーの役割」次第です。Webサーバーなら
nginx や httpd が動く前提、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
本記事のまとめ
| 項目 | 要点 |
|---|---|
| 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コマンドのチェックリストで全項目検証 |
すでにCentOS 7/8を運用中で、AlmaLinux 10へ乗り換えたい方は「CentOS 7/8からAlmaLinux 10への移行手順|almalinux-deploy実行と失敗時の復旧」の記事は近日公開予定です。almalinux-deployでのin-placeアップグレード手順と、移行中に起きやすい依存破壊・SELinuxラベル再付け・失敗時の復旧パターンを実機検証ベースでまとめます。
20年以上Linuxサーバーの構築・運用を続けてきた中で、初期設定の手抜きが後々のトラブルにつながるケースを何度も見てきました。「とりあえず動いたから本番投入」ではなく、本記事の10項目を通して「自分の手で固めた」状態にしてから運用に入るほうが、結果的に楽です。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます