สิทธิพิเศษในการเข้าถึงไฟล์และไดเรกทอรีนั้นขึ้นอยู่กับความสามารถไม่ใช่เพียงแค่ว่าเป็นroot
หรือไม่ ในทางปฏิบัติroot
มักจะมีความสามารถที่เป็นไปได้ทั้งหมด แต่มีบางสถานการณ์ที่ทุกคนอาจถูกดร็อปหรือบางคนมอบให้กับผู้ใช้คนอื่น ๆ (กระบวนการของพวกเขา)
โดยสังเขปคุณได้อธิบายวิธีการตรวจสอบการควบคุมการเข้าถึงการทำงานของกระบวนการพิเศษ นี่คือความสามารถที่แตกต่างกันจริง ๆ มีผลกระทบต่อมันอย่างไร:
ความสามารถCAP_DAC_OVERRIDE
หลักที่นี่คือกระบวนการที่สามารถ "ข้ามไฟล์อ่านเขียนและดำเนินการตรวจสอบสิทธิ์" ซึ่งรวมถึงการอ่านและการเขียนไฟล์ใด ๆ รวมถึงการอ่านการเขียนและการเข้าถึงไดเรกทอรี
ไม่ได้ใช้กับไฟล์ที่ไม่ได้ทำเครื่องหมายว่าสามารถเรียกใช้งานได้ ความคิดเห็นในgeneric_permission
( fs/namei.c
) ก่อนที่จะตรวจสอบการเข้าถึงสำหรับแฟ้มกล่าวว่า
การอ่าน / เขียน DACs นั้นสามารถ overridable ได้เสมอ DAC ที่ทำงานได้นั้นสามารถ overridable ได้เมื่อมีชุดบิตอย่างน้อยหนึ่งชุด
และรหัสจะตรวจสอบว่ามีการx
ตั้งค่าอย่างน้อยหนึ่งบิตหากคุณพยายามเรียกใช้ไฟล์ ฉันสงสัยว่าเป็นเพียงคุณสมบัติอำนวยความสะดวกเพื่อป้องกันการเรียกใช้ไฟล์ข้อมูลแบบสุ่มโดยไม่ตั้งใจและได้รับข้อผิดพลาดหรือผลลัพธ์แปลก ๆ
อย่างไรก็ตามหากคุณสามารถแทนที่การอนุญาตคุณสามารถทำสำเนาที่ปฏิบัติการได้และเรียกใช้มัน (แม้ว่ามันอาจสร้างความแตกต่างในทางทฤษฎีสำหรับไฟล์ setuid ของกระบวนการก็สามารถเอาชนะการอนุญาตของไฟล์ ( CAP_DAC_OVERRIDE
) แต่ไม่มีความสามารถอื่น ๆ ที่เกี่ยวข้อง ( CAP_FSETID
/ CAP_FOWNER
/ CAP_SETUID
) แต่การCAP_DAC_OVERRIDE
อนุญาตให้แก้ไข/etc/shadow
และอะไรทำนองนั้น เพื่อให้มีสิทธิ์เข้าถึงแบบเต็มเท่านั้น)
นอกจากนี้ยังมีCAP_DAC_READ_SEARCH
ความสามารถที่ช่วยให้สามารถอ่านไฟล์ใด ๆ และเข้าถึงไดเรกทอรีใด ๆ แต่ไม่สามารถดำเนินการหรือเขียนไปยังพวกเขา; และCAP_FOWNER
อนุญาตให้กระบวนการทำสิ่งต่าง ๆ ที่มักจะสงวนไว้สำหรับเจ้าของไฟล์เท่านั้นเช่นการเปลี่ยนบิตสิทธิ์และกลุ่มไฟล์
การแทนที่บิตเหนียวในไดเรกทอรีจะกล่าวถึงเฉพาะภายใต้CAP_FOWNER
ดังนั้นดูเหมือนว่าCAP_DAC_OVERRIDE
จะไม่เพียงพอที่จะเพิกเฉย (มันจะให้สิทธิ์คุณเขียน แต่โดยปกติแล้วจะอยู่ในไดเรกทอรีเหนียวที่คุณมีอยู่แล้วและ+t
จำกัด ไว้)
(ฉันคิดว่าอุปกรณ์พิเศษนับเป็น "ไฟล์" ที่นี่อย่างน้อยgeneric_permission()
มีเพียงการตรวจสอบประเภทของไดเรกทอรี แต่ฉันไม่ได้ตรวจสอบนอกเหนือจากนั้น)
แน่นอนว่ายังมีสถานการณ์ที่แม้ความสามารถจะไม่ช่วยให้คุณแก้ไขไฟล์ได้:
- ไฟล์บางไฟล์ใน
/proc
และ/sys
เนื่องจากไฟล์เหล่านี้ไม่ใช่ไฟล์จริง
- SELinux และโมดูลความปลอดภัยอื่น ๆ ที่อาจ จำกัด การรูท
chattr
เปลี่ยนไม่ได้+i
และผนวกเฉพาะ+a
ธงบน ext2 / ext3 / ext4 ซึ่งทั้งคู่หยุดรากแม้และป้องกันการเปลี่ยนชื่อไฟล์ ฯลฯ
- ระบบไฟล์เครือข่ายที่เซิร์ฟเวอร์สามารถควบคุมการเข้าถึงของตัวเองเช่น
root_squash
ใน NFS แมปรากกับใคร
- FUSE ซึ่งฉันคิดว่าสามารถทำได้ทุกอย่าง
- การเมาท์แบบอ่านอย่างเดียว
- อุปกรณ์แบบอ่านอย่างเดียว
capabilities(7)
หน้าคน - พิจารณายื่นรายงานข้อผิดพลาด!