Câu trả lời:
Từ người dùng root kiểm tra thuộc tính của tập tin
# lsattr
nếu bạn nhận thấy i
(không thay đổi) hoặc a
(chỉ bổ sung), hãy xóa các thuộc tính đó:
# man chattr
# chattr -i [filename]
# chattr -a [filename]
Lý do phổ biến nhất để rm
phàn nàn rằng bạn không có quyền xóa tệp, là các quyền trên thư mục cấm bạn xóa tệp. Để xóa một tập tin, bạn cần có quyền ghi trên thư mục. Các quyền trên tệp không liên quan ( rm
không có -f
lời nhắc xác nhận trước khi xóa tệp chỉ đọc, nhưng đó chỉ là xác nhận, không giới hạn). Trên một số biến thể Unix như OSX (nhưng không phải Linux), ACL trên một tệp có thể ngăn chặn việc xóa nó; ls -l
sẽ hiển thị @
ở cuối trường cấp phép nếu có mục ACL trên tệp.
Truy cập như root bỏ qua quyền, vì vậy root có thể xóa các tập tin ngay cả trong một thư mục chỉ đọc.
Đầu ra từ ls -l
hiển thị .
ở cuối cột cho phép. Điều này chỉ ra rằng tệp có bối cảnh bảo mật SELinux. Không giống như các quyền cơ bản và ACL, bối cảnh bảo mật SELinux trên một tệp có thể kiểm soát ai được phép xóa nó. Hơn nữa, Selinux không thể luôn luôn bị bỏ qua bởi root (có thể có một quy trình chạy dưới dạng ID người dùng 0 nhưng với ít quyền như nhà thiết kế chính sách của Selinux đã chọn). Để xem bối cảnh SELinux cho phép bạn làm gì, hãy chạy ls -lZ . exam_a
.
Một điều khác có thể ngăn chặn một tập tin bị xóa là nếu nó hoặc thư mục chứa nó có thuộc tính Linux chỉ bổ sung hoặc bất biến . Chạy lsattr -d . exam_a
để xem các thuộc tính Linux. Nếu thuộc tính a
hoặc i
là bật, bạn sẽ cần xóa nó ( chattr -a -i . exam_a
) để xóa tệp; chỉ root mới có thể làm điều đó. Root không thể bỏ qua các thuộc tính này để xóa một tập tin, các thuộc tính phải được tắt trước tiên.
Tuy nhiên, một điều nữa ngăn tập tin bị xóa là nếu hệ thống tập tin được gắn ở chế độ chỉ đọc, nhưng bạn sẽ nhận được một thông báo lỗi khác trong trường hợp đó.
ls -la
, để chúng tôi có thể thấy các quyền trên.
(thư mục).