◆はじめに
前回の「ユーザ作成及びsudo設定」に引き続き、Rocky Linux 9 サーバ構築手順の次のステップとして、サーバの初期設定を行います。
本記事では、Rocky Linux 9における以下の3項目について設定を行います。
・SELinux無効化
・開発ツールパッケージのインストール
・システムアップデートの自動化
◆環境情報
当ブログサイトを運用しているサーバは、「KAGOYA JAPAN」で提供されている「KAGOYA CLOUD VPS」を利用しています。
◆初期設定
・SELinux無効化
SELinuxについて
SELinux(Security-Enhanced Linux)は、強制アクセス制御(MAC)を提供するLinuxセキュリティモジュールです。開発環境では設定が複雑になる場合があるため、必要に応じて無効化します。
注意事項
重要
SELinuxを無効化することで生じるセキュリティリスクや、システムへの影響については、すべて自己責任となります。無効化を行う前に、その必要性を十分に検討し、リスクを理解した上で実行してください。
SELinux状態確認
現在のSELinuxの状態を確認します。
# getenforce
Enforcing # 有効
状態の説明(getenforce):
- Enforcing: SELinuxが有効(強制実行)
- Permissive: SELinuxが無効(警告のみ)
- Disabled: SELinuxが完全に無効
一時的な無効化
システムを再起動するまでの間、一時的にSELinuxを無効化します。
# setenforce 0
# getenforce
Permissive
状態の説明(setenforce):
- SELinuxの動作モードを一時的に変更
setenforce 0
: Permissiveモードに変更setenforce 1
: Enforcingモードに変更
恒久的な無効化
警告
恒久的な無効化は、セキュリティリスクを高めます。本当に必要な場合のみ実行してください。
# grubby --update-kernel ALL --args selinux=0
状態の説明(grubby):
- カーネルパラメータを管理
--update-kernel ALL --args selinux=0
: 全カーネルにSELinux無効化パラメータを追加--update-kernel ALL --remove-args selinux:
SELinux関連パラメータを削除
再起動後に確認します。
# reboot
# getenforce
Disabled
SELinux再有効化
将来的にSELinuxを再有効化する場合の手順も記載しておきます。
重要
# SELinuxカーネルパラメータの削除
# grubby --update-kernel ALL --remove-args selinux
# 再起動時のラベル付与設定
# fixfiles -F onboot
# 設定ファイルでPermissiveモードに設定(推奨)
# sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
# 再起動
# reboot
再起動後、動作確認を行ってから必要に応じてEnforcingモードに変更します。
# getenforce
Permissive
# 動作確認後、必要に応じてEnforcingモードに変更
# setenforce 1
・開発ツールパッケージのインストール
依存関係
インストール実行:
# dnf -y groupinstall "Development tools"
実行例:
# dnf -y groupinstall "Development tools"
'~ 中略 ~'
Complete!
パッケージ管理コマンド(dnf groupinstall):
- パッケージグループを一括インストール
-y
オプション: 確認応答を省略して自動実行- “Development tools”: gcc、make、autotools等の開発ツール群
インストールされたパッケージの確認
# dnf group info "Development tools"
インストールされる主要ツール
開発ツールパッケージには以下のような開発に必要なツールが含まれます。
- gcc: (GNU Compiler Collection)C/C++コンパイラ
- make: ビルドツール
- git: バージョン管理システム
- autoconf: 自動設定ツール
- automake: Makefileジェネレータ
- libtool: ライブラリ作成ツール
- rpm-build: RPMパッケージビルドツール
・システムアップデートの自動化
dnf-automaticのインストール
# dnf -y install dnf-automatic
実行例:
# dnf -y install dnf-automatic
'~ 中略 ~'
Complete!
dnf install:
- 個別パッケージのインストール
dnf-automatic
: 自動アップデート機能を提供
設定ファイルの編集
自動アップデートの設定を行います。
# vi /etc/dnf/automatic.conf
主要な設定項目:
[commands]
# What kind of upgrade to perform:
# default = all available upgrades
# security = only the security upgrades
upgrade_type = default
random_sleep = 0
'〜 中略 〜'
# Whether updates should be applied when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
apply_updates = yes
設定項目の説明:
upgrade_type
:default
: すべての利用可能なアップデートを適用security
: セキュリティ関連のアップデートのみ適用
apply_updates
:yes
: アップデートを自動適用no
: ダウンロードのみ(手動での適用が必要)
random_sleep
: アップデート開始前の待機時間(負荷分散のため)- 0: 無効化
サービスの起動と自動起動の有効化
# systemctl start dnf-automatic.timer
# systemctl enable dnf-automatic.timer
1行目:自動アップデートサービスを起動
2行目:システム起動時の自動起動を有効化
動作確認
設定したタイマーの状態を確認します。
# systemctl status dnf-automatic.timer
# systemctl list-timers dnf-automatic.timer
1行目:サービスの状態を確認
2行目:タイマーの動作スケジュールを確認
systemctl関連コマンド
基本的なサービス操作
start/stop/restart/reload
# systemctl start サービス名 # サービスを開始# systemctl stop サービス名 # サービスを停止
# systemctl restart サービス名 # サービスを再起動
# systemctl reload サービス名 # 設定を再読み込み
enable/disable
# systemctl enable サービス名 # 自動起動を有効化# systemctl disable サービス名 # 自動起動を無効化
状態確認のオプション
status
- サービスの現在の状態を確認
- 実行中かどうか、エラーの有無等を表示
# systemctl status サービス名 # サービスの詳細状態を表示# systemctl status # システム全体の状態を表示
is-active/is-enabled
# systemctl is-active サービス名 # 動作中かどうかを確認# systemctl is-enabled サービス名 # 自動起動が有効かどうかを確認
一覧表示のオプション
list-units
# systemctl list-units # 全てのアクティブなユニットを表示# systemctl list-units --all # 全てのユニットを表示(非アクティブも含む)
# systemctl list-units --type=service # サービスのみを表示
# systemctl list-units --state=failed # 失敗したユニットのみを表示
list-unit-files
# systemctl list-unit-files # 全てのユニットファイルを表示# systemctl list-unit-files --type=service # サービスのユニットファイルのみ表示
システム全体の制御
system-wide operations
# systemctl reboot # システムを再起動# systemctl poweroff # システムをシャットダウン
# systemctl suspend # システムをサスペンド
# systemctl hibernate # システムをハイバネート
便利なオプション
–now
# systemctl enable --now サービス名 # 有効化と同時に開始# systemctl disable --now サービス名 # 無効化と同時に停止
–user
# systemctl --user start サービス名 # ユーザー単位でサービスを管理
–failed
# systemctl --failed # 失敗したサービスのみを表示
–no-pager
# systemctl status --no-pager # ページャーを使わずに出力
依存関係の確認
# systemctl list-dependencies サービス名 # 依存関係を表示# systemctl show サービス名 # サービスの全設定を表示
タイマーサービスのスケジュール情報の確認
systemctl list-timersは、システムで実行されているスケジュール化されたタスクを把握するのに非常に有用なコマンドです。
# systemctl list-timers # アクティブなタイマーのみを表示
# systemctl list-timers --all # 全てのタイマーを表示(非アクティブも含む)
表示される情報:
- NEXT: 次回実行予定時刻
- LEFT: 次回実行まで残り時間
- LAST: 最後に実行された時刻
- PASSED: 最後の実行からの経過時間
- UNIT: タイマーユニット名
- ACTIVATES: タイマーが起動するサービス
list-timersの便利なオプション
# systemctl list-timers --no-pager # 出力をページャーなしで表示
# systemctl list-timers タイマー名* # 特定のタイマーのみを表示
# systemctl list-timers --no-legend # 詳細な情報を表示
実用例:
# システムのメンテナンスタスクを確認
# systemctl list-timers | grep -E "(apt|clean|update)"
# 特定のタイマーの詳細を確認
# systemctl status タイマー名.timer
# タイマーの設定内容を確認
# systemctl cat タイマー名.timer
一般的なシステムタイマー
多くのLinuxシステムでは以下のようなタイマーが動作しています。
- apt-daily.timer: パッケージの更新チェック
- fstrim.timer: SSDの最適化
- logrotate.timer: ログローテーション
- man-db.timer: manページデータベースの更新
- systemd-tmpfiles-clean.timer: 一時ファイルの清掃
ログの確認
自動アップデートの実行ログを確認できます。
# journalctl -u dnf-automatic.timer
# journalctl -u dnf-automatic.service
journalctlコマンド
journalctlは、systemdのログ管理システム(systemd journal)からログを表示・検索するためのコマンドです。
基本的な使い方
# journalctl # 全てのログを表示(古いものから)# journalctl -r # 新しいログから表示(reverse)
# journalctl -f # リアルタイムでログを監視(tail -f相当)
# journalctl -n 50 # 最新50行のログを表示
時間指定でのログ表示
# 今日のログのみ
# journalctl --since today
# 昨日のログのみ
# journalctl --since yesterday
# 特定の日付から
# journalctl --since "2024-01-01"
# journalctl --since "2024-01-01 10:00:00"
# 期間指定
# journalctl --since "2024-01-01" --until "2024-01-31"
# journalctl --since "1 hour ago"
# journalctl --since "30 minutes ago"
サービス・ユニット別のログ表示
# 特定のサービスのログ
# journalctl -u nginx.service
# journalctl -u ssh.service
# 複数のサービスのログ
# journalctl -u nginx.service -u ssh.service
# カーネルメッセージのみ
# journalctl -k
優先度・レベル別のログ表示
# journalctl -p err # エラーレベル以上のログのみ
# journalctl -p warning # 警告レベル以上のログのみ
# journalctl -p info # 特定のレベルのログのみ
ログレベルの種類:
- emerg (0): 緊急事態
- alert (1): アラート
- crit (2): クリティカル
- err (3): エラー
- warning (4): 警告
- notice (5): 通知
- info (6): 情報
- debug (7): デバッグ
プロセス・ユーザー別のログ表示
# journalctl _PID=1234 # 特定のプロセスIDのログ
# journalctl _UID=1000 # 特定のユーザーのログ
# journalctl _GID=1000 # 特定のグループのログ
# journalctl _COMM=sshd # 特定のコマンドのログ
出力形式の指定
# journalctl -o json # JSON形式で出力
# journalctl -o verbose # 詳細な出力形式
# journalctl -o short # 短い形式で出力
# journalctl -o cat # 1行形式で出力
主な出力形式:
- short(デフォルト)
- short-iso(ISO形式の日時)
- short-precise(マイクロ秒まで表示)
- verbose(全フィールドを表示)
- export(バイナリ形式)
- json(JSON形式)
- json-pretty(整形されたJSON)
- cat(メッセージのみ)
検索とフィルタリング
# journalctl | grep "error" # 特定の文字列を含むログを検索
# journalctl | grep -i "failed" # 大文字小文字を区別しない検索
# journalctl | grep -E "(error|fail|warn)" # 正規表現を使った検索
ブート別のログ表示
# journalctl -b # 現在のブートのログ
# journalctl -b -1 # 前回のブートのログ
# journalctl -b -2 # 2回前のブートのログ
# journalctl -b 3c3c9a1a... # ブートIDを指定
# journalctl --list-boots # 利用可能なブートの一覧
ログの管理
# journalctl --disk-usage # ログの使用量を確認
# journalctl --vacuum-size=100M # 古いログを削除(指定サイズまで)
# journalctl --vacuum-time=2weeks # 古いログを削除(指定期間より古いもの)
# journalctl --verify # ログファイルの整合性をチェック
便利なオプション組み合わせ
# 特定のサービスのエラーログをリアルタイム監視
# journalctl -u nginx.service -p err -f
# 今日のSSHログインエラーを確認
# journalctl -u ssh.service --since today -p err
# システム起動時のエラーを確認
# journalctl -b -p err
# 特定の時間帯のログを詳細表示
# journalctl --since "09:00" --until "17:00" -o verbose
実用的な使用例
# journalctl -p err --since "1 hour ago" # システムの異常を調査
# journalctl -u apache2.service -f # Webサーバーのアクセスログを監視
# journalctl -b -p warning # 起動時の問題を調査
# journalctl _UID=1000 --since today # 特定のユーザーの活動を追跡
journalctlは非常に強力なログ解析ツールで、これらのオプションを組み合わせることで、システムの問題診断や監視を効率的に行うことができます。
運用上の注意
◆次のステップ
システムの初期設定は次回以降も続きます。次は以下の手順を実行します。
- SSH設定の強化
- 公開鍵認証の設定
- rootログインの無効化
- NTPサーバ設定
- 時刻同期設定
- セキュリティ強化
- Tripwireによるファイル改竄検知
- RKHunterによるrootkit検知
- ClamAVアンチウィルスソフト
- メール転送設定
- rootメール転送設定
これらの手順により、安全で管理しやすいLinuxサーバ環境を構築できます。