Linux - Có cách nào để ngăn chặn / bảo vệ một tập tin khỏi bị xóa ngay cả bằng root không?


89

Tôi có một tệp rất quan trọng mà một ứng dụng tại nơi làm việc của tôi sử dụng, tôi cần đảm bảo rằng nó không bị xóa bất cứ điều gì, làm thế nào tôi có thể làm điều đó?

linux  files 

13
Tạo một bản sao lưu, để bạn có thể khôi phục nó ... Khác với điều đó, chattr +icó thể giúp nhưng cũng sẽ làm cho tệp chỉ đọc (và có thể được ghi đè bằng chattr -i), bạn cũng có thể cố gắng bảo vệ nó bằng SELInux, v.v.
Sven

43
Root có thể tạo ra một quy trình mà thậm chí root không thể giết được không?
Đánh dấu Gabriel

4
@MarkGabriel Vâng. Một quả bom ngã ba. :)
thiệu lại


8
Quản trị viên CTNH có thể đến và gỡ đĩa, xé nó, đốt tàn dư và cho chúng ăn. Hoặc, tốt hơn, một số lập trình viên C (++) có thể gây ra một số quỷ mũi. Bất cứ điều gì quan trọng với bạn, hãy sao lưu nó. Hai lần.
Pavel

Câu trả lời:


133

Có, bạn có thể thay đổi các thuộc tính của tệp thành chỉ đọc.

Lệnh là:

chattr +i filename

Và để vô hiệu hóa nó:

chattr -i filename

Từ man chattr:

Một tệp có ithuộc tính không thể được sửa đổi: nó không thể bị xóa hoặc đổi tên, không có liên kết nào có thể được tạo ra cho tệp này và không có dữ liệu nào có thể được ghi vào tệp. Chỉ có siêu người dùng hoặc một quá trình sở hữu CAP_LINUX_IMMUTABLEkhả năng mới có thể thiết lập hoặc xóa thuộc tính này.


11
Đối với người quan tâm, tương đương bsd làchflags schg
Andrew Domaszek

85
Xin lưu ý rằng người dùng có quyền truy cập root có thể hủy đặt cờ đó và sau đó xóa tệp. Điều đó khó có thể xảy ra do tai nạn nhưng nó không chống lại việc xóa có chủ ý.
Cấp

6
@Grant, không nếu Securelevel được đặt đủ cao. Quá trình khởi động đặt mức bảo mật thành 2 trước khi mạng được bật, do đó, việc đặt lại cờ yêu cầu truy cập máy cục bộ (nhưng điều này có nghĩa là các tệp được sử dụng trong quy trình khởi động trước thời điểm đó cũng cần phải thay đổi).
Simon Richter

16
@Grant Nếu ai đó muốn đưa nó đến mức cực đoan, bạn không thể ngăn chặn phân vùng bị xóa hoặc đĩa được đưa vào lò nung hoặc proton phân rã trong 10 ^ 30 năm ...
Hagen von Eitzen

2
@Itai Ganot người đàn ông tôi ước tôi đã đọc nó 4 ngày trước. Tôi là một câu hỏi trong một kỳ thi tôi đã thực hiện = /
vfbsilva

84

Ghi nó vào đĩa CD. Đặt đĩa CD vào ổ đĩa CD-ROM và truy cập nó từ đó.


15
+1 để suy nghĩ ra khỏi hộp. Và, afaik, nó cũng đã được sử dụng trước đây trong một số trường hợp (ổ đĩa cdrom hộp đen với cd được chuyển đến đích). Dù sao thì cũng có thể không phù hợp nếu ai đó có thể ngắt kết nối ổ đĩa.
Alex Mazzariol

1
KISS tôi yêu nó! +1
MonkeyZeus

2
Tôi nghĩ đó là câu trả lời chính xác cho câu hỏi này. Thay đổi thuộc tính tệp (chattr -i) không thể ngăn chặn các hành động độc hại.
Bruno von Paris

7
Ngày nay, thẻ SD kích thước đầy đủ trong đầu đọc thẻ tích hợp có thể là một giải pháp tốt hơn - tiêu thụ điện năng thấp hơn, truy cập nhanh hơn trong nhiều trường hợp và bền hơn trong sử dụng không ghi.
Chris H

3
@ jpmc26 do đó ổ đĩa CD-ROM. Đó là đọc / chỉ.
Thorbjørn Ravn Andersen

29
  1. Tạo một hình ảnh hệ thống tập tin.
  2. Gắn kết hình ảnh.
  3. Sao chép tập tin vào hình ảnh được gắn kết.
  4. Tháo hình ảnh và hiển thị lại dưới dạng chỉ đọc.
  5. Bây giờ bạn không thể xóa nó.

Thí dụ:

# dd if=/dev/zero of=readonly.img bs=1024 count=1024
# mkfs.ext2 readonly.img
# mkdir readonlyfolder
# mount readonly.img readonlyfolder/
# echo "can't delete this" > readonlyfolder/permanent.txt
# umount readonlyfolder
# mount -o ro readonly.img readonlyfolder
# cat readonlyfolder/permanent.txt 
can't delete this
# rm readonlyfolder/permanent.txt 
rm: cannot remove `readonlyfolder/permanent.txt': Read-only file system

3
mount -o remount,rw readonlyfolder/ && rm readonlyfolder/permanent.txt
Kaz Wolfe

3
Đưa điều này đi xa hơn một chút, bạn có thể sử dụng squashfshoặc cramfsđược nén và chỉ đọc. Nó cần một công cụ đặc biệt để xây dựng hệ thống tập tin.
Zan Lynx

7

Linux có cái gọi là tùy chọn gắn kết , đây là tính năng khá hữu ích và hữu ích để biết :

%  cd $TMP && mkdir usebindmountluke && cd usebindmountluke
%  echo usebindmountluke > preciousfile
%  sudo mount -B preciousfile preciousfile
%  sudo mount -oremount,ro preciousfile
%  echo sowhat > preciousfile
zsh: read-only file system: preciousfile
%  rm preciousfile
rm: cannot remove ‘preciousfile’: Read-only file system

- những gì đang được thực hiện ở đây là tệp gắn kết với chính nó (vâng, bạn có thể làm điều đó trong Linux), sau đó nó được gắn lại ở chế độ R / O. Tất nhiên điều này có thể được thực hiện vào thư mục là tốt.


6

Bạn cũng nên tạo nhiều liên kết cứng đến tập tin. Chúng nên ở những địa điểm khác nhau mà người dùng thông thường không thể truy cập.

Bằng cách này, ngay cả khi họ quản lý để ghi đè bảo vệ chattr của bạn, dữ liệu sẽ vẫn còn và bạn có thể dễ dàng khôi phục nó ở nơi ứng dụng của bạn đang tìm kiếm nó.


11
Liên kết cứng sẽ không bảo vệ nội dung của tập tin.
200_success

Tuy nhiên, họ sẽ cung cấp bảo vệ bổ sung từ XÓA, đó là câu hỏi ban đầu.
thịt nướng

2
@barbiru Nếu tệp không được liên kết với tên mà ứng dụng tìm kiếm tại đó, không có vấn đề gì khi nội dung của tệp tồn tại dưới một số tên khác. Đối với mọi thứ đang tìm kiếm tệp có tên dự kiến, tệp vẫn bị xóa.
một CVn

5

Những người khác đã trả lời câu hỏi của bạn khi bạn hỏi nó. Như @Sven đã đề cập trong một bình luận, giải pháp chung cho câu hỏi "Làm thế nào để tôi chắc chắn rằng mình không bao giờ bị mất tập tin?" là để tạo một bản sao lưu của tập tin. Tạo một bản sao của tập tin và lưu trữ nó ở nhiều nơi. Ngoài ra, nếu tệp cực kỳ quan trọng và công ty của bạn có chính sách sao lưu dữ liệu quan trọng bằng dịch vụ sao lưu, bạn có thể xem xét có bao gồm tệp này trong dịch vụ.


2
Tất nhiên, tập tin đang được sao lưu thường xuyên, tôi chỉ muốn một lớp bảo vệ khác chống lại người dùng đôi khi đang làm việc trên hộp với quyền của người dùng root.

5

Trên Linux các bất biến cờ chỉ được hỗ trợ trên một số loại hệ thống tập tin (hầu hết là những người có nguồn gốc như ext4, xfs, btrfs...)

Trên các hệ thống tệp không được hỗ trợ, một tùy chọn khác là liên kết gắn tệp lên chính nó ở chế độ chỉ đọc. Điều đó phải được thực hiện trong hai bước:

mount --bind file file
mount -o remount,bind,ro file

Điều đó phải được thực hiện tại mỗi lần khởi động, ví dụ thông qua /etc/fstab.


Tôi hy vọng bất kỳ ai umountcó thể lấy lại quyền ghi
whoan

3

Trong một bình luận cho câu trả lời của Kevin , Jerry đề cập:

Tất nhiên, tập tin đang được sao lưu thường xuyên, tôi chỉ muốn một lớp bảo vệ khác chống lại người dùng đôi khi đang làm việc trên hộp với quyền của người dùng root. -

Tôi sẽ giả định rằng bạn không thể thay đổi cách làm này, vì đó là một ý tưởng thực sự, thực sự tồi tệ.

Tất cả các đề xuất về việc sử dụng thiết bị chỉ đọc đều có cùng một vấn đề - nó biến nó thành Pita để bạn thực hiện các thay đổi hợp pháp khi bạn cần. Trong trường hợp ổ đĩa có thể khóa, chẳng hạn như thẻ SD, bạn gặp phải vấn đề đột nhiên bạn dễ bị tổn thương khi mở khóa để thực hiện các thay đổi.

Thay vào đó, điều tôi muốn giới thiệu là thiết lập một máy khác là máy chủ NFS và chia sẻ thư mục với các tệp quan trọng cho (các) máy mà người dùng đã root. Chia sẻ giá treo ở chế độ chỉ đọc, để các máy có người dùng mà bạn không tin tưởng không thể thực hiện bất kỳ sửa đổi nào. Khi bạn cần thay đổi một cách hợp pháp, bạn có thể kết nối với máy chủ NFS và thực hiện các thay đổi của chúng tôi ở đó.

Chúng tôi sử dụng điều này cho máy chủ web của mình, để khai thác thành công vào máy chủ web sẽ không thể chèn hoặc thay đổi bất kỳ tệp nào mà máy chủ sẽ phục vụ hoặc thay đổi cấu hình.

Lưu ý rằng điều này có thể được bỏ qua theo cùng một cách mà tất cả những người liên quan đến điểm gắn kết có thể là:

  • Tạo một bản sao của thư mục được bảo vệ
  • Tháo thư mục
  • Di chuyển bản sao vào vị trí gắn kết hoặc liên kết tượng trưng nếu giá đỡ đó không có đủ không gian.

Tại sao nó là một "ý tưởng thực sự, thực sự tồi tệ" để sao lưu một tập tin quan trọng thường xuyên và cũng nỗ lực để bảo vệ bản gốc chống lại việc xóa ngẫu nhiên? Trong câu hỏi ban đầu của OP và từ nhận xét của OP về câu trả lời bạn đã tham chiếu, rõ ràng mối quan tâm không phải là hoạt động độc hại, mà là hoạt động vô tình / không đủ năng lực.
Craig

1
@Craig: đó là một ý tưởng tồi khi có nhiều người dùng root, đặc biệt là nếu họ không đáng tin cậy để không gây rối với các tệp quan trọng.
Joe H.

À ... tất nhiên rồi. :-) Nhưng đó không phải là mấu chốt của câu hỏi của OP. OP khẳng định rằng có những người dùng có quyền truy cập root cần được bảo vệ chống lại việc vô tình xóa một tệp.
Craig

@Craig: nó có thể không phải là mấu chốt của câu hỏi, nhưng nó mấu chốt của vấn đề (vấn đề XY?) ... nhưng tôi không biết họ đang làm gì với quyền root, vì vậy nếu họ có thể sử dụng setuid và / hoặc đặc quyền sudo hạn chế. Và bạn nên đọc lại câu hỏi, vì tôi không thấy Jerry đề cập rằng anh ta chỉ cố gắng bảo vệ chống lại việc loại bỏ vô ý ("tôi cần chắc chắn rằng nó không xóa bất cứ điều gì"), và anh ta chỉ đưa ra một lần theo dõi rằng tôi xem (mà kích hoạt phản ứng của tôi).
Joe H.


2

Tại sao không tạo ra một hình ảnh ISO 9660, chỉ đọc theo thiết kế?

Gắn hình ảnh ISO và nó sẽ trông giống như một đĩa CD-ROM, nhưng với hiệu suất của ổ cứng và các tệp trên hình ảnh được gắn sẽ an toàn khi xóa như các tệp trên đĩa CD-ROM vật lý.

Ý tưởng ghi tập tin nhạy cảm vào đĩa CD và chạy nó từ đĩa CD-ROM rất thú vị, giả sử rằng việc thiết lập bit bất biến trên tệp không được coi là đủ.

Có những vấn đề tiêu cực tiềm ẩn khi chạy nó khỏi CD vật lý, bao gồm hiệu năng (ổ đĩa CD-ROM chậm hơn nhiều so với ổ cứng hoặc SSD). Có khả năng CD-ROM bị xóa bởi một cá nhân có ý nghĩa tốt và được thay thế bằng một đĩa khác mà họ cần truy cập. Có khả năng một bên độc hại chỉ lấy đĩa ra và ném nó vào lò vi sóng (hoặc thùng rác), do đó "xóa" tệp của bạn. Có sự bất tiện khi phải có ổ đĩa CD-ROM phần cứng chuyên dụng chỉ cho một tệp đó và các yếu tố khác.

Nhưng OP đã nói rõ rằng mục đích chính là bảo vệ chống xóa vô tình, không chống lại các hành vi độc hại và (các) tệp được đề cập được sao lưu và có thể phục hồi nếu xảy ra tai nạn, nhưng rất mong muốn rằng tệp không bao giờ được gửi vô tình bị xóa.

Có vẻ như việc chạy tệp từ hình ảnh ISO được gắn sẽ đáp ứng yêu cầu.


1
Root vẫn có thể xóa một tập tin bằng cách thao tác trực tiếp với hình ảnh. Nó chỉ là một tập tin bình thường sẽ được gắn kết.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen Làm sao vậy? ISO 9660 theo thiết kế là bất biến. Bên thực hiện thay đổi đó sẽ phải xóa và thay thế toàn bộ tệp ISO. Không phải là họ không thể làm điều đó. Nhưng họ không thể vào và phẫu thuật xóa một tập tin mà không có chuyên môn to lớn, thậm chí sau đó. Sẽ dễ dàng hơn nhiều nếu lấy CD-ROM vật lý khỏi ổ đĩa và ném nó vào thùng rác. ;-)
Craig

Không cần phải tinh vi - chỉ cần ghi đè lên tệp hình ảnh bằng số không.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen Tôi sẽ thừa nhận điểm đó đủ dễ dàng. Thông báo trước là nó sẽ yêu cầu cố tình gỡ bỏ hình ảnh và ghi đè lên nó. Một perp kỹ sẽ chỉ shrednó vào thời điểm đó. Nhưng trừ khi bạn từ chối quyền truy cập vật lý vào máy, có vẻ như vẫn dễ dàng rút CD vật lý ra khỏi ổ đĩa và ném nó vào thùng rác hơn là tháo gỡ và ghi đè tệp ISO, mặc dù điều này rất dễ dàng. Và OP đã tuyên bố rằng các tập tin quan trọng được sao lưu thường xuyên, vì vậy đây chỉ là một biện pháp bổ sung chống lại thiệt hại do tai nạn, không phải chống lại những trò nghịch ngợm độc hại.
Craig

Tôi đã chỉ ra cách thay đổi hình ảnh ISO9660 ngay cả khi nó được cho là không thể thay đổi. Quan điểm của tôi là nếu một chút có thể ghi được, root có thể viết nó.
Thorbjørn Ravn Andersen
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.