はじめに
システム管理およびサイバーセキュリティにおいて、セキュリティベースラインとは、システムまたはネットワークの標準化された最小限のセキュリティ設定レベルのことです。ベースラインの確立は、システムの強化、攻撃対象領域の削減、および組織全体で一貫したセキュリティ体制を確保するための基本的なステップです。コンプライアンス制御とは、これらのベースラインが満たされ、維持されていることを検証するために使用されるメカニズムと手順です。
この実験(Lab)では、Linux システムでこれらの概念を実際に体験します。新しいユーザーアカウントのシンプルなセキュリティベースラインの定義方法、ベースラインが正しく適用されていることの検証方法、および不正な変更から重要な設定ファイルを監視するために Linux Audit Daemon (auditd) を設定する方法を学びます。このプロセスは、システムの整合性を維持し、規制遵守要件を満たすために不可欠です。
この実験(Lab)の終わりまでに、以下のことができるようになります。
- システム全体のユーザーデフォルト設定を変更する。
- 定義されたセキュリティベースラインに準拠した新しいユーザーを作成する。
- 標準的な Linux コマンドを使用してコンプライアンスを検証する。
- 重要なファイルへの変更を監視するように
auditdを設定する。 - セキュリティイベントの監査ログを検索およびレビューする。
ユーザーデフォルトのシンプルな Linux セキュリティベースラインを定義する
このステップでは、システムで作成されるすべての新規ユーザーに対してデフォルトのパスワードポリシーを設定することにより、シンプルなセキュリティベースラインを定義します。これらのデフォルト設定を制御する /etc/login.defs ファイルを編集します。
まず、これはシステムレベルのファイルであるため、sudo 権限を持つ nano を使用して設定ファイルを開きます。
sudo nano /etc/login.defs
nano エディタ内で、パスワードの有効期間に関連する以下の 3 つのパラメータを探し、値を変更します。nano 内でテキストを検索するには Ctrl + W を使用できます。
PASS_MAX_DAYS: パスワードが使用できる最大日数。これを90に設定します。PASS_MIN_DAYS: パスワード変更間に許可される最小日数。これを7に設定します。PASS_WARN_AGE: パスワードの有効期限が切れる前に警告が表示される日数。これを14に設定します。
これらの行を見つけて、以下のように変更してください。
#
## Password aging controls:
#
## PASS_MAX_DAYS Maximum number of days a password may be used.
## PASS_MIN_DAYS Minimum number of days allowed between password changes.
## PASS_WARN_AGE Number of days warning is given before a password expires.
#
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_WARN_AGE 14
変更を加えたら、ファイルを保存し、Ctrl + X、次に Y、最後に Enter を押して nano を終了します。
これで、システム上のパスワードポリシーに対するシンプルなセキュリティベースラインが確立されました。この時点から作成される新しいユーザーは、これらの設定を継承します。
システムコマンドでベースラインコンプライアンスを検証する
このステップでは、前のステップで定義したベースラインが正しく適用されていることを検証します。これを最も直接的に行う方法は、新しいユーザーを作成し、そのアカウントのプロパティを検査することです。
まず、compliance_user という名前の新しいユーザーを作成します。useradd コマンドは、/etc/login.defs からのデフォルト設定を自動的に適用します。-m フラグは、ユーザーのホームディレクトリが作成されることを保証します。
sudo useradd -m compliance_user
このコマンドは、成功した場合、何も出力しません。次に、chage (change age) コマンドに -l (list) フラグを付けて、新しいユーザーのパスワード有効期間設定を確認できます。
sudo chage -l compliance_user
以下のような出力が表示されるはずです。「Maximum number of days between password change」(パスワード変更間の最大日数)、「Minimum number of days between password change」(パスワード変更間の最小日数)、「Number of days of warning before password expires」(パスワード有効期限前の警告日数)の値が、/etc/login.defs で設定したベースラインと一致していることに注目してください。
Last password change : Aug 05, 2025
Password expires : Nov 03, 2025
Password inactive : never
Account expires : never
Minimum number of days between password change : 7
Maximum number of days between password change : 90
Number of days of warning before password expires : 14
この出力は、ベースラインが効果的であり、システムが新規ユーザーに対する新しいポリシーに準拠していることを確認します。
システムコール監視のために auditd を設定する
このステップでは、Linux Audit Daemon (auditd) を設定し、ベースライン設定ファイルである /etc/login.defs の変更を監視します。これは重要なコンプライアンス管理であり、誰がいつファイルを変更したかのログを提供します。
auditd サービスは、どのイベントをログに記録するかを決定するために一連のルールを使用します。ファイルに対する書き込みまたは属性変更操作を監視するための新しいルールを追加します。
ルールは /etc/audit/rules.d/audit.rules ファイルに追加します。echo と tee を使用してシステムファイルに行を追加するのは安全な方法です。
以下のコマンドを実行して、監査ルールを追加します。
sudo echo "-w /etc/login.defs -p wa -k login_defs_changes" | sudo tee -a /etc/audit/rules.d/audit.rules
このルールを分解してみましょう。
-w /etc/login.defs: 監視するファイルのパスを指定します。-p wa: 監査する権限を設定します。wは書き込みアクセス用、aは属性変更用です。-k login_defs_changes: これらの監査イベントにカスタムキーlogin_defs_changesを割り当て、後で検索しやすくします。
新しいルールを有効にするには、auditd サービスを再起動する必要があります。
sudo systemctl restart auditd
これで、auditd は /etc/login.defs の変更を積極的に監視するようになります。
ポリシー適用のための監査ログを生成・レビューする
このステップでは、イベントをトリガーして監査ルールをテストし、生成されたログを確認します。これにより、コンプライアンス制御が期待どおりに機能していることを実証します。
監査ルールをトリガーするには、/etc/login.defs ファイルを変更する必要があります。内容を変更せずにこれを行う簡単な方法は、touch コマンドを使用することです。これはファイルのアクセスおよび変更タイムスタンプを更新します。このアクションは、属性変更として auditd によって検出されます。
sudo touch /etc/login.defs
このアクションにより、監査ログにイベントが作成されたはずです。ログは /var/log/audit/audit.log に保存されますが、非常に大量になる可能性があります。特定のイベントを見つけるより良い方法は、前のステップで定義したキーを使用して ausearch コマンドを使用することです。
定義したキー login_defs_changes でタグ付けされたすべてのイベントを検索しましょう。
sudo ausearch -k login_defs_changes
出力には、touch コマンドに関連する 1 つ以上のレコードが含まれます。以下のようなものになります(タイムスタンプと ID は異なります)。
----
time->Tue Dec 12 08:35:15 2023
type=PROCTITLE msg=audit(1702370115.321:101): proctitle=746F756368002F6574632F6C6F67696E2E64656673
type=PATH msg=audit(1702370115.321:101): item=0 name="/etc/login.defs" inode=131409 dev=00:1e mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1702370115.321:101): cwd="/home/labex/project"
type=SYSCALL msg=audit(1702370115.321:101): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=7ffc62e212d0 a2=90800 a3=0 items=1 ppid=1102 pid=1125 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=3 comm="touch" exe="/usr/bin/touch" key="login_defs_changes"
SYSCALL レコードの末尾にある key="login_defs_changes" を探してください。これは、auditd が重要な設定ファイルに対する変更イベントを正常にログに記録したことを確認し、監視制御がアクティブで効果的であることを証明します。
まとめ
この実験の完了おめでとうございます!Linux システム上でセキュリティベースラインを適用し、コンプライアンス制御を実装するという基本的なプロセスを正常に実行しました。
この実験では、以下の方法を学びました。
/etc/login.defsを変更して、ユーザーパスワードポリシーのセキュリティベースラインを定義する。chageコマンドを使用して、新しいユーザーに対してベースラインが正しく適用されていることを確認する。- Linux Audit Daemon (
auditd) を設定して、重要な設定ファイルの変更を監視する。 ausearchを使用して監査ログをトリガーおよびレビューし、監視制御が機能していることを確認する。
これらのスキルは、システムの強化、セキュリティ体制の維持、および CIS Benchmarks や NIST ガイドラインのようなコンプライアンス基準を満たす責任を負うシステム管理者またはセキュリティ専門家にとって基礎となります。明確なベースラインを確立し、逸脱を継続的に監視することで、IT インフラストラクチャのセキュリティと整合性を大幅に向上させることができます。



