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?


42

Giả sử người dùng có Directory1 và nó chứa File1 File2 CantBeDelattedFile Làm thế nào để người dùng không bao giờ được phép xóa CantBeDelattedFile ?

Nếu tôi thay đổi quyền sở hữu của 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 của họ . 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.

Câu trả lời:


40

(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 nhà của họ

Đ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 Directory1và 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ờ, usersẽ không thể xóa tệp này do bit dính¹. Các uservẫn có thể thêm / gỡ bỏ các file của mình trong Directory1. Nhưng lưu ý rằng họ sẽ không thể xóa Directory1vì nó sẽ không bao giờ bị xóa.

-
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ư /tmpquyền của ai là 1777= rwxrwxrwt.


Tôi cũng không thích, nhưng người dùng là người mới trong thế giới Linux. NẾU họ xóa một launcher một cách tình cờ, họ bắt đầu spam bộ phận hỗ trợ kỹ thuật của chúng tôi :)
bakytn

Cảm ơn nó hoạt động! Không chắc chắn tôi sẽ tiến hành như thế nào. Với chattr hoặc bằng cách này. Nếu làm theo cách của bạn. Tôi vẫn có thể xóa Directory như một root. Với giải pháp trên (chattr), ngay cả root cũng không thể xóa thư mục.
bakytn

@bakytn: đây chỉ là một biện pháp phòng ngừa hoặc bạn đã thực sự nhận được cuộc gọi hỗ trợ? Bởi vì hầu hết những người mới có thể sẽ quá sợ hãi để làm hỏng các tệp mà họ không biết.
Nói dối Ryan

@Lie Ryan chắc chắn 100% rằng họ sẽ gọi hỗ trợ. Nhưng vâng, hiện tại nó chỉ là một biện pháp phòng ngừa.
bakytn

Sớm muộn gì các bánh xe huấn luyện cũng phải tắt ... và nếu họ không học lái xe đạp thì tai nạn sẽ là điều đáng chú ý. Tôi đồng ý với câu trả lời, có lẽ đã bổ sung trợ giúp trực tuyến và thư rác đóng hộp "Nếu bạn vô tình xóa ThisDesktopFile, trước tiên hãy đi đến bức tường gần nhất và đập đầu thật mạnh 3 lần (vì may mắn), sau đó làm cp /here/is/the/master/ThisDesktopFile $HOME. : BOfH "
vonbrand

63

Làm cho tập tin bất biến với ithuộc tính.

chattr +i file.desktop

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


8
Tôi thêm ghi chú này vì tôi không thể suy ra nó từ trang man đã đề cập: chattrchỉ hoạt động trên các hệ thống tập tin ext2 / ext3 / ext4.
manatwork

Điều này thật tuyệt! Nó đã làm việc! Cảm ơn ngài! Giải pháp tao nhã, nhưng một hạn chế. Ngay cả root cũng không thể xóa các tập tin đó mà không làm cho nó biến đổi được. Nhưng điều này thực sự là mát mẻ. Không chắc chắn câu trả lời nào được chấp nhận. Được chấp nhận theo cách chung chung hơn nhưng nhanh hơn
bakytn

@manatwork nó cũng hoạt động trên XFS ít nhất, tôi đoán rằng một số hệ thống tập tin khác cũng hỗ trợ các thuộc tính này.
Ruslan

Để 'hoàn tác' lệnh này, chỉ cần thực hiệnchattr -i file.desktop
GreenRaccoon23

1
Tôi vừa thử nghiệm điều này trên zfs trên linux và nó đã hoạt động. Tôi muốn ngăn chặn việc xóa một tập tin được sử dụng để hướng dẫn chương trình sao lưu baculabỏ qua thư mục.
drescherjm

2

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-toolslà 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ế.


0

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.

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.