2026年3月29日日曜日

sshd でチャレンジレスポンス認証を試す

sshd でチャレンジレスポンス認証を試す

概要

前回 Ubuntu + pam の設定を行いました

チャレンジレスポンス認証は通常のパスワード認証と毎回違うパスワードで ssh ログインさせたりすることができます
OTP や外部の認証サーバと連携したりもできます

今回は簡単な問題をシェルスクリプトで作成しその問題が正解なら認証 OK とします

環境

  • macOS 26.3.1
  • docker 29.3.0
    • Ubuntu 24.04

pam.d/ssh

# --- Auth Phase ---
# 1. クイズを表示
auth       required     pam_echo.so info Challenge: 3 + 5 = ?

# 2. スクリプト判定(8 以外ならここで拒否される)
auth       required     pam_exec.so expose_authtok /usr/local/bin/math_challenge.sh

# 3. 資格情報 (setcred) を与えるためのモジュール
# 前のステップが required なので、ここには「8」と打った時しか到達しません。
# これを入れることで pam_setcred(): Permission denied を防ぎます。
auth       required     pam_permit.so


# --- Account & Session Phase ---
account    required     pam_permit.so

session    required     pam_unix.so
session    required     pam_env.so
# session  required     pam_loginuid.so  # Dockerでは引き続きコメントアウト

math_challenge.sh

#!/bin/bash
# 入力を読み取る
read -r USER_INPUT

# 判定(xargsで空白を除去)
ANSWER=$(echo "$USER_INPUT" | xargs)

if [ "$ANSWER" = "8" ]; then
    # 成功時は何も出力せず exit 0
    exit 0
else
    # 失敗時はデバッグ用に標準エラーへ(docker logsで見れる)
    echo "Auth Failed: Input was '$ANSWER'" >&2
    exit 1
fi

Dockerfile

FROM ubuntu:24.04

RUN apt-get update && \
    apt-get install -y openssh-server && \
    mkdir /var/run/sshd

# ユーザー作成
RUN useradd -m -s /bin/bash testuser && echo "testuser:testpass" | chpasswd

# 既存設定をリセットし、必要な設定だけを新規作成
RUN rm -rf /etc/ssh/sshd_config.d/* && \
    echo "Port 22" > /etc/ssh/sshd_config && \
    echo "ListenAddress 0.0.0.0" >> /etc/ssh/sshd_config && \
    echo "PermitRootLogin no" >> /etc/ssh/sshd_config && \
    echo "KbdInteractiveAuthentication yes" >> /etc/ssh/sshd_config && \
    echo "PasswordAuthentication no" >> /etc/ssh/sshd_config && \
    echo "UsePAM yes" >> /etc/ssh/sshd_config

# 認証スクリプトをコピー
COPY math_challenge.sh /usr/local/bin/math_challenge.sh
RUN chmod +x /usr/local/bin/math_challenge.sh

# PAM設定を上書き
COPY pam.d/sshd /etc/pam.d/sshd

# (重要) CHALLENGE-RESPONSEを有効化
RUN sed -i 's/KbdInteractiveAuthentication no/KbdInteractiveAuthentication yes/' /etc/ssh/sshd_config

EXPOSE 22

CMD ["/usr/sbin/sshd", "-D", "-e"]

compose.yaml

services:
  ssh:
    build: .
    container_name: ssh-challenge
    ports:
      - "2222:22"

動作確認

  • docker compose up -d --build
  • ssh -o PreferredAuthentications=keyboard-interactive testuser@localhost -p 2222

これで「8」と入力すればログインできるようになります
それ以外はログインエラーになります
さすがにチャレンジするパスワードが簡単すぎるので本当はもっと複雑な問題にします

最後に

Ubuntu24.04 でチャレンジレスポンス認証を試してみました
pam と連携することでより複雑なチャレンジレスポンス認証が実装できます

あとはこのスクリプトをより改良して外部の認証機構と連携したりすることができます

2026年3月28日土曜日

Ubuntu で pam 認証を有効にする

Ubuntu で pam 認証を有効にする

概要

PAM (Pluggable Authentication Modules) は通常の sshd 認証と違い外部の認証機構などを使って認証する仕組みです
sshd と組み合わせることで OTP などを実現できます
今回は Ubuntu 24.04 で pam を設定する方法を紹介します

環境

  • macOS 26.3.1
  • docker 29.3.0
    • Ubuntu 24.04

pam.d/sshd

# PAM構成の基本
auth       required     pam_unix.so nullok_secure
account    required     pam_unix.so
session    required     pam_unix.so
session    required     pam_loginuid.so

Dockerfile

FROM ubuntu:24.04

RUN apt-get update && \
    apt-get install -y openssh-server && \
    mkdir /var/run/sshd

# ユーザー作成
RUN useradd -m -s /bin/bash testuser && echo "testuser:testpass" | chpasswd

# 既存設定をリセットし、必要な設定だけを新規作成
RUN rm -rf /etc/ssh/sshd_config.d/* && \
    echo "Port 22" > /etc/ssh/sshd_config && \
    echo "ListenAddress 0.0.0.0" >> /etc/ssh/sshd_config && \
    echo "PermitRootLogin no" >> /etc/ssh/sshd_config && \
    echo "KbdInteractiveAuthentication yes" >> /etc/ssh/sshd_config && \
    echo "PasswordAuthentication no" >> /etc/ssh/sshd_config && \
    echo "UsePAM yes" >> /etc/ssh/sshd_config

# PAM設定コピー
COPY pam.d/sshd /etc/pam.d/sshd

EXPOSE 22

CMD ["/usr/sbin/sshd", "-D"]

compose.yaml

services:
  ssh:
    build: .
    container_name: ssh-challenge
    ports:
      - "2222:22"

動作確認

  • docker compose up -d --build
  • ssh -o PreferredAuthentications=keyboard-interactive testuser@localhost -p 2222

最後に

Ubuntu24.04 の sshd の場合設定が少し特殊なので注意しましょう
基本はデフォルトを削除し新規に作成するのが確実です

次回は pam を使ってチャレンジレスポンス認証を試します

2026年3月17日火曜日

AWS Certified Solutions Architect - Associate 03 合格メモ

AWS Certified Solutions Architect - Associate 03 合格メモ

概要

一応残しておきます
GCP の ACE に比べて難しい印象です

環境

  • AWS SAA (03) (2026/03/16時点)
  • テストセンターにて受験

料金

  • 150ドル (約20,000円)

対策

完全に過去問ゲーというわけにはいかない感じです
過去問からそのまま採用されるケースはほぼない印象です

教科書

kindle で 0 円だったのでこれにしましたが他のやつの方がいいかもです

模擬試験

全部で804問です

解き方のポイント

  • 時間がかなり無い印象
    • 自分は時間ギリギリまで使った
    • わからない問題は飛ばすか適当に回答もあり
  • 15問はダミー
    • これがよくわからない
    • 正解でも誤答でも無関係らしい
    • しかもどれかわからない
    • これがあるから先程の適当回答も時間がなければワンチャンありという感じ
  • 過去問がそのまま出るケースはほぼなかった
    • 模擬試験を暗記していれば回答先読みで即回答が使えるが SAA03 はほぼできなさそう
    • 模擬試験と全く同じ問題はなかったが同じようなやつで回答項目が違ったり問題を少しひねったやつは出てくる
    • 全体的に意地悪な問題が多かった印象
  • 問題の日本語がおかしい
    • 説明が少なすぎて頭で補完しなければならない
    • これを実現するためにこのコンポーネントが足りないがそれは使う前提になっていたりとか
    • このケースは実はコストも関係しているから暗黙的に安いものを選択するとか
  • 実務関係なく考えななければならない
    • これは GCP も同様だった
    • 資格モードにならないとダメ
  • 消去法
    • これは結構使えるかもしれない
    • 明らかに違うだろうというやつが何個かあったので2択まで絞れる問題が多かった印象

実際に出題された問題の記憶

  • NoETL
  • LakeFormation + 認証
  • NATゲートウェイの固定IP化
  • DR関連の問題 (これが結構多かった)
  • 最適な構成の問題 (これも結構多かった)
  • STS + DMS + コードの内のSQL変換方法
  • Global Accelerator
  • AI 関連 (Comprehend, Rekognition, SageMaker など)

全体的にいやらしい問題が多かった印象です
単純な EC2 や EBS の構成の問題は少なかったです

スコアレポートはでない

詳細なのは出ませんが点数などの結果は certmetrics で確認できます
ちなみに試験後画面ですぐに出たりすることはないので合否もスコアレポートも後で確認になります

暫定合格を確認する方法もない

ないです

合否通知はいつくるか

当日は20時50分くらいに certmetrics にログインしたら合格結果が出ていました
ちなみにバッジでおなじみの credly からのメールは 21時50分くらいに来ていました

最後に

GCP に比べると難しい印象でした
ただ GCP に比べて結果がその日に出るのは嬉しいです
GCP は結果が出るまでに数日かかるのでイライラします

模擬試験ゲーというわけにもいかないので実務 or 教科書による各種サービスの詳細な仕様までわかっていたほうがいいです
しかも基本的なサービスと言うよりかはわりとニッチなサービスも知っておく必要がありそうです