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