Làm thế nào để ngăn người dùng xóa một thư mục?


9

Tôi đã thử "chattr + i DIRNAME", thật tuyệt, nhưng tôi không thể tạo tệp trong DIR sau chattr. Còn gì nữa để ngăn người dùng xóa một Thư mục?

root@HOST ~] mkdir test
[root@HOST ~] chattr +i test
[root@HOST ~] cd test
[root@HOST ~/test] touch sth
touch: cannot touch `sth': Permission denied
[root@HOST ~/test] cd ..
[root@HOST ~] chattr -i test
[root@HOST ~] cd test
[root@HOST ~/test] touch sth
[root@HOST ~/test] 

CẬP NHẬT: chỉ xóa thư mục là quan trọng, vì vậy tôi vẫn cần xóa các tệp trong đó


Hãy xem /tmp/var/tmp. Mặc dù mọi người dùng đều có thể tạo tệp ở đó, anh ấy / cô ấy chỉ có thể xóa các tệp / thư mục của riêng mình chứ không thể xóa thư mục của nó.
Nils

Câu trả lời:


3

Vì vậy, có gì sai với một chown / chmod đơn giản?:

cd /tmp
mkdir question
sudo chown root:root question
[sudo] password for user: 
chmod 777 ./question
touch sth
rm sth
cd ..
rm question -rf
rm: cannot remove `question': Operation not permitted

OK, để tôi nói cho bạn biết điều gì sai với điều này: mọi người dùng đều có quyền truy cập vào mọi tệp trong questionthư mục do các 777quyền. Nó là tốt hơn để

  • tạo một nhóm mới groupadd question
  • mkdir question
  • chown root:question ./question
  • chmod 770 ./question
  • thêm người dùng phải có quyền truy cập vào các tệp vào nhóm mới: usermod -G group user

Thủ thuật quan trọng ở đây là thư mục có chủ sở hữu khác với bất kỳ người dùng nào sẽ cố gắng xóa nó.


2
Nó cũng phụ thuộc vào vị trí của thư mục này. Nếu ai đó trong nhóm câu hỏi có quyền rwx trên thư mục chứa thư mục câu hỏi, nó sẽ có thể xóa nó.
Laurentiu Roescu

Thêm một phần bổ sung sudo chmod o+t ..để đặt tcờ trên thư mục cha. Các tlá cờ sẽ không cho phép loại bỏ một tập tin mà không thuộc sở hữu của người dùng. tthường được sử dụng /tmpđể làm chính xác điều đó. UserA không thể xóa các tập tin thuộc sở hữu của UserB.
jippie

Hoặc một lần nữa chỉ cần đặt quyền sở hữu chính xác một bit quyền trên thư mục.
jippie

Nó không hoạt động trong các container docker. :(
Kirby

13

Tạo một tệp ".protected" và làm root

chattr +i .protected

Sau đó, bạn có thể xóa tất cả các tệp ngoại trừ .protectedtrong thư mục này, do đó thư mục không thể bị xóa bởi bất kỳ người dùng nào khác.


Đơn giản và hiệu quả. Câu trả lời chính xác.
Wug

Nó không hoạt động trong các container docker. :(
Kirby

1
Để xóa nó, sử dụng "chattr -i [tên tệp]" để xóa thuộc tính bất biến.
emeraldhieu

3
chattr +a

nên làm công việc. Bạn có thể tạo tập tin bên trong nhưng bạn sẽ không thể xóa chúng.


tôi đã cập nhật câu hỏi
gasko peter
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.