Có đúng là một tarball có thể thay đổi nơi các tệp được trích xuất thành bất kể các lệnh được sử dụng để giải nén nó không?


27

Tôi có một đồng nghiệp nói rằng bạn cần cẩn thận trích xuất tarball vì họ có thể thực hiện các thay đổi mà bạn không biết. Tôi luôn nghĩ rằng một tarball chỉ là một hệ thống phân cấp của các tệp nén, vì vậy nếu bạn trích xuất nó thành / tmp / example / nó có thể không thể lẻn một tệp vào / etc / hoặc bất cứ thứ gì tương tự.


1
Bạn quan tâm đến môi trường hệ điều hành nào? Tar / GNU / Linux có một -Ptùy chọn ảnh hưởng đến hành vi của nó trong vấn đề này.
Jeff Schaller

1
Tôi đoán CentOS trong trường hợp này, nhưng tôi muốn biết bất cứ điều gì tôi nên biết.
Adam R. Gray

1
Trong một thời gian dài hơn, GNU tar có thể bị đánh lừa theo cách cho phép làm cho nó, ví dụ như loại bỏ /etc/passwdtrong trường hợp nó được chạy dưới quyền root. Từ lâu, tôi tin rằng gtarmang lại sự bảo mật tương tự như bạn nhận được star.
schily

Câu trả lời:


41

Các tiện ích tar khác nhau hoạt động khác nhau về vấn đề này, vì vậy thật tốt khi cẩn thận. Đối với tệp tar mà bạn không tạo, hãy luôn liệt kê mục lục trước khi giải nén nó.

Solaris tar :

Các tệp được đặt tên được trích xuất từ ​​tarfile và được ghi vào thư mục được chỉ định trong tarfile, liên quan đến thư mục hiện tại. Sử dụng tên đường dẫn tương đối của các tệp và thư mục sẽ được trích xuất.

Tên đường dẫn tuyệt đối có trong kho lưu trữ tar được giải nén bằng cách sử dụng tên đường dẫn tuyệt đối, nghĩa là dấu gạch chéo phía trước (/) không bị loại bỏ.

Trong trường hợp tệp tar có tên đường dẫn đầy đủ (tuyệt đối), chẳng hạn như:

/tmp/real-file
/etc/sneaky-file-here

... Nếu bạn trích xuất một tệp như vậy, bạn sẽ kết thúc bằng cả hai tệp.

GNU tar :

Theo mặc định, GNU tar giảm vị trí dẫn đầu /về đầu vào hoặc đầu ra và phàn nàn về tên tệp có chứa một ..thành phần. Có một tùy chọn tắt hành vi này:

--absolute-names

-P

Không loại bỏ dấu gạch chéo hàng đầu khỏi tên tệp và cho phép tên tệp chứa ..thành phần tên tệp.

... Nếu bạn trích xuất một tệp tar có đường dẫn đầy đủ bằng cách sử dụng GNU tar mà không sử dụng -Ptùy chọn, nó sẽ cho bạn biết:

tar: Loại bỏ hàng đầu /khỏi tên thành viên

và sẽ trích xuất tệp vào thư mục con của thư mục hiện tại của bạn.

AIX tar :

không nói gì về nó và hoạt động như tar Solaris - nó sẽ tạo và trích xuất các tệp tar với tên đường dẫn đầy đủ / tuyệt đối.

HP-UX tar : (hoan nghênh tham khảo trực tuyến tốt hơn)

CẢNH BÁO

Không có cách nào để khôi phục tên đường dẫn tuyệt đối đến vị trí tương đối.

OpenBSD tar :

-P

Không tước dấu gạch chéo hàng đầu ( /) khỏi tên đường dẫn. Mặc định là tước các dấu gạch chéo hàng đầu.

Cũng có -Pcác tùy chọn được triển khai cho tarmacOS, FreeBSD và NetBSD, với cùng một ngữ nghĩa, với việc bổ sung tartrên FreeBSD và macOS sẽ "từ chối trích xuất các mục lưu trữ có tên đường dẫn chứa ..hoặc thư mục đích sẽ bị thay đổi bởi một liên kết tượng trưng" mà không có -P.

ngôi sao schilytools :

-/

Không loại bỏ dấu gạch chéo hàng đầu khỏi tên tệp khi giải nén tệp lưu trữ. Lưu trữ Tar chứa tên đường dẫn tuyệt đối thường là một ý tưởng tồi. Với các triển khai tar khác, chúng có thể không bao giờ được trích xuất mà không ghi đè các tệp hiện có. Sao vì lý do đó, theo mặc định, dải dẫn chém từ tên tệp khi ở chế độ giải nén.


2
Trong một thời gian dài, GNU tar đã bỏ qua thực tế rằng một tên đường dẫn có chứa ..rủi ro bảo mật, vì vậy hãy sử dụng starhoặc gần đây gtar. Cũng có một cái nhìn vào các startài liệu lưu trữ tar ví dụ bao gồm tarcác tiêu đề thủ công khiến hầu hết các tartriển khai để xóa các tệp mà không có cảnh báo.
hỏi

@schily, theo trích dẫn của Jeff, cũng không áp dụng cho tarSolaris, AIX và HP-UX? Nếu vậy, tại sao chỉ chỉ ra GNU tar, đặc biệt là nếu (một lần nữa theo trích dẫn ở trên), họ đã thay đổi thành không chấp nhận ..? Các vấn đề với đầu vào không đúng định dạng tất nhiên là lỗi và tôi cho rằng bạn đã báo cáo chúng như vậy.
ilkkachu

1
Triển khai tar lịch sử không kiểm tra những thứ như thế. Tôi cần đưa ra nhận xét vì có tuyên bố rằng GNU tar không có vấn đề gì mà không đề cập đến một bản phát hành. Và BTW: một danh sách như thế này mà không đề cập star(triển khai miễn phí lâu đời nhất) phải được xem là không đầy đủ.
schily

@schily, tôi đã tìm kiếm các trang hướng dẫn cho các hệ điều hành lớn (có thể có các triển khai tar khác nhau); nếu bạn có một liên kết đến trang người đàn ông trực tuyến của ngôi sao, tôi rất vui lòng bao gồm nó.
Jeff Schaller


9

Một trong những điều thú vị xảy ra với bom tar là chúng thay đổi các quyền của thư mục hiện tại thành thư mục có trong tarball.

Chẳng hạn, nếu một tarball bao gồm '.' thư mục và bạn giải nén nó trong / tmp dưới dạng root, nó sẽ phá hỏng hệ thống của bạn bằng cách làm cho / tmp không thể bị xóa bởi bất kỳ ai trừ root.


Và nếu bạn giải nén nó /, nó sẽ thay đổi quyền của thư mục gốc, điều này sẽ gây ra hậu quả không mong muốn (tôi nhớ việc "không thể thực thi / bin / bash" khi đăng nhập trên bảng điều khiển, vì /là chế độ 770).
Luật29

1
Tôi đã có điều này xảy ra với phần mềm chính thức - bản phát hành github của "rancher-compose" tất cả có chứa "." trong tệp tar, ví dụ, và nuke / tmp nếu bạn giải nén chúng ở đó.
Harald
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.