SELinux無効化、開発ツールパッケージのインストール及びシステムアップデート自動化

スポンサーリンク
RockyLinux
この記事は約17分で読めます。
ランキングに参加しています。応援よろしくお願いします。
ブログランキング・にほんブログ村へ 人気ブログランキングへ FC2ブログランキングへ
スポンサーリンク
この記事が気に入ったら
フォローしよう
最新情報をお届けします。

前回の「ユーザ作成及びsudo設定」に引き続き、Rocky Linux 9 サーバ構築手順の次のステップとして、サーバの初期設定を行います。
本記事では、Rocky Linux 9における以下の3項目について設定を行います。
SELinux無効化
開発ツールパッケージのインストール
システムアップデートの自動化

当ブログサイトを運用しているサーバは、「KAGOYA JAPAN」で提供されている「KAGOYA CLOUD VPS」を利用しています。

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を再有効化する場合の手順も記載しておきます。

重要

  • Disabledモードから再有効化する場合、システム再起動時にファイルシステム全の再ラベル付けが必要です。
  • 大きなファイルシステムでは、この処理に時間がかかる場合があります。
  • 再有効化する場合は、Enforcingモードに直接戻すと、動作に問題を起こしてOSが起動しなくなる場合があるため、Permissiveモードに戻す事が推奨されています。
# 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

依存関係

  • 開発ツールパッケージ群はbaseパッケージを依存先としています
  • システムの最小構成インストール時には、baseパッケージは既にインストールされているため、追加でインストールする必要はありません

インストール実行:

# 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 -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行目:タイマーの動作スケジュールを確認

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: タイマーが起動するサービス
# 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は、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は非常に強力なログ解析ツールで、これらのオプションを組み合わせることで、システムの問題診断や監視を効率的に行うことができます。

運用上の注意

  • 自動アップデートは便利ですが、予期しない変更が発生する可能性があります
  • 重要なシステムでは、まずテスト環境で動作確認することを推奨します
  • ログの定期的な確認を行い、問題がないかモニタリングしてください

システムの初期設定は次回以降も続きます。次は以下の手順を実行します。

  1. SSH設定の強化
    • 公開鍵認証の設定
    • rootログインの無効化
  2. NTPサーバ設定
    • 時刻同期設定
  3. セキュリティ強化
  4. メール転送設定
    • rootメール転送設定

これらの手順により、安全で管理しやすいLinuxサーバ環境を構築できます。

タイトルとURLをコピーしました