ฉันมีสคริปต์ทุบตีที่ยาวและยาวซึ่งต้องรันคำสั่งจำนวนมากในขณะที่คำสั่งส่วนใหญ่จำเป็นต้องเรียกใช้ในฐานะผู้ใช้ทั่วไปก่อน sudo เพราะจะทำให้เจ้าของไฟล์ยุ่งเหยิงและเช่นนั้น
ฉันมาด้วยวิธีการบางอย่าง แต่พวกเขาแต่ละคนมีปัญหาบางอย่าง
วิธีที่ 1: การใช้ sudo ภายในไฟล์
#!/bin/bash
sudo echo "I must be run by root"
touch needsToBeOwnedByUser1
echo "needs to be run by user"
sleep 1000
sudo echo "I, again, must be run by root"
นี่จะดูดีจากวิธีการเขียนโค้ด sudo
ถูกเขียนก่อนที่จะมีคำสั่งไม่กี่คำที่รูทจริงต้องรันโดยรูท แต่ถ้าเวลาระหว่างการsudo
โทรแต่ละsudo
ครั้งนานเกินไปขอรหัสผ่านอีกครั้ง นอกจากนี้หากการดำเนินการครั้งแรกของการsudo
ล้มเหลวเช่นเนื่องจากรหัสผ่านไม่ถูกต้องส่วนที่เหลือของสคริปต์จะยังคงดำเนินการ
วิธีที่ 2: ใช้ sudo เพื่อโทรหาไฟล์จากนั้นเปลี่ยนกลับเป็นผู้ใช้ดั้งเดิมเมื่อต้องการ
#!/bin/bash
echo "I must be run by root"
su username -c 'touch needsToBeOwnedByUser1'
su username -c 'echo "needs to be run by user"'
su username -c 'sleep 1000'
echo "I, again, must be run by root"
สิ่งนี้ก็แย่เพราะฉันต้องเพิ่มsu username -c
ต่อหน้าเกือบทุกบรรทัด การหาชื่อผู้ใช้ดั้งเดิมหลังจากนั้นsudo
ก็เป็นไปได้เช่นกัน แต่ก็ยุ่งยาก
มีวิธีที่ดีกว่า?
แก้ไข: ฉันโพสต์สคริปต์ขนาดเล็กและไร้สาระที่นี่เพื่อแสดงสิ่งที่ฉันพูดถึงเท่านั้น ในสคริปต์จริงฉันมีบางบรรทัดที่ต้องการ sudo (เริ่มและหยุดบริการ) บางบรรทัดที่มันไม่สำคัญว่ามี sudo และบรรทัดจำนวนมากที่ต้องทำงานโดยไม่มี sudo
man sudo
? -v, --validate
'อัปเดตข้อมูลประจำตัวที่แคชของผู้ใช้รับรองความถูกต้องของผู้ใช้หากจำเป็น สำหรับปลั๊กอิน sudoers สิ่งนี้จะขยายการหมดเวลาของ sudo อีก 15 นาทีโดยค่าเริ่มต้น แต่ไม่ได้รันคำสั่ง นโยบายความปลอดภัยบางส่วนไม่สนับสนุนข้อมูลประจำตัวที่แคชไว้ ' (ถ้าคุณเรียกใช้บ่อยพอการรับรองความถูกต้องของ sudo ไม่ควรหมดเวลา)
sudo
หากจำเป็นต้องมีการยกระดับสิทธิ์ แต่มีจุดในการเปลี่ยนไปใช้ไม่มีการเรียกใช้su username -c
echo
กล่าวอีกนัยหนึ่งฟังดูเหมือน [XY] คุณสามารถแก้ไขและอธิบายสิ่งที่สคริปต์ของคุณจะทำจริง ๆ และทำไมคุณถึงรู้สึกว่าคุณต้องเปลี่ยนผู้ใช้บ่อยครั้ง