ฉันกำลังเขียนสคริปต์ (จริง ๆ แล้วเป็นการรวมกันของสคริปต์และ makefile) ที่ติดตั้งการอ้างอิงภายนอก: apt-getคำสั่งบางอย่างการgitโคลนการสร้างการติดตั้งการเพิ่มผู้ใช้ในกลุ่ม ...
การดำเนินการบางอย่างในสคริปต์เหล่านี้ต้องได้รับอนุญาตจากผู้ใช้ขั้นสูง
จนถึงตอนนี้ฉันได้ดำเนินการขั้นตอนการสร้างทั้งหมดด้วย sudo แต่มีข้อเสีย:
gitRepos ผมโคลนได้รับ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 ในทำนองเดียวกันคุณสามารถตรวจสอบตัวแปรเหล่านี้เพื่อให้คำสั่งผู้ใช้รู้ว่าจะต้องเพิ่มผู้ใช้รายใด