ความปลอดภัยในการเก็บสคริปต์ที่ไม่ใช่ของ root ไว้ใน /etc/init.d?


15

ฉันมีแอปพลิเคชันที่ทำงานเป็น daemon และถูกควบคุมโดยสคริปต์ใน /etc/init.d
บางครั้งเราจำเป็นต้องเปลี่ยนพารามิเตอร์บางอย่างของการเริ่มต้น / การควบคุมของสคริปต์เหล่านี้แล้วเริ่ม daemon ใหม่อีกครั้ง สคริปต์เหล่านี้มีสิทธิ์ในการเขียนสำหรับผู้ใช้รูทเท่านั้นดังนั้นเมื่อแก้ไขสคริปต์เหล่านี้ฉันต้องใช้สิทธิ์รูท

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

เป็นที่ยอมรับหรือไม่ที่จะเก็บไฟล์ที่ไม่ใช่รูทไว้ในไดเรกทอรี /etc/init.d
หรือมันไร้สาระรบกวนระเบียบธรรมชาติของระบบ?


1
ความคิดไม่ดีไม่
ChuckCottrill

คำตอบ:


17

สิ่งที่อยู่ในใจทันทีคือผู้ใช้ที่ด้อยโอกาสที่สามารถรันสิ่งต่างๆในการบูตในฐานะรูทซึ่งเป็นที่ต้องการของแครกเกอร์ที่:

  • ต้องการเลื่อนระดับสิทธิ์ของบัญชีอื่น ๆ
  • ต้องการใช้เซิร์ฟเวอร์ของคุณเพื่อโฮสต์บริการโกง
  • ต้องการเริ่มบ็อต IRC / สแปมหากเซิร์ฟเวอร์รีบูต
  • ต้องการ ping เรือแม่เพื่อพูดว่า "ฉันกลับมาอีกครั้ง" และอาจดาวน์โหลดข้อมูลใหม่
  • ต้องการล้างแทร็กของพวกเขา
  • ... ความเลวอื่น ๆ

กรณีนี้อาจเกิดขึ้นได้หากผู้ใช้ที่ด้อยโอกาสของคุณถูกโจมตีโดยผ่านบริการอื่น (http / etc) ผู้โจมตีส่วนใหญ่จะเรียกใช้อย่างรวดเร็วlsหรือfindทุกอย่างใน/etcเวลาเพียงเพื่อดูว่ามีความเป็นไปได้หรือไม่มีกระสุนที่เขียนด้วยภาษาต่าง ๆ ที่ใช้ทำให้ง่ายขึ้น

หากคุณจัดการเซิร์ฟเวอร์จากระยะไกลซึ่งส่วนใหญ่ผ่าน SSH มีโอกาสดีมากที่คุณจะไม่เห็นสิ่งนี้จนกว่าคุณจะตรวจสอบสคริปต์เริ่มต้นเนื่องจากคุณจะไม่เห็นผลลัพธ์ในการบู๊ต (แม้ว่าคุณควรใช้สิ่งที่ ตรวจสอบแฮชของสคริปต์เหล่านั้นกับแฮชที่รู้จักเพื่อดูว่ามีอะไรเปลี่ยนแปลงหรือซอฟต์แวร์ควบคุมเวอร์ชัน ฯลฯ )

แน่นอนว่าคุณไม่ต้องการให้เกิดขึ้นรูทจำเป็นต้องมีสคริปต์เริ่มต้นจริงๆ คุณสามารถเพิ่มผู้ใช้ในการพัฒนาไปยังรายการ sudoers เพื่อให้สะดวกพอที่จะอัปเดตสคริปต์ แต่ฉันแนะนำไม่อนุญาตให้ผู้ด้อยโอกาสในการเข้าถึงการเขียนอะไรใน init.d


5
tl; dr : หากคุณทำสิ่งนี้ผู้ใช้ที่ไม่ใช่รูทจะดีเท่ากับรูทในการบูตครั้งถัดไป คุณกำลังขอร้องให้ pwned
Warren Young

9

นอกเหนือจากจุดที่ดีมากที่ Tim Post ทำไว้ฉันจะเพิ่มว่าสำหรับการตั้งค่าที่หลายคนต้องสามารถผลักดันการเปลี่ยนแปลงไปยังเซิร์ฟเวอร์คุณควรพิจารณาใช้ระบบการจัดการการกำหนดค่าบางประเภท

หากคุณเช่นใช้ puppet หรือ chef หรือ cfengine คุณสามารถให้ผู้ใช้ที่เกี่ยวข้องแก้ไขไฟล์ในเครื่องจากนั้นผลักดันการเปลี่ยนแปลงด้วยการจัดการ config ว่าวิธีการตั้งค่านี้จะแน่นอนแตกต่างกันไปขึ้นอยู่กับระบบที่คุณกำลังใช้ แต่ถูกตั้งขึ้นมันจะรวมถึงเวอร์ชันซอฟต์แวร์ที่ทำให้มันเป็นเรื่องง่ายที่จะกลับไปใช้รุ่นก่อนหน้าของไฟล์ config เมื่อ (หมายเหตุ: เมื่อไม่ถ้า !) มีคนทำผิดพลาด นอกจากนี้ยังจะช่วยให้คุณคัดลอกการกำหนดค่าไปยังระบบทดสอบแยกต่างหากได้ง่ายขึ้น


การรักษาทั้งสคริปต์ของคุณและแม้กระทั่งไฟล์ข้อมูลการกำหนดค่าของคุณในระบบการจัดการการกำหนดค่า / เวอร์ชันเป็นความคิดที่ดีแม้ว่าจะไม่พิจารณาว่าระบบอาจถูกบุกรุกก็ตาม
ChuckCottrill

อันที่จริง - ฉันใช้มันเพื่อแก้ไขข้อผิดพลาดเกี่ยวกับสองสามมิติบ่อยครั้งกว่าที่ฉันใช้เพื่อแก้ไขระบบที่ถูกบุกรุก
เจนนี่ D

ขอบคุณมาก . เพราะที่นี่ผู้ใช้เฉพาะส่วนใหญ่ใช้แอปพลิเคชันนี้ดังนั้น sudo จึงทำงานได้ดีและนี่คือสิ่งที่ฉันทำมาเป็นเวลานาน แต่ฉันเป็นจริงมากระบบการจัดการรุ่นที่สนใจมากสำหรับการกำหนดค่า เรียนเจนนี่คุณสามารถให้ฉัน refrence ใด ๆ สำหรับการทำเช่นนั้นหรือตัวอย่างใด ๆ !! :)
Akaks

1
หากคุณไม่ต้องการไปกับเส้นทางเต็มรูปแบบของ puppet / chef / cfengine ฉันจะใช้ www.perforce.com เป็นการส่วนตัว เราใช้สิ่งนั้นสำหรับเซิร์ฟเวอร์ ~ 100 ครั้งก่อนที่จะมีหุ่นกระบอกและใบอนุญาตใช้งาน Eval นั้นเพียงพอสำหรับเซิร์ฟเวอร์เดียว ข้อได้เปรียบหลักคือคุณสามารถเช็คเอาต์ไฟล์ VC'd ไปยังสถานที่ใด ๆ ในระบบไฟล์แทนการ จำกัด เพียงหนึ่งพา ธ ย่อย ตัวเลือกอื่น ๆ คือjoeyh.name/code/etckeeperหรือใช้ VC ใด ๆ ที่รวมกับสคริปต์เพื่อย้ายไฟล์ไปยังไดเรกทอรีที่เหมาะสม
เจนนี่ D
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.