インフラエンジニアの羅針盤

インフラエンジニア1〜3年目のための技術ガイド

Linuxセキュリティ管理・GnuPG暗号化とPostfixメール基礎解説【LinuC102】

公開
,
LinuC Level 1 第17回 主題1.10 セキュリティ



LinuC 102試験の重要テーマである主題1.09(1.09.3 メール管理)および主題1.10(1.10.1〜1.10.3 セキュリティ管理・暗号化)では、Linuxシステムの堅牢化、アクセス権限制御、通信・データの暗号保護、そしてメッセージ転送エージェント(MTA)の運用が問われます。これらのトピックは合計重要度11を占める得点源です。本稿では、不要ポートの監視や特殊権限(SUID)の検出、visudoによる特権委譲、ulimitによるリソース制限、GnuPGとSSHによる公開鍵暗号・電子署名、さらに/etc/aliasesとnewaliasesによるメール配送制御まで、実機検証ログを交えて整理します。

実機検証環境

  • OS: AlmaLinux 9.8 (x86_64)
  • カーネル: 5.14.0-570.el9.x86_64
  • 暗号化ツール: GnuPG 2.3.3 (libgcrypt 1.10.0)
  • リモート接続: OpenSSH 8.7p1
  • MTA設定: /etc/aliases (Postfix互換書式)

本稿の到達目標

  • SUID/SGIDファイルの危険性を理解し、findコマンドで網羅的に検出できる
  • /etc/sudoersの文法規則を把握し、visudoコマンドで安全に権限を委譲できる
  • ulimitコマンドおよび/etc/security/limits.confでシステムリソース上限を統制できる
  • 公開鍵暗号と電子署名の違いを区別し、GnuPGおよびSSH鍵認証を正しく構築できる
  • /etc/aliasesの記述規則とnewaliasesコマンドによるDB再構築手順を説明できる
目次
  1. 1. システムセキュリティの基本:不要ポートと権限監視
    1. 1.1 不要なサービスの停止とソケット監視(ss -tulpn, lsof -i)
    2. 1.2 特殊権限(SUID / SGID / スティッキービット)の危険性とfind検索(-perm -4000, -perm -2000)
    3. 1.3 ファイル改ざん検知とパッケージ整合性検証(rpm -V, debsums)
  2. 2. ユーザセキュリティ統制:sudo・ログイン制限・リソース管理
    1. 2.1 sudoers設定と安全な編集(visudo, /etc/sudoers の文法定義)
    2. 2.2 パスワードエージングとセキュリティポリシー(/etc/login.defs, chage)
    3. 2.3 システムリソースの制限(ulimitコマンド, /etc/security/limits.conf)
    4. 2.4 ログイン制御ファイル(/etc/securetty, /etc/nologin)
  3. 3. 暗号化とホスト認証:GnuPGとSSH鍵認証
    1. 3.1 共通鍵暗号と公開鍵暗号・ハイブリッド暗号の基礎
    2. 3.2 GnuPG(gpg)によるファイル暗号化・復号・電子署名・鍵管理
    3. 3.3 SSH公開鍵認証の仕組みと設定(ssh-keygen, authorized_keys, パーミッション規則)
    4. 3.4 OpenSSHサーバーセキュリティ設定(/etc/ssh/sshd_config)
    5. 3.5 OpenSSLと証明書の基礎概念
  4. 4. メール管理(MTA):メール転送とキュー操作
    1. 4.1 MTA(Postfix, Sendmail)の役割と配送の流れ
    2. 4.2 システム全体エイリアス(/etc/aliases)とnewaliasesコマンド(/usr/bin/newaliases)
    3. 4.3 ユーザ個別転送(~/.forward)の書式とセキュリティ
    4. 4.4 メールキューの確認と強制配送(mailq, sendmail -q, postqueue -p)
  5. 5. 実機ハンズオン演習:AlmaLinux 9でGnuPG暗号化とsudo/ulimitを検証
    1. 5.1 実機検証環境の確認
    2. 5.2 演習1:findコマンドによるSUIDファイルの網羅的検出
    3. 5.3 演習2:ulimitによるプロセス数・ファイルサイズ制限の動作確認
    4. 5.4 演習3:gpgによる対称暗号化と復号の実証
    5. 5.5 演習4:newaliases によるエイリアスデータベース再構築
  6. 6. LinuC 102試験対策まとめとコマ問頻出チェック
    1. 6.1 セキュリティ・暗号・メール管理 必須コマンド&ファイル対比表
    2. 6.2 コマ問(記述式)頻出キーワード一覧表
    3. 6.3 本番想定 総合確認演習問題
    4. 6.4 Ping-t演習へのブリッジ(対象分野と推奨学習順)
  7. 7. まとめと次回予告

1. システムセキュリティの基本:不要ポートと権限監視

1.1 不要なサービスの停止とソケット監視(ss -tulpn, lsof -i)

システム堅牢化の第一歩は、攻撃対象領域(アタックサーフェス)を最小化することです。外部からの不正アクセスを受け付ける待機ポート(リスニングソケット)を常時把握し、不要なネットワークデーモンを停止する必要があります。

ソケットの監視には、現代の標準ツールであるssコマンドを用います。オプション-tulpn(TCP、UDP、リスニングソケット、数値表示、プロセス名表示)を付与することで、各ポートに紐付くプロセスを特定できます。

# ss -tulpn
Netid State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
tcp   LISTEN 0      128          0.0.0.0:22        0.0.0.0:*    users:(("sshd",pid=712,fd=3))
tcp   LISTEN 0      128             [::]:22           [::]:*    users:(("sshd",pid=712,fd=4))

未知のポートや利用していないサービス(例: テスト用に起動したWebサーバやFTPデーモン)が存在する場合、systemctl stop <サービス名>で即時停止し、systemctl disable <サービス名>でOS再起動時の自動起動を無効化します。また、ポート番号から開いているプロセスを調査する際にはlsof -i :<ポート番号>も有効です。

1.2 特殊権限(SUID / SGID / スティッキービット)の危険性とfind検索(-perm -4000, -perm -2000)

Linuxでは、実行ファイルにSUID(Set User ID)が設定されていると、一般ユーザが実行した場合でもファイルの所有者権限(通常はroot)でプロセスが動作します。パスワードを変更する/usr/bin/passwdのように正当な理由で設定されているプログラムもありますが、不正なプログラムにSUIDが付与されると特権昇格のバックドアとして悪用されます。

セキュリティ監査では、findコマンドを用いてシステム内のSUID/SGID設定ファイルを定期的に監査します。LinuC試験では、特殊権限の8進数表記(SUID: 4000、SGID: 2000、スティッキービット: 1000)を用いた検索オプションが頻出です。

# find /usr/bin -perm -4000
/usr/bin/mount
/usr/bin/chage
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/umount
/usr/bin/su
/usr/bin/crontab
/usr/bin/pkexec

パーミッション検索オプションの指定方式

findコマンドの-permオプションには以下の指定方法があります。

  • -perm 4755: パーミッションが厳密にrwsr-xr-xと完全一致するファイルを検索
  • -perm -4000: SUIDビット(第4ビット)が立っているすべてのファイルを検索(他の権限ビットは問わない)
  • -perm /4000: 指定したビットのいずれかが一致するファイルを検索

監査目的で「SUIDが設定されている全ファイル」を抽出する場合は、ハイフンを付与した-perm -4000を使用します。

1.3 ファイル改ざん検知とパッケージ整合性検証(rpm -V, debsums)

攻撃者によってバイナリファイルや設定ファイルが書き換えられていないかを検証するため、パッケージ管理システムが保持するチェックサムや属性情報と実ファイルを比較照合します。

  • RPM系(CentOS/RHEL/AlmaLinux): rpm -V <パッケージ名>(Verify)。システム全体の全パッケージを検証する場合はrpm -Vaを実行します。MD5/SHA256ダイジェスト、ファイルサイズ、パーミッション、更新日時などの変更が検出されます。
  • Debian系(Debian/Ubuntu): debsumsコマンドを使用します。全パッケージのMD5チェックサムを検証し、改ざんされたファイルを検知します。

2. ユーザセキュリティ統制:sudo・ログイン制限・リソース管理

2.1 sudoers設定と安全な編集(visudo, /etc/sudoers の文法定義)

rootアカウントを直接運用することは、誤操作や認証情報の漏洩リスクを高めるため推奨されません。一般ユーザに対して必要なコマンドのみ管理者特権を委譲する仕組みがsudoです。

sudoの設定ファイルは/etc/sudoersですが、このファイルをvinanoで直接編集してはいけません。文法エラーが存在すると、全ユーザがsudoを実行不能になり、特権復旧が困難になるためです。必ず構文チェック機能とファイルロック機構を備えたvisudoコマンドを使用します。

# /etc/sudoers の基本書式
ユーザ名 ホスト名=(実行ユーザ:実行グループ) コマンド

# 例1: wheelグループの所属者に全コマンドの実行を許可
%wheel ALL=(ALL) ALL

# 例2: operatorユーザにネットワーク再起動コマンドのみパスワード不要で許可
operator ALL=(root) NOPASSWD: /usr/bin/systemctl restart NetworkManager

sudoersにおけるパーセント記号の意味

先頭に%が付いている識別子(例: %wheel, %sudo)は、個別ユーザ名ではなく「UNIXグループ」を指します。グループ単位で権限を一括管理する際に多用されます。

2.2 パスワードエージングとセキュリティポリシー(/etc/login.defs, chage)

ユーザのパスワードの有効期限、変更禁止期間、期限切れ前の警告日数を管理する仕組みを「パスワードエージング」と呼びます。新規作成ユーザのデフォルト値は/etc/login.defsで定義され、既存ユーザのパラメータ変更にはchageコマンドを使用します。

LinuC試験では、chage -l <ユーザ名>による設定一覧の表示、および-M(最長有効日数)、-m(最短有効日数)、-W(警告日数)、-E(アカウント自体の失効日)の各オプションが問われます。

2.3 システムリソースの制限(ulimitコマンド, /etc/security/limits.conf)

単一のユーザやプロセスがCPU時間、メモリ、オープンファイル数、プロセス数を過剰に消費すると、システム全体がサービス停止(DoS状態)に陥ります。これを抑止するのがulimitコマンドです。

# ulimit -a
real-time non-blocking time  (microseconds, -R) unlimited
core file size              (blocks, -c) unlimited
data seg size               (kbytes, -d) unlimited
scheduling priority                 (-e) 0
file size                   (blocks, -f) unlimited
pending signals                     (-i) 14444
max locked memory           (kbytes, -l) 8192
max memory size             (kbytes, -m) unlimited
open files                          (-n) 1024
pipe size                (512 bytes, -p) 8
POSIX message queues         (bytes, -q) 819200
real-time priority                  (-r) 0
stack size                  (kbytes, -s) 8192
cpu time                   (seconds, -t) unlimited
max user processes                  (-u) 14444
virtual memory              (kbytes, -v) unlimited
file locks                          (-x) unlimited

代表的なulimitオプションは以下の通りです。

  • -u: ユーザが起動できる最大プロセス数(max user processes)
  • -f: 作成できるファイルの最大サイズ(file size)
  • -n: 同時にオープンできる最大ファイル記述子数(open files)
  • -c: コアダンプファイルの最大サイズ(core file size)
  • -H: ハードリミット(rootのみ引き上げ可能な絶対上限)
  • -S: ソフトリミット(警告上限。ハードリミットの範囲内で一般ユーザ自身が変更可能)

ulimitコマンドによる変更は現在のシェルセッションにのみ作用します。恒久的な設定を行うには、PAMモジュールが参照する設定ファイル/etc/security/limits.confを編集します。

2.4 ログイン制御ファイル(/etc/securetty, /etc/nologin)

特定条件下でログインをブロックするための制御ファイルも試験の頻出項目です。

  • /etc/securetty: rootユーザが直接ログインできる仮想端末(tty1〜tty6など)を指定します。ここに記載されていない端末からの直接rootログインは拒絶されます。
  • /etc/nologin: このファイルが存在すると、root以外の一般ユーザのログインが遮断されます。メンテナンス時に配置し、ファイル内に記述したメッセージがログインを試みたユーザの画面に表示されます。作業終了後にファイルを削除することで通常のログインが再開されます。

3. 暗号化とホスト認証:GnuPGとSSH鍵認証

公開鍵暗号・電子署名とSSH公開鍵認証のメカニズム
図1: 公開鍵暗号・電子署名とSSH公開鍵認証のメカニズム

3.1 共通鍵暗号と公開鍵暗号・ハイブリッド暗号の基礎

暗号技術には大別して「共通鍵暗号方式」と「公開鍵暗号方式」が存在します。

  • 共通鍵暗号方式(対称暗号): 暗号化と復号に同一の秘密鍵を使用します(AES, DES, 3DES, ChaCha20)。処理速度が高速ですが、鍵を相手に安全に配送する「鍵配送問題」が生じます。
  • 公開鍵暗号方式(非対称暗号): 公開鍵(誰にでも配布可能)と秘密鍵(所有者のみが厳重保持)のペアを使用します(RSA, ECDSA, Ed25519)。
  • ハイブリッド暗号方式: 実データの暗号化には高速な共通鍵暗号を用い、その共通鍵の受け渡しに公開鍵暗号を利用する複合方式です。SSL/TLS、SSH、PGP/GnuPGの内部で標準的に採用されています。

公開鍵暗号と電子署名の方向性の整理

暗号化と電子署名では、使用する鍵の組み合わせが正反対になります。

  • 暗号化(機密性): 送信者は「受信者の公開鍵」で暗号化します。暗号文を解読できるのは「受信者の秘密鍵」を持つ受信者本人だけです。
  • 電子署名(完全性と真正性): 送信者は「送信者の秘密鍵」でデータハッシュを署名します。検証者は「送信者の公開鍵」で署名を検証し、改ざんがないことと送信者本人が作成したことを立証します。

3.2 GnuPG(gpg)によるファイル暗号化・復号・電子署名・鍵管理

GnuPG(GNU Privacy Guard, gpgコマンド)は、RFC 4880(OpenPGP規格)に準拠したオープンソースの暗号化ツールです。

# 1. 鍵ペアの生成
$ gpg --gen-key
または
$ gpg --full-generate-key

# 2. 保持している公開鍵の一覧表示
$ gpg --list-keys
/home/user01/.gnupg/pubring.kbx
-------------------------------
pub   ed25519 2026-09-08 [SC] [expires: 2029-09-07]
      A1B2C3D4E5F6...
uid           [ultimate] Tech Engineer <engineer@example.com>
sub   cv25519 2026-09-08 [E] [expires: 2029-09-07]

# 3. 公開鍵のエクスポート(テキスト形式: --armor)
$ gpg --export --armor engineer@example.com > mykey.pub

# 4. 相手の公開鍵のインポート
$ gpg --import partnerkey.pub

# 5. ファイルの暗号化(相手の公開鍵を指定: -r 受信者)
$ gpg --encrypt -r partner@example.com secret.txt
# 成果物: secret.txt.gpg

# 6. 暗号化ファイルの復号(自身の秘密鍵で復号: --decrypt)
$ gpg --decrypt secret.txt.gpg > decrypted.txt

# 7. 電子署名の作成(--sign)と検証(--verify)
$ gpg --sign document.txt
$ gpg --verify document.txt.gpg

共通鍵暗号のみを用いてパスフレーズで直接ファイルを暗号化する場合は、gpg --symmetric secret.txt(またはgpg -c secret.txt)を実行します。

3.3 SSH公開鍵認証の仕組みと設定(ssh-keygen, authorized_keys, パーミッション規則)

SSH接続におけるパスワード認証は、総当たり攻撃(ブルートフォース攻撃)や盗聴の危険が伴います。強固な認証を実現するため、公開鍵認証が広く採用されています。

# クライアント側で鍵ペアを生成(Ed25519またはRSA)
$ ssh-keygen -t ed25519 -C "admin@personalnote.tokyo"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user01/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

# 生成されるファイル
# 秘密鍵: ~/.ssh/id_ed25519  (パーミッション: 600)
# 公開鍵: ~/.ssh/id_ed25519.pub(パーミッション: 644)

生成した公開鍵(id_ed25519.pub)を接続先端末の対象ユーザのホームディレクトリ内にある~/.ssh/authorized_keysへ転送・追記します。転送にはssh-copy-idコマンドを利用できます。

SSH関連ディレクトリ・ファイルのパーミッション規則

SSHサーバ(sshd)は、秘密情報や公開鍵リストのパーミッションが緩い場合、セキュリティ保護機能(StrictModes)により認証を拒否します。

  • ~/.ssh/ ディレクトリ: 700drwx------)所有者のみ読み書き実行可能
  • ~/.ssh/authorized_keys ファイル: 600-rw-------)所有者のみ読み書き可能
  • 秘密鍵(id_rsa / id_ed25519): 600-rw-------
  • 公開鍵(id_rsa.pub): 644-rw-r--r--

3.4 OpenSSHサーバーセキュリティ設定(/etc/ssh/sshd_config)

SSHデーモンの設定ファイルは/etc/ssh/sshd_config(末尾にdが付く点に注意。クライアント設定は/etc/ssh/ssh_config)です。安全性を高めるための主要設定パラメータを把握しておく必要があります。

# /etc/ssh/sshd_config の主要セキュア設定
Port 22                       # 待機ポート(既定値は22)
PermitRootLogin no            # rootユーザの直接SSHログインを禁止
PasswordAuthentication no     # パスワード認証を禁止(公開鍵認証を強制)
PubkeyAuthentication yes      # 公開鍵認証を有効化
AuthorizedKeysFile .ssh/authorized_keys # 公開鍵格納先
X11Forwarding no              # 不要なGUI転送を抑止

設定変更後は、systemctl reload sshdまたはsystemctl restart sshdで変更を反映します。

3.5 OpenSSLと証明書の基礎概念

Webサーバ(Apache, Nginx)のHTTPS通信やVPN接続などで利用されるSSL/TLS通信では、OpenSSL(opensslコマンド)が用いられます。公開鍵暗号に基づく鍵ペア作成、CSR(証明書署名要求)の作成、自己署名証明書の生成などが可能です。LinuC 102試験では、暗号化アルゴリズムの基礎およびopensslツールの役割が問われます。

4. メール管理(MTA):メール転送とキュー操作

Linuxシステム多層防御アーキテクチャとメール管理体系
図2: Linuxシステム多層防御アーキテクチャとメール管理体系

4.1 MTA(Postfix, Sendmail)の役割と配送の流れ

Linuxシステム上のメールアーキテクチャは以下の構成要素で成立しています。

  • MUA(Mail User Agent): メール作成・閲覧ソフト(Thunderbird, mutt, mailコマンド)
  • MTA(Mail Transfer Agent): メール配送・転送デーモン(Postfix, Sendmail, Exim, Qmail)。SMTP(TCP 25番ポート)でメールを送受信する
  • MDA(Mail Delivery Agent): 受信したメールを各ユーザのメールボックス(/var/spool/mail/<ユーザ名>~/Maildir/)に格納するエージェント(Procmail, Dovecot delivery agent)

現代は設定が容易で堅牢なPostfixが主流ですが、LinuC試験では歴史的なSendmail互換コマンド(sendmail, newaliases, mailq)の用法が出題されます。

4.2 システム全体エイリアス(/etc/aliases)とnewaliasesコマンド(/usr/bin/newaliases)

システム全体でメールの宛先を別のアドレスや特定ユーザ、外部メールアドレス、あるいはプログラムに転送・集約する設定ファイルが/etc/aliasesです。

# /etc/aliases の設定例
# 基本書式: エイリアス名: 配送先1, 配送先2, ...

# root宛のシステム通知メールを実在する管理者アカウント(admin)に転送
root:           admin, external-alert@example.com

# 複数ユーザへの同報配信(メーリングリスト)
dev-team:       alice, bob, charlie

# プログラムへのパイプ渡し
log-parser:     "|/usr/local/bin/parse_mail.sh"

newaliasesコマンドの実行必須原則(コマ問頻出)

MTAは処理の高速化のため、テキストファイルである/etc/aliasesを直接参照せず、バイナリ形式のデータベース(/etc/aliases.db)を参照します。

したがって、/etc/aliasesを編集した後は、必ずnewaliasesコマンド(またはsendmail -bi)を実行してデータベースを再構築しなければ変更が反映されません。LinuCの記述式問題で頻出の重要ポイントです。

4.3 ユーザ個別転送(~/.forward)の書式とセキュリティ

システム管理者権限(root)を持たない一般ユーザが、自身宛のメールを個別に別アドレスへ転送したい場合は、自身のホームディレクトリ直下に~/.forwardファイルを作成します。

# ~/.forward の記述例
user@company.example.com, user01

上記のようにカンマ区切りで外部アドレスを記述します。自身のローカルメールボックスにもメールのコピーを残したい場合は、ユーザ名の先頭にバックスラッシュ(user01)を付加してループ配送を防ぎます。

なお、~/.forwardファイルが他人に書き換え可能になっていると、メールを不正な宛先へ盗聴・転送される危険があるため、パーミッションは600または644にし、ホームディレクトリが他人に書き込み可能であってはなりません。

4.4 メールキューの確認と強制配送(mailq, sendmail -q, postqueue -p)

宛先サーバのダウンやネットワーク障害によって即時配送できなかったメールは、一時的にメールスプール上の「メールキュー」に滞留します。

  • キューの確認: mailqコマンド(またはsendmail -bp、Postfixではpostqueue -p)を実行します。滞留しているメッセージのID、到着日時、サイズ、送信元、宛先、配送保留理由(Connection refusedなど)が表示されます。
  • キューの強制再送: 定期配送スケジュールを待たずに即座に再配送を試行する場合は、sendmail -q(またはpostqueue -f)を実行します。

5. 実機ハンズオン演習:AlmaLinux 9でGnuPG暗号化とsudo/ulimitを検証

5.1 実機検証環境の確認

実際にAlmaLinux 9環境でセキュリティ関連コマンドの挙動を確認します。

5.2 演習1:findコマンドによるSUIDファイルの網羅的検出

システム内の実行ファイル群から、SUIDビットが有効化されているファイルを特定します。

$ find /usr/bin -perm -4000 -type f
/usr/bin/mount
/usr/bin/chage
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/umount
/usr/bin/su
/usr/bin/crontab
/usr/bin/pkexec

mountsuなど、一般ユーザからroot権限でハードウェア操作や特権切り替えを行う必須コマンドにのみSUIDが設定されていることが確認できます。

5.3 演習2:ulimitによるプロセス数・ファイルサイズ制限の動作確認

現在のシェル環境のリソース制限を確認します。

$ ulimit -n
1024
$ ulimit -u
14444

オープン可能ファイル数が1024、最大プロセス数が14444に設定されています。一般ユーザ権限でソフトリミットを一時的に引き下げるテストを行います。

$ ulimit -S -n 512
$ ulimit -n
512

安全に上限値が引き下げられたことが実証できました。

5.4 演習3:gpgによる対称暗号化と復号の実証

テキストファイルを共通鍵暗号方式(パスフレーズ)で暗号化し、復号します。

# 暗号化対象のファイルを作成
$ echo "Confidential Data 2026" > confidential.txt

# パスフレーズを指定して暗号化(対称暗号)
$ gpg --symmetric confidential.txt
# パスフレーズを入力すると confidential.txt.gpg が生成される

# 元の平文ファイルを削除
$ rm confidential.txt

# 暗号ファイルを復号
$ gpg --decrypt confidential.txt.gpg
Confidential Data 2026

パスフレーズの入力によって、安全に元の平文が出力されました。

5.5 演習4:newaliases によるエイリアスデータベース再構築

/etc/aliasesファイルの存在と更新タイムスタンプを確認します。

# ls -l /etc/aliases
-rw-r--r--. 1 root root 1529  6月 23  2020 /etc/aliases

設定ファイルを編集した後は、newaliasesコマンドを実行することで、Berkeley DB形式(/etc/aliases.db)にコンパイルされ、MTAが新しいルーティングテーブルを読み込める状態になります。

6. LinuC 102試験対策まとめとコマ問頻出チェック

6.1 セキュリティ・暗号・メール管理 必須コマンド&ファイル対比表

本章で学習した必須コマンドおよび設定ファイルを一覧で総整理します。

項目 コマンド / ファイルパス 役割・用途 注意点・付帯情報
SUID検索 find / -perm -4000 SUID設定バイナリの検出 SGID検索は -perm -2000
sudo権限編集 visudo / /etc/sudoers 管理者特権の安全な委譲 直接編集厳禁。%グループ名
リソース制限 ulimit / limits.conf プロセス数・ファイルサイズ制限 -u(プロセス), -f(サイズ), -n(ファイル数)
ログイン遮断 /etc/nologin 一般ユーザの一時的ログイン禁止 rootはログイン可能
暗号化ツール gpg OpenPGP準拠の暗号・署名ツール --encrypt, --decrypt, --sign
SSH鍵生成 ssh-keygen 秘密鍵・公開鍵ペアの作成 秘密鍵はパーミッション600
SSH公開鍵格納 ~/.ssh/authorized_keys 接続許可公開鍵リスト ディレクトリ700、ファイル600
システムエイリアス /etc/aliases システム全体メール転送設定 編集後は newaliases 必須
DB再構築 newaliases aliases.dbの生成・更新 sendmail -bi と同等
個人メール転送 ~/.forward 各ユーザの個人転送設定 所有者権限厳格化が必要
メールキュー確認 mailq 滞留メールのリスト表示 sendmail -bp と同等

6.2 コマ問(記述式)頻出キーワード一覧表

LinuC 102試験のキーボード入力記述問題(コマ問)でスペルミスが起きやすい最重要語句です。

  • newaliases: エイリアス変更後に実行するコマンド名。末尾の複数形sに注意。
  • visudo: sudoers設定ファイルを構文チェック付きで編集する専用コマンド。
  • ulimit: ユーザごとのリソース制限を表示・変更するシェル組み込みコマンド。
  • authorized_keys: SSH公開鍵を配置するファイル名。authorizedの綴りと末尾のsに注意。
  • mailq: 送信待ちメールキューを表示するコマンド。
  • /etc/sudoers: sudoのポリシー設定ファイル。
  • /etc/aliases: メール転送エイリアス設定ファイル。

6.3 本番想定 総合確認演習問題

問1(ホスト堅牢化・特権委譲・リソース制限シナリオ): システムセキュリティの統制に関する以下の設問に答えよ。

  1. 一般ユーザによる不正な特権昇格リスクを低減するため、SUID(Set User ID)ビットが設定された実行ファイルをシステム全体(ルートディレクトリ配下)から網羅的に検出したい。実行すべき find コマンドのパーミッション検索オプションを記述せよ。
  2. admin-grp グループに所属するすべてのユーザに対し、任意のホストからroot権限で全コマンドを実行することを、パスワード入力なしで許可したい。/etc/sudoers に記述すべき正しい定義行を選べ。
    • A: admin-grp ALL=(ALL) ALL
    • B: %admin-grp ALL=(root) NOPASSWD: ALL
    • C: @admin-grp ALL=(ALL) ALL
    • D: admin-grp ALL=(root) NOPASSWD: ALL
  3. 特定ユーザによるプロセスの大量生成(フォーク爆弾等によるリソース枯渇)を防ぐため、1ユーザが起動できる最大プロセス数を一時的に100に制限したい。実行すべき ulimit コマンドのオプションを選べ。
    • A: ulimit -n 100
    • B: ulimit -u 100
    • C: ulimit -f 100
    • D: ulimit -p 100
解答と解説を見る

問1 解答・解説

  • 設問1の解答: -perm -4000(または find / -perm -4000

    解説: SUIDの8進数表現は 4000(第4ビット)です。ハイフン付きの -perm -4000 を指定することで、「SUIDビットが立っているすべてのファイル(他の所有権・グループ・その他権限の値は任意)」を網羅的に検出できます。ハイフンを付けずに -perm 4000 とすると、パーミッションが厳密に ---S------ のファイルのみしかマッチせず、実用的な検出ができません。SGID検索の場合は -perm -2000 となります。

  • 設問2の解答: B%admin-grp ALL=(root) NOPASSWD: ALL

    解説: /etc/sudoers において、個別のユーザ名ではなくUNIXグループを指定する場合は、先頭にパーセント記号(%)を付与する構文規則があります(選択肢A、Dは単一ユーザ admin-grp と解釈されるため誤り)。パスワードなし実行には NOPASSWD: を指定します。また、文法ミスによる全ユーザのsudo不能事故を防ぐため、必ず visudo コマンドで編集することが必須原則です。

  • 設問3の解答: Bulimit -u 100

    解説: 起動可能な最大ユーザプロセス数を制御するオプションは -u(max user processes)です。選択肢Aの -n は同時にオープンできるファイル記述子数(open files)、選択肢Cの -f は生成できる最大ファイルサイズ(file size)を制御するオプションです。これらの制限を再起動後も恒久化するには、/etc/security/limits.conf に設定を記述します。

問2(暗号化・SSH鍵認証・メール転送シナリオ): 通信・データの暗号化およびMTA運用に関する以下の設問に答えよ。

  1. GnuPGを利用して機密文書を他者(Alice)へ電子送付したい。第三者による通信路での盗聴を防ぎ、Alice本人のみが復号できるように暗号化する場合、送信者はどの鍵を用いてファイルを暗号化すべきか。
    • A: 送信者自身の秘密鍵
    • B: 送信者自身の公開鍵
    • C: 受信者(Alice)の秘密鍵
    • D: 受信者(Alice)の公開鍵
  2. SSH公開鍵認証を設定したサーバへ接続を試みたところ、Permission denied (publickey) エラーが発生してログインに失敗した。サーバ側の設定を調査したところ、パーミッション設定に重大な不備があった。OpenSSHのStrictModes機構によって接続が拒絶される原因として適切なものを選べ。
    • A: サーバ側の ~/.ssh/authorized_keys のパーミッションが 666(他者に書き込み可能)になっている
    • B: クライアント側の公開鍵(id_ed25519.pub)のパーミッションが 644 になっている
    • C: クライアント側の秘密鍵(id_ed25519)のパーミッションが 600 になっている
    • D: サーバ側の /etc/ssh/sshd_configPubkeyAuthentication yes と設定されている
  3. サーバのroot宛てシステム通知メールを管理者アドレスへ集約するため、/etc/aliasesroot: admin@example.com と追記した。設定をMTA(Postfix/Sendmail)に即座に反映させるために実行すべきコマンド名を記述せよ。
解答と解説を見る

問2 解答・解説

  • 設問1の解答: D(受信者(Alice)の公開鍵)

    解説: 公開鍵暗号において「データの機密性(暗号化)」を確保する場合、暗号化には【受信者の公開鍵】を使用します。この暗号文を元に戻せるのは、世界で唯一対応する【受信者の秘密鍵】を持つ受信者本人のみです。逆に「送信者自身の秘密鍵」で暗号化する行為は【電子署名】であり、改ざん検知と本人証明のために用います(公開鍵は誰でも持っているため秘匿化にはなりません)。この対称関係はLinuC本試験で極めて頻出です。

  • 設問2の解答: A(サーバ側の ~/.ssh/authorized_keys のパーミッションが 666 になっている)

    解説: OpenSSHデーモンは StrictModes yes がデフォルトで有効化されており、秘密情報や公開鍵リストのパーミッションが緩い(グループや他者による書き込み権限が付与されている)場合、改ざんの危険を防止するために公開鍵認証を自動的に拒絶します。正常に接続するためには、~/.ssh/ ディレクトリは 700drwx------)、authorized_keys ファイルは 600-rw-------)に設定しなければなりません。

  • 設問3の解答: newaliases(または sendmail -bi

    解説: MTAはメール配送のたびにテキストファイルである /etc/aliases を順次パースすると負荷が高くなるため、高速検索が可能なBerkeley DB形式のバイナリファイル(/etc/aliases.db)を参照します。したがって、テキストを編集した後は必ず newaliases コマンドを実行してバイナリデータベースを再生成しなければ変更が一切反映されません。LinuCの記述式(コマ問)における超頻出問題です。

6.4 Ping-t演習へのブリッジ(対象分野と推奨学習順)

本稿の内容を試験本番での即答力へ昇華させるため、Ping-tのLinuC 102問題集で以下の順序による集中演習を推奨します。

  1. 「主題1.10.1 セキュリティ管理の基本」: find -perm -4000の指定書式やss -tulpnの読み取りを徹底演習。
  2. 「主題1.10.2 ユーザに対するセキュリティ管理」: visudoの構文規則、ulimitの各オプション(-u, -n, -f)、chageコマンドの引数を定着。
  3. 「主題1.10.3 ホストに対するセキュリティ管理」: 公開鍵暗号の暗号化/署名の鍵の向き(受信者公開鍵/送信者秘密鍵)、gpgコマンドの各サブコマンド、SSHのファイルパーミッション要件を反復演習。
  4. 「主題1.09.3 メール管理」: /etc/aliasesの書式、newaliasesコマンド、~/.forwardmailqコマンドを完璧に記述できるように演習。

第17回 二段階復習チェックリスト

【最優先】102試験合格必須チェック項目(10選)

  • SUID設定ファイルの検索オプション(find / -perm -4000)とSGID(-perm -2000
  • パッケージ改ざん検知コマンド(rpm -V <パッケージ> / rpm -Va
  • sudo設定ファイルの安全な編集コマンド(visudo)と文法検証機能
  • /etc/sudoers におけるグループ権限指定の先頭記号(%wheel ALL=(ALL) ALL
  • リソース上限設定コマンド(ulimit -u: プロセス数、-f: ファイルサイズ、-n: ファイル数)
  • 一般ユーザログイン禁止制御ファイル(/etc/nologin)の役割
  • 公開鍵暗号の原則(「暗号化は受信者の公開鍵」「電子署名は送信者の秘密鍵」)
  • SSH関連ファイルのパーミッション厳格規則(~/.ssh は700、authorized_keys は600)
  • システムメール転送設定ファイル(/etc/aliases)の書式
  • メールエイリアスDB再構築コマンド(newaliases または sendmail -bi

【実務へ前進】余力があれば押さえる発展項目

  • GnuPGにおける公開鍵エクスポート(gpg --export --armor)とインポート(gpg --import
  • 個人メール転送設定(~/.forward)におけるループ防止エスケープ(username
  • メールキューの滞留確認(mailq / postqueue -p)と強制再送(sendmail -q

7. まとめと次回予告

第17回の重要ポイントまとめ

  • セキュリティ管理: 不要サービス停止(ss)、SUIDファイル監視(find / -perm -4000)、パッケージ改ざん検証(rpm -V)による多層防御を構築する。
  • アクセス統制: visudoによる安全な特権委譲、ulimit-u, -f, -n)によるリソース枯渇防止、/etc/nologinによるログイン制御を徹底する。
  • 暗号化技術: 「暗号化は受信者の公開鍵」「電子署名は送信者の秘密鍵」の原則を把握し、GnuPGおよびSSH公開鍵認証(パーミッション700/600)を正しく運用する。
  • メール管理: /etc/aliases編集後はnewaliasesでDB更新が必須。個人転送は~/.forward、キュー監視はmailqを用いる。

次回はLinuC Level 1シリーズの最終回、第18回「クラウドセキュリティの基礎とオープンソースの文化・ライセンス【主題1.10 (1.10.4) & 主題1.11 (1.11.1, 1.11.2)】」をお届けします。クラウド環境特有の責任共有モデルやIAM・最小権限の原則、およびGPL・MIT・ApacheをはじめとするOSSライセンス体系を解説し、Level 1全カリキュラムを総括します。

前の記事
次の記事