it-mot-dan-vi.com

Có cách nào để ngăn chặn việc xóa một số tập tin khỏi thư mục do người dùng sở hữu không?

Giả sử người dùng có Directory1 và nó chứa File1 File2 CantBeDelattedFile Cách thực hiện để người dùng sẽ không bao giờ được phép xóa CantBeDelattedFile ?

Nếu tôi thay đổi quyền sở hữu Directory1 và xóa quyền ghi, người dùng sẽ không thể xóa bất kỳ tệp nào. Họ cũng sẽ không thể thêm các tập tin mới, v.v.

Tôi chỉ muốn có thể thiết lập một số tệp sẽ không bao giờ bị xóa.

Mô tả cụ thể hơn.

Tôi đang tạo hồ sơ người dùng. Tôi đang tạo tập tin launcher ứng dụng trong Desktop. Vì vậy, tôi muốn đặt một số tệp trình khởi chạy (.desktop) và làm cho chúng để người dùng chỉ có thể khởi chạy chúng và họ không thể đổi tên cũng không xóa, chỉ cần khởi chạy.

Hiện tại nếu người dùng sở hữu thư mục chứa bất kỳ tập tin. Anh có thể xóa.

Nếu không có cách chung cho tất cả * nix, thì đó là Linux và ext4 FS.

44
bakytn

(Tôi không thích xâm nhập nhà của người dùng, tôi nghĩ họ nên được phép làm bất cứ điều gì họ muốn làm với họ về nhà nhưng dù sao thì Lít)

Điều này sẽ làm việc trên linux (ít nhất). Tôi giả sử user đã là thành viên của nhóm user. Một giải pháp là thay đổi quyền sở hữu của Directory1 và thiết lập bit dính trên thư mục:

chown root:user Directory1
chmod 1775 Directory1

Sau đó sử dụng:

chown root Directory1/CantBeDeletedFile

Bây giờ, user sẽ không thể xóa tệp này do bit dính¹. user vẫn có thể thêm/xóa các tệp của riêng họ trong Directory1. Nhưng lưu ý rằng họ sẽ không thể xóa Directory1 bởi vì nó sẽ không bao giờ được làm trống.

-
1. Khi bit dính được bật trên một thư mục, người dùng (không phải chủ sở hữu) chỉ có thể xóa các tệp của riêng họ trong một thư mục. Điều này được sử dụng trên các thư mục như /tmp có quyền là 1777 = rwxrwxrwt.

42
Stéphane Gimenez

Làm cho tệp không thay đổi với thuộc tính i.

chattr +i file.desktop

xem man chattr để biết thêm thông tin.

64
Keith

Tôi không nghĩ có một cách để ngăn chặn việc xóa một tệp riêng lẻ với quyền của tệp Unix, nhưng tôi có thể nghĩ đến một cách giải quyết: viết một daemon thay thế nó khi nó bị xóa. inotify-tools là hoàn hảo cho loại điều này nếu bạn đang ở trên Linux.

Có một số cách bạn có thể thay thế mục đã xóa: sao chép một mục mới tại chỗ hoặc giữ tệp thực sự ở nơi an toàn và chỉ cần sao chép một liên kết vào thư mục của người dùng. Đối với liên kết, bạn có thể sử dụng liên kết tượng trưng hoặc liên kết cứng. Tôi sẽ bắt đầu với một liên kết tượng trưng, ​​nhưng một số (rất ít) chương trình không xử lý chính xác các liên kết tượng trưng. Nếu bạn thấy rằng người dùng gặp một chương trình như thế này, hãy sử dụng một liên kết cứng thay thế.

2
Shawn J. Goff

Một đơn giản

chmod -i filename

sẽ "bảo vệ" tập tin đó khỏi bị xóa.

rm filename
rm: remove write-protected regular file 'filename'?

Bạn vẫn có thể xóa nó, nhưng ít nhất bạn phải chắc chắn đủ về những gì bạn đang làm.

0
fiatjaf