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可能使它不必要。
Answers:
TouchID确实支持提升特权,但到目前为止,似乎仅在Apple自己的应用程序中受支持。我的猜测是,很遗憾,必须更新第三方应用程序才能支持它。我仍然要输入很多密码。
有关启用sudo的TouchID的说明,请参见@conorgriffin的答案。
要允许Mac上的TouchID验证您的sudo
访问权限而不是密码,您需要执行以下操作。
sudo su -
/etc/pam.d/sudo
使用命令行编辑器(例如vim
或)编辑文件nano
该文件的内容应如下所示
# sudo: auth account password session
auth required pam_opendirectory.so
account required pam_permit.so
password required pam_deny.so
session required pam_permit.so
您需要auth
在顶部添加一行,因此现在看起来像这样:
# sudo: auth account password session
auth sufficient pam_tid.so
auth required pam_opendirectory.so
account required pam_permit.so
password required pam_deny.so
session required pam_permit.so
vim
时需要使用wq!
)sudo
,系统会提示您使用TouchID进行身份验证,如下所示
注意:如果您使用的是iTerm, 请参见下面用户Pierz的回答,因为需要更改某些设置才能启用此功能。
如果您使用的是iTerm2(v3.2.8 +),则尽管进行了上述pam_tid.so
修改,但您可能已经发现Touch ID在终端中无法与sudo一起使用,并且可以在以前的版本中使用。这取决于一项高级功能,该功能现在似乎默认情况下已启用-需要在此处将其关闭:iTerm2->首选项>高级>(转到会话标题)>允许会话幸免于注销并重新登录。
或者,您可以使用此pam_reattach
模块同时保留会话功能和TouchID sudo。
No
设置了设置之后就可以正常工作。您也可以搜索“触摸”,然后该选项就会出现。
pam_reattach
,无需更改设置或重新启动iTerm-一切都立即生效!(由于我不知道如何进行,因此我尚未测试过会话是否“实际上可以存活”,但是我不需要更改设置)。
您可以使用指纹在终端或iTerm中获取sudo访问权限,只需将其添加auth sufficient pam_tid.so
到/etc/pam.d/sudo
文件的第一行即可。
Allow sessions to survive logging out and back in
:gitlab.com/gnachman/iterm2/issues/7608#note_153123852
我创建了一个简单的脚本,使sudo能够完全按照conorgriffin的说明使用TouchID PAM模块。它是在一个脚本中完成的,您可以将其完整地复制粘贴到终端中,也可以使用“ curl
pipe 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 | bash
# This script is ready to copy-paste in whole, or just the line above (without the leading #)
# Use TouchID for sudo on modern MacBook Pro machines
# This script adds a single line to the top of the PAM configuration for sudo
# See: https://apple.stackexchange.com/q/259093/41827 for more info.
touchid_sudo(){
sudo bash -eu <<'EOF'
file=/etc/pam.d/sudo
# A backup file will be created with the pattern /etc/pam.d/.sudo.1
# (where 1 is the number of backups, so that rerunning this doesn't make you lose your original)
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 sufficient pam_tid.so' '
{
# $1 is the first field
# !~ means "does not match pattern"
if($1 !~ /^#.*/){
line_number_not_counting_comments++
}
# $0 is the whole line
if(line_number_not_counting_comments==1 && $0 !~ is_done){
print rule
}
print
}' > $file < $bak
EOF
}
touchid_sudo
该脚本演示了一些我喜欢教bash或DevOps新手的酷模式。
.bak
在末尾编号的备份文件。(它看起来很粗糙,但是该模式适用于其中的任何内容$file
并且可以重复使用。curl ... | bash
所有内容包装在一个函数中,并在最后一行调用它。这样,如果下载中断,则不会(部分)完成任何操作。sudo bash -eu
在脚本中调用,这样您就不必告诉用户了。(-eu
是errexit和nounset的缩写,应该使用它们!)'EOF'
防止外壳过早膨胀。awk
更具可读性。如果您的计算机支持,我创建了以下任务来为sudo命令启用touch id:
- name: detect touch id support
shell: pgrep ControlStrip
ignore_errors: true
register: touch_id_result
- name: enable touch id for sudo commands
lineinfile:
path: /etc/pam.d/sudo
line: 'auth sufficient pam_tid.so'
insertbefore: '^auth sufficient pam_smartcard.so$'
become: yes
when: touch_id_result.rc == 0 and touch_id_result.stdout != ''