LPI-JapanLevel 3

難易度は Level 1(やさしめ)〜Level 5(難関) の5段階です。

LinuC レベル2 202試験のサンプル問題(本番形式・解説付き)

LinuC レベル2 202試験(LPI-Japan・LinuC-2 202試験(Linuxサーバー運用))の出題形式を、実際の問題で確かめられます。ここに掲載する5問は、無料の会員登録で解ける模試 第1回(60問)の冒頭から抜粋したオリジナル問題です。当サイトは全898問を本番CBT準拠の形式で収録しており、この5問はそのごく一部にあたります。

設問1

nginxの設定ファイルにおけるserverブロックの基本構造に関する記述として、最も適切なものはどれか。

  • serverブロックはhttpブロックの中に1つしか記述できず、2つ目を書くとnginx -tが重複定義として構文エラーを返すため、複数のサイトを1台で運用するにはサイトごとにnginxのプロセスを分けて起動する必要がある。
  • listenディレクティブはHTTPSで使用するサーバー証明書ファイルのパスを指定するためのもので、serverブロック内に証明書と秘密鍵のパスを続けて記述し、待ち受けるポート番号はserver_nameの側で指定する。
  • serverブロック内にlistenディレクティブで待ち受けポートを、server_nameディレクティブで対応するホスト名を、それぞれ指定することで、1台のnginxで複数のサイト(バーチャルホスト)を運用できる。(正解)
  • server_nameディレクティブは、そのサーバーが動作するOSのホスト名(hostnameコマンドの出力)を起動時に自動で読み取って値とするため、設定ファイルに明示的に記述する必要はなく、ホスト名を変更して再読み込みすれば振り分け先も切り替わる。

解説

nginxの設定ファイルはhttpブロックの中に複数のserverブロックを記述でき、各serverブロックのlistenとserver_nameの組み合わせによって、リクエストされたホスト名に応じた適切なサーバーブロックへ振り分けるバーチャルホスト構成を実現する。listenディレクティブは待ち受けアドレス・ポートを指定するものであり、証明書ファイルのパスはssl_certificate、秘密鍵はssl_certificate_keyディレクティブで指定する。server_nameディレクティブは明示的にホスト名(ドメイン名)を記述する必要があり、OSのホスト名を自動参照する仕組みではない。

他の選択肢が誤りである理由

  • 「serverブロックはhttpブロックの中に1つしか記述できず、2つ目を書くとnginx -tが重複定義として構文エラーを返すため、複数のサイトを1台で運用するにはサイトごとにnginxのプロセスを分けて起動する必要がある。」serverブロックは1つの設定内に複数記述することができ、nginx -tでも重複定義とはならない。複数のサイトを1台のnginxで運用する(名前ベースバーチャルホスト)ことが一般的に行われている。
  • 「listenディレクティブはHTTPSで使用するサーバー証明書ファイルのパスを指定するためのもので、serverブロック内に証明書と秘密鍵のパスを続けて記述し、待ち受けるポート番号はserver_nameの側で指定する。」listenディレクティブは待ち受けアドレス・ポートを指定するものであり、証明書ファイルのパスはssl_certificate、秘密鍵はssl_certificate_keyディレクティブで指定する。
  • 「server_nameディレクティブは、そのサーバーが動作するOSのホスト名(hostnameコマンドの出力)を起動時に自動で読み取って値とするため、設定ファイルに明示的に記述する必要はなく、ホスト名を変更して再読み込みすれば振り分け先も切り替わる。」server_nameディレクティブは明示的にホスト名(ドメイン名)を記述する必要があり、OSのホスト名を自動参照する仕組みではない。

設問2

マスター(プライマリ)サーバーでゾーンファイルのリソースレコードを編集したが、SOAレコードのシリアル番号を更新し忘れた。この場合に起こる現象として、最も適切なものはどれか。

  • 編集した内容がDNSSECの署名対象から外れたものと判定され、当該ゾーンに付与されていたRRSIGレコードがnamedによって自動的に無効化されるため、検証を行うリゾルバへはSERVFAILが返るようになる。
  • スレーブサーバーはシリアル番号の値を参照せず、SOAレコードのREFRESHで指定した間隔が到来するたびに無条件でAXFRによるゾーン転送を実行するため、シリアル番号を更新していなくても編集した内容は次回の転送時に反映される。
  • スレーブ(セカンダリ)サーバーは、マスターから取得したSOAシリアル番号が自身の保持する値より大きくなっていないため変更なしと判断し、ゾーン転送(AXFR/IXFR)を行わずに古いデータを保持し続ける。(正解)
  • マスターサーバーのnamed(BIND)がゾーンファイルの読み込み時にシリアル番号の不整合を検知してエラーログを出力し、当該ゾーンの提供自体を停止するため、そのゾーンの名前解決ができなくなる。

解説

スレーブサーバーは、マスターのSOAシリアル番号が自身の保持する値より大きい場合にのみゾーンに変更があったと判断してゾーン転送を行う。シリアル番号を更新し忘れると、レコードの内容自体は変更されていてもスレーブ側からは「変更なし」としか見えず、ゾーン転送がスキップされて反映漏れが起こる。運用上、ゾーンファイルを編集したら必ずシリアル番号をインクリメントする必要がある。シリアル番号の更新有無とRRSIGの有効性は別の仕組みであり、シリアルを更新し忘れたことで既存の署名が自動的に無効化されSERVFAILになるという挙動はない。シリアル番号を更新し忘れたこと自体は構文エラーでも値の不整合でもないため、マスター側のnamedがゾーンの読み込みに失敗したりゾーン提供を停止したりすることはない。

他の選択肢が誤りである理由

  • 「編集した内容がDNSSECの署名対象から外れたものと判定され、当該ゾーンに付与されていたRRSIGレコードがnamedによって自動的に無効化されるため、検証を行うリゾルバへはSERVFAILが返るようになる。」シリアル番号の更新有無とRRSIGの有効性は別の仕組みであり、シリアルを更新し忘れたことで既存の署名が自動的に無効化されSERVFAILになるという挙動はない。
  • 「スレーブサーバーはシリアル番号の値を参照せず、SOAレコードのREFRESHで指定した間隔が到来するたびに無条件でAXFRによるゾーン転送を実行するため、シリアル番号を更新していなくても編集した内容は次回の転送時に反映される。」スレーブはREFRESH間隔ごとにSOAクエリでシリアル番号を確認し、値が増えていない限りゾーン転送は行わない。無条件で毎回AXFRを実行する動作ではない。
  • 「マスターサーバーのnamed(BIND)がゾーンファイルの読み込み時にシリアル番号の不整合を検知してエラーログを出力し、当該ゾーンの提供自体を停止するため、そのゾーンの名前解決ができなくなる。」シリアル番号を更新し忘れたこと自体は構文エラーでも値の不整合でもないため、マスター側のnamedがゾーンの読み込みに失敗したりゾーン提供を停止したりすることはない。あくまでスレーブへの伝播が起きないだけである。

設問3

鍵長2048ビットのRSA秘密鍵を新規生成し、server.key というファイルに保存するコマンドを入力せよ。

入力形式(コマンドを打ち込んで答える問題です)

openssl genrsa -out server.key 2048(正解)

解説

openssl genrsa -out <ファイル名> <鍵長> は、指定したビット数のRSA秘密鍵を新規生成し、ファイルに保存する(既定ではPEM形式・平文で保存され、-aes256等を付けるとパスフレーズで暗号化できる)。この鍵をもとにCSRや自己署名証明書を作成していく、HTTPS設定の最初のステップにあたる。

設問4

named-checkzoneコマンドとnamed-compilezoneコマンドの違いに関する記述として、最も適切なものはどれか。

  • named-checkzoneはテキスト形式のゾーンファイルしか検証できず、-f rawを指定するとフォーマットエラーになる。一方のnamed-compilezoneはraw(バイナリ)形式のゾーンファイルしか受け付けないため、両者は入力できるファイル形式で完全に住み分けられており、互換性がない。
  • named-checkzoneは-oオプションの指定が任意で、省略時は出力ファイルを作らず検証のみを行う。named-compilezoneはnamed-checkzoneと同様の検証を行うが、-oによる出力ファイル名の指定が必須であり、検証結果をコンパイル済みのゾーンファイルとして書き出す。(正解)
  • named-checkzoneはBIND 9系列のパッケージにのみ含まれる検証コマンドで、named-compilezoneは開発が継続されているBIND 10系列で新設された全く別系統の検証コマンドである。BIND 9の環境にはnamed-compilezoneが同梱されないため、利用するにはBIND 10のパッケージを別途導入する必要がある。
  • named-checkzoneは検証対象をマスターゾーンのみに限定しており、スレーブ用のファイルを指定するとエラーになる。named-compilezoneはセカンダリがゾーン転送で受け取ったファイル専用の検証コマンドであり、named.confでtype slaveと定義したゾーンに対してのみ使用できる。

解説

named-checkzoneとnamed-compilezoneは基本的に同様の構文・整合性チェックを行うツールである(ただし今のBINDのnamed-compilezoneは、既定ではnamed-checkzoneほど厳密にはゾーンの中身を検査しない)。実務上の主な違いは-oオプションの扱いで、named-checkzoneでは省略可能(省略時は検証のみ)なのに対し、named-compilezoneでは出力ファイル名の指定が必須であり、検証済みのゾーンデータを指定形式(text/rawなど)でファイルに書き出す点にある。BIND 10はISCが開発していた別系統のプロジェクトだが2014年前後に開発が終了しており、named-compilezoneはBIND 9パッケージに含まれるコマンドである。検証対象をマスターゾーンかスレーブゾーンかで使い分けるという仕様はない。

他の選択肢が誤りである理由

  • 「named-checkzoneはテキスト形式のゾーンファイルしか検証できず、-f rawを指定するとフォーマットエラーになる。一方のnamed-compilezoneはraw(バイナリ)形式のゾーンファイルしか受け付けないため、両者は入力できるファイル形式で完全に住み分けられており、互換性がない。」両コマンドとも-fで入力形式、-Fで出力形式(text/raw/map等)を指定でき、扱えるファイル形式で住み分けられているわけではない。named-checkzoneでraw形式のゾーンファイルを検証することもできる。
  • 「named-checkzoneはBIND 9系列のパッケージにのみ含まれる検証コマンドで、named-compilezoneは開発が継続されているBIND 10系列で新設された全く別系統の検証コマンドである。BIND 9の環境にはnamed-compilezoneが同梱されないため、利用するにはBIND 10のパッケージを別途導入する必要がある。」BIND 10はISCが開発していた別系統のプロジェクトだが2014年前後に開発が終了しており、named-compilezoneはBIND 9パッケージに含まれるコマンドである。追加導入が必要になるという説明も誤りである。
  • 「named-checkzoneは検証対象をマスターゾーンのみに限定しており、スレーブ用のファイルを指定するとエラーになる。named-compilezoneはセカンダリがゾーン転送で受け取ったファイル専用の検証コマンドであり、named.confでtype slaveと定義したゾーンに対してのみ使用できる。」検証対象をマスターゾーンかスレーブゾーンかで使い分けるという仕様はない。マスター/スレーブの区別はnamed.conf上のゾーン運用形態の話であり、どちらのコマンドも与えられたゾーンファイルをそのまま検証する。

設問5

サーバーで DNS(53 番)や SNMP(161 番)の UDP のポートが開いていないかを nmap で調べたい。指定するスキャンの種類として適切なものはどれか。

  • -sS
  • -sU(正解)
  • -sT
  • -sF

解説

-sU は UDP のポートを調べるスキャンで、DNS・SNMP・DHCP などの UDP のサービスを見つけるのに使う。TCP のスキャンより時間がかかることが多い。

他の選択肢が誤りである理由

  • 「-sS」-sS は TCP の SYN スキャンで、UDP のポートは調べない。
  • 「-sT」-sT は TCP の接続スキャンで、UDP のポートは調べない。
  • 「-sF」-sF は FIN フラグだけを立てた TCP のスキャンである。

続きは、会員登録なしでそのまま50問解けます。採点と解説つきで、上と同じ本物の問題です。

登録なしで50問解く