ฉันกำลังเขียนสคริปต์ (จริง ๆ แล้วเป็นการรวมกันของสคริปต์และ makefile) ที่ติดตั้งการอ้างอิงภายนอก: apt-get
คำสั่งบางอย่างการgit
โคลนการสร้างการติดตั้งการเพิ่มผู้ใช้ในกลุ่ม ...
การดำเนินการบางอย่างในสคริปต์เหล่านี้ต้องได้รับอนุญาตจากผู้ใช้ขั้นสูง
จนถึงตอนนี้ฉันได้ดำเนินการขั้นตอนการสร้างทั้งหมดด้วย sudo แต่มีข้อเสีย:
git
Repos ผมโคลนได้รับroot
ในฐานะเจ้าของซึ่งหมายความว่าฉันไม่สามารถแก้ไขได้ในภายหลังโดยไม่ต้องsudo
หรือchown
- สคริปต์ที่เพิ่มผู้ใช้ไปยังกลุ่มไม่ทราบว่าจะเพิ่มผู้ใช้รายใดตั้งแต่
whoami
กลับมาroot
เป็นวิธีที่ดีที่สุดในการทำงานเป็น superuser เฉพาะคำสั่งที่ต้องการหรือไม่ โดยหลักการแล้วกระบวนการยังต้องการให้ฉันป้อนsudo
รหัสผ่านของฉันแต่เพียงครั้งเดียวเมื่อเริ่มต้นกระบวนการติดตั้ง จากนั้นมันจะลืมมันในตอนท้าย แต่เก็บไว้ตลอดเวลาจนกว่าจะถึงตอนนั้น (อาจใช้เวลาหลายชั่วโมง)
โซลูชันที่ฉันพบทางออนไลน์ ได้แก่ :
sudo -v
ตอนที่สคริปต์ แต่ถ้าฉันเข้าใจอย่างถูกต้องหมดเวลานี้ สคริปต์ของฉันสามารถทำงานได้สองสามชั่วโมง- การเรียกใช้สคริปต์ที่มี
sudo
แต่คำสั่งที่ทำไม่ได้ต้องใช้ supersudo -u $(logname) <command>
กับ นี่คือสิ่งที่ฉันทำตอนนี้ แต่มันรู้สึกเหมือนมันควรจะเป็นวิธีอื่น ๆ
เป็นการดีที่ฉันต้องการสคริปต์ของฉันไปที่:
- ขอข้อมูลประจำตัวของ superuser
- เรียกใช้คำสั่งปกติในฐานะผู้ใช้ที่เข้าสู่ระบบ
- รันคำสั่ง sudo โดยป้อนข้อมูลประจำตัวที่ขั้นตอนที่ 1
sudo -k
เพื่อปิดเซสชัน superuser
su $SUDO_USER -c command
สำหรับคำสั่งที่รันในฐานะผู้ใช้ปกติ
SUDO_USER
ตัวแปรสภาพแวดล้อม หากปัจจุบันจะมีชื่อผู้ใช้ของผู้ใช้ที่เรียกใช้ sudo ดังนั้นคุณสามารถ (เป็นรูท) chown $ SUDO_USER: $ SUDO_GID $ your_files ในทำนองเดียวกันคุณสามารถตรวจสอบตัวแปรเหล่านี้เพื่อให้คำสั่งผู้ใช้รู้ว่าจะต้องเพิ่มผู้ใช้รายใด