ไทย

เครื่องมือสำหรับนักพัฒนา · เครื่องคิดเลข Chmod

เหตุใด chmod 777 จึงเป็นการแก้ไขที่ไม่ถูกต้องสำหรับข้อผิดพลาดในการอนุญาตที่ถูกปฏิเสธ

· เหตุใดจึงสำคัญ

chmod ยูนิกซ์ การควบคุมการเข้าถึง

โหมดโอเวอร์กว้างแสดงเป็นไดอะแกรมบิตสิทธิ์ Unix ที่แตกต่างกัน
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

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

ข้อผิดพลาดหายไป คำถามไม่ได้ — chmod -R 777 ในไดเร็กทอรีโครงการแก้ไขแบบฟอร์มการอัปโหลดและไม่มีใครรู้ว่าทำไม

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

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

สิ่งที่ 777 มอบให้เป็นคำธรรมดา — ผู้ใช้ทุกคนในระบบสามารถอ่าน แก้ไข และ (สำหรับไดเร็กทอรี) สร้างหรือลบสิ่งใด ๆ ในแผนผัง

โหมด 777 กำหนดตัวเลขสามัญสูงสุดให้กับทุกคลาส 7 แต่ละตัวจะรวมการอ่าน 4 เขียน 2 และดำเนินการ 1 เพื่อสร้าง rwxrwxrwx สำหรับไฟล์ ทุกคลาสอาจอ่าน เปลี่ยนแปลง และเรียกใช้เนื้อหาได้ สำหรับไดเร็กทอรีอาจแสดงรายการ แก้ไขรายการ และป้อนตามชื่อ เลือกช่องทำเครื่องหมายธรรมดาทุกช่องแล้ว

“คนอื่นๆ” สอดคล้องกับการอนุญาตสามครั้งสุดท้ายโดยเฉพาะ ไม่ใช่บัญชีที่รู้จัก หากไม่มีตัวตนและความเป็นเจ้าของ เครื่องคิดเลขจะไม่สามารถระบุได้ว่ากระบวนการใช้เจ้าของ กลุ่ม หรืออื่นๆ การเปรียบเทียบ 777 กับ 775 หรือ 755 ยังคงเปิดเผยแต่ละบิตการเขียนที่ถูกลบออกอย่างแม่นยำ โดยแทนที่คำอธิบายที่คลุมเครือ เช่น "เปิด" ด้วยความแตกต่างระดับชั้นเรียนที่มองเห็นได้

ความเสียหายเกิดขึ้นได้อย่างไร — กระบวนการเว็บที่ถูกบุกรุก สคริปต์ที่เขียนไม่ดี หรือการกำหนดค่าการแก้ไขอื่น ๆ ของผู้เช่า หรือการทำ Web Shell ตก

เครื่องคิดเลขเปิดเผยบิตที่ได้รับ แต่ไม่สามารถพิสูจน์เส้นทางการหาประโยชน์ได้ ไฟล์ที่เขียนได้ทั่วโลกทำให้เกิดคำเตือนว่าบัญชีใด ๆ อาจเปลี่ยนแปลงเนื้อหา ไดเร็กทอรี 777 ที่ไม่มี Sticky เตือนว่ารายการอาจถูกสร้างหรือลบ ผลที่ตามมาเหล่านี้เป็นไปตามโหมดและประเภทเป้าหมาย ไม่ใช่หลักฐานว่ามีบัญชีอื่นอยู่หรือดำเนินการ

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

เครื่องคิดเลขเปิดเผยบิตที่ได้รับ แต่ไม่สามารถแสดงเส้นทางการหาประโยชน์ได้

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

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

การวินิจฉัยตัวตนและความเป็นเจ้าของจะต้องเกิดขึ้นนอกเส้นทางนี้

สำหรับไดเร็กทอรีการอัปโหลด ให้เปรียบเทียบผู้สมัครโดยไม่ต้องกำหนดไว้ โหมด 777 ให้ทุกไดเร็กทอรีคลาสอ่าน เขียน และดำเนินการ โหมด 775 ลบการเขียนอื่น ๆ ในขณะที่คงการเขียนกลุ่มไว้ โหมด 755 สงวนการเขียนสำหรับเจ้าของ เครื่องคิดเลขจะแสดงความแตกต่างเหล่านี้ แต่ไม่ทราบว่าผู้อัปโหลดใช้คลาสใดหรือต้องการการดำเนินการใด

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

ตัวอย่างการทำงาน: เปรียบเทียบโหมดอัพโหลดไดเร็กทอรีผู้สมัครโดยไม่ต้องกำหนดโหมดใดโหมดหนึ่ง

กฎการปฏิเสธเฉพาะโปรแกรมจำเป็นต้องมีเอกสารประกอบของโปรแกรมและหลักฐานรันไทม์ แหล่งที่มา chmod ไม่มีนโยบาย SSH กฎของเว็บเซิร์ฟเวอร์ หรือการกำหนดค่าแอปพลิเคชัน พวกเขาไม่สามารถพิสูจน์ได้ว่าซอฟต์แวร์ปฏิเสธ 777 ยอมรับ 755 หรือต้องการค่าอื่น เครื่องคิดเลขจะแปลงเฉพาะโหมดและอธิบายการทำงานของไฟล์หรือไดเร็กทอรีปกติเท่านั้น

หากซอฟต์แวร์รายงานว่าการอนุญาตกว้างเกินไป ให้เข้าสู่โหมดที่สังเกตได้ และตรวจสอบกลุ่มและบิตอื่นๆ จากนั้นปรึกษาหลักฐานที่เชื่อถือได้สำหรับโปรแกรมนั้นก่อนที่จะเปลี่ยนแปลงสิ่งใด บรรทัด chmod ที่สร้างขึ้นเป็นข้อความเฉื่อย การแสดงฐานแปดและสัญลักษณ์ที่ตรงกันช่วยยืนยันความสอดคล้องของการแปลง ไม่สอดคล้องกับนโยบายโปรแกรมหรือความสำเร็จในการดำเนินงานในอนาคต

กฎการปฏิเสธเฉพาะโปรแกรมจำเป็นต้องมีเอกสารของโปรแกรมนั้น

การปฏิเสธการควบคุมการเข้าถึงภาคบังคับจะอยู่นอก chmod และเครื่องคิดเลข ไม่มีการสืบค้นแหล่งที่มา SELinux, AppArmor หรือกลไกนโยบายอื่น ดังนั้นโหมด 777 อาจแสดงผลได้อย่างสมบูรณ์ในขณะที่การควบคุมที่ไม่เกี่ยวข้องยังคงมองไม่เห็น เพจไม่สามารถแยกเงื่อนไขนั้นจากการเป็นเจ้าของ ACL ข้อจำกัดด้านพื้นที่เก็บข้อมูลหรือแอปพลิเคชัน ทั้งหมดเป็นความเป็นไปได้ภายนอกมากกว่าการค้นพบด้วยเครื่องคิดเลข

อย่าถือว่าโหมดกว้างเป็นการทดสอบสากลของทุกเลเยอร์การอนุญาต หลักฐานของเครื่องคิดเลขลงท้ายด้วยเจ้าของ กลุ่ม และบิตอื่นๆ รวมถึง setuid, setgid และ Sticky โดยจะแสดงสิทธิ์ที่เลือก ไม่ใช่สาเหตุที่การดำเนินการล้มเหลวหรือสำเร็จ รักษาโหมดที่สังเกตได้ เปรียบเทียบบิตที่แน่นอน และตรวจสอบนโยบายภายนอกอย่างเป็นอิสระ

การปฏิเสธนโยบายบังคับอยู่นอก chmod และอยู่นอกเครื่องคิดเลข

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

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