เครื่องมือสำหรับนักพัฒนา · เครื่องคิดเลข Chmod
chmod บน Windows, macOS, FAT และการแชร์เครือข่าย: โดยที่บิตของโหมดหยุด
· พื้นหลัง
chmod ยูนิกซ์ การควบคุมการเข้าถึง
บิตของโหมดเป็นแนวคิดของ Unix และระบบไฟล์อื่น ๆ อาจปลอมแปลงหรือปล่อยทิ้ง โพสต์นี้กล่าวถึงสิ่งที่เกิดขึ้นกับการอนุญาตบน NTFS, FAT, macOS และ SMB หรือ NFS เมาท์ และวิธีที่ git ตอบสนอง
Git แสดงทุกไฟล์ตามที่แก้ไข - การเปลี่ยนแปลงเพียงอย่างเดียวคือโหมด 100644 ถึง 100755 หลังจากการโคลนบนระบบไฟล์อื่น
การเปลี่ยนแปลง Git จาก 100644 เป็น 100755 เผยให้เห็นความแตกต่างธรรมดาอย่างหนึ่ง: 644 ขาดการดำเนินการ ในขณะที่ 755 รวมไว้สำหรับทั้งสามคลาส การถอดรหัสค่าต่อท้ายจะได้ rw-r--r-- และ rwxr-xr-x เครื่องคิดเลขไม่สามารถอธิบายได้ว่าเหตุใด Git จึงรายงานการเปลี่ยนแปลง แพลตฟอร์มใดที่สร้างการเปลี่ยนแปลง หรือการตั้งค่าระบบไฟล์และพื้นที่เก็บข้อมูลมีอิทธิพลต่อการสังเกตหรือไม่
ใช้ตัวแปลงเป็นตัวถอดรหัสที่เป็นกลางก่อนที่จะเปลี่ยนนโยบาย ป้อน 644 และ 755 เปรียบเทียบแต่ละกล่องดำเนินการ และยืนยันเอาต์พุตเชิงสัญลักษณ์ เส้นทางทางเลือกมีผลกับข้อความคำสั่งที่แสดงเท่านั้น ไม่มีอะไรอ่านจากดิสก์ เมื่อไม่มี Git parser หรือการเข้าถึงข้อมูลเมตา เพจจะสร้างความหมายของโหมด แต่ไม่ใช่จุดประสงค์ของโปรเจ็กต์หรือผู้มีอำนาจอนุญาต
การเปลี่ยนแปลงโหมดใน Git สามารถถอดรหัสได้ที่นี่ แต่ไม่สามารถนำมาประกอบกับแพลตฟอร์มได้
พฤติกรรม Windows ACL จำเป็นต้องมีแหล่งที่มาที่ไม่มีอยู่ที่นี่ เครื่องคิดเลขจำลองคลาสเจ้าของหนึ่งคลาส คลาสกลุ่มหนึ่งคลาส ที่เหลือทั้งหมด และบิตพิเศษสามบิต มันไม่แสดงถึงรายการการเข้าถึง Windows, การสืบทอด, ข้อมูลประจำตัวหรือไวยากรณ์ โครงร่างกล่าวถึงข้อมูลเมตา WSL แต่เอกสารวัสดุที่เก็บข้อมูลที่ให้มาไม่มีเอกสาร ดังนั้นการอ้างสิทธิ์แพลตฟอร์มโดยละเอียดจึงเกินหลักฐานที่มีอยู่
สัญกรณ์สัญลักษณ์ยังคงเป็นเลขคณิตที่มีประโยชน์ แม้ว่าหน่วยเก็บข้อมูลจะใช้รุ่นอื่นก็ตาม parser ยอมรับอักขระอนุญาตเก้าตัว เป็นทางเลือกด้วยเครื่องหมายประเภทที่รู้จัก ตรวจสอบแต่ละตำแหน่ง และแปลงเป็นจำนวนเต็มหนึ่งตัว ไม่สามารถบอกได้ว่า Windows หรือ WSL ยังคงอยู่ สังเคราะห์ หรือละเว้นค่านั้น ศึกษาเอกสารแพลตฟอร์มที่รับผิดชอบก่อนที่จะใช้คำสั่งที่แสดง
พฤติกรรมข้อมูลเมตาของ Windows ACL และ WSL จำเป็นต้องมีแหล่งที่มาของแพลตฟอร์ม
FAT-มาสก์การเมานต์ตระกูลอยู่นอกการดำเนินการนี้ แผงไม่มีฟิลด์ umask, fmask, dmask, mount-option หรือระบบไฟล์ สามารถแบ่งโหมดที่รายงานเป็นเจ้าของ กลุ่ม และบิตอื่นๆ ได้ แต่ไม่สามารถรับโหมดนั้นจากการกำหนดค่าหรือพิสูจน์ว่า FAT หรือ exFAT สร้างได้อย่างไร การกล่าวอ้างพฤติกรรมที่กว้างขึ้นจำเป็นต้องมีแหล่งที่มาของแพลตฟอร์มภายนอก
ปฏิบัติตามแนวทางที่หลักฐานสนับสนุน รับโหมดที่มีประสิทธิภาพจากการสังเกตระบบที่น่าเชื่อถือ จากนั้นป้อนโหมดนั้นและตรวจสอบแฟล็กการอ่าน เขียน และดำเนินการที่แสดง ข้อมูลสรุปสี่หลักเผยให้เห็นบิตพิเศษที่ให้มาด้วย อย่ากลับเลขคณิตนั้นไปเป็นการวินิจฉัยการเมาท์: จำนวนเต็มจะบันทึกว่าไม่มีจุดเริ่มต้น และเพจจะสอบถามว่าไม่มีที่เก็บข้อมูล
FAT-มาสก์การเมานต์ตระกูลอยู่นอกการใช้งาน
ข้อมูลเมตาเพิ่มเติมของ macOS จะไม่ถูกแยกวิเคราะห์ตามเส้นทางนี้ อินพุตสัญลักษณ์ต้องการตำแหน่งสิทธิ์เก้าตำแหน่ง โดยอาจนำหน้าด้วยอักขระประเภทไฟล์ที่รู้จัก ไม่ยอมรับตัวบ่งชี้ต่อท้าย ไม่อ่านรายการหรือแฟล็ก ACL และไม่สอบถามข้อมูลเมตาของพาธ โหมด rwx พื้นฐานสามารถถอดรหัสแยกกันได้ แต่สัญญาณ macOS เพิ่มเติมทุกสัญญาณยังคงอยู่นอกแหล่งเหล่านี้
เมื่อพิจารณา 755 ที่สะอาดหมดจด เครื่องคิดเลขจะเรนเดอร์ rwxr-xr-x และอธิบายมันสำหรับเป้าหมายที่เลือก การดำเนินการไดเรกทอรีหมายถึงการป้อนและเข้าถึงรายการที่มีชื่อ fileExecution หมายถึงการรันโปรแกรม ความแตกต่างที่ได้รับการสนับสนุนจากการนำไปปฏิบัตินั้นจะยังคงอยู่ต่อไปในการระบุแหล่งที่มาของแพลตฟอร์ม กฎการเข้าถึง macOS เพิ่มเติม สัญลักษณ์ หรือการโต้ตอบกับบิตโหมดต้องใช้หลักฐานเฉพาะที่ไม่มีอยู่ในเนื้อหาที่เก็บนี้
ข้อมูลเมตาเพิ่มเติมของ macOS จะไม่ถูกแยกวิเคราะห์ตามเส้นทางนี้
SMB และ NFS การแมปข้อมูลประจำตัวหรือการสังเคราะห์โหมดอยู่นอกการใช้งาน ตัวแปลงไม่ติดต่อกับเซิร์ฟเวอร์ อ่านการกำหนดค่าไม่เมานท์ แก้ไขการไม่ UID และไม่สามารถระบุเจ้าของหรือกลุ่มได้ คลาสของมันคือสล็อตนามธรรมที่ได้มาจากจำนวนเต็ม โหมดที่รายงานโดยการต่อเชื่อมเครือข่ายยังคงสามารถถอดรหัสได้ แต่ระบบไม่รองรับลักษณะการทำงานของระบบไฟล์เครือข่ายโดยละเอียดที่นี่
ขอบเขตนี้ป้องกันข้อผิดพลาดของหมวดหมู่ โหมด 775 หมายถึงเจ้าของและกลุ่มมี rwx ในขณะที่คนอื่นมี r-x ไม่เปิดเผยความเป็นเจ้าของระยะไกล การเป็นสมาชิกกลุ่ม การทำแผนที่ข้อมูลประจำตัว หรือเซิร์ฟเวอร์สังเคราะห์การแสดงผลหรือไม่ ตรวจสอบบิตที่นำเสนอที่นี่ จากนั้นรวบรวมหลักฐานการส่งออก ไคลเอนต์ เซิร์ฟเวอร์ และตัวตนจากสภาพแวดล้อมจริงก่อนตัดสินใจอนุญาต
SMB และ NFS ข้อมูลประจำตัวหรือการสังเคราะห์โหมดอยู่นอกการใช้งาน
เมื่อ Git รายงานการเปลี่ยนแปลงโหมด ให้ถอดรหัสค่าก่อนที่จะแก้ไขนโยบาย สำหรับ 100644 และ 100755 ให้ใช้ 644 และ 755: rw-r--r-- จะกลายเป็น rwxr-xr-x เจ้าของ กลุ่ม และคนอื่นๆ แต่ละคนได้รับการดำเนินการเนื่องจากตัวเลขของพวกเขารับน้ำหนัก 1 สิ่งนี้สร้างความแตกต่างทางความหมายโดยไม่ต้องกำหนดสาเหตุให้กับ Git แพลตฟอร์ม หรือระบบไฟล์
กำหนดเจตนาจากหลักฐานโครงการที่ไม่มีแหล่งข้อมูลเหล่านี้ เครื่องคิดเลขไม่สามารถอ่าน core.fileMode แยกวิเคราะห์ .gitattributes ตรวจสอบดัชนี หรือตัดสินใจว่าสถานะที่ปฏิบัติการได้นั้นเชื่อถือได้หรือไม่ คำสั่งตามเส้นทางยังคงไม่ได้ดำเนินการ นำความแตกต่าง rwx ที่ตรวจสอบแล้วไปไว้ในการตรวจสอบพื้นที่เก็บข้อมูล จากนั้นเปลี่ยนนโยบายหลังจากระบุแหล่งที่มาของความจริงที่ต้องการเท่านั้น
ตัวอย่างการทำงาน: ถอดรหัสโหมดรายงาน Git ก่อนที่จะเปลี่ยนนโยบายพื้นที่เก็บข้อมูล
คำสั่งอนุญาตของ Windows เป็นของอีกรุ่นหนึ่ง เครื่องมือนี้ส่งเสียงรูปแบบ chmod เช่น ค่าฐานแปดหรือ u=rw,g=r,o=r มันไม่แยกวิเคราะห์ไวยากรณ์ของ Windows หรือแมปสามคลาส Unix บน Windows ACL การแปลที่ดูน่าเชื่อถือใดๆ ถือเป็นการประดิษฐ์ขึ้น เนื่องจากบิตดั้งเดิมสิบสองบิตไม่สามารถรักษาข้อมูลประจำตัวและรายการการเข้าถึงทั้งหมดที่แสดงโดยระบบการอนุญาตอื่นได้
การอนุญาตการจัดเก็บอ็อบเจ็กต์จะแยกจากกันอย่างเท่าเทียมกัน เครื่องคิดเลขยอมรับเฉพาะโหมดดั้งเดิมเท่านั้น และจะไม่ติดต่อกับบริการ อ่านนโยบายบัคเก็ต หรือจัดการข้อมูลประจำตัวของวัตถุ ใช้เมื่อค่าฐานแปดหรือสัญลักษณ์สไตล์ Unix จริงจำเป็นต้องถอดรหัส สำหรับพื้นที่จัดเก็บอ็อบเจ็กต์และรุ่นอื่นๆ ให้ตรวจสอบข้อมูลนโยบายและเอกสารประกอบดั้งเดิม แทนที่จะบังคับให้ใช้รูปแบบ chmod
ไวยากรณ์ของ Windows และที่เก็บข้อมูลอ็อบเจ็กต์ยังคงเป็นโมเดลที่แยกจากกัน
ยืนยันว่าเลเยอร์ใดเป็นเจ้าของความจริงการอนุญาตก่อนที่จะใช้ chmod โหมดที่นำเสนอโดย Git, การเมานต์ หรือแพลตฟอร์มอื่นสามารถแปลเป็นเจ้าของ กลุ่ม อื่นๆ และบิตพิเศษได้ การตรวจสอบความถูกต้องจะตรวจจับตัวเลขที่มีรูปแบบไม่ถูกต้องและตำแหน่งสัญลักษณ์ ในขณะที่ s, S, t และ T จะรักษาสถานะพิเศษไว้ การแปลงจะอธิบายคุณค่า ไม่ใช่ที่มาหรืออำนาจของมัน
การทบทวนขั้นสุดท้ายควรแยกเลขคณิตออกจากสภาพแวดล้อม ตรวจสอบโหมด บันทึกคลาสและบิตที่แตกต่างกัน และระบุเป้าหมายเป็นไฟล์หรือไดเร็กทอรี จากนั้นตรวจสอบแพลตฟอร์ม ระบบไฟล์ การตั้งค่าพื้นที่เก็บข้อมูล ข้อมูลประจำตัว ACL และนโยบายด้วยแหล่งที่มาดั้งเดิม บทบาทที่แคบของเพจนั้นมีค่า: การตีความโหมด Unix ที่เชื่อถือได้โดยไม่ต้องแสร้งทำเป็นวินิจฉัยการบังคับใช้ข้ามแพลตฟอร์ม