Mac Touch Bar的Touch ID可以验证sudo用户和管理员权限吗?


53
  • MacBook Pro Touch Bar的Touch ID是否支持提升macOS中的管理员权限?

  • 有所不同,Touch ID可以在终端中提供sudo访问吗?

我想知道这是因为我正在考虑获得一个YubiKey,它可以在密码字段中输入字符串,但是Mac的Touch ID可能使它不必要。



@pathikrit-关闭,但是看起来像PAM模块比分叉的sudo更好。我还没有看过任何写的东西。我可以试试看
Brad Dwyer

Answers:


14
  1. TouchID确实支持提升特权,但到目前为止,似乎仅在Apple自己的应用程序中受支持。我的猜测是,很遗憾,必须更新第三方应用程序才能支持它。我仍然要输入很多密码。

  2. 有关启用sudo的TouchID的说明,请参见@conorgriffin的答案


1
有人真的这样做过吗?看起来很吓人:)
Nic Cottrell

@NicCottrell是的,我的工作正常
swrobel

77

要允许Mac上的TouchID验证您的sudo访问权限而不是密码,您需要执行以下操作。

  • 打开终端
  • 切换到root用户 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!
  • 从root用户退出或开始新的终端会话
  • 尝试使用sudo,系统会提示您使用TouchID进行身份验证,如下所示 TouchID提示
  • 如果单击“取消”,则只能在终端提示符下输入密码;如果单击“使用密码”,则可以在对话框中输入密码。
  • 如果您使用SSH进入计算机,它将无法使用SSH发送TouchID指纹,因此只能使用您的密码

注意:如果您使用的是iTerm, 请参见下面用户Pierz的回答,因为需要更改某些设置才能启用此功能。


4
似乎可以工作!这有任何安全隐患吗?
Znarkus

1
这应该是公认的答案-很清楚会发生什么,如何完成,并且不需要安装第三方软件。
杰普·玛丽亚·兰

有没有办法用TouchID替换所有密码提示?它是在终端机中,在系统偏好设置中,在钥匙串中还是在软件包安装中?
Max Coplan

@MaxCoplan可能值得提出一个单独的问题
conorgriffin

1
仅在我执行apple.stackexchange.com/a/355880/158188(但我先这样做)之后,此方法才有效
aubreypwd

29

如果您使用的是iTerm2(v3.2.8 +),则尽管进行了上述pam_tid.so修改,但您可能已经发现Touch ID在终端中无法与sudo一起使用,并且可以在以前的版本中使用。这取决于一项高级功能,该功能现在似乎默认情况下已启用-需要在此处将其关闭:iTerm2->首选项>高级>(转到会话标题)>允许会话幸免于注销并重新登录

或者,您可以使用此pam_reattach模块同时保留会话功能和TouchID sudo。

iTerm首选项


1
但是,如果您想保留会话恢复功能,则可以使用自定义pam模块尝试此回购
狮子座

我必须执行此步骤,但是在确保No设置了设置之后就可以正常工作。您也可以搜索“触摸”,然后该选项就会出现。
aubreypwd

刚刚测试过:使用时pam_reattach,无需更改设置或重新启动iTerm-一切都立即生效!(由于我不知道如何进行,因此我尚未测试过会话是否“实际上可以存活”,但是我不需要更改设置)。
Blaisorblade

触摸ID提示隐藏了全屏的热键窗口。有解决方法吗?
HappyFace

您救了我的命……
Andrew Ravus

3

您可以使用指纹在终端或iTerm中获取sudo访问权限,只需将其添加auth sufficient pam_tid.so/etc/pam.d/sudo文件的第一行即可。


4
其他人可能会很感兴趣,因为当设置了另一个默认选项时,当前的iTerm版本v3.2.8不允许这样做。您必须进入“偏好设置”->“高级”并停用Allow sessions to survive logging out and back ingitlab.com/gnachman/iterm2/issues/7608#note_153123852
kossmoboleat

3

我创建了一个简单的脚本,使sudo能够完全按照conorgriffin的说明使用TouchID PAM模块。它是在一个脚本中完成的,您可以将其完整地复制粘贴到终端中,也可以使用“ curlpipe 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新手的酷模式。

  1. 创建编号而不是仅.bak在末尾编号的备份文件。(它看起来很粗糙,但是该模式适用于其中的任何内容$file并且可以重复使用。
  2. 为了安全起见,请将curl ... | bash所有内容包装在一个函数中,并在最后一行调用它。这样,如果下载中断,则不会(部分)完成任何操作。
  3. sudo bash -eu在脚本中调用,这样您就不必告诉用户了。(-euerrexit和nounset的缩写,应该使用它们!)
  4. 用单引号bash heredoc 'EOF'防止外壳过早膨胀。
  5. 使内联awk更具可读性。

0

如果您的计算机支持,我创建了以下任务来为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 != ''
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.