Touch ID สำหรับ Mac Touch Bar สามารถตรวจสอบสิทธิ์ผู้ใช้และสิทธิ์ผู้ดูแลระบบของ sudo ได้หรือไม่


53
  • Touch ID สำหรับ MacBook Pro Touch Bar สนับสนุนการยกระดับสิทธิ์ผู้ดูแลระบบใน macOS หรือไม่

  • รหัสการสัมผัสสามารถให้สิทธิ์การเข้าถึง sudo ในเทอร์มินัลได้แตกต่างกันอย่างไร

ฉันสงสัยว่าสิ่งนี้เพราะฉันกำลังพิจารณาที่จะรับYubiKeyซึ่งสามารถทำอินพุตสตริงไปยังฟิลด์รหัสผ่านได้ แต่ Touch ID สำหรับ Mac อาจทำให้ไม่จำเป็น


2
ตรวจสอบนี้: github.com/mattrajca/sudo-touchid
pathikrit

@pathikrit - ปิด แต่ดูเหมือนว่าโมดูล PAM จะเป็นทางออกที่ดีกว่า sudo แยก ฉันยังไม่เห็นสิ่งใดที่เขียนขึ้น ฉันอาจลองทำดูก็ได้
Brad Dwyer

คำตอบ:


14
  1. TouchID รองรับการยกระดับสิทธิ์ แต่ ณ ตอนนี้ดูเหมือนว่าจะรองรับเฉพาะในแอพของ Apple เท่านั้น ฉันเดาว่าแอพของบุคคลที่สามจะต้องได้รับการอัปเดตเพื่อรองรับ ฉันยังคงพิมพ์รหัสผ่านของฉันมากมาย

  2. ดูคำตอบ @ conorgriffinสำหรับคำแนะนำในการเปิดใช้งาน TouchID สำหรับ sudo


1
มีใครทำสิ่งนี้จริงหรือ ดูสวยน่ากลัว :)
Nic Cottrell

@NicCottrell ใช่ทำงานได้ดีในตอนท้ายของฉัน
swrobel

77

ในการอนุญาตให้ TouchID บน Mac ของคุณรับรองความถูกต้องของคุณใน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 ดังที่แสดงด้านล่าง TouchID ให้
  • หากคุณคลิก 'ยกเลิก' คุณสามารถป้อนรหัสผ่านของคุณได้ที่หน้าจอแจ้งเตือนเครื่องหากคุณคลิก 'ใช้รหัสผ่าน' คุณสามารถป้อนรหัสผ่านในกล่องโต้ตอบ
  • หากคุณใช้ SSH ในเครื่องมันจะย้อนกลับไปใช้รหัสผ่านของคุณเนื่องจากคุณไม่สามารถส่งลายนิ้วมือ TouchID ของคุณผ่าน SSH

หมายเหตุ: ดูคำตอบโดยผู้ใช้ Pierz ด้านล่างหากคุณใช้ iTerm เนื่องจากมีการตั้งค่าที่คุณต้องเปลี่ยนเพื่อเปิดใช้งานคุณลักษณะนี้


4
ดูเหมือนว่าจะทำงาน! มีสิ่งใดที่เกี่ยวข้องกับความปลอดภัยหรือไม่?
Znarkus

1
นี่ควรเป็นคำตอบที่ยอมรับได้ - มันชัดเจนว่าเกิดอะไรขึ้นทำอย่างไรและไม่จำเป็นต้องติดตั้งซอฟต์แวร์ของบุคคลที่สาม
Jeppe Mariager-Lam

มีวิธีในการแทนที่พร้อมท์รหัสผ่านทั้งหมดด้วย TouchID หรือไม่ ไม่ว่าจะเป็นในเทอร์มินัลหรือในการตั้งค่าระบบหรือใน Keychain หรือสำหรับการติดตั้งแพ็คเกจ
Max Coplan

@ MaxCoplan อาจคุ้มค่าที่จะถามเป็นคำถามแยกต่างหาก
conorgriffin

1
สิ่งนี้ใช้ได้เฉพาะหลังจากที่ฉันทำapple.stackexchange.com/a/355880/158188 (แต่ฉันทำสิ่งนี้ก่อน)
aubreypwd

29

หากคุณกำลังใช้ iTerm2 (v3.2.8 +) คุณอาจเห็น Touch ID ไม่สามารถทำงานกับ sudo ในเครื่องได้แม้ว่าจะทำการpam_tid.soปรับเปลี่ยนตามข้างต้นและมันทำงานได้ในเวอร์ชั่นก่อนหน้า นี่คือลงไปคุณลักษณะขั้นสูงที่ดูเหมือนว่าจะเปิดใช้งานในขณะนี้โดยเริ่มต้น - ความต้องการนี้จะถูกปิดที่นี่: iTerm2-> การตั้งค่า> Advanced> (ไปที่หัวข้อเซสชัน)> อนุญาตการประชุมเพื่อความอยู่รอดออกจากระบบและกลับมาอยู่ใน

หรือคุณสามารถใช้pam_reattachโมดูลนี้เพื่อรักษาคุณสมบัติการใช้งานและ TouchID sudo ในเวลาเดียวกัน

การตั้งค่า iTerm


1
แต่ถ้าคุณต้องการที่จะรักษาคุณสมบัติการกู้คืนเซสชั่นคุณสามารถลองrepo นี้ด้วยโมดูล pam ที่กำหนดเอง
Leo

ฉันต้องทำตามขั้นตอนนี้ แต่ใช้งานได้ทันทีหลังจากที่ฉันมั่นใจว่าNoได้ตั้งค่าในการตั้งค่า นอกจากนี้คุณยังสามารถค้นหา "สัมผัส" และตัวเลือกจะปรากฏขึ้น
aubreypwd

เพิ่งผ่านการทดสอบ: เมื่อใช้งานpam_reattachคุณไม่จำเป็นต้องเปลี่ยนการตั้งค่าหรือรีสตาร์ท iTerm - ทุกอย่างใช้งานได้ทันที! (ฉันไม่ได้ทดสอบว่าเซสชัน "อยู่รอดได้จริง" เนื่องจากฉันไม่มีเงื่อนงำ แต่ฉันไม่ต้องการเปลี่ยนการตั้งค่า)
Blaisorblade

การแตะ ID พร้อมท์จะซ่อนหน้าต่างลัดแบบเต็มหน้าจอ มีวิธีแก้ปัญหาหรือไม่?
HappyFace

คุณช่วยชีวิตฉันไว้ ...
Andrew Ravus

3

คุณสามารถใช้ลายนิ้วมือเพื่อเข้าถึง sudo ในเทอร์มินัลหรือ iTerm เพียงเพิ่มauth sufficient pam_tid.soบรรทัดแรกใน/etc/pam.d/sudoไฟล์ของคุณ


4
อาจเป็นเรื่องที่น่าสนใจสำหรับคนอื่น ๆ ที่รู้ว่า iTerm เวอร์ชั่น v3.2.8 ปัจจุบันไม่อนุญาตเมื่อตั้งค่าตัวเลือกเริ่มต้นอื่น คุณต้องเข้าสู่การตั้งค่า -> ขั้นสูงและปิดการใช้งานAllow sessions to survive logging out and back in: gitlab.com/gnachman/iterm2/issues/7608#note_153123852
kossmoboleat

3

ฉันได้สร้างสคริปต์ง่าย ๆ ที่ช่วยให้ sudo ใช้โมดูล TouchID PAM ตรงตามที่ conorgriffin อธิบาย มันทำในสคริปต์เดียวที่คุณสามารถคัดลอกวางไปยังเทอร์มินัลได้ทั้งหมดหรือใช้ทางลัด " 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 | 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

สคริปต์นี้แสดงให้เห็นถึงรูปแบบเจ๋ง ๆ ที่ฉันชอบสอนคนที่ยังใหม่ต่อการทุบตีหรือ DevOps

  1. สร้างไฟล์สำรองข้อมูลที่มีหมายเลขไม่ใช่เพียงแค่.bakในตอนท้าย (มันดูน่ากลัว แต่รูปแบบนั้นใช้ได้กับทุกอย่างที่อยู่ใน$fileนั้นและสามารถใช้ซ้ำได้
  2. เพื่อให้ปลอดภัยที่จะทำcurl ... | bashห่อทุกอย่างในฟังก์ชั่นและเรียกมันในบรรทัดสุดท้าย ด้วยวิธีนี้หากการดาวน์โหลดขัดจังหวะจะไม่มีอะไรเกิดขึ้น (บางส่วน)
  3. วางสายsudo bash -euในสคริปต์ของคุณเพื่อที่คุณจะไม่ได้บอกผู้ใช้ให้ทำ ( -euสั้นสำหรับerrexit และคำนามและคุณควรใช้มัน!)
  4. การอ้างถึงเดี่ยว bash heredoc 'EOF'เพื่อป้องกันการขยายตัวของเปลือกคลอดก่อนกำหนด
  5. ทำให้อินไลน์awkอ่านง่ายขึ้น

0

ฉันได้สร้างภารกิจที่เข้าใจได้ต่อไปนี้เพื่อเปิดใช้งาน touch id สำหรับคำสั่ง sudo หากคอมพิวเตอร์ของคุณรองรับ:

- 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 != ''
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.