Tôi đã tạo một tập lệnh đơn giản cho phép sudo sử dụng mô-đun TouchID PAM chính xác như conorgriffin giải thích. Nó thực hiện nó trong một tập lệnh duy nhất mà bạn có thể sao chép-dán vào một thiết bị đầu cuối trong toàn bộ hoặc sử dụng phím tắt " curl
pipe bash
":
curl -sL https://gist.githubusercontent.com/RichardBronosky/31660eb4b0f0ba5e673b9bc3c9148a70/raw/touchid_sudo.sh | bash
Kịch bản hoàn chỉnh :
#!/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
Kịch bản này thể hiện một vài mẫu thú vị mà tôi yêu thích để dạy cho những người mới biết về bash hoặc DevOps.
- Tạo một tập tin sao lưu được đánh số thay vì chỉ đơn giản là
.bak
ở cuối. (Nó trông có vẻ hầm hố, nhưng mô hình đó hoạt động với bất cứ thứ gì trong $file
và có thể tái sử dụng.
- Để làm cho nó an toàn để làm
curl ... | bash
, bọc tất cả mọi thứ trong một chức năng và gọi nó trên dòng cuối cùng. Bằng cách đó, nếu quá trình tải xuống bị gián đoạn, không có gì (một phần) được thực hiện.
- Thực hiện cuộc gọi
sudo bash -eu
trong tập lệnh của bạn để bạn không yêu cầu người dùng thực hiện. ( -eu
viết tắt của errexit và danh từ và bạn nên sử dụng chúng!)
- Single trích dẫn bash heredoc
'EOF'
để ngăn chặn sự mở rộng vỏ sớm.
- Làm cho nội tuyến
awk
dễ đọc hơn.