ฉันสามารถทำให้สคริปต์ทำงานเป็นรูทได้หรือไม่?


27

จะทำให้สคริปต์ทำงานเป็นรูทได้อย่างไร

ฉันอ่านเกี่ยวกับ setuid แต่ฉันไม่แน่ใจว่าจะทำอย่างไร

ฉันใช้ Linux, Ubuntu 12.04 LTS


คุณใช้ Linux รุ่นใด หรือ Unix หรือยัง
slhck

@slhck Linux, Ubuntu 12
HappyDeveloper

3
setuidจะไม่ทำงานกับสคริปต์ - มันถูกปิดการใช้งานด้วยเหตุผลด้านความปลอดภัยในการแจกจ่าย * nix ส่วนใหญ่ทุกวันนี้ คุณสามารถตั้งค่าได้ แต่มันจะถูกละเว้น บางทีคุณสามารถอธิบายเพิ่มเติมเกี่ยวกับปัญหาที่แท้จริงของคุณเพื่อให้เราสามารถช่วยคุณแก้ปัญหานี้แทน? มันคือสคริปต์อะไร ทำไมคุณถึงต้องการให้มันทำงานเป็นรูท ใช้sudoทางเลือกอื่นหรือไม่?
slhck

คุณเคยลองsudo -sไหม
Nam Phung

คำตอบ:


29

ระวังให้ดี: สคริปต์ที่รวมกับ setuid นั้นอันตราย!

ครั้งแรกโปรดดูได้ในคำถามนี้ / คำตอบโดยเฉพาะอย่างยิ่งในคำตอบและการรักษาความปลอดภัยนี้เตือน

หากคุณยังคงต้องการรันสคริปต์ด้วยsetuidชุดคุณสามารถเขียนโปรแกรม C สั้น ๆ เป็น wrapper และตั้งค่าsetuidบิตบนไบนารีที่คอมไพล์ได้

ตัวอย่างเสื้อคลุม:

int main(void) {        
    setuid(0);
    clearenv();
    system("/absolute/path/to/your/script.sh");
}

โซลูชันอื่นที่ใช้sudo(กล่าวถึงที่นี่ ):

  1. ในฐานะที่เป็น root ป้องกันการเข้าถึงสคริปต์ของคุณ (และอื่น ๆ ):

    chown root /absolute/path/to/your/script.sh
    chmod 700 /absolute/path/to/your/script.sh
    
  2. ตรวจสอบว่าไม่มีใครยกเว้นรูทสามารถแทนที่สคริปต์ได้เช่นโดยแก้ไขสิทธิ์การเข้าถึงของโฟลเดอร์พาเรนต์:

    chown root / absolute / path / to / your /
    chmod 755 / สัมบูรณ์ / เส้นทาง / ถึง / ของคุณ /
    
  3. แก้ไขสิทธิ์การเข้าถึง 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 ด้านบน


3
อันตรายที่เฉพาะเจาะจงนั้นไม่ชัดเจนมากนัก แต่พวกมันหมุนรอบสิ่งแวดล้อมอย่างหนัก ซึ่งแตกต่างจากโปรแกรมส่วนใหญ่พฤติกรรมของเชลล์สคริปต์สามารถเปลี่ยนแปลงได้อย่างมีนัยสำคัญโดยตัวแปรสภาพแวดล้อมหลายสิบตัวซึ่งเพียงพอที่จะไม่มีการป้องกันที่ครอบคลุมสคริปต์ดังกล่าวสามารถถูกหลอกให้ทำการรันโค้ดโดยอำเภอใจ
สเตฟานี

1
คุณควรเพิ่มการเรียกเพื่อ clearenv () ก่อนการเรียกของระบบใน wrapper นั้นทำให้เกิดสภาพแวดล้อมที่สมบูรณ์เพื่อไม่ให้มีการตั้งค่าความชั่วเพื่อจัดการสคริปต์ kernel.org/doc/man-pages/online/pages/man3/clearenv.3.html
Stephanie

@Stephanie ฉันต้องทำอะไรผิดเพราะทั้งหมดนี้ดูบ้าเกินไปสำหรับงานทั่วไป นี่คือสิ่งที่ฉันพยายามทำ: serverfault.com/questions/401405/…
HappyDeveloper

@HappyDeveloper ไม่ได้บ้าเกินไปสำหรับสคริปต์ setuid เนื่องจากผู้ที่มีความปลอดภัยต่ำเป็นเส้นทางที่จะหยั่งรากสำหรับทุกคนที่จัดการเพื่อเรียกใช้
สเตฟานี

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

4

วิธีที่ง่ายและปลอดภัยที่สุดคือการใช้บิต SETUID ในการอนุญาตไฟล์ วิธีการอนุญาตให้ใช้คำสั่งจะถูกยกระดับเป็นสิทธิ์ของเจ้าของไฟล์

เพื่อป้องกันสคริปต์จากรุ่นอย่าตั้งค่าการเขียนสำหรับบิตทุกคน


0

ฉันไม่ทราบว่าสิ่งนี้อาจมีประโยชน์ แต่หากต้องการให้สคริปต์ทำงานเป็นรูทเท่านั้นคุณสามารถใช้ shebang นี้ในบรรทัดแรกของสคริปต์:

#!/bin/su root
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.