เครื่องมือสำหรับนักพัฒนา · เครื่องคิดเลข Chmod
ค้นหาไฟล์ที่เขียนได้ทั่วโลกและไบนารี setuid ด้วยการค้นหา -perm
· เหตุใดจึงสำคัญ
chmod ยูนิกซ์ การควบคุมการเข้าถึง
รูปแบบการอนุญาตสองรูปแบบเป็นสาเหตุของเหตุการณ์จริงหลายประการ: ไฟล์ที่ใครๆ ก็เปลี่ยนแปลงได้ และโปรแกรมที่ทำงานในฐานะรูท โพสต์นี้แสดงวิธีค้นหาทั้งสองอย่างด้วย find -perm และต้องทำอย่างไร
ผู้ตรวจสอบจะถามถึงรายการที่คุณไม่มี — ไฟล์ไหนที่ผู้ใช้สามารถแก้ไขได้ และโปรแกรมใดที่ยกระดับสิทธิ์เมื่อทำงาน
การตรวจสอบสิทธิ์มักจะเริ่มต้นด้วยโหมดที่รวบรวมไว้แล้วจากที่อื่น: อาจเป็น 0002, 4000, 2000 หรือค่าที่สมบูรณ์ เช่น 4755 เครื่องคิดเลขสามารถถอดรหัสตัวเลขเหล่านั้นเป็นเจ้าของ กลุ่ม และการอนุญาตอื่นๆ รวมถึงบิตพิเศษสามบิตด้วย มันไม่ค้นหาไดเร็กทอรี ตรวจสอบไบนารี หรือสร้างรายการเส้นทาง
ถือว่าทุกโหมดที่ให้มาเป็นคำอธิบายของบิต ไม่ใช่คำตัดสินเกี่ยวกับไฟล์ ป้อนเข้าไป เปรียบเทียบช่องฐานแปดกับการแสดงสัญลักษณ์และเมทริกซ์ช่องทำเครื่องหมาย จากนั้นบันทึกสิ่งที่เปลี่ยนแปลง ความเป็นเจ้าของ รายการ ACL ความสามารถ และข้อมูลประจำตัวของกระบวนการใดๆ ที่ใช้พาธยังคงเป็นข้อเท็จจริงที่จะรวบรวมจากสภาพแวดล้อมจริง
การเขียนได้ทั่วโลกหมายความว่าคลาสอื่นมี w — รูปแบบฐานแปด 0002 และเหตุใด -perm -0002 จึงค้นหามันโดยไม่คำนึงถึงบิตอื่น ๆ
ค่า 0002 แยกบิตการเขียนอื่น ๆ ในรูปแบบสามคลาสทั่วไป ตัวเลขสุดท้ายจะเป็นของทุกคนที่อยู่นอกคลาสเจ้าของและกลุ่ม และองค์ประกอบการเขียนจะมีน้ำหนัก 2 โหมดสมบูรณ์ที่มีบิตนั้นจะแสดง w ในอีกคลาสหนึ่ง แม้ว่าเครื่องคิดเลขจะไม่พบโหมดดังกล่าวก็ตาม
ไม่ว่านิพจน์การค้นหาเฉพาะจะหมายถึงการจับคู่แบบตรงทั้งหมด บิตทั้งหมด หรือบิตใดๆ ที่เป็นของเอกสารประกอบการค้นหา ไม่ใช่ตัวแปลงนี้ จัดหาโหมดผลลัพธ์แทน ตัวอย่างเช่น 0666 จะกลายเป็น rw-rw-rw- ในขณะที่ 0644 จะกลายเป็น rw-r--r--; ความแตกต่างสามารถมองเห็นได้ในกลุ่มและตำแหน่งการเขียนอื่นๆ โดยไม่บอกเป็นนัยว่าโหมดใดโหมดหนึ่งเหมาะสมกับเส้นทางเฉพาะ
0002 เปิดเผยบิตการเขียนอื่น ค้นหาความหมายที่ตรงกันเป็นภายนอก
หลักบิตพิเศษนำหน้าใช้ 4 สำหรับ setuid และ 2 สำหรับ setgid ดังนั้น 4755 จึงรวม setuid เข้ากับสิทธิ์ 755 ธรรมดา ในขณะที่ 2755 รวม setgid เข้ากับบิตต่อท้ายเดียวกัน เครื่องคิดเลขจะแสดงมาสก์เหล่านั้นแยกจากกัน และวางตัวอักษรสัญลักษณ์ไว้ในตำแหน่งดำเนินการของเจ้าของหรือกลุ่มเมื่อเรนเดอร์โหมดเต็ม
คดีมีหลักฐานที่เป็นประโยชน์ หาก setuid มาพร้อมกับเจ้าของดำเนินการ ตำแหน่งเจ้าของดำเนินการจะแสดง s; โดยไม่ต้องดำเนินการจะแสดง S. Setgid ปฏิบัติตามกฎเดียวกันในตำแหน่งกลุ่ม เอาท์พุตเหล่านี้จะถอดรหัสจำนวนเต็มที่ให้มา แต่ไม่ได้ตรวจสอบโปรแกรม ระบุเจ้าของ รันมัน หรือตัดสินใจว่าบิตพิเศษนั้นถูกต้องหรือไม่
4000 และ 2000 ถอดรหัสเป็น setuid และ setgid โดยไม่ต้องตรวจสอบไบนารี
ไวยากรณ์การค้นหาสิทธิ์ต้องแยกจากการคำนวณสิทธิ์ เครื่องคิดเลขยอมรับโหมดสัญลักษณ์แปดหรือเก้าอักขระและส่งกลับค่าสิบสองบิตหนึ่งค่า ไม่มีการแสดงโอเปอเรเตอร์การค้นหา เพรดิเคตเส้นทาง หรือกฎการจับคู่ ดังนั้นจึงไม่สามารถแยกความแตกต่างระหว่างแบบสอบถามในโหมดที่แน่นอนและแบบสอบถามบิตที่จำเป็นทั้งหมดภายในอินเทอร์เฟซนี้
ถอดรหัสโหมดจากผลการค้นหาภายนอกแต่ละรายการ แทนที่จะวางนิพจน์การค้นหา ตัวเลขธรรมดาสามหลักจะแมปกับเจ้าของ กลุ่ม และอื่นๆ ในขณะที่ตัวเลขหลักนำหน้าที่เป็นทางเลือกจะแมปกับ setuid, setgid และ Sticky เวิร์กโฟลว์นี้จะตรวจสอบบิตที่รายงาน แต่ปล่อยให้ความครอบคลุมการค้นหาและความหมายที่ตรงกันอยู่กับเครื่องมือที่สร้างรายการ
โหมดการค้นหาที่แน่นอน ทุกบิต และบิตใดๆ จำเป็นต้องค้นหาเอกสารประกอบ
สมมติว่าการตรวจสอบที่ดำเนินการในที่อื่นรายงาน 0666 และ 4755 การป้อน 0666 จะให้ผล rw-rw-rw- ทำให้การเขียนอื่นมองเห็นได้ในสามรายการสุดท้าย การป้อน 4755 ให้ผล rwsr-xr-x: เจ้าของได้อ่าน เขียน และดำเนินการแล้ว และ setuid จะแทนที่อักขระดำเนินการของเจ้าของด้วยตัวพิมพ์เล็ก s เนื่องจากมีบิตดำเนินการนั้นอยู่
การโจมตีครั้งที่สอง เช่น 4644 แสดงให้เห็นว่าเหตุใดรูปแบบสัญลักษณ์จึงมีความสำคัญ มันแสดงผล rwSr--r-- โดยมี S ตัวพิมพ์ใหญ่แสดง setuid ในขณะที่การเรียกใช้ของเจ้าของหายไป เครื่องคิดเลขสามารถทำให้ความไม่สอดคล้องกันนั้นชัดเจน ยังคงไม่สามารถระบุเส้นทาง ระบุได้ว่าใครเป็นเจ้าของ ตรวจสอบเนื้อหา หรือแนะนำให้ลบบิตออก
ตัวอย่างการทำงาน: ถอดรหัส Hit การตรวจสอบที่ให้มาโดยไม่ต้องสแกนเส้นทาง
อย่าซ่อมแซมทุกโหมดที่ผิดปกติโดยอัตโนมัติ โหมดเป็นเพียงอินพุตเดียวในการตัดสินใจซึ่งขึ้นอยู่กับเป้าหมาย เจ้าของ กลุ่ม และการดำเนินการที่จำเป็นด้วย เพจจงใจไม่ได้รับบริบทนั้นเลย การแสดงตัวอย่างคำสั่งเป็นข้อความเฉื่อย และแม้แต่เส้นทางที่ยกมาอย่างถูกต้องก็ไม่สามารถเปิดหรือตรวจสอบโดยเบราว์เซอร์ได้
ก่อนที่จะเปลี่ยนโหมดที่รายงาน ให้เปรียบเทียบค่าปัจจุบันและค่าที่เสนอทีละบิต การลบการเขียนอื่นออกจาก 0666 สร้าง 0664; การลบ setuid ออกจาก 4755 สร้าง 0755 ข้อเท็จจริงทางคณิตศาสตร์เหล่านั้นสามารถทำซ้ำได้ แต่การเปลี่ยนแปลงอย่างใดอย่างหนึ่งจะรักษาปริมาณงานไว้หรือไม่นั้น จำเป็นต้องมีหลักฐานในเครื่องนอกเหนือจากเครื่องคิดเลขและนอกเหนือจากคำแนะนำแบบบิตธรรมดาของบทความ 501
ข้อยกเว้นและการแก้ไขจำเป็นต้องมีความเป็นเจ้าของในท้องถิ่นและหลักฐานภาระงาน
ขาดมิติการตรวจสอบที่เกี่ยวข้องหลายประการ เส้นทางไม่สอบถามรายการ ACL ความสามารถของไฟล์ ความเป็นเจ้าของ ส่วนประกอบเส้นทางที่เขียนได้ ลักษณะการเมานต์ หรือนโยบายบังคับ นอกจากนี้ยังไม่ดำเนินการค้นหา ตรวจสอบ PATH หรือที่เก็บข้อมูลแบบเคลื่อนที่ การแปลงใหม่ทั้งหมดจึงบอกเพียงว่าตัวเลขที่ให้มาและตัวอักษรที่แสดงตรงกันเท่านั้น
ทำให้ขอบเขตเหล่านั้นมองเห็นได้ในรายงานใดๆ บันทึกเส้นทางและวิธีการรวบรวมข้างโหมดถอดรหัส จากนั้นตรวจสอบข้อมูลระบุตัวตนและกลไกการเข้าถึงเพิ่มเติมด้วยเครื่องมือภายนอกที่เหมาะสม เครื่องคิดเลขมีค่าในการตรวจสอบสัญลักษณ์ เนื่องจากปฏิเสธเลขฐานแปดที่ไม่ถูกต้องและเปิดเผยบิตพิเศษ ไม่ใช่เครื่องสแกนระบบไฟล์หรือกลไกการแก้ไข
Takeaway: รู้จักไฟล์ที่เขียนได้และมีสิทธิ์ของคุณ — และใช้เครื่องคำนวณ Chmod เพื่อแปลแต่ละโหมดที่น่าสงสัยก่อนที่คุณจะเปลี่ยน
การตรวจสอบการอนุญาตที่เป็นประโยชน์จะแยกการค้นพบออกจากการตีความ ปล่อยให้กระบวนการภายนอกที่จัดทำเป็นเอกสารรวบรวมเส้นทางของผู้สมัคร จากนั้นใช้เครื่องคิดเลขเพื่อแปลแต่ละโหมดที่ส่งคืนเป็นสิทธิ์ของคลาสที่ชัดเจน ตรวจสอบดิจิตพิเศษบิตเสริมที่เป็นตัวเลือกอย่างระมัดระวังเหมือนกับดิจิตสามตัวต่อท้าย เนื่องจาก 0755, 2755 และ 4755 มีสิทธิ์การใช้งานร่วมกัน แต่อธิบายค่า 12 บิตที่แตกต่างกัน
ปิดท้ายด้วยข้อสรุปแบบแคบ: เจ้าของ กลุ่ม อื่นๆ และบิตพิเศษที่มีอยู่ในโหมดที่ให้มา อย่าเปลี่ยนเลขคณิตดังกล่าวเป็นการกล่าวอ้างที่ไม่ได้รับการสนับสนุนเกี่ยวกับการเปิดเผยหรือนโยบายที่จำเป็น เครื่องคิดเลขช่วยให้ผู้ตรวจสอบอ่านโหมดที่น่าสงสัยได้อย่างแม่นยำ ระบบที่ใช้งานอยู่จะต้องระบุความเป็นเจ้าของ ปริมาณงาน และหลักฐานการบังคับใช้ก่อนที่จะมีใครทำการเปลี่ยนแปลง