-
MacBook Pro Touch Bar的Touch ID是否支持提升macOS中的管理員權限?
-
Touch ID是否可以在終端中提供sudo訪問權限?
我想知道這是因為我正在考慮使用 YubiKey,它可以在密碼字段中輸入字符串,但是Mac的Touch ID可能不需要它。
MacBook Pro Touch Bar的Touch ID是否支持提升macOS中的管理員權限?
Touch ID是否可以在終端中提供sudo訪問權限?
我想知道這是因為我正在考慮使用 YubiKey,它可以在密碼字段中輸入字符串,但是Mac的Touch ID可能不需要它。
要允許Mac上的TouchID驗證您的 sudo
訪問權限(而不是密碼),您需要執行以下操作。
打開終端
使用 sudo su-
使用命令行編輯器(例如 vim
或 nano
此文件的內容應類似於以下示例之一:
#sudo:身份驗證帳戶密碼會話
需要驗證pam_opendirectory.so
所需帳戶pam_permit.so
需要密碼pam_deny.so
所需的會話pam_permit.so
#sudo:身份驗證帳戶密碼會話
驗證足夠的pam_smartcard.so
需要驗證pam_opendirectory.so
所需帳戶pam_permit.so
需要密碼pam_deny.so
所需的會話pam_permit.so
您需要在頂部添加一條附加的 auth
行,因此現在看起來像這樣:
#sudo:身份驗證帳戶密碼會話
驗證足夠的pam_tid.so
驗證足夠的pam_smartcard.so
需要驗證pam_opendirectory.so
所需帳戶pam_permit.so
需要密碼pam_deny.so
所需的會話pam_permit.so
保存文件。 (注意:該文件通常是只讀的,因此保存更改可能需要您強制保存,例如 vim
將要求您在保存時使用 wq!
)
還要注意, pam_smartcard.so
在較舊的MacOS版本上可能不存在。
從root用戶退出或開始新的終端會話。
嘗試使用 sudo
,並且系統會提示您使用TouchID進行身份驗證,如下所示。
如果單擊“取消”,則只需在終端提示符下輸入密碼。如果單擊“使用密碼”,則可以在對話框中輸入密碼。
如果您通過SSH進入計算機,由於無法通過SSH發送TouchID指紋,因此它只能使用密碼。
注: 如果您使用的是iTerm,請參見用戶Pierz的回答,因為您需要顯式更改設置才能啟用此功能。
注:
最近的MacOS更新可能會刪除該條目。如果TouchID對於 sudo
停止工作,請再次按照以下說明檢查條目是否已刪除並重新添加。
如果您使用的是iTerm2(v3.2.8 +),則可能會發現Touch ID在終端中無法與sudo一起使用,儘管已如上所述進行了 pam_tid.so
修改,但它仍然可以在以前的版本中。這是由於高級功能似乎現在已默認啟用-需要在此處將其關閉:iTerm2->首選項>高級>(轉到會話標題)>允許會話保留日誌進出。
或者,您可以使用此 pam_reattach
模塊同時保留會話功能和TouchID sudo。
TouchID確實支持提升特權,但是到目前為止,它似乎僅在Apple自己的應用程序中受支持。我的猜測是,很遺憾,必須更新第三方應用程序才能支持它。我仍然要輸入很多密碼。
有關為sudo啟用TouchID的說明,請參見 @conorgriffin的答案。
您可以使用指紋在終端或iTerm中獲取sudo訪問權限,只需在 /etc/pam.d/sudo的第一行中添加
auth足夠的pam_tid.so
代碼>文件。
我創建了一個簡單的腳本,使sudo能夠完全按照conorgriffin的說明使用TouchID PAM模塊。它是在一個腳本中完成的,您可以將其完整地複制粘貼到終端中,也可以使用“ curl
管道 bash
”快捷方式:
curl -sL https://gist.githubusercontent.com/RichardBronosky/31660eb4b0f0ba5e673b9bc3c9148a70/raw/touchid_sudo.sh | bash
完整腳本:
#!/ bin / bash
#curl -sL https://gist.githubusercontent.com/RichardBronosky/31660eb4b0f0ba5e673b9bc3c9148a70/raw/touchid_sudo.sh |重擊
#此腳本可用於全部或僅複製粘貼在上面的行(沒有前導#)
#在現代MacBook Pro機器上將TouchID用於sudo
#此腳本在sudo的PAM配置頂部添加一行
#請參閱:https://apple.stackexchange.com/q/259093/41827了解更多信息。
touchid_sudo(){
sudo bash -eu <<'EOF'
文件= / etc / pam.d / sudo
#將以/etc/pam.d/.sudo.1模式創建一個備份文件
#(其中1是備份數,因此重新運行它不會使您失去原始文件)
bak = $(dirname $ file)/.$(basename $ file)。$(echo $(ls $(dirname $ file)/ {,。} $(basename $ file)* | wc -l))
cp $ file $ bak
awk -v is_done ='pam_tid'-v rule ='auth足夠的pam_tid.so''
{
#$ 1是第一個字段
#!〜表示“不匹配模式”
if($ 1!〜/^#.*/){
line_number_not_counting_comments ++
}
#$ 0是整行
if(line_number_not_counting_comments == 1 && $ 0!〜is_done){
打印規則
}
打印
}'> $ file < $ bak
緊急行動
}
touchid_sudo
該腳本演示了一些我喜歡教給bash或DevOps初學者的酷模式。
.bak
的備份文件。 (它看起來很粗糙,但是該模式適用於 $ file
中的任何內容,並且可以重複使用。 curl ... |bash
,將所有內容包裝在一個函數中,並在最後一行調用它。這樣,如果下載中斷,則不會(部分)完成任何操作。 sudo bash -eu
的調用,這樣您就不必告訴用戶了。( -eu
是 errexit和nounset的縮寫,您應該使用它們!)'EOF'
,以防止外殼過早膨脹。 awk
更具可讀性。如果您的計算機支持,我創建了以下任務來啟用sudo命令的觸摸ID:
-名稱:檢測觸摸ID支持
外殼:pgrep ControlStrip
ignore_errors:是
註冊:touch_id_result
-名稱:為sudo命令啟用touch ID
lineinfile:
路徑:/etc/pam.d/sudo
行:“驗證足夠的pam_tid.so”
insertbefore:'^ auth足夠的pam_smartcard.so $'
成為:是的
時間:touch_id_result.rc == 0和touch_id_result.stdout!=''
將Andy和Glenjamin的解決方案合併為一個戲劇:
---
-主機:localhost
任務:
-名稱:安裝pam_reattach pam模塊
自製:
名稱:fabianishere / personal / pam_reattach
狀態:存在
註冊:reattach_result
-名稱:檢測觸摸ID支持
外殼:pgrep ControlStrip
ignore_errors:是
註冊:touch_id_result
-名稱:為sudo命令啟用touch ID
lineinfile:
路徑:/etc/pam.d/sudo
行:“驗證足夠的pam_tid.so”
insertbefore:'^ auth足夠的pam_smartcard.so $'
成為:是的
時間:touch_id_result.rc == 0和touch_id_result.stdout!=''
-名稱:為tmux和iterm啟用永久觸摸ID
lineinfile:
路徑:/etc/pam.d/sudo
行:“ auth optional pam_reattach.so”
insertbefore:'^ auth足夠的pam_tid.so $'
成為:是的
時間:reattach_result == 0
這可以只用 ansible-playbook sudo-touchid.yml
來運行,其中 sudo-touchid.yml
是我命名的這齣戲。
第一步是安裝Fabian的 pam_reatttach
,它允許sudo在iTerm,tmux等環境中工作。它不在默認的brew中,因此我們要從他自己的分支中獲取它。 / p>
第二個檢查該Mac是否具有觸摸欄,否則我們將進行緊急救援。
第三,我們正在查看是否已經在 /etc/pam.d/sudo
中添加了 pam_tid.so
,並且僅當有觸摸條時。
最後,我們還將 pam_reattach.so
添加為可選
身份驗證方法。根據作者的說法,他可能有一些未知的錯誤,如果我們使用 required
,則可能會導致鎖定。