設定 macOS 以使用智慧卡專用認證

智慧卡認證可在 macOS Sierra 和以上版本中提供高強度的雙重認證功能。macOS High Sierra 10.13.2 和以上版本支援智慧卡專用認證,此功能會停用所有密碼認證,以強制使用智慧卡。 

本文旨在針對為需要智慧卡認證的企業環境設置安全性規則的系統管理者提供參考。

啟用智慧卡專用登入

請務必仔細遵循以下步驟,以確保使用者能登入電腦。

  1. 將智慧卡配對至管理者帳號,或設定屬性匹配功能。
  2. 若已啟用嚴格的憑證檢查機制,請安裝所有必要的根憑證或中繼憑證。
  3. 確認是否能使用智慧卡登入管理者帳號。
  4. 安裝包含「<key>enforceSmartCard</key><true/>」的設定描述檔,如下方的「智慧卡專用設定描述檔」中所示。
  5. 確認是否仍能使用智慧卡登入。

如需智慧卡承載資料設定的詳細資訊,請參閱「Apple 設定描述檔參考」。

如需使用智慧卡服務的詳細資訊,請參閱「macOS 部署指南」,或開啟「終端機」並輸入 man SmartCardServices

 

停用智慧卡專用認證

若您是手動管理安裝在電腦上的描述檔,您可以用兩種方式移除智慧卡專用描述檔。您可以使用「系統偏好設定」的「描述檔」面板,或使用 /usr/bin/profiles 命令行工具。如需更多資訊,請開啟「終端機」並輸入 man profiles

如果用戶端電腦已登記行動裝置管理(MDM),您可以回復使用密碼認證。若要回復,請從用戶端電腦移除會啟用智慧卡專用取用限制的智慧卡設定描述檔。

為防止使用者的帳號遭鎖定,請先移除 enforceSmartCard 描述檔之後,再取消配對智慧卡或停用屬性匹配功能。如果使用者的帳號遭鎖定,請移除設定描述檔以解決問題。

若您在啟用智慧卡專用認證之前套用智慧卡專用政策,使用者的電腦可能會遭鎖定。若要解決這個問題,請移除智慧卡專用政策:

  1. 從「macOS 復原」或外部卷宗啟動電腦。
  2. 刪除 Configuration Profile Repository(設定描述檔資源庫)。若要刪除,請開啟「終端機」並輸入以下指令:
    rm /var/db/ConfigurationProfiles/MDM_ComputerPrefs.plist
    rm /var/db/ConfigurationProfiles/.profilesAreInstalled
    rm /var/db/ConfigurationProfiles/Settings/.profilesAreInstalled
    rm /var/db/ConfigurationProfiles/Store/ConfigProfiles.binary
    rm /var/db/ConfigurationProfiles/Setup/.profileSetupDone
  3. 重新啟動電腦。
  4. 重新安裝在啟用智慧卡專用認證之前既有的所有設定描述檔。

 

設定 Secure Shell Daemon(SSHD)以支援智慧卡專用認證

使用者可以使用智慧卡,透過 SSH 對本機電腦或配置正確的遠端電腦進行認證。請依照以下步驟在電腦上設定 SSHD,以便能支援智慧卡認證。 

更新 /etc/ssh/sshd_config 檔案:

  1. 使用以下指令備份 sshd_config 檔案:
    sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_backup_`date "+%Y-%m-%d_%H:%M"`
  2. 在 sshd_config 檔案中,將「#ChallengeResponseAuthentication yes」改為「ChallengeResponseAuthentication no」,並將「#PasswordAuthentication yes」改為「#PasswordAuthentication no」。

接著,使用以下指令來重新啟動 SSHD:

sudo launchctl stop com.openssh.sshd

sudo launchctl start com.openssh.sshd

若使用者想使用智慧卡認證 SSH 工作階段,請使用者依照以下步驟操作:

  1. 使用以下指令從使用者的智慧卡輸出公用密鑰:
    ssh-keygen -D /usr/lib/ssh-keychain.dylib
  2. 將前一步驟取得的公用密鑰加入目標電腦上的 ~/.ssh/authorized_keys 檔案。
  3. 使用以下指令備份 ssh_config 檔案:
    sudo cp /etc/ssh/ssh_config /etc/ssh/ssh_config_backup_`date "+%Y-%m-%d_%H:%M"`
  4. 在 /etc/ssh/ssh_config 檔案中,加入「PKCS11Provider=/usr/lib/ssh-keychain.dylib」一行。

若使用者想要,也可以使用以下指令,將專用密鑰加入自己的 ssh-agent:

ssh-add -s /usr/lib/ssh-keychain.dylib

 

為 SUDO 指令啟用智慧卡專用功能

使用以下指令備份 /etc/pam.d/sudo 檔案:

sudo cp /etc/pam.d/sudo /etc/pam.d/sudo_backup_`date "+%Y-%m-%d_%H:%M"`

接著,將 /etc/pam.d/sudo 檔案的所有內容取代成以下文字:

# sudo: auth account password session
auth        sufficient    pam_smartcard.so
auth        required      pam_opendirectory.so
auth        required      pam_deny.so
account     required      pam_permit.so
password    required      pam_deny.so
session     required      pam_permit.so

 

為 LOGIN 指令啟用智慧卡專用功能

使用以下指令備份 /etc/pam.d/login 檔案:

sudo cp /etc/pam.d/login /etc/pam.d/login_backup_`date "+%Y-%m-%d_%H:%M"`

接著,將 /etc/pam.d/login 檔案的所有內容取代成以下文字:

# login: auth account password session
auth        sufficient    pam_smartcard.so
auth        optional      pam_krb5.so use_kcminit
auth        optional      pam_ntlm.so try_first_pass
auth        optional      pam_mount.so try_first_pass
auth        required      pam_opendirectory.so try_first_pass
auth        required      pam_deny.so
account     required      pam_nologin.so
account     required      pam_opendirectory.so
password    required      pam_opendirectory.so
session     required      pam_launchd.so
session     required      pam_uwtmp.so
session     optional      pam_mount.so

 

為 SU 指令啟用智慧卡專用功能

使用以下指令備份 /etc/pam.d/su 檔案:

sudo cp /etc/pam.d/su /etc/pam.d/su_backup_`date "+%Y-%m-%d_%H:%M"`

接著,將 /etc/pam.d/su 檔案的所有內容取代成以下文字:

# su: auth account password session
auth        sufficient    pam_smartcard.so
auth        required      pam_rootok.so
auth        required      pam_group.so no_warn group=admin,wheel ruser root_only fail_safe
account     required      pam_permit.so
account     required      pam_opendirectory.so no_check_shell
password    required      pam_opendirectory.so
session     required      pam_launchd.so

 

智慧卡專用設定描述檔範例

以下是智慧卡專用設定描述檔的範例。您可用以查看這種類型的描述檔包含哪些種類的密鑰和字串。

<?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>PayloadContent</key>
<array>
<dict>
<key>PayloadDescription</key>
<string>Configures smart card-only</string>
<key>PayloadDisplayName</key>
<string>Smart card-only</string>
<key>PayloadIdentifier</key>
<string>com.apple.configprofile.78.</string>
<key>PayloadOrganization</key>
<string>Apple</string>
<key>PayloadType</key>
<string>com.apple.security.smartcard</string>
<key>PayloadUUID</key>
<string>5A15247B-899C-474D-B1D7-DBD82BDE5678</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>UserPairing</key>
<false/>
<key>allowSmartCard</key>
<true/>
<key>checkCertificateTrust</key>
<false/>
<key>enforceSmartCard</key>
<true/>
</dict>
</array>
<key>PayloadDescription</key>
<string>Smartcard profile.</string>
<key>PayloadDisplayName</key>
<string>Smart card-only</string>
<key>PayloadIdentifier</key>
<string>com.apple.configprofile.77</string>
<key>PayloadOrganization</key>
<string></string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadScope</key>
<string>system</string>
<key>PayloadUUID</key>
<string>7D34CC86-C707-44D2-9A9F-C5F6E347BD77</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>

 

發佈日期: