Điểm:3

Làm cách nào để nén một thư mục trong khi vẫn giữ quyền sở hữu tệp

lá cờ mx

Tôi có một máy chủ docker mà tôi muốn sao lưu. Thư mục triển khai của tôi có quyền sở hữu và quyền rất cụ thể để hỗ trợ các vùng chứa của tôi:

$ ls -lhaF /opt/docker
tổng cộng 32K
drwxr-xr-x 7 devops devops 4.0K ngày 23 tháng 8 02:34 ./
drwxr-xr-x 6 root root 4.0K 23 tháng 8 04:20 ../
drwxrwxr-x 2 devops devops 4.0K ngày 21 tháng 8 00:00 .certs/
drwxrwxr-x 2 devops devops 4.0K ngày 23 tháng 8 03:53 .scripts/
-rw-rw-r-- 1 devops devops 1,2K Ngày 21 tháng 8 01:52 docker-compose.yml
drwxrwxr-x 4 1000 1000 4.0K Ngày 21 tháng 8 02:05 minecraft/
drwxrwxr-x 4 devops devops 4.0K Ngày 20 tháng 8 23:38 lỗ hổng/
drwx------ 19 70 70 4.0K ngày 19 tháng 8 01:31 postgres/

Sau đó tôi cố gắng nén thư mục này bằng lệnh sau. Từ những gì tôi đã đọc, việc bảo vệ quyền/quyền sở hữu tệp yêu cầu chạy hắc ín với quyền root/sudo:

$ sudo tar -czpf "/tmp/server-backup.tar.gz" --directory="/opt/docker" .

Lệnh này nén thư mục nhưng kiểm tra .tar.gz nó cho thấy rằng quyền sở hữu của tất cả các thư mục hiện là root:

$ tar -tvf /tmp/server-backup.tar.gz
drwxr-xr-x root/root 0 2021-08-23 12:10 ./
drwxr-xr-x root/root 0 2021-08-23 12:10 ./minecraft/
-rw-r--r-- root/root 2 2021-08-23 12:10 ./minecraft/whitelist.json
-rw-r--r-- root/root 111 2021-08-23 12:10 ./minecraft/usercache.json
-rw-r--r-- root/root 1204 2021-08-23 12:10 ./minecraft/server.properties
-rw-r--r-- root/root 43626592 2021-08-23 12:10 ./minecraft/minecraft_server.1.17.1.jar
-rw-r--r-- root/root 68 2021-08-23 12:10 ./minecraft/eula.txt
-rw-r--r-- root/root 2 2021-08-23 12:10 ./minecraft/banned-players.json
-rw-r--r-- root/root 2 2021-08-23 12:10 ./minecraft/banned-ips.json
# -- Các tập tin minecraft khác
drwxr-xr-x root/root 0 2021-08-23 12:10 ./.certs/
# -- Nội dung thư mục chứng chỉ đã được biên tập lại
drwx------ root/root 0 2021-08-23 12:10 ./postgres/
drwx------ root/root 0 2021-08-23 12:10 ./postgres/pg_subtrans/
-rw------- root/root 8192 2021-08-23 12:10 ./postgres/pg_subtrans/0000
drwx------ root/root 0 2021-08-23 12:10 ./postgres/pg_multixact/
drwx------ root/root 0 2021-08-23 12:10 ./postgres/pg_multixact/offsets/
-rw------- root/root 8192 2021-08-23 12:10 ./postgres/pg_multixact/offsets/0000
drwx------ root/root 0 2021-08-23 12:10 ./postgres/pg_multixact/members/
-rw------- root/root 8192 2021-08-23 12:10 ./postgres/pg_multixact/members/0000
drwx------ root/root 0 2021-08-23 12:10 ./postgres/pg_xact/
-rw------- root/root 8192 2021-08-23 12:10 ./postgres/pg_xact/0000
# -- Các tập tin postgres khác
drwxr-xr-x root/root 0 2021-08-23 12:10 ./pihole/
drwxr-xr-x root/root 0 2021-08-23 12:10 ./pihole/etc-pihole/
-rw-r--r-- root/root 0 2021-08-23 12:10 ./pihole/etc-pihole/custom.list
-rw-r--r-- root/root 5201920 2021-08-23 12:10 ./pihole/etc-pihole/gravity.db
-rw-r--r-- root/root 485 2021-08-23 12:10 ./pihole/etc-pihole/setupVars.conf
-rw-r--r-- root/root 0 2021-08-23 12:10 ./pihole/etc-pihole/setupVars.conf.update.bak
-rw-r--r-- root/root 1812161 2021-08-23 12:10 ./pihole/etc-pihole/list.1.raw.githubusercontent.com.domains
-rw-r--r-- root/root 73728 2021-08-23 12:10 ./pihole/etc-pihole/pihole-FTL.db
-rw-r--r-- root/root 0 2021-08-23 12:10 ./pihole/etc-pihole/pihole-FTL.conf
-rw-r--r-- root/root 37 2021-08-23 12:10 ./pihole/etc-pihole/local.list
-rw-r--r-- root/root 95 2021-08-23 12:10 ./pihole/etc-pihole/list.1.raw.githubusercontent.com.domains.sha1
-rw-r--r-- root/root 20 2021-08-23 12:10 ./pihole/etc-pihole/localbranches
drwxr-xr-x root/root 0 2021-08-23 12:10 ./pihole/etc-pihole/migration_backup/
-rw-r--r-- root/root 65 2021-08-23 12:10 ./pihole/etc-pihole/migration_backup/adlists.list
-rw-r--r-- root/root 618 2021-08-23 12:10 ./pihole/etc-pihole/dns-servers.conf
-rw-r--r-- root/root 20 2021-08-23 12:10 ./pihole/etc-pihole/GitHubVersions
-rw-r--r-- root/root 44 2021-08-23 12:10 ./pihole/etc-pihole/localversions
drwxr-xr-x root/root 0 2021-08-23 12:10 ./pihole/etc-dnsmasq.d/
-rw-r--r-- root/root 1475 2021-08-23 12:10 ./pihole/etc-dnsmasq.d/01-pihole.conf
drwxr-xr-x root/root 0 2021-08-23 12:10 ./.scripts/
-rwxr-xr-x root/root 1638 2021-08-23 12:10 ./.scripts/create-backup.sh
-rwxr-xr-x root/root 511 2021-08-23 12:10 ./.scripts/new-cert-pihole.sh
-rwxr-xr-x root/root 345 2021-08-23 12:10 ./.scripts/fix-permissions.sh
-rw-r--r-- root/root 1170 2021-08-23 12:10 ./docker-compose.yml

Nếu tôi cố giải nén tệp .tar.gz, chúng tôi có thể xác nhận rằng tất cả quyền sở hữu đã bị mất:

$ sudo mkdir /tmp/sao lưu máy chủ
$ sudo tar -xzpf /tmp/server-backup.tar.gz --directory=/tmp/server-backup
$ ls -lhaF /tmp/sao lưu máy chủ
tổng cộng 32K
drwxr-xr-x 7 root root 4.0K 23 tháng 8 12:10 ./
drwxrwxrwt 13 root root 4.0K 23 tháng 8 12:16 ../
drwxr-xr-x 2 gốc gốc 4.0K ngày 23 tháng 8 12:10 .certs/
drwxr-xr-x 2 gốc gốc 4.0K ngày 23 tháng 8 12:10 .scripts/
-rw-r--r-- 1 root root 1.2K 23 tháng 8 12:10 docker-compose.yml
drwxr-xr-x 4 root root 4.0K 23 tháng 8 12:10 minecraft/
drwxr-xr-x 4 root root 4.0K 23 tháng 8 12:10 pihole/
drwx------ 19 gốc gốc 4.0K ngày 23 tháng 8 12:10 postgres/

Từ những gì tôi đã tìm thấy, bảo vệ quyền sở hữu và quyền được coi là hành vi mặc định cho hắc ín. Có điều gì tôi đang thiếu ở đây? Tôi muốn có thể sao lưu trạng thái máy chủ của mình mà không làm xáo trộn quyền sở hữu tệp nhạy cảm theo yêu cầu của một số vùng chứa docker mà tôi chạy.

Thông tin hệ thống:

$ lsb_release -d
Mô tả: Ubuntu 20.04.3 LTS
$ uname -a
Linux rpi-1 5.4.0-1042-raspi #46-Ubuntu SMP PREEMPT Thứ Sáu ngày 30 tháng 7 00:35:40 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux
muru avatar
lá cờ us
Điều gì xảy ra nếu bạn không sử dụng cờ `-p`? Chỉ `czf` và `xzf`?
Artur Meinild avatar
lá cờ vn
Tôi vừa thử nghiệm trong một thư mục ngẫu nhiên và nếu tôi chạy `tar` trên 2 tệp có cờ `-czpf`, thì nó sẽ bảo toàn quyền một cách chính xác.
lá cờ cn
Có thể xác nhận: đó là mục đích của `-p` (chữ nhỏ không phải chữ P viết hoa). cũng có `--preserve-permissions` / `--same-permissions` và `--atime-preserve` và `--same-owner` "Từ những gì tôi đã đọc, việc bảo toàn quyền/quyền sở hữu tệp yêu cầu chạy tar as root/sudo:" không, bạn có các tùy chọn để ngăn chặn điều này.
sudodus avatar
lá cờ jp
Tôi nhận thấy rằng bạn chỉ định Ubuntu 20.04.3 LTS cho Raspberry Pi. Bản phát hành điểm 3 chưa được phát hành (nhưng rất gần sẽ được phát hành). Bạn đang chạy phiên bản tar nào? Kiểm tra với `apt-cache policy tar`; có thể bạn đã tìm ra lỗi, bởi vì kết quả của bạn trái ngược với những gì nhiều người trong chúng ta đã trải qua.Nó có thể là một lỗi mới, nhưng cũng có thể lỗi này đã ảnh hưởng đến phiên bản RPi của tar trong nhiều năm, bởi vì hầu hết chúng ta sử dụng phiên bản PC 'amd64' và sẽ không bao giờ bị ảnh hưởng bởi nó.
Artur Meinild avatar
lá cờ vn
Tôi vừa kiểm tra lại trên Raspberry Pi và các quyền vẫn được giữ nguyên cho tôi. Chạy Ubuntu `20.04.3 LTS` (đã được đẩy cho các bản cài đặt hiện có) và tar `1.30+dfsg-7ubuntu0.20.04.1` trên cả hai nền tảng.
Phil H avatar
lá cờ mx
Sau khi điều tra thêm, có vẻ như thủ phạm thực sự không phải là lệnh `tar`. Tôi đang sử dụng `cp` để sao chép thư mục triển khai của mình trước khi nén để tránh lỗi đọc. Tôi đã không nhận ra rằng bạn phải bảo toàn quyền một cách rõ ràng bằng thứ gì đó như `cp -Rp`. Cảm ơn đã giúp tôi thu hẹp điều này xuống.
Điểm:1
lá cờ mx

Rõ ràng, hắc ín không phải là thủ phạm ở đây. Đây là một phần của tập lệnh lớn hơn để sao lưu thư mục triển khai của tôi. Tôi đã sao chép thư mục trước khi nén để tránh đọc không nhất quán trong khi các vùng chứa vẫn đang chạy. Kịch bản có nội dung sau:

cp -R "/opt/docker" "/tmp/server-backup"
tar -czf "/tmp/server-backup.tar.gz" --directory="/tmp/server-backup" .

Quyền sở hữu tệp đã bị mất trong quá trình sao chép thư mục. Các -P cờ được yêu cầu để duy trì quyền/quyền sở hữu trên một bản sao thư mục. Lệnh đúng sẽ là thế này:

cp -Rp "/opt/docker" "/tmp/server-backup"
tar -czf "/tmp/server-backup.tar.gz" --directory="/tmp/server-backup" .
sudodus avatar
lá cờ jp
Cảm ơn đã hiển thị và giải thích giải pháp :-)
Artur Meinild avatar
lá cờ vn
Tôi thường sao chép bằng tùy chọn `-a` (archive), tương đương với `-dR --preserve=all`. Đây là một tùy chọn duy nhất lưu giữ mọi thứ bạn muốn lưu giữ để sao lưu - tôi thậm chí còn có một bí danh cho nó: `alias cpa='cp -a'`
Phil H avatar
lá cờ mx
@ArturMeinild Cảm ơn! Tôi sẽ ghi nhớ điều đó.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.