ไทย

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

รูปแบบการอนุญาต Unix: จาก chmod ปี 1970 ถึง POSIX บิตโหมด

· พื้นหลัง

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

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

โมเดลของเจ้าของ/group/others มีอายุการใช้งานยาวนานหลายทศวรรษโดยมีการเปลี่ยนแปลงเพียงเล็กน้อยอย่างน่าทึ่ง โพสต์นี้ติดตามแหล่งที่มา POSIX มาตรฐานอะไร และเหตุใดจึงยังเหมาะกับงานส่วนใหญ่

การออกแบบปี 1970 ในการปรับใช้ปี 2020 ของคุณ — ทุกคอนเทนเนอร์และ CI runner ยังคงพูด rwx ได้ และสิ่งนี้จะช่วยให้คุณรู้ว่าเหตุใด

การใช้งานปัจจุบันยังคงมีโหมดต่างๆ เช่น 0644 และสตริงสัญลักษณ์ เช่น rw-r--r-- แต่พื้นที่เก็บข้อมูลนี้ไม่ใช่ไฟล์เก็บถาวรเชิงประวัติ หลักฐานของมันคือการนำเสนอที่นำไปใช้: สิบสองบิต การแปลงที่กำหนด และการตรวจสอบอินพุตฐานแปดและสัญลักษณ์ วันที่ นักประดิษฐ์ สิทธิบัตร และการอ้างสิทธิ์เกี่ยวกับระบบที่ได้รับจาก Unix ทุกระบบ จำเป็นต้องมีแหล่งที่มาที่ไม่ได้ระบุไว้ที่นี่

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

สัญลักษณ์ที่มีอายุการใช้งานยาวนานปรากฏในการปรับใช้ปัจจุบัน แต่พื้นที่เก็บข้อมูลนี้ไม่ใช่แหล่งที่มาของประวัติ

บิตธรรมดาเก้าบิตมีสามคลาสที่เท่ากัน เจ้าของ กลุ่ม และคนอื่นๆ ต่างก็ได้รับการอ่าน เขียน และดำเนินการตำแหน่งที่มีน้ำหนัก 4, 2 และ 1 เครื่องคิดเลขจะเก็บลำดับนั้นไว้ทุกที่: ในเลขฐานแปดสามหลักต่อท้าย แถวสัญลักษณ์เก้าอักขระ เมทริกซ์ช่องทำเครื่องหมาย และคำอธิบายภาษาอังกฤษธรรมดาที่สร้างขึ้นสำหรับไฟล์หรือไดเร็กทอรี

โหมด 640 สาธิตโครงสร้างที่ไม่มีการอ้างสิทธิ์ในสายเลือด เจ้าของ 6 หมายถึงการอ่านและเขียน กลุ่ม 4 หมายถึงการอ่าน และ 0 อื่นๆ หมายถึงไม่มีการอนุญาตทั่วไป โดยสร้าง rw-r----- ตามที่บทความ 501 อธิบาย สิ่งเหล่านี้คือแฟล็กที่คำนวณได้ การระบุเจ้าของ กลุ่ม หรือกระบวนการที่แท้จริงยังคงอยู่นอกการแปลง

โมเดลที่นำไปใช้มีบิตธรรมดาเก้าบิตในสามคลาส

Setuid ถูกนำมาใช้เป็นมาสก์ 4000 ในไฟล์ปกติ ตัวแสดงผลจะวาง s ในตำแหน่งการดำเนินการของเจ้าของเมื่อมีทั้ง setuid และการดำเนินการของเจ้าของ หากมี setuid อยู่โดยไม่มีการเรียกใช้งานโดยเจ้าของ มันจะวาง S ไว้ตรงนั้นแทน โดยคงความแตกต่างที่สำคัญระหว่างบิตพิเศษและบิตการเรียกใช้งานทั่วไปไว้ข้างใต้

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

มีการนำพฤติกรรม setuid ไปใช้ ไม่มีที่มาของประวัติสิทธิบัตร

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

Sticky แสดงด้วย 1000 และครอบครองตำแหน่งการดำเนินการอื่นเป็น t หรือ T สำหรับไดเร็กทอรี เครื่องมือจะอธิบายการลบแบบจำกัดสำหรับรายการที่ใช้ร่วมกัน สิ่งเหล่านี้ถูกนำไปใช้ความหมายโดยเครื่องคิดเลข ไม่มีการสร้างประวัติสาขาหรือสายเลือดข้ามระบบ และไม่มีระบบไฟล์สดที่ถูกสอบถามเพื่อยืนยันพฤติกรรมในเครื่อง

ลักษณะการทำงานบิตพิเศษของไดเร็กทอรีได้รับการอธิบายโดยไม่มีการอ้างสิทธิ์ในสายเลือด

แหล่งที่มาตั้งชื่อทุกมาสก์โดยตรง: 0400, 0200 และ 0100 สำหรับเจ้าของ 0040, 0020 และ 0010 สำหรับกลุ่ม 0004, 0002 และ 0001 สำหรับอื่นๆ Setuid, setgid และ Sticky เพิ่ม 4000, 2000 และ 1000 การแปลงเป็นการทดสอบบิตและการผสมผสานระดับบิตแทนที่จะเป็นการดึงดูดมาตรฐานภายนอก

กฎการป้อนข้อมูลก็เป็นรูปธรรมเช่นเดียวกัน Octal ยอมรับตัวเลขหนึ่งถึงสี่หลักตั้งแต่ 0 ถึง 7 โดยมีตัวเลือก 0 หรือ 0o-style นำหน้า อินพุตสัญลักษณ์ยอมรับเก้าตำแหน่งหรือสิบตำแหน่งด้วยอักขระประเภทไฟล์ที่รู้จัก พื้นที่เก็บข้อมูลไม่ได้กำหนดว่าทุกการใช้งานหรือมาตรฐานยอมรับไวยากรณ์พื้นผิวเดียวกันอย่างแม่นยำ

บิตมาสก์ที่มีชื่อและซีแมนทิกส์การแปลงได้รับการตรวจสอบแล้ว การกล่าวอ้างมาตรฐานสากลไม่ได้

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

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

ACL และความสามารถอยู่นอกโมเดลโหมดที่นำไปใช้

ชุดแหล่งที่มานี้ไม่มีการเปรียบเทียบกับ Windows, VMS, แผน 9 หรือประวัติสิทธิ์ของระบบปฏิบัติการอื่น ๆ การละเว้นเรื่องเล่าเหล่านั้นมีความแม่นยำมากกว่าการนำเสนอความแตกต่างที่จำได้ตามความเป็นจริง เครื่องคิดเลขจะแสดงเพียงการแสดงโหมดที่ใช้เท่านั้น และการทดสอบจะสามารถสร้างพฤติกรรมการแปลงมากกว่าวิวัฒนาการของระบบที่ไม่เกี่ยวข้องกัน

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

ประวัติการอนุญาตระบบปฏิบัติการอื่นๆ จะถูกละเว้นโดยไม่มีแหล่งที่มา

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

นั่นก็เพียงพอแล้วสำหรับการเรียนรู้ภาคปฏิบัติโดยไม่ต้องเรียนประวัติศาสตร์ ถอดรหัสโหมด ตรวจสอบแต่ละคลาส และสังเกตว่า s, S, t หรือ T แทนที่ตำแหน่งดำเนินการหรือไม่ จากนั้นหยุดจุดที่หลักฐานหยุดลง: เครื่องคิดเลขจะอธิบายการนำเสนอและข้อความที่สร้างขึ้น ในขณะที่ความเป็นเจ้าของ นโยบาย พฤติกรรมของระบบไฟล์ และที่มาในอดีตจำเป็นต้องใช้แหล่งข้อมูลอื่น