Что на самом деле сохраняет флаг tar -p (preserve permissions)?

22

Что на -pсамом деле сохраняет флаг при создании и распаковке тарбола? Это rwxразрешения, которые он сохраняет?

Когда я создал htdocs/tar-архив, принадлежащий пользователю root, его извлечение на локальный компьютер изменило владельца с root на моего пользователя.

NicOx
источник
5
Может быть, вы должны попытаться распаковать архив как root. Невозможно установить разрешения для другого пользователя как обычного пользователя, поэтому я думаю, tarчто не сможет сделать это также. Пожалуйста, скажите мне, если это сработало.
Луи Матейссен
"местная машина"? Пожалуйста, уточните, какая ОС у этой машины;)
Rinzwind,
Также скажите нам, какие файловые системы вы используете. И исходные и целевые.
тердон
Источник: Red Hat Enterprise Linux Server release 6.5 (Santiago) Цель: Ubuntu 13.10 оба используютGPT
nicoX
Примечание: tarсохраняет разрешения. -pи --same-owner/ --no-same-owner(как в ответах) являются флагами извлечения. Они не имеют никакого эффекта при архивировании
Fr0zenFyr

Ответы:

19

Владение и разрешения - это две разные вещи. -pФлаг сохраняет разрешения . В системах * nix обычные пользователи не могут менять владельца файла на пользователя, который не является самим собой.

Как объяснено здесь :

Только процессы с эффективным идентификатором пользователя, равным идентификатору пользователя файла или с соответствующими привилегиями, могут изменять владельца файла. Если _POSIX_CHOWN_RESTRICTED действует для пути:

  • Изменение идентификатора пользователя ограничено процессами с соответствующими привилегиями.

  • Изменение идентификатора группы разрешено для процесса с эффективным идентификатором пользователя, равным идентификатору пользователя файла, но без соответствующих привилегий, если и только если владелец равен идентификатору пользователя файла или (uid_t) -1, а группа равна либо к эффективному идентификатору группы вызывающего процесса, либо к одному из его дополнительных идентификаторов группы.

Объяснение этого было хорошо объяснено @Gilles в этом ответе Unix & Linux:

Причина этого ограничения заключается в том, что передача файла другому пользователю может привести к возникновению плохих вещей в необычных, но все же важных ситуациях. Например:

  • Если в системе активированы дисковые квоты, Алиса может создать файл, доступный для записи в мире, в каталоге, доступном только ей (чтобы никто другой не мог получить доступ к этому каталогу, доступному для записи в мире), а затем запустить команду chown, чтобы сделать этот файл владельцем другого пользователя. , После этого файл будет считаться дисковой квотой Билла, даже если файл может использовать только Алиса.
  • Если Алиса передает файл Биллу, нет никаких признаков того, что Билл не создал этот файл. Это может быть проблемой, если файл содержит недопустимые или иным образом компрометирующие данные.
  • Некоторые программы требуют, чтобы их входной файл принадлежал конкретному пользователю для аутентификации запроса (например, файл содержит некоторые инструкции, которые программа будет выполнять от имени этого пользователя). Обычно это небезопасный дизайн, потому что даже если Билл создал файл, содержащий синтаксически правильные инструкции, он, возможно, не намеревался выполнять их в это конкретное время. Тем не менее, разрешение Алисе создавать файл с произвольным содержимым и принимать его в качестве входных данных от Билла может только усугубить ситуацию.

Таким образом, даже если вы используете --same-ownerфлаг tar , вам все равно нужно будет извлечь файлы, rootчтобы сохранить право собственности. Этот флаг включен по умолчанию для root, так что вы хотите:

sudo tar xpf foo.tgz
terdon
источник
9

Есть еще 2 варианта для tar, которые интересны:

--same-owner
       try extracting files with the same ownership as exists in the ar‐
       chive (default for superuser)

--no-same-owner
       extract files as yourself (**default for ordinary users**)

Второй по умолчанию, так что вы можете добавить, --same-ownerчтобы сохранить пользователя. Вам, вероятно, придется сделать это с sudo.

Кроме того: это будет работать только на системах, которые поддерживают POSIX. И операционные системы, отличные от Ubuntu, могут не иметь этих двух вариантов (они не являются стандартными).

Rinzwind
источник
3
Это --same-ownerне будет работать для пользователей без полномочий root, они не будут иметь права устанавливать права собственности никому, кроме себя. Это определяется POSIX .
тердон
4

Чтобы сохранить владельца, запустите его как root или используйте при извлечении флаг --same-owner вместе с флагом -p.

NGRhodes
источник
3
В любом случае его нужно запускать с правами root. Пользователи без полномочий root не могут изменить владельца файла другим пользователям.
тердон