搭配 Jamf Pro 設定 macOS Kerberos SSO

分享

Apple 自 2019 年後直接在作業系統裡面內建了 macOS Kerberos SSO Extension 的整合,讓依賴 Microsoft Active Directory 地端環境的公司,現在也能利用 Kerberos SSOe 完成 SSO,這個功能必須要搭配 MDM 才能啟用,沒辦法透過 UI 或 Script 的方式開啟。

Jamf Pro 設定方式

前往 Computers > Configuration Profiles > Single Sign-On Extension,並將頁面切換成 Kerberos 後,完成相關的設定。例如:

  • Realm 就填入 AD 網域的名稱,應該是全大寫的
  • Hosts 就填入要自動完成 Kerberos SSOe 的網站有哪些:
    例如公司的網站都是 *.gleelab.com,這時候只需要填寫 .gleelab.com 就可以了

macOS 使用者體驗

接著使用者的 macOS 電腦就會在上方工具列的地方出現一把鑰匙,點擊後按下登入,就會出現下方的登入視窗。使用者就在下面輸入 AD 使用者名稱及密碼,就能登入到 AD 網域裡。如果在 Jamf Pro 裡面有配置密碼同步的話,使用者的 macOS 本機帳戶也會被同步成 AD 的密碼。

It just works ?

Apple 最著名的台詞就是:「It just works」,看起來似乎是這樣沒有錯。只要現在打開 Safari,並且連線到公司的某一個 Kerberos 為認證的網站,使用者應該不再需要輸入帳號密碼,就能夠直接登入。但問題總是沒這麼簡單,在最近跟客戶討論的案例裡,發現很多網站還是需要輸入帳密,似乎 Kerberos SSOe 沒有工作,這是為什麼呢?

NTLM 與 Kerberos 很愛攪在一起

事實上是許多公司內部的開發者,利用大量的 Windows 驗證整合技術(Integrated Windows Authentication),這個技術會透過交談的方式判定應該要走 Kerberos 或是降轉成 NTLM。要讓 Kerberos 驗證發生有以下條件(取自於黑暗執行緒 - 關於IIS整合式Windows驗證的冷知識

  • 只適用已加入網域的客戶端
  • 客戶端必須自己連上AD DC(TCP/UDP 88 Port)
  • 不易穿透Proxy
  • 憑證效期長(10小時),DC負荷較輕
  • 認證過程為HTTP 401 –> 傳送Token(6-16KB) –> HTTP 200
  • 認證身分可以轉用。例如:使用者登入IIS後,Web使用同一AD帳號登入SQL
  • Negotiate提供者的優先選項
  • 必須搞定SPN註冊(手續挺複雜)
  • 非常容易失敗,如果你…
  • 在URL使用IP而不是機器名稱
  • 沒註冊SPN
  • 重複註冊SPN
  • SPN註冊錯帳號 (KRB_ERR_AP_MODIFIED)
  • 客戶端無法連線DNS/DC
  • Proxy/Local Intranet Zone沒設好關於IIS整合式Windows驗證的冷知識

閱讀上面的幾個條件後,我們把焦點放在「非常容易失敗」的那一小段裡,總結出幾個偵錯的方向:

  1. 確定測試案例裡要使用域名連線
  2. 檢查 SPN 註冊是否正常
  3. 檢查 Negotiate Provider 的優先級
  4. 利用 Wireshark 觀察背後驗證的流程(參考黑暗執行緒 - Windows驗證歷程觀察與Kerberos/NTLM判別

利用 app-sso 指令偵錯

理論上我們能用 Safari 拜訪某一個 Kerberos 網站並且成功,其實已經驗證從 Jamf Pro 安裝下來的 Kerberos SSOe 設定是正常可用的了,但如果需要在本機上再驗證一次的話,可以利用 app-sso 這個指令確認。

app-sso -i 網域名稱

利用 klist 與 kdestroy 確認 SPN

kdestroy 這個指令可以把目前拿到的 Kerberos Ticket 全部清空,方便進行驗證。而 klist 指令可以列出目前已經拿到了哪一些 Kerberos Ticket,並且檢查他的 SPN。

檢查 IIS 的 Negotiate 與 SPN 的設定

(1) 檢查 IIS 的 Negotiate Provider 是否正確,匿名式驗證是否已經關閉。

(2) 打開 Active Directory Users and Computers,並且新增一個使用者,例如叫做 iis_service。這個使用者應該要是一個 Service Account,然後在屬性編輯器裡的 ServicePrincipleName 應該會是空白的。

(3) 打開 Powershell 準備輸入以下指令,假設提供的網址叫做 web.gleelab.com,那麼 SPN 的設定方式就要輸入:

Setspn /s HTTP/web.gleelab.com gleelab\iis_service

(4) 調整 ApplicationPool

(5) 選擇 IIS 網站上的 Configurtion Editor,並將裡面的 UseAppPoolCredentials 設為 True

(6) 接著打開 Powershell 執行 iisreset

以上步驟更詳細的教學可以參考 Configuring Kerberos Authentication on IIS Website

讓 Chrome 也支援 Kerberos SSOe

在 Jamf Pro 上面的 Computers 新增 Configuration Profile > Application & Custom Settings:

  • Domain: com.google.Chrome
  • Plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AuthNegotiateDelegateAllowlist</key>
<string>*.gleelab.com</string> 若有多個網域,可以使用逗點分隔
<key>AuthServerAllowlist</key>
<string>*.gleelab.com</string> 若有多個網域,可以使用逗點分隔
<key>AmbientAuthenticationInPrivateModesEnabled</key>
<integer>3</integer> 無痕模式要不要也啟用 Kerberos SSOe,可參考文件
</dict>
</plist>

Read more

Managed Preferences 到底贏不贏得過本機設定?自己寫工具測給自己看

Managed Preferences 到底贏不贏得過本機設定?自己寫工具測給自己看

在管理一批用 MDM 集中控管的 Mac 時,常常會遇到一個問題:某個 preference key,使用者自己用 defaults write 改過一次,管理員可能又用 sudo defaults write 在系統層級動過一次,最後 MDM 又把同一個 key 標成 Managed(強制)。這時候系統實際生效的到底是哪一個值? Apple 官方文件對 CFPreferencesAppValueIsForced 這支 API 的說明相當簡略,只告訴你這個 API 可以拿來判斷某個 key 是不是被強制,卻沒有把整個 preference 搜尋順序裡各層級的先後關係講清楚。網路上能找到的資訊也大多是憑印象轉述,沒有人真的擺出證據。 與其對著文件猜,不如自己寫一支工具,實際測給自己看。以下這篇的測試環境是 macOS Tahoe 26.6.

By Glee Tsai
Apple 生態系的真實威脅—我們都可能是目標

Apple 生態系的真實威脅—我們都可能是目標

從一場分享開始的警醒 前陣子在 Jamf Nation Live Taipei 分享了 2024-2025 年 Apple 裝置威脅報告,深入探討了全球 Apple 生態系正面臨的資訊安全威脅。 許多人對 Apple 產品有一種根深蒂固的信心—拿著 Mac 或 iPhone,就像拿到了數位世界的「免死金牌」。說實話,Apple 在軟硬體整合上的安全設計確實領先業界,這不是誇大其詞。但也正因為這份信心,我開始想更深入地了解真實情況。 從 Jamf Security 360 報告開始,我觀察了全球情報機構(如 Citizen Lab、Google TAG、Kaspersky)揭露的真實案例。那時我才意識到一個有點殘酷的事實,也正好對應了同事最常對我說的那句話:Apple 設備並非堅不可摧,使用者自身往往才是最大的弱點。 為什麼 Apple

By Glee Tsai

從 Jamf Pro 自定義註冊畫面帶使用者資訊至 Jamf Connect 失敗的處理方式

Jamf Pro 在設定裡面的 Enrollment Customization,本來可以設定在使用者完成設備註冊的當下,同步把 SAML 裡的資訊帶給後面的 Jamf Connect Login,這樣就可以減少一步使用者還需要登入的步驟。但在撰文的當下,Jamf Pro 11.1 仍在這個功能上有問題,在跟 Jamf Support Team 了解後,大概能用一種 Workaround 來解決,只是要特別留意以下事情: 1. 在 Jamf Pro 裡的 Enrollment Customization 不要再打勾 Enable Jamf Pro to pass user information to Jamf Connect 了(因為勾了也沒有用) 2. 確保

By Glee Tsai

在 Apple 零接觸部署下僅允許某個群組啟動設備

在 Jamf Pro 有整合 Single Sign On 的情況下,可以前往 Settings > Enrollment Customization 設定僅允許一個群組中的成員啟用設備。如果這個成員沒有在這個群組裡面的話,就不能夠開箱設備。如果以 Entra ID 為例,需要把 Object ID 填在下方的欄位即可。 對照到我在 Entra ID 上的群組設置: 至於如果不是 Entra ID,而是其它的 SSO Provider 的話,最好可以用 SAML Tracer 這一套 Google Chrome 外掛去看一下自己的 SAML 文件是如何表達群組的,例如下圖能看到這個使用者屬於以下五個群組。 接著有另外一個很重要的事情要提醒,如果你要阻擋註冊的成員,可以登入到 Jamf Pro

By Glee Tsai