เครื่องมือสำหรับนักพัฒนา · เครื่องคิดเลข Chmod
chmod หลักที่สี่: setuid, setgid และ Sticky bit ทำงานอย่างไร
· มันทำงานอย่างไร
chmod ยูนิกซ์ นักพัฒนาเวิร์กโฟลว์
โหมดเช่น 4755 และ 2775 มีตัวเลขนำหน้าที่จะเปลี่ยนว่าใครรันโปรแกรมหรือใครเป็นเจ้าของไฟล์ใหม่ โพสต์นี้จะอธิบายสามบิตพิเศษและวิธีที่พวกมันปรากฏใน ls -l
s ใน drwxrwsr-x - ไดเร็กทอรีโปรเจ็กต์ที่แชร์ทำงานแตกต่างออกไป และเอาต์พุต ls มีตัวอักษรที่ไม่ได้อยู่ใน cheatsheet พื้นฐาน
s ใน rwxrwsr-x บันทึกข้อเท็จจริงสองประการในตำแหน่งเดียว: เปิดใช้งาน setgid และเปิดใช้งานการดำเนินการกลุ่มด้วย การใช้งานจะจัดเก็บ setgid เป็นฐานแปด 2000 จากนั้นแทนที่ s สำหรับอักขระที่ดำเนินการกลุ่ม เมื่อเลือกเครื่องหมายประเภทไดเรกทอรี โหมด 2775 จะปรากฏเป็น drwxrwsr-x ในขณะที่ข้อมูลสรุปสี่หลักจะรักษาตัวเลขบิตพิเศษนำหน้าไว้
ผลลัพธ์นั้นเป็นการแปลง ไม่ใช่การสังเกตระบบไฟล์ ตัวเลือกเป้าหมายจะเปลี่ยนวิธีที่เพจอธิบายบิต แต่จะไม่เปิดไดเร็กทอรีหรือตรวจสอบความเป็นเจ้าของ สำหรับไดเร็กทอรี คำอธิบายที่นำไปใช้ระบุว่าไฟล์ที่สร้างขึ้นใหม่สืบทอดกลุ่มของไดเร็กทอรี ไม่ว่าระบบจัดเก็บข้อมูลเฉพาะจะใช้พฤติกรรมนั้น หรือมีนโยบายอื่นที่ส่งผลต่อการเข้าถึง จำเป็นต้องมีหลักฐานนอกเหนือจากเครื่องคิดเลขนี้
หลักที่สี่และตัวอักษร — 4, 2 และ 1 เป็นคำนำหน้าในโหมดที่คุ้นเคย แสดงเป็น s และ t ในตำแหน่งดำเนินการ ตัวพิมพ์ใหญ่เมื่อบิตดำเนินการด้านล่างปิดอยู่
เลขฐานแปดนำหน้าจะรวมมาสก์อิสระสามตัวเข้าด้วยกัน: setuid คือ 4000, setgid คือ 2000 และ Sticky คือ 1000 ตัวอักษรของพวกเขาครอบครองตำแหน่งการดำเนินการที่มีอยู่แทนที่จะเพิ่มอักขระลงในจอแสดงผลเก้าตำแหน่ง Setuid ใช้ตำแหน่งเจ้าของ setgid ตำแหน่งกลุ่ม และปักหมุดตำแหน่งอื่น เมทริกซ์เปิดเผยทั้งสามแยกจากการอ่าน เขียน และดำเนินการทั่วไป
Case เผยบิตดำเนินการที่ซ่อนอยู่ โหมด 4755 แสดงผล rwsr-xr-x เนื่องจากเจ้าของดำเนินการร่วมกับ setuid 4644 แสดงผล rwSr--r-- เพราะไม่ได้เป็นเช่นนั้น โปรแกรมแยกวิเคราะห์จะอ่านทั้งสองรูปแบบกลับเข้าไปในบิตพิเศษและดำเนินการที่สอดคล้องกัน กฎล่างกับบนเดียวกันจะสร้าง s หรือ S สำหรับ setgid และ t หรือ T สำหรับ Sticky โดยคงค่าผสมทั้งหมดไว้ระหว่างการเดินทางไปกลับ
setuid บนไฟล์เรียกทำงาน — วิธี /usr/bin/passwd ทำงานด้วยสิทธิพิเศษของเจ้าของไฟล์ และเหตุใด Linux จึงเพิกเฉยต่อ setuid ในสคริปต์ที่ตีความ
สำหรับไฟล์ปกติ คำอธิบาย setuid ที่นำไปใช้จะขึ้นอยู่กับการดำเนินการของเจ้าของ เมื่อมีบิตทั้งสอง เพจแจ้งว่าการเรียกใช้ไฟล์จะใช้ข้อมูลประจำตัวของเจ้าของไฟล์มากกว่าข้อมูลของผู้เรียก เมื่อมี setuid โดยไม่มีการดำเนินการโดยเจ้าของ จอแสดงผลจะใช้ตัวพิมพ์ใหญ่ S และอธิบายว่าไม่มีอะไรให้รัน นี่คือขอบเขตที่ได้รับการแก้ไขและได้รับการสนับสนุนจากแหล่งที่มาของส่วนนี้
เครื่องคิดเลขไม่ได้ระบุปฏิบัติการเฉพาะ เรียกใช้งาน หรือตรวจสอบวิธีที่แพลตฟอร์มปฏิบัติต่อสคริปต์ หลักฐานของมันคือโหมดที่ให้มาและตัวเลือกเป้าหมาย โหมด 4755 สามารถแยกย่อยเป็น setuid บวก rwxr-xr-x และการแสดงตัวอย่างการกำหนดจะต่อท้าย u+s หลังส่วนคำสั่งทั่วไป ที่ยืนยันการเรนเดอร์และคำอธิบายเท่านั้น ความเหมาะสมของโปรแกรมและการดำเนินการจริงยังคงเป็นคำถามภายนอก
การเรนเดอร์ setuid และคำอธิบายสำหรับไฟล์ปกติ
Setgid บนไดเร็กทอรีจะแสดงอย่างเป็นอิสระจากการอนุญาตของกลุ่มทั่วไป โหมด 2775 รวมมาสก์ 2000 กับเจ้าของและกลุ่ม 7 และ 5 อื่นๆ จอแสดงผล rwxrwsr-x ช่วยให้กลุ่มอ่าน เขียน และดำเนินการในขณะที่แทนที่ x ที่มองเห็นได้ด้วย s คำอธิบายไดเร็กทอรีเชื่อมโยงบิตพิเศษกับการสืบทอดกลุ่มของไดเร็กทอรีสำหรับไฟล์ที่สร้างขึ้นใหม่
การลบ group Execution ในขณะที่คง setgid ไว้จะเปลี่ยนตัวอักษรตำแหน่งกลุ่มเป็นตัวพิมพ์ใหญ่ S คำเตือนที่มองเห็นได้จะตามมาโดยตรงจากตัวเรนเดอร์ โดยไม่คำนึงถึงถ้อยคำเป้าหมาย หน้าเว็บสามารถเปรียบเทียบค่าที่เสร็จสมบูรณ์เหล่านั้นและแสดงว่าช่องทำเครื่องหมายใดเปลี่ยนแปลงไป แต่ไม่สามารถตรวจสอบไดเร็กทอรีที่แชร์ กลุ่มปัจจุบัน หรือข้อมูลประจำตัวที่สร้างรายการได้ ข้อตกลงระหว่างความคิดเห็นถือเป็นหลักฐานทางคณิตศาสตร์ ไม่ใช่การอนุมัติการปฏิบัติงาน
บิตเหนียวบนไดเร็กทอรี — การลบแบบจำกัดใน /tmp และเหตุใด 1777 จึงไม่เหมือนกับ 777
Sticky ครอบครองตำแหน่งที่ดำเนินการอื่นและมีส่วนช่วยในฐานแปด 1000 สำหรับโหมดไดเร็กทอรี 1777 การอนุญาตทั่วไปทั้งหมดยังคงเปิดใช้งานอยู่ และอักขระสัญลักษณ์สุดท้ายจะกลายเป็น t คำอธิบายไดเร็กทอรีที่นำไปใช้จะเพิ่มข้อจำกัดการลบและการเปลี่ยนชื่อ ในขณะที่คำอธิบาย 777 เตือนเกี่ยวกับไดเร็กทอรีที่เขียนได้โดยไม่เหนียวเหนอะหนะ ดังนั้นตัวแปลงทำให้มองเห็นความแตกต่างหนึ่งบิตโดยไม่ต้องเปลี่ยน rwx ที่เป็นสามเท่า
หากมี Sticky อยู่โดยไม่มีการดำเนินการอื่น อักขระสุดท้ายจะเป็นตัวพิมพ์ใหญ่ T แทน parser และ renderer จะรักษาความแตกต่างนั้นไว้ทั้งสองทิศทาง เพจไม่ได้ตรวจสอบไดเร็กทอรีที่ใช้ร่วมกันจริง เจ้าของรายการ หรือการพยายามลบ ข้อสรุปที่เชื่อถือได้นั้นแคบกว่า: จำนวนเต็มที่ให้มามี Sticky ส่วนร่วมในการดำเนินการสามารถมองเห็นได้ผ่านตัวพิมพ์ และเลือกข้อความอธิบายเชิงไดเร็กทอรี
ตัวอย่างการทำงาน: การสร้าง 2775 สำหรับไดเรกทอรีที่ใช้ร่วมกัน - ได้รับตัวเลขและสัญลักษณ์ที่เทียบเท่า chmod g+s,a+rwx,o-w
สร้าง 2775 เป็นองค์ประกอบสี่ส่วนที่มองเห็นได้: หลักพิเศษ 2 สำหรับ setgid, หลักเจ้าของ 7 สำหรับ rwx, หลักกลุ่ม 7 สำหรับ rwx และหลักอื่นๆ 5 สำหรับ r-x การป้อนค่าที่เสร็จสมบูรณ์จะสร้าง rwxrwsr-x เมทริกซ์จะเลือก setgid แยกกัน ในขณะที่สรุปชื่อเจ้าของ กลุ่ม และการอนุญาตอื่น ๆ ข้างบิตพิเศษนั้น
รายการการมอบหมายที่สร้างขึ้นคือ u=rwx,g=rwx,o=rx,g+s สิ่งนี้แตกต่างจากการแสดงอักขระเก้าตัว แต่แสดงถึงค่าสิบสองบิตเดียวกัน การเลือกไดเร็กทอรีจะเปลี่ยนคำอธิบายไปใช้ถ้อยคำที่สืบทอดกลุ่ม การเลือกไฟล์จะเปลี่ยนถ้อยคำโดยไม่เปลี่ยน 2775 เครื่องคำนวณจะไม่ตรวจสอบกลุ่มเป้าหมายหรือสร้างไฟล์ ดังนั้นตัวอย่างจึงยังคงเป็นแบบจำลองแทนที่จะเป็นข้อกำหนดในการใช้งาน
ตัวอย่างการทำงาน: การสร้างและการอ่าน 2775 สำหรับโมเดลไดเรกทอรีที่ใช้ร่วมกัน
ลักษณะการทำงาน ความสามารถ และอรรถศาสตร์ของแพลตฟอร์มเพิ่มเติมไม่ได้รับการสร้างแบบจำลอง เพจนี้ไม่มีอินพุตเมานท์ ชุดความสามารถ เคียวรีเคอร์เนล หรือโพรบระบบไฟล์ มันสามารถแสดงถึง setuid, setgid และ Sticky และสามารถเปลี่ยนคำอธิบายระหว่างไฟล์และไดเร็กทอรีปกติได้ ไม่สามารถระบุได้ว่ากฎภายนอกทำให้เป็นกลาง ขยาย หรือตีความบิตเหล่านั้นแตกต่างออกไปในเป้าหมายจริงหรือไม่
แม้แต่ถ้อยคำที่มุมของแหล่งที่มาก็ไม่ควรมีลักษณะทั่วไปเกินกว่าอินเทอร์เฟซ โหมดบิตพิเศษที่ถูกต้องจะพิสูจน์ว่า parser, renderer, matrix, summary และการกำหนดที่สร้างขึ้นเห็นด้วย ไม่ได้พิสูจน์การดำเนินการ การสืบทอด หรือพฤติกรรมการลบที่เกิดขึ้น กันการอ้างสิทธิ์นโยบายที่ไม่ได้รับการสนับสนุนออกจากการวินิจฉัย และถือว่าคำสั่งที่คัดลอกเป็นข้อความเฉื่อยจนกว่าสภาพแวดล้อมที่ได้รับการตรวจสอบแยกกันจะให้บริบทที่ขาดหายไป
นโยบายเมานต์ ความสามารถ และซีแมนทิกส์มุมที่ยังไม่ได้ใช้งานยังคงอยู่ภายนอก
Takeaway ที่นำมาใช้คือการเดินทางไปกลับโดยมีความหมายตามตำแหน่ง Setuid แมปกับตำแหน่งดำเนินการของเจ้าของ setgid เพื่อดำเนินการกลุ่ม และเหนียวกับการดำเนินการอื่น ๆ ตัวพิมพ์เล็กหมายถึงบิตดำเนินการที่เกี่ยวข้องเปิดอยู่ ตัวพิมพ์ใหญ่หมายความว่าปิดอยู่ เลขฐานแปดนำหน้าและช่องทำเครื่องหมายเฉพาะจะเก็บข้อมูลเดียวกัน ดังนั้นจึงไม่จำเป็นต้องอนุมานบิตพิเศษจากร้อยแก้วเพียงอย่างเดียว
ทดสอบโหมดพิเศษโดยการเปรียบเทียบการเป็นตัวแทนทั้งหมด สำหรับ 2775 คาดว่า 2 นำหน้า ตำแหน่งกลุ่ม s กล่อง setgid ที่เลือก และการบวก g+s ที่สร้างขึ้น ไม่ตรงกันอาจทำให้เกิดปัญหาการแปลง ข้อตกลงกำหนดโหมดที่สอดคล้องกันเพียงโหมดเดียวเท่านั้น ความเป็นเจ้าของ นโยบายการติดตั้ง ความสามารถ กฎการใช้งาน และผลที่ตามมาของการรัน chmod นั้นอยู่นอกเหนือหลักฐานของเครื่องคิดเลขของเบราว์เซอร์