วิธีป้องกันอูบันตูจากการวางระเบิด


72

ฉันได้ยินคนพูดถึงส้อมระเบิดฉันได้ทำการวิจัยและพบข้อมูลที่น่ากลัวเกี่ยวกับตัวละครที่ดูแปลก ๆ ที่ผู้คนสามารถให้คุณพิมพ์ที่บรรทัดคำสั่งและทำให้สิ่งเลวร้ายในคอมพิวเตอร์ แน่นอนฉันจะไม่ออกคำสั่งที่ฉันไม่เข้าใจ แต่ไม่มีใครรู้ว่าจะเกิดอะไรขึ้น

ฉันได้ยินมาว่าระบบปฏิบัติการบางระบบอนุญาตให้ผู้ดูแลระบบวางข้อ จำกัด บางอย่างในกระบวนการของผู้ใช้เพื่อลดผลกระทบจากการวางระเบิดการป้องกันนี้ใน Ubuntu เป็นค่าเริ่มต้นหรือผู้ที่มีสิทธิ์ sudo ต้องตั้งค่านี้หรือไม่ ถ้าเป็นเช่นนั้นได้อย่างไร

คำตอบ:


73

คุณสามารถ จำกัด จำนวนของกระบวนการที่สามารถวางไข่ใน Ubuntu และลีนุกซ์ลีนุกซ์อื่น ๆ ได้โดยง่ายโดยการแก้ไข /etc/security/limits.conf

sudoedit /etc/security/limits.conf

จากนั้นเพิ่มบรรทัดนี้ที่ด้านล่างของไฟล์:

*    hard     nproc     nnn

ที่อยู่:

  • hard ตั้งค่าขีด จำกัด ที่ระดับเคอร์เนลเพื่อให้ไม่สามารถเปลี่ยนแปลงได้โดยไม่ต้องรีบูตเครื่อง
  • nproc เป็นจำนวนสูงสุดของกระบวนการต่อผู้ใช้
  • nnn คือตัวเลขที่คุณควรคำนวณสำหรับระบบของคุณโดย:

    ps aux -L | cut --delimiter=" " --fields=1 | sort | uniq --count | sort --numeric-sort | tail --lines=1
    

คำสั่งดังกล่าวจะแสดงรายการกระบวนการทั้งหมดสำหรับผู้ใช้ทั้งหมดรวมถึงกระทู้รวมพวกเขาและรายการชื่อผู้ใช้ที่มีจำนวนมากที่สุดของกระบวนการ หากต้องการอยู่ในด้านความปลอดภัยให้เปิดแอปพลิเคชั่นให้มากที่สุดเท่าที่คุณต้องการก่อนเรียกใช้คำสั่งด้านบนแล้วเพิ่มจำนวนนั้นเป็นสองเท่าเพื่อความปลอดภัย

หลังจากใส่ข้อ จำกัด นี้แล้วคุณจะต้องเริ่มระบบใหม่ แต่จะมีผลกับผู้ใช้ที่ไม่ใช่รูทแต่ละคนในระบบ ดังนั้นหากผู้ใช้ที่ไม่ใช่รูทระเบิดทำการ fork fork จะมีขีด จำกัด ดังกล่าว

กลุ่มและสัญลักษณ์แทนข้อ จำกัด ไม่สามารถใช้กับผู้ใช้รากโดยค่าเริ่มต้น ใช้ชื่อผู้ใช้ที่แท้จริงrootในกฎถ้าคุณต้องการใช้กฎกับ superuser

นอกจากนี้หากคุณไม่ต้องการที่จะรีสตาร์ทตลอดเวลาเร็ว ๆ นี้คุณสามารถใช้sudo ulimit -u 800ซึ่งจะทำให้ข้อ จำกัด เพียงในเซสชั่นการทำงานแต่สามารถหลีกเลี่ยงได้โดยการวางระเบิดด้วยsudoสิทธิพิเศษ!

หลังจากรีสตาร์ทสิ่งที่อยู่ใน/etc/security/limits.confนั้นจะถูกนำมาใช้

ข้อมูลเพิ่มเติมเกี่ยวกับ fork bombs: พวกเขาไม่ใช่มัลแวร์หรืออะไรที่น่ากลัว พวกเขามักจะประกอบด้วยบางสิ่งบางอย่างที่เป็นพื้นฐานเป็นสคริปต์ที่เรียกตัวเองว่าสองครั้ง - จึงเพิ่มการแสดงตนของมันบนเครื่องชี้แจง แม้ว่าพวกเขาจะมีหน่วยความจำขนาดเล็ก แต่ก็มีความเร็วที่เพิ่มขึ้นหลายเท่า แต่พวกเขาก็เติม RAM ที่มีอยู่ทั้งหมดและเครื่องก็จะหยุดหรือเริ่มใหม่ อันตรายเพียงอย่างเดียวคือการสูญเสียข้อมูลที่ไม่ได้บันทึก ฉันจะจำแนก forkbomb ให้มากกว่าเล่นพิเรนทร์กว่าซอฟต์แวร์ที่เป็นอันตราย

การแจ้งเตือนที่สำคัญ:

คุณไม่ควรดำเนินการอะไรในบรรทัดคำสั่งเมื่อคุณไม่แน่ใจ 98% ของการกระทำ หากคุณไม่สามารถอ่านคำสั่งที่คุณใช้งานอยู่ - อย่าทำมัน สิ่งนี้ใช้สองกับชิ้นที่ไม่สามารถอ่านได้ของอักขระฐานสิบหก / ฐาน 64 ซึ่งสามารถใช้เพื่อปิดบังความน่ารังเกียจทุกประเภท หากคุณไม่แน่ใจเกี่ยวกับคำสั่งคุณสามารถค้นหาคำสั่งในUbuntu Manpagesและใช้ความระมัดระวังเป็นพิเศษเมื่อใช้งานsudoเนื่องจากจะทำงานเป็นผู้ใช้รูท


@MarcoCeppi: หมายเลขของคุณอยู่ไม่ไกลสำหรับผู้ใช้ Unity ทั่วไป: ปัจจุบันการส่งออกไปยังการคำนวณคือ 404 สำหรับระบบของฉัน ...
Fabby

1
ถ้าฉันพูดใส่สิ่งที่ชอบalias ":(){ :|: & };:"="echo 'No.'"ในของฉัน.bashrc- มันจะดำเนินการเข้าสู่ระบบทุกครั้งหรือไม่
UniversallyUniqueID

มีข้อเสียสำหรับการเลือกขีด จำกัด nproc ที่สูงขึ้นหรือไม่ ดูเหมือนว่ามีห้องไม่มากนักที่มีขีด จำกัด ที่หรือเพิ่มเป็นสองเท่าของกระบวนการปัจจุบันจะ จำกัด สูงกว่ามากถึง 10,000 หรือมากกว่านั้นยังคงมีผลต่อการวางระเบิดได้ เกี่ยวกับ ram แต่ละ fork / process ใช้ RAM เท่าใด อาจมีขีด จำกัด ที่ได้รับจาก RAM สากลมากกว่าหรือไม่
Xen2050

1

วิธีง่าย ๆ ที่ฉันชอบคือการสร้างชื่อแทนแม้ว่าจะไม่ได้ใช้ชื่อแทนเสมอให้ตรวจสอบคำตอบด้านบน

alias :="echo No."

ตอนนี้

$ :(){ :|: & };:
bash: syntax error near unexpected token `('

22
แน่นอนนี่เป็นวิธีการทั่วไป หยุดนี้ได้a(){ a|a & };aอย่างไร (หรือชื่อฟังก์ชั่นอื่น ๆ ?)
cat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.