Trong khi đăng nhập, tôi có thể làm như sau:
mkdir foo
touch foo/bar
chmod 400 foo/bar
chmod 500 foo
Sau đó, tôi có thể mở vim (không phải root
), chỉnh sửa bar
, buộc ghi w!
và tập tin được sửa đổi.
Làm thế nào tôi có thể làm cho hệ điều hành không cho phép bất kỳ sửa đổi tập tin?
CẬP NHẬT 02/03/2017
chmod 500 foo
là một cá trích đỏ: quyền ghi trên thư mục không liên quan gì đến khả năng sửa đổi nội dung của tệp - chỉ có khả năng tạo và xóa tệp.chmod 400 foo/bar
trong thực tế ngăn không cho nội dung của tập tin bị thay đổi. Nhưng , điều đó không ngăn quyền của tệp bị thay đổi - chủ sở hữu tệp luôn có thể thay đổi quyền của tệp (giả sử họ có thể truy cập tệp tức là thực thi quyền trên tất cả các thư mục tổ tiên). Trên thực tế, strace (1) tiết lộ rằng đây là điều mà vim (7.4.576 Debian Jessie) đang làm - vim gọi chmod (2) để tạm thời thêm quyền ghi cho chủ sở hữu tệp, sửa đổi tệp và sau đó gọi chmod ( 2) một lần nữa để loại bỏ quyền viết. Đó là lý do tại sao sử dụngchattr +i
các tác phẩm - chỉ root mới có thể gọichattr -i
. Về mặt lý thuyết, vim (hoặc bất kỳ chương trình nào) có thể làm điều tương tự với chattr giống như với chmod trên một tệp không thay đổi nếu chạy dưới quyền root.
root
?
vim
thực sự là thay đổi các quyền và sau đó đưa nó trở lại.