Có thể tạo một tệp có toàn quyền cho mọi người nhưng không thể xóa?


15

Không sử dụng sudo, tốt nhất là?


2
Chúa ơi, gốc rễ, có gì khác biệt? ars.userfriendly.org/cartoons/?id=19981111 Như một vấn đề thực tế, một tập tin thậm chí root không thể xóa sau đó sẽ là một tác giả phần mềm độc hại mơ ước.
Dan Neely

Tôi đồng ý định dạng @DanNeely Plus cũng là một hình thức xóa tệp;)
Rinzwind

Câu trả lời:


3

Thử:

chattr +i filename

Mặc dù vậy, làm điều này sẽ làm cho tập tin không thể phục hồi được ngay cả bởi rootngười dùng - sử dụng một cách thận trọng.


5
khi làm touch test && chattr +i testnó ném một lỗi; chattr: Operation not permitted while setting flags on test. Bạn cần sudocho việc này. Bên cạnh đó: vẫn có thể xóa tệp: sudo chattr -i test && rm testhoạt động.
Rinzwind

23

Không, điều này là không thể. Người dùng bình thường không thể xóa một tập tin: chắc chắn.

  1. Bạn sẽ cần sudo ngăn người dùng xóa các tập tin. Quản trị viên của bạn sẽ - luôn có thể xóa một tập tin.

  2. sudo chattr +i testcó thể ngăn chặn xóa nhưng không yêu cầu sudo. Một đơn giản sudo chattr -i testlàm cho nó có thể loại bỏ các tập tin. Không người dùng nào khác ngoài quản trị viên có thể sử dụngchattr .

Và ... chỉ cần khởi động lại và chuyển sang chế độ cứu hộ sẽ cho phép người đó có thể xóa tệp đó. Sẽ là một rủi ro bảo mật nếu có một phương pháp để không bao giờ có thể xóa một tập tin.


8

Hơi thô thiển, nhưng điều này rất gần - nếu bạn xóa quyền truy cập ghi trên thư mục, các tệp bên trong nó không thể bị xóa. Và nó không yêu cầu sudonếu bạn sở hữu nó:

=^_^= izkata@izein:~$ mkdir test
=^_^= izkata@izein:~$ touch test/delme
=^_^= izkata@izein:~$ chmod a-w test
=^_^= izkata@izein:~$ echo 'Hello' > test/delme 
=^_^= izkata@izein:~$ cat test/delme 
Hello
=^_^= izkata@izein:~$ rm test/delme 
rm: cannot remove `test/delme': Permission denied

Vì vậy, bạn có thể thiết lập quyền trên chính tệp theo cách bạn muốn.

Ngoài ra, như @Rinzwind đã nêu, chắc chắn có nhiều cách xung quanh nó.


Điều này trông giống như chính xác những gì OP muốn. (Mặc dù tại sao họ muốn nó, tôi không chắc chắn.) Người dùng có thể đọc, thay đổi và chạy các tệp, nhưng không thể hủy liên kết (xóa) chúng.
Eliah Kagan

8

Để xóa một tập tin, bạn cần có quyền ghi vào tất cả các thư mục mà tập tin được liên kết đến. Để hủy liên kết nó khỏi một thư mục, bạn cần có quyền ghi vào thư mục đó.

Vì vậy, miễn là bạn cấp quyền ghi (hoặc thậm chí quyền sở hữu) cho tệp nhưng không cho thư mục hoặc thư mục mà tệp được liên kết đến, tệp đó không thể bị xóa.

Cách tốt nhất để đạt được nó là liên kết tệp đó với một thư mục được sở hữu bởi root và không ai có thể ghi được. Bạn có thể làm cho nó thuộc sở hữu của bạn thay vào đó có nghĩa là cả bạn và root có thể xóa nó.

Điều đó vẫn sẽ cho phép người dùng khác liên kết tệp đó với các thư mục khác và hủy liên kết tệp từ đó sau đó, nhưng họ vẫn không thể xóa tệp vì họ có thể hủy liên kết tệp khỏi thư mục của riêng bạn.

Lưu ý rằng để hoạt động đầy đủ, quyền kiểm soát bằng văn bản của mọi thành phần đường dẫn đến tệp sẽ phải được kiểm soát. Bởi vì, ví dụ, nếu tập tin là /a/b/the-filevà bạn /a/bkhông thể ghi được bởi bất kỳ ai nhưng mọi người đều có quyền truy cập bằng văn bản /a, sau đó họ có thể đổi tên /a/bthành một thứ khác và tạo lại của riêng họ /a/bvà tạo riêng của họ /a/b/the-fileở đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.