0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ずんだもん「Ubuntu 26.04 + authd でEntra ID 直結の共用キオスク端末を作るのだ!」

0
Posted at

導入:ギャル社長から“Linux 共用機”の無茶振り案件

Image 1 Image 2 Image 2

🟩ずんだもん「ぼく、社員100名の中小企業の新米情シスずんだもんなのだ。前回は Vultr の5ドルVPSに Edge エフェメラルキオスクを組んだのだ。今日はまた別件らしいのだ。」

🟪きりたん「お疲れさま。前回は『どこからでも安全に M365 触れる箱』を作ったよね。今回は逆方向の依頼だよ。」

🟧つむぎ「やっほ〜☆ 社長つむぎ〜!
今度はね〜、うちの ギャルアパレル店舗の共用 PCあるじゃん?
誰がログインしたか分からないし、退職した子のアカウント整理がマジめんどいんだよね〜。
Entra ID でログインできて、毎朝 MFA で本人確認してくれて、退職処理は Entra で disable するだけ で済むようにしてほしいの〜。
予算? 追加ライセンスは買わない方向で〜。よろぴ〜★」

🟩ずんだもん「ライセンス追加なし、Entra で全管理、Linux 共用機でログイン……
それ、たしか以前は sssd-ad とか Azure AD Domain Services とかが必要だった話なのだ?」

🟪きりたん「そうそう、それが……ついに Ubuntu 26.04 LTS で標準提供された んだよ。」

🟩ずんだもん「!!!」

🟪きりたん「Canonical 製の authd ってブローカ daemon。GDM の Username 欄に Entra ID の UPN をそのまま入れたら、Microsoft の Device Code Flow + MFA で シームレスにログインできる ようになったの。」

🟧つむぎ「authd? なんかかわいい名前〜♪」

🟪きりたん「(かわいくはない)」

🟩ずんだもん「これ、要するに Linux 版 AAD-Join が来たって認識でいいのだ?」

🟪きりたん「そう。Windows の "Microsoft Entra Joined PC" や Chromebook の Google アカウントログイン体験が、Ubuntu でもネイティブで動くようになったわけ。」

🟩ずんだもん「でも、社長が言ってるのは『5台を5人で使う』じゃなくて『5台を交代で使い回す共用機にしたい』のだ。authd って一人一台 PC 想定じゃないのか?」

🟪きりたん「鋭いね。authd の標準仕様は『初回 MFA + 以後はローカルパスキャッシュ』で、これは個人専用 PC が前提。でも、tmpfs ホーム + ログアウト時 cleanup + Entra CA の Sign-in frequency = 24h を組合せると、共用キオスク端末として動かせるんだ。」

🟧つむぎ「キオスクって、コンビニのATMみたいなやつ〜?」

🟪きりたん「ニュアンスは近いけど、今回は『同じ PC を別々の人が交代で使う』って意味だよ。」

🟧つむぎ「それそれ〜! なんかテンション上がる〜★」

🟩ずんだもん「(社長は技術の話より BPM が気になるタイプなのだ……)」


結論を先に言うと

🟪きりたん「最初に結論だけ書いておくね。」

  • Ubuntu 26.04 の authd は本来「個人 PC で IdP ログイン」用 だが、tmpfs ホーム + ExecStopPost cleanup + Entra CA Sign-in frequency = 24h を組合せると Linux ベースの共用キオスク端末 として動く
  • 弱点だった「ローカルパス独立」「ホーム残留」「毎回 MFA できない」が、共用 PC 文脈では全部 機能 に反転する
  • authd 側 force_provider_authentication = trueEntra 側 Sign-in frequency = 24h の二段構えが成立条件

🟩ずんだもん「結論からして“弱点を反転させる”って格闘ゲームの必殺技みたいなのだ。」


アーキテクチャのざっくり方針

Image 1 Image 2

🟪きりたん「やりたいことを整理すると、こんな感じだね。」

  • Ubuntu 26.04 LTS + authd + authd-msentraid(snap) で Entra ID 直結ログイン
  • broker.confforce_provider_authentication = true を入れて毎ログイン Entra refresh を強制
  • ホームを /run/kiosk-home 以下の tmpfs にして揮発化
  • user@.serviceExecStopPost でログアウト時に rm -rf
  • Entra Conditional Access で Sign-in frequency = 24h

architecture.png

📎 画像アップロード: architecture.png — authd キオスク認証フロー図

🟩ずんだもん「これ全部 Ubuntu 1台 + Entra テナント1個で完結するのだ?」

🟪きりたん「そう。ライセンスも追加不要 (Sign-in frequency 使うために P1 以上は必要。EMS E3 でも OK)。」

🟪きりたん「で、この記事の は『authd 側 force_provider_authentication × Entra 側 Sign-in frequency』の二段構えだよ。」

🟩ずんだもん「片方だけだとダメなのだ?」

🟪きりたん「authd 側だけ true にしても silent refresh で済んじゃうから毎日 MFA にならない。Entra 側だけ 24h にしても authd が refresh 試行しなければ CA が効かない。両方そろって初めて『24h ごとに DCF + MFA、それ以外はローカルパスで高速』が成立するんだ。」

🟧つむぎ「ふむふむ……(聞いてない)」

🟪きりたん「前回 Tailnet で出口側と入口側を両方絞った話と同じ発想だよ。両側で押さえる。」


なぜ authd がキオスクに合うか — 弱点の反転

Image 1 Image 2

🟪きりたん「authd は基本『初回 MFA + ローカルパスキャッシュ』だから、共用 PC で使うとパッと見は弱点だらけに見える。でも『24h で消える前提』にすると全部反転するんだ。」

通常運用での弱点 キオスク文脈での捉え方
ローカルパスが Entra と独立(退職者がパスを覚えてれば入れる) 24h 後に消去前提 → 実質「都度発行」
ホームディレクトリが残留(次の利用者にデータが見える) logout hook で rm -rf → 完全ステートレス
毎ログイン MFA は不可(監査が緩い) 朝1回の認証チェックインで十分な業務に合う
Entra でのアカウント停止が cache 期限まで反映されない 24h tolerance は許容範囲
事前ユーザープロビジョニング不要 管理者が個別アカウント作らなくて良い ← 強み
Entra グループ → Linux グループ反映 端末への権限自動同期
監査は Entra 側にすべて残る 個別 Linux ログを集約せずに済む

🟩ずんだもん「『24h で消える前提』って割り切ると、全部の弱点が自動的に機能要件に化けるのだ……これが格闘ゲームでいうカウンター技なのだ。」

🟧つむぎ「カウンター技イケメン〜★」


ステップ1:ラボ用の Ubuntu 26.04 VM を建てる

🟩ずんだもん「まずは検証用の VM を1台作るのだ。今回は KVM/libvirt 上に Ubuntu 26.04 Server cloud-image を落として、GNOME を追加した構成にしたのだ。」

🟪きりたん「PoC なので Server image でも Desktop image でも OK。GDM が動けば良いよ。本番ではベース VM を1台作ってクローンしていく運用にすると楽。」

  • ベース VM 名: ubuntu26-authd-kiosk
  • Tenant: Microsoft Entra ID(検証専用)
  • 検証 UPN: authd-test1@bizpc.net
  • MFA: Microsoft Authenticator (Push / TOTP)
  • ライセンス: EMS E3(Sign-in frequency 利用必須)

🟩ずんだもん「テザリング環境で組むときは MTU が罠になるのだ。netplan で mtu: 1280 を明示しないと TLS handshake で broker が timeout したのだ。」

🟪きりたん「そういう実機で踏んだ罠は、コードコメントよりこの会話の中で残しておくのが一番伝わるよね。」


ステップ2:Entra 側で App Registration を作る

Image 1 Image 2

🟪きりたん「Entra admin center → App registrations → New registration。」

  • Name: Ubuntu authd broker (任意)
  • Supported account types: Single tenant
  • Redirect URI: 不要

API permissions (Microsoft Graph - Delegated) に以下を追加:

  • User.Read
  • openid
  • profile
  • email
  • offline_access

Grant admin consent を押すのを忘れずに。

そして Authentication タブで "Allow public client flows" を Yes に切り替え。

🟩ずんだもん「これ忘れると DCF が動かないのだ。実機ハマりポイントなのだ。」

🟪きりたん「公式ドキュメントだと小さく書いてあるだけだから見落としやすいんだよね。」


ステップ3:authd と broker をインストール

sudo apt install authd
sudo snap install authd-msentraid

🟩ずんだもん「authd は archive 入りした deb で、authd-msentraid は snap で配布なのだ。deb と snap が混在するところが Ubuntu らしいのだ。」

🟪きりたん「authd-msentraid は broker plugin。Microsoft Entra ID 用。Google など他 IdP 用 broker も同じ枠組みで将来出てくる予定。」


ステップ4:PAM 統合

sudo pam-auth-update --enable authd-exec

🟩ずんだもん「これだけで common-authpam_authd_exec.so が突っ込まれるのだ。pam-auth-update のメニュー方式が便利なのだ。」

🟪きりたん「これで sshd / sudo / GDM が全部 authd 経由の認証になるよ。」


ステップ5:NSS の設定

/etc/nsswitch.conf:

passwd: files systemd authd
group:  files systemd authd

🟩ずんだもん「これで getent passwd authd-test1@bizpc.net が解決できるようになるのだ。」

🟪きりたん「動的に Linux ローカルユーザーが作られるイメージだね。事前 useradd 不要。」


ステップ6:broker.conf を“キオスク仕様”で書く(ノブ① と ②)

Image 1 Image 2

🟪きりたん「ここからが本記事の本題。下地に 4 つのノブ を追加するだけで共用キオスクとして成立する。」

/var/snap/authd-msentraid/current/broker.conf:

[oidc]
issuer = https://login.microsoftonline.com/<TENANT_ID>/v2.0
client_id = <CLIENT_ID>
force_provider_authentication = true

[msentraid]
register_device = false

[users]
ssh_allowed_suffixes_first_auth = @bizpc.net
allowed_users = ALL
extra_groups = users
home_base_dir = /run/kiosk-home

🟩ずんだもん「個人版の broker.conf との差分はたった4行なのだ。」

個人版 キオスク版 意味
force_provider_authentication なし true 毎ログインで Entra refresh を強制(★ノブ①)
allowed_users OWNER ALL キオスク利用者全員を許可
owner_extra_groups sudo 削除 共用機なので sudo は与えない
home_base_dir (既定) /run/kiosk-home tmpfs にホームを作る(★ノブ②準備)

反映:

sudo systemctl restart snap.authd-msentraid.authd-msentraid authd

🟧つむぎ「★ノブ①って書いてあるとこが大事ってこと?」

🟪きりたん「そう、後で出てくる Entra CA とセットで動く核の部分。覚えておいて。」

🟧つむぎ「(覚えない)」


ステップ7:tmpfs ホーム をマウント(ノブ②)

/etc/fstab に1行追加:

tmpfs /run/kiosk-home tmpfs defaults,size=4G,mode=1777 0 0

mode=1777 (sticky + world-writable) 必須。755 だと user 権限の cleanup script(後述) が rmdir で失敗します。実機で踏んだ罠なのだ。

sudo mkdir -p /run/kiosk-home
sudo chmod 1777 /run/kiosk-home
sudo mount /run/kiosk-home

🟩ずんだもん「mode=1777 ってちょっと見慣れないのだ。/tmp と同じ権限なのだ?」

🟪きりたん「そうそう。/tmp と同じ。誰でも書き込めるけど、自分が作ったファイルしか消せない仕組み。これがないと他人のホーム削除できなくて積む。」


ステップ8:ログアウト時の cleanup hook(ノブ③)

🟩ずんだもん「ぼく、最初は『/etc/gdm3/PostSession/Default に書けばいいのだ』って思ったのだけど……。」

🟪きりたん「Ubuntu 26.04 の GDM3 はそれを発火しない。旧式廃れたんだよ。代わりに user@.serviceExecStopPost で実装するのが今の正解。」

/usr/local/sbin/kiosk-home-cleanup:

#!/bin/bash
UID_ARG="$1"
[[ -z "$UID_ARG" || "$UID_ARG" == "0" || "$UID_ARG" == "1000" ]] && exit 0
USER_NAME=$(getent passwd "$UID_ARG" | cut -d: -f1)
[[ -n "$USER_NAME" ]] && rm -rf "/run/kiosk-home/$USER_NAME"
exit 0
sudo chmod 755 /usr/local/sbin/kiosk-home-cleanup

/etc/systemd/system/user@.service.d/kiosk-cleanup.conf:

[Service]
ExecStopPost=-/usr/local/sbin/kiosk-home-cleanup %i
sudo systemctl daemon-reload

🟩ずんだもん「%i は UID に展開されるのだ。スクリプト側で UID から UPN(ユーザー名)を引いて、そのフォルダだけ消すのだ。」

🟪きりたん「root と通常 admin (UID 1000) は除外してるから、誤って自分のホーム消す事故は起きないようにしてるよ。」


ステップ9:Entra 側の Conditional Access(ノブ④)

Image 1 Image 2

🟪きりたん「最後のノブは Entra 側。Conditional Access で新規ポリシーを作る。」

項目
Users キオスク利用者グループ
Cloud apps All cloud apps(または authd app のみ)
Conditions: Device platforms Linux
Grant: Require MFA ON
Session: Sign-in frequency 24 hours(★ノブ④)
Session: Persistent browser session Never persistent

🟩ずんだもん「ここで Sign-in frequency = 24h を設定しないと、authd 側で force_provider_authentication = true にしても silent refresh で素通りされちゃうのだ。」

🟪きりたん「『両方そろって初めて毎日 MFA が成立』ってのは、CAだけ設定しても意味がないし、authd だけ設定しても意味がないってこと。両側を同時に押さえるから強い。」

🟧つむぎ「『二段構えの仕掛け』ってさっきから言ってるやつ〜?」

🟪きりたん「そう。これが本記事の核。」


ステップ10:動作検証 — 初回ログイン

Image 1 Image 2 Image 2

sudo systemctl restart gdm3 で GDM を再起動して、いざログイン検証なのだ。

GDM ログイン画面

00-fresh-gdm.png

🟩ずんだもん「UPN authd-test1@bizpc.net を入れて Enter なのだ。」

Broker 選択

01-broker-select.png

🟪きりたん「Microsoft Entra ID がデフォルトでフォーカスされてる。Enter でそのまま進んで OK。」

Device Code 表示

02-device-code.png

🟩ずんだもん「QR コード + 9文字のコード + URL https://microsoft.com/devicelogin が出てきたのだ。スマホでスキャンしても良いし、別端末のブラウザで URL とコードを入れても良いのだ。」

ブラウザで MFA フロー

別端末(または母艦のブラウザ)で URL を開いて進めるのだ。

09a-device-page-empty.png

ログインコードを入力:

09b-code-entered.png

UPN を入力:

09c-upn-entered.png

パスワードを入力:

09d-password-entered.png

MFA: Authenticator Push(番号マッチ):

09e-mfa-push-number-match.png

🟩ずんだもん「Push が使えない場合は、『Authenticator アプリを現在使用できません』リンクから TOTP 方式に切り替えるのだ。」

09f-method-picker.png

TOTP 入力後:

09g-totp-entered.png

「サインインしようとしているデバイスは……」確認画面:

09h-device-confirm.png

idBtn_Back(No / 戻る)を絶対押さないでください。AADSTS90135 "End-user declined" になり、broker 側が認証拒否扱いになります。idSIButton9(Continue)のみ押すのが正解。

「サインインしました」:

09i-success.png

ローカルパスワード作成

VM 側 GDM が自動的に「Create a local password」プロンプトに遷移するのだ。

03-create-local-password.png

入力済:

03b-create-local-password-typed.png

🟪きりたん「これは 以後 24h 以内のログインで使うキャッシュ用パスワード。Entra のパスワードとは独立で、Linux 内だけで完結するよ。」

🟩ずんだもん「なるほど、最初の MFA を通った人が、その日のうちに使う鍵を自分で決めるって感じなのだ。」

初回ログイン完了

04-desktop-first-login.png

🟩ずんだもん「初回起動の証拠として GNOME Welcome 画面が出るのだ。」


ステップ11:動作検証 — 2回目以降のログイン(24h 以内)

🟪きりたん「ログアウトして、もう一度ログインしてみよう。」

ユーザーリストに UPN が残っている:

05-second-login-userlist.png

選択するとローカルパスワードを聞かれる:

06-second-login-password.png

🟩ずんだもん「DCF も MFA も走らずに 1秒でログイン完了 したのだ……! これが authd のキャッシュ動作なのだ。」

🟪きりたん「24h 以内のリピート利用は、ローカルパスだけで通る。MFA 連発で利用者がうんざりしないってわけ。」

🟧つむぎ「マヂそれ大事〜! うちのバイト、毎回 MFA だと『面倒〜』ってフリック1秒で離脱しちゃうんだよね〜。」

🟩ずんだもん「(社長は SaaS の活用度合いをフリックの速さで測ってるのだ……)」


ステップ12:動作検証 — ログアウト後の揮発性

force_provider_authentication = true + tmpfs + cleanup hook が効いていれば、ログアウト後 /run/kiosk-home/ は空になっているはずなのだ。

CLI で確認:

$ sudo ls -la /run/kiosk-home/
total 0
drwxrwxrwt 2 root root 40 May  6 21:00 .

🟩ずんだもん「drwxrwxrwtt がスティッキービットの証なのだ。中身は空なのだ。」

GUI(Files / Nautilus)で:

10-files-gui-home-created.png

🟪きりたん「ログアウト直前まではこのフォルダがあったけど、user@.serviceExecStopPost が走った瞬間に消えるよ。」

そして再ログインすると Welcome 画面が再出現 する(gnome-initial-setup-done フラグが残らないため):

07-second-login-desktop-fresh-welcome.png

🟩ずんだもん「Welcome がまた出るっていうのが、ステートレスの何よりの証拠なのだ! 前の利用者の痕跡が一切ないのだ。」

🟪きりたん「これが authd × tmpfs × cleanup hook の威力。毎回完全クリーンな状態で利用者を迎え入れる共用機が完成したわけ。」


ミニ追記:24h 経過後の再 DCF を短期検証する

🟪きりたん「実時間で 24h 待つの面倒だよね。短期で確認したいときは:」

  1. Entra admin center で当該 CA の Sign-in frequency を 5 min に変更
  2. 5 分以上待つ
  3. 再ログインを試みる

期待される挙動:

  • ローカルパス入力後、authd が refresh token を試行 → CA が拒否
  • DCF プロンプトが再表示される(再 MFA 必須)

🟩ずんだもん「検証が終わったら CA を 24h に戻し忘れないようにするのだ。」

🟪きりたん「これでスマホ側の MFA 通知が再発動して『あ、本当に二段構え効いてる』って実感できるよ。」


比較:同目的の他選択肢

方式 強み 弱み 月コスト/台
authd キオスク (本案) OSS、ハード自由、Entra ID 直結、軽量 UX 自前、MS 公式サポート薄 0円(既存 Entra 利用)
Windows 365 / AVD 公式、フル MS スタック ライセンス高 30〜60$
Chrome OS Flex + Workspace キオスク機能成熟 Google アカウント前提(Entra は SAML 経由) 数$
Citrix / VDI エンタープライズ実績 重い、コスト高 50$+
Anonymous guest session 設定が簡単 監査不可、Entra ID 紐付かない 0円

🟩ずんだもん「価格・カスタム性・監査の三拍子で authd キオスクは魅力的なニッチなのだ。教育機関・自治体・中小企業の共用 PC 領域でフィット感が高そうなのだ。」

🟪きりたん「特にライセンス追加なしで運用できるのが効くね。社長が言ってた予算ゼロもなんとかクリア。」


エンディング:ギャル社長の次の無茶振り

Image 1 Image 2 Image 2

🟧つむぎ「いや〜、Linux 共用機がEntraID直結で1台あたり0円とか令和すぎ〜★
これでうちの研究開発部、退職処理ストレスフリー〜!」

🟩ずんだもん「(『退職処理ストレスフリー』だけ社長が理解できる単語なのだ……)」

🟪きりたん「Ubuntu 26.04 + authd + authd-msentraid + tmpfs + ExecStopPost + Entra CA を1日で全部触った新人、たぶん日本に5人もいないからね。ずんだもん、お疲れ。」

🟩ずんだもん「『弱点の反転』っていう発想を実装できたのが楽しかったのだ。元不動産営業でもなんとかなるのだ。」

🟧つむぎ「マヂ感謝〜! じゃあ次の宿題ね〜。
この authd キオスクと、前回の Vultr Edge エフェメラルキオスクを組み合わせて、
『工場 BYOD でも研究室 PC でも同じ Entra ID でログインしたら全部同じ M365 体験』にして〜★
来週月曜日まで〜♪

🟩ずんだもん「きたのだ……“ギャル社長クラウド統合奥義”なのだ……!」

🟪きりたん「(冷静に)つむぎ、それ Identity Federation の話と Conditional Access のスコープ設計で、たぶん2週間欲しい。」

🟧つむぎ「えーまあ細かいことはよくわかんないけど、とりあえず全部“ゼロトラスト”って言っといて〜♪

🟩ずんだもん「この社長、何回目だよゼロトラスト言いたいだけなのだ……」

🟪きりたん「(ため息)ところで本人確認の話を Linux で完結させたから、技術的にはちゃんと デバイス健全性 + ID + MFA の3つは押さえてるよ。少なくともパスワード単独よりは100倍ゼロトラストに近いね。」

🟧つむぎ「あ、あとさ〜、わたしの個人 Mac もこの authd キオスクに置き換えて? Linux 入れちゃってよ?

🟩ずんだもん「社長の Mac に Linux 入れたら全社員から拍手喝采なのだ……でも社長 Slack の DM どうするんだよ……。」

🟪きりたん「そこは置き換えない方向でいきましょう。」

リンク集

利用キャラクター

本記事で使用しているキャラクター画像の著作権は、それぞれの権利者に帰属します。
非商用目的での利用に基づき掲載しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?