ไทย

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

อธิบายโหมดสัญลักษณ์ chmod: u+x, g-w, o=r และ a+rX

· มันทำงานอย่างไร

chmod ยูนิกซ์ นักพัฒนาเวิร์กโฟลว์

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

รูปแบบสัญลักษณ์ของ chmod คือไวยากรณ์เล็กๆ: ใคร, โอเปอเรเตอร์, บิตใด โพสต์นี้แยกมันออกจากกัน เพื่อให้ u+x และ go-rwx ชัดเจน และแสดงให้เห็นว่าเมื่อใดที่สัญลักษณ์จะเอาชนะฐานแปด

สคริปต์ปรับใช้ที่เต็มไปด้วยตัวอักษร — chmod u+x,go-w deploy.sh ใช้งานได้ แต่ไม่มีใครในทีมสามารถพูดได้ว่ามีการเปลี่ยนแปลงอะไรบ้าง

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

การป้อน 750 ทำให้ความแตกต่างเป็นรูปธรรม จอแสดงผลคือ rwxr-x--- ในขณะที่การกำหนดที่สร้างขึ้นคือ u=rwx,g=rx,o= ทั้งสองอธิบายเจ้าของ กลุ่ม และบิตอื่นๆ คนเดียวกัน แต่มีเพียงส่วนที่สองเท่านั้นที่ถูกจัดรูปแบบเป็นอาร์กิวเมนต์ chmod เพจไม่เคยรันคำสั่งนั้น โดยเปิดเผยการเป็นตัวแทนเพื่อให้สามารถตรวจสอบค่าที่เสนอได้ก่อนการดำเนินการเชลล์ใดๆ ที่แยกจากกัน

เครื่องคิดเลขจะแยกการแสดงผลแบบ ls ออกจากรายการการมอบหมายงานที่สร้างขึ้น

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

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

จดหมายที่ปรากฏในงานที่สร้างขึ้น ละเว้นญาติ - ใครไวยากรณ์ไม่ถูกแยกวิเคราะห์

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

การเปรียบเทียบหนึ่งบิตแสดงให้เห็นว่าเวิร์กโฟลว์ที่รองรับสามารถพิสูจน์อะไรได้บ้าง โหมด 750 แสดงผล rwxr-x ---; การเปลี่ยนหลักกลุ่มเป็น 7 สร้าง rwxrwx --- และเปลี่ยน g=rx เป็น g=rwx เครื่องคิดเลขจะระบุโหมดก่อนและหลังที่เสร็จสมบูรณ์ โดยจะไม่ประเมิน g+w กับไฟล์ที่ใช้งานอยู่ เนื่องจากไม่มีโหมด เส้นทาง ระบบไฟล์ หรือการดำเนินการคำสั่งปัจจุบันที่มีส่วนร่วมในการแปลง

ตัวดำเนินการที่สร้างขึ้นคือ = ในขณะที่ไวยากรณ์อินพุต + และ - ยังคงอยู่นอกเครื่องมือ

parser จดจำ r และ w ในตำแหน่งคงที่ บวก x หรือ - ในตำแหน่งการดำเนินการปกติ นอกจากนี้ยังยอมรับ s, S, t และ T โดยที่บิตพิเศษแบ่งปันตำแหน่งเหล่านั้น Capital X นั้นแตกต่างออกไป: เป็นของไวยากรณ์ chmod แบบสัมพันธ์และไม่ได้รับการสนับสนุนที่นี่ การจัดหา X ถูกปฏิเสธแทนที่จะตีความโดยไม่โต้ตอบว่าเป็นบิตดำเนินการทั่วไป

ตัวอักษรพิเศษตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ถูกนำมาใช้โดยเจตนา Setuid และ setgid ใช้ s เมื่อมีบิตดำเนินการที่ตรงกันและใช้ S เมื่อไม่มีอยู่ Sticky ใช้ t หรือ T ตามกฎเดียวกันในตำแหน่งอื่นที่ดำเนินการ แถวพิเศษและสรุปสี่หลักจะรักษาบิตเหล่านั้นไว้ สิ่งนี้ไม่เพิ่มการรองรับการเลือกทุน-X แบบมีเงื่อนไขระหว่างไฟล์และไดเร็กทอรี

parser ยอมรับ r, w, x, s, S, t และ T; ไม่รองรับตัวพิมพ์ใหญ่ X

ไม่มีการใช้นิพจน์ Class-copy เช่น g=u เครื่องคิดเลขจะไม่อ่านซอร์สคลาสจากออบเจ็กต์ที่มีอยู่หรือใช้บิตของคลาสหนึ่งกับอีกคลาสหนึ่ง ได้รับโหมดฐานแปดหรือสไตล์ ls ที่สมบูรณ์ แปลงค่านั้นเป็นบูลีนที่มีชื่อ และปล่อยแฟล็กที่ชัดเจนสำหรับแต่ละคลาส ผลลัพธ์ที่คัดลอกมาจะต้องคำนวณที่อื่นก่อนจึงจะตรวจสอบหน้านี้ได้

สมมติว่าขั้นตอนภายนอกกำหนดว่าเจ้าของและกลุ่มควรมี rwx ทั้งคู่ ในขณะที่อีกฝ่ายไม่มีเลย การป้อน 770 จะได้ rwxrwx--- และ u=rwx,g=rwx,o= นั่นเป็นการยืนยันผลลัพธ์ที่สมบูรณ์ แต่ไม่ได้พิสูจน์ว่าได้มาอย่างไร ยังไม่ทราบความเป็นเจ้าของ: ตัวแปลงจะติดป้ายกำกับคลาสโดยไม่ระบุเจ้าของ กลุ่ม หรือกระบวนการที่แท้จริงที่จะพบกับเป้าหมาย

ไม่มีการคัดลอกสิทธิ์ระหว่างคลาส

โหมด 0750 ได้รับการยอมรับโดยมีศูนย์นำหน้าและแยกวิเคราะห์เป็นค่าเดียวกันกับ 750 เจ้าของหลัก 7 เปิดใช้งานการอ่าน เขียน และดำเนินการ กลุ่มหลัก 5 เปิดใช้งานการอ่านและดำเนินการ; หลักอื่น 0 ไม่ได้เปิดใช้งานอะไรเลย การแสดงผลที่ซิงโครไนซ์จะกลายเป็น rwxr-x--- และสรุปที่มีสี่หลักเสมอจะทำให้ 0750 มองเห็นได้เป็นค่าการตรวจสอบที่ชัดเจน

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

ตัวอย่างการทำงาน: 0750 เป็นโหมดคงที่และสร้างรายการการมอบหมายงาน

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

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

การดำเนินการอ้างอิง, symlink และ ACL ยังคงอยู่นอกตัวแปลงนี้

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

ใช้มุมมองที่ซิงโครไนซ์เพื่อตรวจจับข้อผิดพลาดทางคณิตศาสตร์ หาก 750, rwxr-x---, และ u=rwx,g=rx,o= ปรากฏขึ้นพร้อมกัน โหมดคงที่จะสอดคล้องกันภายใน หยุดตรงนั้น เว้นแต่ระบบจริงจะให้หลักฐานเพิ่มเติม เพจนี้ไม่ได้แยกวิเคราะห์โอเปอเรเตอร์ที่เกี่ยวข้อง ละเว้นตัวเลือก การคัดลอกคลาส หรือ X ตัวพิมพ์ใหญ่ และไม่สามารถระบุได้ว่าโหมดดังกล่าวจัดการกับการดำเนินการที่ล้มเหลวจริงหรือไม่