พรอมต์ขอรหัสผ่าน sudo และยกระดับสิทธิ์โดยใช้โปรแกรมในสคริปต์ทุบตี?


49

ขณะนี้ฉันกำลังทำงานกับสคริปต์ทุบตีที่ติดตั้งและตั้งค่าโปรแกรมต่าง ๆ บนระบบ Linux ที่มีอยู่ในสต็อก (ปัจจุบันคือ Ubuntu) เนื่องจากมันติดตั้งโปรแกรมและคัดลอกไฟล์จำนวนหนึ่งไปยังโฟลเดอร์ต่าง ๆ ที่ต้องการการยกระดับสิทธิ์ฉันจึงได้ทำมาตรฐาน "ฉันต้องการสิทธิ์ในการยกระดับ" - และ - ออก

อย่างไรก็ตามฉันต้องการถ้าเป็นไปได้เพื่อให้ผู้ใช้รหัสผ่าน sudo ของพวกเขาและยกระดับสิทธิ์ของสคริปต์โดยอัตโนมัติหากผู้ใช้ไม่ได้เรียกใช้คำสั่งสคริปต์ด้วย sudo (เช่นการเปิดใช้จากตัวจัดการไฟล์ GUI) โดยที่ผู้ใช้ไม่ต้องรีสตาร์ทสคริปต์

เนื่องจากได้รับการออกแบบให้ทำงานบนการติดตั้ง Linux ในสต็อกตัวเลือกใด ๆ ที่ปรับเปลี่ยนระบบจะไม่ทำงานตามวัตถุประสงค์ของฉัน ตัวเลือกทั้งหมดจะต้องมีตัวสคริปต์

เป็นไปได้ภายใน Bash หรือไม่ ถ้าเป็นเช่นนั้นวิธีที่ดีที่สุด (ปลอดภัย แต่รัดกุม) ในการทำเช่นนี้คืออะไร



@MichaelMrozek - Ah ความสุขของการมีเว็บไซต์จำนวนมากในขณะที่พยายามลดการกระจายตัว และคุณรู้ว่าลิงค์ที่คุณให้ไม่เคยปรากฏขึ้นมาให้ฉันในขณะที่ค้นหา Google
Shauna


@jww คุณไม่ทราบว่าเกือบทั้งหมดของการเชื่อมโยงเหล่านั้นถูกถามเกี่ยวกับ 4 ปีหลังจากนี้ใช่มั้ย?
Shauna

1
@ Shauna - ฉันเดาว่าคุณจะแก้ปัญหาได้แล้วตอนนี้ ลิงค์สำหรับผู้เข้าชมในอนาคต

คำตอบ:



16

ฉันแนะนำ:

#!/bin/bash

if (($EUID != 0)); then
  if [[ -t 1 ]]; then
    sudo "$0" "$@"
  else
    exec 1>output_file
    gksu "$0 $@"
  fi
  exit
fi

# some example stuff
ls -l /root
echo "app: $0"
for f; do
  echo ">$f<"
done

สิ่งที่ไม่if [[ -t 1 ]];ตรวจสอบ?
Shauna

อาโอเค. ฉันคิดว่ามันมีบางอย่างเกี่ยวกับ terminal vs GUI แต่ไม่แน่ใจว่าคำสั่ง if กำลังตรวจสอบอะไร
Shauna

น่าทึ่งขอบคุณ!
Fire-Dragon-DoL

16

เพิ่มสิ่งนี้เป็นบรรทัดแรกของสคริปต์:

[ "$UID" -eq 0 ] || exec sudo bash "$0" "$@"

เปลี่ยนsudoเป็นgksuหรือgksudoหากคุณต้องการพรอมต์กราฟิก


3
โปรดทราบว่า"$*"จะรวมอาร์กิวเมนต์ทั้งหมดเป็นหนึ่ง ( /path/to/script one two threeจะส่งผลใน$1การเป็นone two three) และ$*ไม่มีคำพูดจะทำให้เกิดช่องว่างในการขัดแย้ง "$@"ทำงานได้ดี
Michael Mrozek

@MichaelMrozek Ah ใช่ นั่นคือสิ่งที่ฉันกำลังมองหาแก้ไข
Kevin

มีวิธีการทำเช่นนี้ใน Debian ซึ่งดูเหมือนว่าจะไม่มีคำสั่ง sudo หรือไม่?
ผิด

@wrongusername ติดตั้งsudoดีกว่าการใช้งานsuมาก แต่ถ้าคุณต้องการจริงๆอาจจะexec su -c "$0" "$@"
Kevin

2

สคริปต์ตัวอย่างฉันไม่รังเกียจการแบ่งปัน ::

#!/bin/bash
[ "$UID" -eq 0 ] || exec sudo "$0" "$@" && echo -n "sudo bash what: "
read WHAT
sudo $WHAT

--ImP.TeK


[ "$UID" -eq 0 ] || exec sudo "$0" "$@"- ดูเหมือนซับที่มีประสิทธิภาพจริงๆ! ดี!
groovenectar

มันจะสมเหตุสมผลหรือไม่ที่จะใช้ UID ที่มีประสิทธิภาพที่นี่$EUDIหรือผลลัพธ์เดียวกันเสมอ เช่น,[[ "$EUID" -eq 0 ]] || exec sudo "$0" "$@"
groovenectar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.