เครื่องมือสำหรับนักพัฒนา · เครื่องคิดเลข Chmod
บิตดำเนินการทำอะไรในไดเร็กทอรี และเหตุใดโฟลเดอร์ 644 จึงแตก
· มันทำงานอย่างไร
chmod ยูนิกซ์ นักพัฒนาเวิร์กโฟลว์
ในไดเร็กทอรี x ไม่ได้เกี่ยวกับการรันอะไรเลย มันให้สิทธิ์ในการสำรวจ โพสต์นี้จะอธิบายการแยก read/search กรณีแปลก ๆ ที่เกิดขึ้น และโหมดที่หลีกเลี่ยง
การอนุญาตถูกปฏิเสธในไฟล์ที่คุณสามารถอ่านได้ — ไฟล์คือ 644 ไดเร็กทอรีคือ 644 และ cat ยังคงล้มเหลว
ไฟล์ที่อ่านได้อาจไม่สามารถเข้าถึงได้เมื่อไดเร็กทอรีขาดการดำเนินการสำหรับคลาสที่เกี่ยวข้อง บทความ 501 เรียกใช้ไดเร็กทอรีดำเนินการข้ามผ่านแทนที่จะเรียกใช้โฟลเดอร์ คำอธิบายไดเร็กทอรีของเครื่องคิดเลขมีความชัดเจนมากขึ้น: อ่านรายการรายการ, เขียนการเปลี่ยนแปลงการอนุญาตให้เข้า และดำเนินการอนุญาตให้เข้าสู่ไดเร็กทอรีและเข้าถึงไฟล์ภายในด้วยชื่อ โหมด 644 ไม่มีบิตดำเนินการสำหรับคลาสใดๆ
เปรียบเทียบ 644 กับ 755 ขณะที่เป้าหมายถูกตั้งค่าเป็นไดเร็กทอรี การแสดงผลครั้งแรก rw-r--r--; ส่วนที่สองจะเรนเดอร์ rwxr-xr-x ทุกคลาสจะได้รับการดำเนินการ ในขณะที่มีเพียงเจ้าของเท่านั้นที่ยังคงเขียนในทั้งสองโหมด ความแตกต่างนั้นอธิบายความแตกต่างของสิทธิ์ที่เป็นตัวแทน หน้านี้ไม่ได้ตรวจสอบไฟล์ ระบุกระบวนการเข้าถึง หรือทดสอบว่าไดเรกทอรีระดับบนสุดบล็อกเส้นทางจริงหรือไม่
อ่านรายการ ดำเนินการสำรวจเส้นทาง - วิธีที่ไดเร็กทอรี r แสดงชื่อ ในขณะที่ x ให้คุณเปิดรายการตามชื่อและระบุสถานะ
การอ่านและดำเนินการไดเร็กทอรีเป็นแฟล็กแยกกันพร้อมคำอธิบายแยกกัน อ่านสอดคล้องกับรายการรายการ Execute สอดคล้องกับการเข้าสู่ไดเร็กทอรีและการเข้าถึงไฟล์ที่มีชื่ออยู่ภายใน คลาสจึงสามารถมีคลาสหนึ่งโดยไม่มีคลาสอื่นในโมเดลตัวเลข เมทริกซ์ทำให้มองเห็นความแตกต่างนั้นได้โดยการวางการอ่านที่น้ำหนัก 4 และดำเนินการที่น้ำหนัก 1 ภายในแต่ละหลักของคลาส
การเปลี่ยนหลักคลาสอื่นจาก 4 เป็น 5 เป็นการสาธิตที่มุ่งเน้น การย้ายสามครั้งเชิงสัญลักษณ์จาก r-- ไปยัง r-x และคำอธิบายไดเร็กทอรีจะเพิ่มความสามารถในการเข้าถึงตามชื่อในขณะที่ยังคงรักษารายการไว้ นี่คือข้อเท็จจริงของ Conversion ไม่ใช่การทดสอบการเข้าถึงแบบสด ไม่มีความเป็นเจ้าของ ข้อมูลประจำตัว รายการ ACL และนโยบายบังคับ ดังนั้นเครื่องคิดเลขจึงไม่สามารถบอกได้ว่าคลาสใดควบคุมคำขอจริง
ชุดค่าผสมทั้งสี่ชุด ได้แก่ r ที่ไม่มี x, x ที่ไม่มี r, ทั้งสองอย่างและทั้งสองอย่าง และสิ่งที่แต่ละชุดอนุญาตให้ผู้ใช้ทำได้จริง
ชุดค่าผสมการอ่านและดำเนินการทั้งสี่ชุดสามารถแสดงได้โดยไม่ต้องกำหนดลักษณะการทำงานของระบบที่กว้างขึ้น หลัก 4 คือ r-- หลัก 1 คือ --x หลัก 5 คือ r-x และหลัก 0 คือ --- สำหรับเป้าหมายไดเร็กทอรี ร้อยแก้วที่สร้างขึ้นจะเชื่อมโยงบิตที่เลือกเหล่านั้นเข้ากับรายชื่อและความสามารถในการเข้าถึงตามชื่อ การเขียนยังคงเป็นแฟล็กอิสระและไม่ได้บอกเป็นนัยทั้งการอ่านหรือดำเนินการ
ใช้เมทริกซ์เพื่อแยกคลาสทีละคลาส แทนที่จะถือว่าโหมดสามหลักเป็นเหมือนป้ายกำกับ หน้านี้จะสร้างจำนวนเต็มใหม่ทุกครั้งที่กล่องเปลี่ยนแปลง ดังนั้นตัวเลขที่ตรงกันและตำแหน่งสัญลักษณ์จะย้ายไปรวมกัน ไม่สามารถเปิดไดเร็กทอรีหรือพยายามค้นหาได้ ชุดค่าผสมทั้งสี่นี้เป็นสิทธิ์ตามแบบจำลองที่แน่นอน ในขณะที่ผลลัพธ์ที่มีประสิทธิภาพจะขึ้นอยู่กับบริบทเป้าหมายที่สังเกตแยกกัน
Traversal ใช้กับบรรพบุรุษทุกตัว — เหตุใดไดเร็กทอรีที่มีข้อจำกัดที่อยู่สูงกว่าในพาธจึงทำลายการเข้าถึงทุกสิ่งที่อยู่ข้างใต้
บทความ 501 ระบุสิทธิ์ดำเนินการไดเรกทอรีหลักที่ขาดหายไป เนื่องจากเหตุผลที่โหมดไฟล์ที่ถูกต้องอาจไม่แก้ปัญหาการเข้าถึง แต่ละส่วนประกอบไดเร็กทอรีในเส้นทางจะนำเสนอคำถามเกี่ยวกับโหมดของตัวเอง เครื่องคิดเลขสามารถถอดรหัสแต่ละค่าที่ให้มาโดยอิสระ และแสดงว่ามีเจ้าของ กลุ่ม หรือการดำเนินการอื่นๆ อยู่หรือไม่ ไม่สามารถเดินตามเส้นทางหรือกำหนดคลาสที่ใช้กับข้อมูลประจำตัวที่ร้องขอได้
ซึ่งทำให้การวิเคราะห์บรรพบุรุษเป็นขั้นตอนการตรวจสอบภายนอก แทนที่จะเป็นคุณสมบัติเครื่องคิดเลข หากมีการรายงานพาเรนต์เป็น 750 หน้าดังกล่าวจะแสดง rwxr-x---; ถ้าอันอื่นคือ 700 มันจะแสดง rwx------ ความแตกต่างนั้นเป็นรูปธรรม แต่ไม่มีข้อสรุปตามมาจนกว่าจะทราบความเป็นเจ้าของและความเป็นสมาชิกกระบวนการ การแสดงตัวอย่างคำสั่งยังคงเฉื่อยและไม่มีหลักฐานว่าการเปลี่ยนไดเร็กทอรีใดไดเร็กทอรีมีความเหมาะสม
ตัวอย่างการทำงาน: การแก้ไขเว็บรูท — ตรวจสอบแต่ละไดเร็กทอรีจาก / ไปยังไฟล์ที่ให้บริการ และเลือก 755 หรือ 750
สำหรับตัวอย่างเว็บรูท ให้ตรวจสอบส่วนประกอบของโหมดที่ให้มาทีละส่วนประกอบ แทนที่จะกำหนดค่าหนึ่งค่าสำหรับแผนผัง โหมด 755 ให้สิทธิ์เจ้าของ rwx และกลุ่มและ r-x อื่น ๆ โหมด 750 ลบการอนุญาตอื่น ๆ ทั้งหมดในขณะที่ยังคงกลุ่ม r-x ไว้ ตัวแปลงทำให้มองเห็นความแตกต่างนั้นได้ ไม่สามารถระบุกระบวนการของเว็บ ค้นพบเส้นทาง หรือเลือกคลาสที่ต้องการการข้ามผ่านได้
ตรวจสอบไฟล์ที่ให้บริการแยกจากไดเร็กทอรี โหมดไฟล์ที่ให้มา เช่น 644 แสดงผล rw-r--r-- ในขณะที่หมายเลขเดียวกันที่เลือกเป็นไดเร็กทอรีอธิบายการดำเนินการที่แตกต่างกัน และไม่มีการดำเนินการทุกที่ การใช้ถ้อยคำที่คำนึงถึงเป้าหมายนี้จะช่วยป้องกันไม่ให้สับสนกับการอ่านไฟล์กับการข้ามผ่านไดเร็กทอรี ความเหมาะสมยังคงขึ้นอยู่กับความเป็นเจ้าของที่แท้จริง ข้อมูลประจำตัวของกระบวนการ บรรพบุรุษ และเลเยอร์การควบคุมการเข้าถึงใดๆ ที่ขาดหายไปจากเพจ
การเรียกซ้ำทำถูกต้อง — ทำไม chmod -R 644 บนแผนผังจึงเป็นข้อผิดพลาดแบบคลาสสิก และวิธีที่ Capital X หรือ find -type d หลีกเลี่ยงมัน
การแสดงผลแบบเรียกซ้ำมีความเรียบง่ายโดยเจตนา การเลือกจะแทรกเฉพาะ -R ลงในคำสั่ง chmod ที่สร้างขึ้น เครื่องคิดเลขไม่ได้ระบุแผนภูมิหรือแยกไฟล์ออกจากไดเร็กทอรี การใช้โหมด 644 ที่เสร็จสมบูรณ์ทุกที่จะทำให้การดำเนินการไดเร็กทอรีชัดเจนในทุกคลาส เพจสามารถเปิดเผยผลลัพธ์นั้นได้ แต่ไม่ได้ใช้ตัวพิมพ์ใหญ่ X หรือเวิร์กโฟลว์การเลือกประเภทไฟล์
การมอบหมายสัญลักษณ์ที่สร้างขึ้นยังคงได้รับการแก้ไข สำหรับ 644 สิ่งเหล่านี้คือ u=rw,g=r,o=r ไม่ใช่คำสั่งที่เกี่ยวข้องที่จะรักษาการแวะผ่านแบบมีเงื่อนไข ฟิลด์ ls-style จะแสดง rw-r--r-- และไม่ควรสับสนกับรายการมอบหมายนั้น กลยุทธ์การเรียกซ้ำภายนอกใดๆ จะต้องได้รับการตรวจสอบภายนอกเส้นทางนี้ รวมถึงการเลือกเป้าหมาย การจัดการลิงก์ และโหมดสุดท้ายที่วางบนออบเจ็กต์ประเภทต่างๆ
สิ่งนี้ไม่ครอบคลุม — พฤติกรรมที่เหนียวเหนอะหนะและ setgid ในไดเร็กทอรี และมาสก์ ACL ซึ่งครอบคลุมอยู่ในโพสต์ของพวกเขาเอง
มาสก์ Sticky, setgid และ ACL แยกจากคำถามการแวะผ่านทั่วไป เครื่องคิดเลขใช้การแสดงแบบเหนียวและ setgid และคำอธิบายที่ละเอียดอ่อนต่อเป้าหมาย แต่การเปรียบเทียบหลักของบทความนี้ต้องการเพียงอ่านและดำเนินการเท่านั้น ACL ไม่ได้แสดงถึงหน้ากากเลย การแปลงโหมดฐานที่ถูกต้องไม่สามารถกำหนดได้ว่ารายการเพิ่มเติมจะอนุญาตหรือจำกัดการเข้าถึงข้อมูลประจำตัวเฉพาะหรือไม่
Umask ก็อยู่นอกการทดสอบเช่นกัน เพจยอมรับโหมดที่สมบูรณ์ ไม่ใช่การตั้งค่ากระบวนการที่อาจอยู่ก่อนหน้านั้น หากไดเร็กทอรีปรากฏขึ้นพร้อมกับ 644 ตัวแปลงสามารถแสดงตำแหน่งการดำเนินการที่ขาดหายไป และสร้างคำสั่งตัวเลือกสำหรับค่าที่ให้มาอื่น ไม่สามารถบอกได้ว่าเหตุใดโหมดนี้จึงเกิดขึ้น ไม่ว่าการเป็นเจ้าของจะผิด หรือการเปลี่ยนแปลงจะแก้ไขความล้มเหลวที่แท้จริงหรือไม่
Takeaway: ไดเร็กทอรีจำเป็นต้องมี x จึงจะสามารถใช้งานได้ และเครื่องคำนวณทำให้ความแตกต่างระหว่าง 644 และ 755 มองเห็นได้เป็น r-- กับ r-x
ข้อดีที่คงทนถาวรคือไดเร็กทอรี x แสดงถึงการเข้าถึงตามชื่อในคำอธิบายของเครื่องคิดเลขนี้ โหมด 644 แสดง r-- สำหรับกลุ่มและอื่นๆ ในขณะที่ 755 แสดง r-x สำหรับทั้งคู่ และเพิ่มการดำเนินการของเจ้าของด้วยเช่นกัน สนามฐานแปดที่ซิงโครไนซ์ สนามสัญลักษณ์ เมทริกซ์ และร้อยแก้วทำให้ตรวจสอบความแตกต่างนั้นได้โดยไม่ถือว่าตัวเลขที่คุ้นเคยนั้นถูกต้องในระดับสากล
วินิจฉัยเกินกว่าเลขคณิตก่อนที่จะใช้สิ่งใด ยืนยันข้อมูลประจำตัวที่เกี่ยวข้อง ความเป็นเจ้าของ โหมดที่ได้รับจากบรรพบุรุษแต่ละราย และประเภทเป้าหมาย จากนั้นใช้เครื่องคิดเลขเพื่อตรวจสอบค่าตัวเลือกที่เสร็จสมบูรณ์ มันจะปฏิเสธสัญกรณ์ที่มีรูปแบบไม่ถูกต้องและแสดงอย่างชัดเจนว่าบิตใดเปลี่ยนแปลง แต่จะไม่เปิดเส้นทาง ดำเนินการ chmod ประเมินนโยบายแอปพลิเคชัน หรือพิสูจน์ว่าบิตโหมดดั้งเดิมเป็นผู้มีอำนาจเท่านั้น