เหตุใดฉันจึงไม่สามารถลบไฟล์นี้เป็น root ได้


20

ฉันมีการสอบไดเรกทอรีที่มี 2 ไฟล์อยู่ในนั้น ฉันต้องการลบไฟล์ แต่สิทธิ์ถูกปฏิเสธ rm -rfคำสั่งแม้ไม่สามารถลบไฟล์เหล่านี้ ฉันเข้าสู่ระบบในฐานะผู้ใช้รูท

ป้อนคำอธิบายรูปภาพที่นี่


13
(1) โปรดโพสต์ข้อความจากเทอร์มินัลเป็นข้อความหากเป็นไปได้ เป็นการดีที่คัดลอกและวาง หากคุณไม่มีวิธีการจับข้อความยกเว้นการถอดข้อความด้วยตนเองให้ทำเช่นนั้น แต่เปิดเผยว่าคุณกำลังทำอยู่และรวมถึงภาพจับภาพหน้าจอเพื่อให้เราสามารถตรวจสอบการพิมพ์ของคุณอีกครั้ง (2) เมื่อคุณมีคำถามเกี่ยวกับการอนุญาตโปรดทำเสมอls -laเพื่อให้เราสามารถดูการอนุญาต.(ไดเรกทอรี)
G-Man กล่าวว่า 'Reinstate Monica'

คำตอบ:


39

จากผู้ใช้รูทแอ็ตทริบิวต์ของไฟล์

# lsattr 

หากคุณสังเกตเห็นi(ไม่เปลี่ยนรูป) หรือa(ผนวกเท่านั้น) ลบแอตทริบิวต์เหล่านี้:

# man chattr
# chattr -i [filename]
# chattr -a [filename]

1
ว้าวนั่นเป็นเรื่องยาก ขอบคุณที่โพสต์โซลูชั่นนี้ ฉันอยู่ที่ปลายสติปัญญาของฉัน ผมก็ค่อนข้างมั่นใจว่าที่ว่านี้ได้รับการอย่างใดที่เกี่ยวข้องกับการประสานความพร้อมเพรียงกันของฉัน มันถูกทิ้งให้อยู่ในสถานะ 'ไม่ทราบ' (เนื่องจากสาเหตุหลายประการ) และสิ่งนี้หมายความว่าไดเรกทอรีที่ฉันไม่สามารถลบได้ถูกตั้งค่า (พร้อมเพรียง) เพื่อผนวกเท่านั้น (นี่เป็นเรื่องปกติของความพร้อมเพรียง) แต่ฉันไม่รู้ว่าจะดู / รีเซ็ตโหมดที่ผนวกเท่านั้น! คุณเป็นผู้ช่วยชีวิต ฉันหวังว่าโปสเตอร์ดั้งเดิมจะแก้ปัญหาของพวกเขาเช่นกัน
Gwyneth Llewelyn

นี่คือผู้ช่วยชีวิต
Luka

16

สาเหตุที่พบบ่อยที่สุดสำหรับการrmบ่นว่าคุณไม่ได้รับอนุญาตให้ลบไฟล์คือการอนุญาตในไดเรกทอรีห้ามมิให้คุณลบไฟล์ ในการลบไฟล์คุณต้องมีสิทธิ์เขียนในไดเรกทอรี สิทธิ์ในไฟล์นั้นไม่เกี่ยวข้อง ( rmโดยไม่ต้อง-fแจ้งให้ยืนยันก่อนที่จะลบไฟล์แบบอ่านอย่างเดียว แต่เป็นเพียงการยืนยันไม่ใช่ข้อ จำกัด ) ใน Unix บางรุ่นเช่น OSX (แต่ไม่ใช่ Linux), ACLบนไฟล์สามารถป้องกันการลบได้ ls -lจะแสดง@ที่ส่วนท้ายของฟิลด์สิทธิ์หากมีรายการ ACL ในไฟล์

การเข้าถึงในขณะที่รูทผ่านการอนุญาตดังนั้นรูทสามารถลบไฟล์ได้แม้ในไดเรกทอรีอ่านอย่างเดียว

เอาต์พุตจากls -lแสดง.ที่ท้ายคอลัมน์สิทธิ์ สิ่งนี้บ่งชี้ว่าไฟล์นั้นมีบริบทความปลอดภัยของ SELinux ไม่เหมือนกับสิทธิ์พื้นฐานและ ACL บริบทความปลอดภัยของ SELinux ในไฟล์สามารถควบคุมผู้ที่ได้รับอนุญาตให้ลบได้ นอกจากนี้ SELinux ไม่สามารถข้ามผ่านรูตได้เสมอ (เป็นไปได้ที่จะมีกระบวนการที่ทำงานเป็น ID ผู้ใช้ 0 แต่มีสิทธิ์น้อยที่สุดเท่าที่ผู้ออกแบบนโยบาย SELinux เลือก) หากต้องการดูว่าบริบท SELinux ls -lZ . exam_aช่วยให้คุณสามารถทำระยะ

สิ่งที่สามารถป้องกันไฟล์ที่ถูกลบก็คือถ้ามันหรือไดเรกทอรีที่มีก็มีผนวกอย่างเดียวหรือไม่เปลี่ยนรูปแอตทริบิวต์ลินุกซ์ เรียกใช้lsattr -d . exam_aเพื่อดูแอตทริบิวต์ Linux หากเปิดคุณสมบัติaหรือiคุณจะต้องลบมัน ( chattr -a -i . exam_a) เพื่อที่จะลบไฟล์; มีเพียง root เท่านั้นที่ทำได้ รูทไม่สามารถข้ามแอตทริบิวต์เหล่านี้เพื่อลบไฟล์ได้ต้องปิดแอตทริบิวต์ก่อน

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.