ระวังให้ดี: สคริปต์ที่รวมกับ setuid นั้นอันตราย!
ครั้งแรกโปรดดูได้ในคำถามนี้ / คำตอบโดยเฉพาะอย่างยิ่งในคำตอบและการรักษาความปลอดภัยนี้เตือน
หากคุณยังคงต้องการรันสคริปต์ด้วยsetuid
ชุดคุณสามารถเขียนโปรแกรม C สั้น ๆ เป็น wrapper และตั้งค่าsetuid
บิตบนไบนารีที่คอมไพล์ได้
ตัวอย่างเสื้อคลุม:
int main(void) {
setuid(0);
clearenv();
system("/absolute/path/to/your/script.sh");
}
โซลูชันอื่นที่ใช้sudo
(กล่าวถึงที่นี่ ):
ในฐานะที่เป็น root ป้องกันการเข้าถึงสคริปต์ของคุณ (และอื่น ๆ ):
chown root /absolute/path/to/your/script.sh
chmod 700 /absolute/path/to/your/script.sh
ตรวจสอบว่าไม่มีใครยกเว้นรูทสามารถแทนที่สคริปต์ได้เช่นโดยแก้ไขสิทธิ์การเข้าถึงของโฟลเดอร์พาเรนต์:
chown root / absolute / path / to / your /
chmod 755 / สัมบูรณ์ / เส้นทาง / ถึง / ของคุณ /
แก้ไขสิทธิ์การเข้าถึง sudo /etc/sudoers
ด้วยvisudo
:
ALL ALL = (root) NOPASSWD: /absolute/path/to/your/script.sh
รายละเอียดเพิ่มเติมเกี่ยวกับการตั้งค่า (เช่นการ จำกัด การเข้าถึงผู้ใช้หรือกลุ่มเฉพาะ) สามารถดูได้ใน manudo sudoers
หลังจากนั้นผู้ใช้ทุกคนสามารถเรียกใช้สคริปต์เป็น root โดยไม่ต้องใช้รหัสผ่าน:
sudo /absolute/path/to/your/script.sh
สิ่งนี้คล้ายกับการใช้โซลูชัน wrapper / setuid ด้านบน