Liệu tar bảo vệ quyền nếu ID người dùng thay đổi?


20

Tôi cần sao lưu một số dữ liệu với tùy chọn "p" trên lệnh tar. Vấn đề là nơi tôi sẽ khôi phục dữ liệu này sẽ có tất cả người dùng giống nhau, nhưng những người dùng đó có thể có ID khác nhau. Điều đó có làm cho bất kỳ sự khác biệt với tar hoặc nó sẽ khôi phục quyền chính xác theo tên người dùng?

Câu trả lời:


9

targhi lại các quyền dựa trên UID và GID, không phải trên chuỗi được liên kết với chúng. Vì vậy, nếu UID trên một máy chủ là 3300 và được liên kết với 'bob', thì trên máy chủ mới, tệp sẽ được sở hữu bởi người dùng có UID 3300.

Mọi thứ ảo (tôi muốn nói tất cả mọi thứ, nhưng bạn không bao giờ có thể chắc chắn 100%) trên UNIX sử dụng các giá trị UID: GID, vì đó là những gì thực sự được lưu trữ ở cấp hệ thống tệp. Tên chỉ là một tra cứu đơn giản trong tệp passwd, kiểm tra cơ bản được thực hiện bằng cách sử dụng các giá trị số.


Ah, điều đó không tốt ... Tôi đoán trong hầu hết các tình huống nó phù hợp. Thật không may, không phải cho tôi ... Cảm ơn bạn, EightBitTony.
Marius

3
Bạn rất có thể có nghĩa là GID (định danh nhóm), không phải GUID (Mã định danh duy nhất toàn cầu).
một CVn

6
GNU tar cũng lưu dữ liệu tên người dùng / nhóm, vì tôi có thể thấy nó nếu tôi liệt kê một kho lưu trữ trên một máy không có những người dùng đó. Phải có một cách để có được nó để sử dụng nó trong quá trình trích xuất.
Rob H

3
Câu trả lời này đơn giản là không chính xác. tar không ghi tên chủ sở hữu.
Steffen Heil

55

Tóm tắt các câu trả lời trước đó và thêm một số thông tin quan trọng:

  • Khi tạo tài liệu lưu trữ, tarsẽ luôn bảo toàn ID người dùng và nhóm của tệp, trừ khi được nói khác với --owner=NAME, --group=NAME. Nhưng vẫn sẽ luôn có một người dùng và nhóm được liên kết với mỗi tệp.

  • GNU tar, và các phiên bản có lẽ khác tar, cũng lưu trữ các người dùng và nhóm tên , trừ khi --numeric-ownerđược sử dụng. bsdtar cũng lưu trữ tên người dùng và nhóm theo mặc định, nhưng hỗ trợ cho --numeric-ownertùy chọn khi tạo không xuất hiện cho đến khi bsdtar 3.0 (lưu ý rằng bsdtar hỗ trợ tùy chọn khi giải nén lâu hơn nhiều).

  • Khi giải nén như một người dùng thông thường , tất cả các tệp sẽ luôn thuộc quyền sở hữu của người dùng. Và nó không thể khác, vì trích xuất một tệp đang tạo một tệp mới trên hệ thống tệp và người dùng thông thường không thể tạo tệp và trao quyền sở hữu cho người khác.

  • Khi trích xuất dưới dạng root , tartheo mặc định sẽ khôi phục quyền sở hữu các tệp được trích xuất, trừ khi --no-same-owner được sử dụng, nó sẽ trao quyền sở hữu cho chính root.

  • Trong GNU tar, bsdtar, và các phiên bản có lẽ khác tar, quyền sở hữu phục hồi được thực hiện bằng cách sử dụng (và nhóm) Tên , nếu thông tin đó là trong kho lưu trữ có một người sử dụng phù hợp trong hệ thống đích. Mặt khác, nó khôi phục bằng ID. Nếu --numeric-ownertùy chọn được cung cấp, tên người dùng và nhóm sẽ bị bỏ qua.

  • Quyền và dấu thời gian cũng được lưu vào kho lưu trữ và được khôi phục theo mặc định, trừ khi các tùy chọn --no-same-permissionsvà / hoặc --touchđược sử dụng. Khi được người dùng trích xuất, người dùng sẽ umaskbị trừ khỏi quyền trừ khi --same-permissionsđược sử dụng.

  • --preserve-permissions--same-permissionslà bí danh, và có chức năng tương tự như-p

Hy vọng điều này sẽ giúp làm rõ vấn đề! :)


3
Câu trả lời xuất sắc; Trả lời câu hỏi này cũng như mọi câu hỏi khác có thể phát sinh về chủ đề này.
1107893

Cần lưu ý rằng chỉ các phiên bản gần đây của GNU mới tarcho phép chỉ định các tên tùy ý trong --ownerhoặc --grouptrước đây tarđã thực hiện tra cứu vô cớ trong máy hiện tại /etc/passwdvà từ chối chạy nếu không có kết quả khớp.
Matteo Italia

Điều gì xảy ra nếu bạn tạo một kho lưu trữ với tên được chỉ định với --ownernhưng cũng được thêm vào --numeric-ownercờ? Làm thế nào để tar đối phó với các yêu cầu cạnh tranh?
CMCDragonkai

@CMCDragonkai: --owner--numeric-ownerkhông loại trừ lẫn nhau và phục vụ các mục đích rất riêng biệt: --owner=USERNAMEsẽ ghi đè lên các tệp và chủ sở hữu thư mục khi lưu trữ các tệp, trong khi --numeric-ownerđơn giản sẽ không lưu trữ tên người dùng, chỉ là ID số của anh ta.
MestreLion

4

Sử dụng tùy chọn --same-own cho GNU tar. Xem http://www.gnu.org/software/tar/manual/html_section/Attribut.html


Điều này được ghi nhận là mặc định cho các siêu nhân và dường như trả lời câu hỏi của OP khác với câu trả lời được chấp nhận. (Các liên kết nói rằng khi khôi phục GNU tar sử dụng --same-chủ sở hữu, nó trông giống đầu tiên cho tên trong / etc / passwd.) Vấn đề duy nhất nổi bật là liệu phiên bản của OP của cụ tar --same sở hữu.
Mike Sherrill 'Nhớ lại mèo'

OP đang sử dụng một số bản phân phối Linux tốt hơn nhiều so với cơ hội sử dụng GNU tar, methinks. Và đi theo tài liệu có thể trong khi câu trả lời được chấp nhận cho thấy nó không ...
Colin 't Hart

@Catcall - xin lỗi, tôi đã chấp nhận câu trả lời mà thậm chí không có cơ hội kiểm tra nó. Đôi khi tôi chỉ tin tưởng một cách mù quáng. Tuy nhiên, người trả lời là đúng, vì tôi đã không khôi phục lại với "- chủ sở hữu trò chơi" và sau đó bạn đã thêm vào câu trả lời. Quá tệ, tôi không thể chấp nhận cả hai. Tôi đang sử dụng bóp debian mà thực sự hỗ trợ "- chủ sở hữu". Cảm ơn vì tiền hỗ trợ.
Marius

@Marius: Tôi khá chắc chắn rằng bạn có thể thay đổi câu trả lời được chấp nhận bất cứ khi nào bạn muốn. (Tôi sẽ chỉ ra rằng tôi chưa cung cấp bất kỳ câu trả lời nào cho câu hỏi này, chỉ nhận xét. Tôi không có bất kỳ đại diện nào bị đe dọa.)
Mike Sherrill 'Cat Recall'

4

Nếu bạn đang cố gắng chuyển tệp giữa hai hệ thống, rsync sẽ mặc định đặt quyền theo tên người dùng thay vì uid, xem tên người dùng ở cả hai đầu. Chỉ khi người dùng không tồn tại trên một trong các hệ thống thì nó mới sao chép nó bằng uid, trừ khi bạn nói khác.


Điều này không trả lời trực tiếp câu hỏi của OP, nhưng bất kỳ ai hỏi câu hỏi của OP cũng nên tìm hiểu điều này.
Mike Sherrill 'Nhớ lại mèo'
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.