Чи зберігає тар дозволу, якщо змінюються ідентифікатори користувачів?


20

Мені потрібно створити резервну копію деяких даних за допомогою параметра "p" на команді tar. Проблема полягає в тому, що я збираюся відновити ці дані, будуть мати однакові користувачі, але ці користувачі можуть мати різні ідентифікатори. Чи має це значення для tar або буде відновлено дозволи правильно за іменем користувача?

Відповіді:


9

tarзаписує дозволи на основі UID та GID, а не на рядку, пов'язаному з ними. Отже, якщо UID на одному сервері був 3300 і це було пов’язано з 'bob', на новому сервері файл буде належати користувачеві, який має UID 3300.

Віртуальне все (я хочу сказати все, але ви ніколи не можете бути впевнені на 100%) в UNIX використовує значення UID: GID, тому що це фактично зберігається на рівні файлової системи. Назва - це просто простий пошук у файлі passwd, основні перевірки робляться за допомогою числових значень.


Ах, це не добре ... Я думаю, у більшості ситуацій це підходить. На жаль, не для мене ... Дякую, EightBitTony.
Маріус

3
Ви, швидше за все, маєте на увазі GID (ідентифікатор групи), а не GUID (глобально унікальний ідентифікатор).
CVn

6
GNU tar також зберігає дані імені користувача / групи, тому що я бачу їх, якщо перерахувати архів на машині, яка не має цих користувачів. Повинно бути способом його використання під час видобутку.
Роб H

3
Ця відповідь просто неправильна. tar робить запис імен власників.
Штеффен Хайль

55

Підбиття підсумків попередніх відповідей та додавання важливої ​​інформації:

  • При створенні архівів, tarзавжди буде зберігати файли ідентифікатор користувача і групи, якщо не вказано інше з --owner=NAME, --group=NAME. Але все одно завжди знайдуться користувач та група, пов’язані з кожним файлом.

  • Гугл GNU та, можливо, інші версії tar, також зберігають імена користувачів та груп , якщо вони --numeric-ownerне використовуються. bsdtar також зберігає імена користувачів і груп за замовчуванням, але підтримка --numeric-ownerопції при створенні не з'явилася, поки bsdtar 3.0 (зауважте, що bsdtar підтримував цю опцію при витягуванні набагато довше).

  • При вилученні в якості звичайного користувача всі файли завжди будуть належати користувачеві. І не може бути інакше, оскільки вилучення файлу створює новий файл у файловій системі, а звичайний користувач не може створити файл і надати право власності комусь іншому.

  • При вилученні як root , tarза замовчуванням відновиться право власності на витягнуті файли, якщо --no-same-owner не використовується, що надасть право власності на сам root.

  • У GNU tar, bsdtar та, можливо, інших версіях tarвідновлене право власності здійснюється за іменем користувача (та групи) , якщо ця інформація знаходиться в архіві та в системі призначення є відповідний користувач. В іншому випадку він відновлюється за ідентифікатором. Якщо --numeric-ownerопція надана, імена користувачів і груп ігноруються.

  • Дозволи та часові позначки також зберігаються в архіві та відновлюються за замовчуванням, якщо не використовуються параметри --no-same-permissionsта / або --touch. Коли вилучено користувачем, користувач umaskбуде вирахувано з дозволів , якщо --same-permissionsне використовуються.

  • --preserve-permissionsі --same-permissionsє псевдонімами та мають такий же функціонал, як-p

Сподіваюсь, це допоможе з’ясувати проблему! :)


3
Відмінна відповідь; Відповідає на це питання, як і на будь-яке інше питання, яке може виникнути з цього приводу.
користувач1107893

Слід зазначити, що лише останні версії GNU tarдозволяють вказувати довільні імена у --ownerабо --group, в минулому, tarздійснювали безоплатний пошук у поточній машині /etc/passwdта відмовлялися запускатися, якщо не було відповідності.
Matteo Italia

Що станеться, якщо ви створите архів із вказаним ім'ям із, --ownerале також доданий у --numeric-ownerпрапор? Як дьоготь справляється з цими конкуруючими вимогами?
CMCDragonkai

@CMCDragonkai: --ownerі --numeric-ownerне є взаємовиключними, і служать дуже виразним цілям: замінять --owner=USERNAMEфайли та файли власника (-ів) при архівуванні файлів, при --numeric-ownerцьому просто не зберігатимуть ім’я користувача, а лише його числовий ідентифікатор.
MestreLion

4

Користуйтеся параметром --same-owner для GNU tar. Див. Http://www.gnu.org/software/tar/manual/html_section/Attributes.html


Це задокументовано як за замовчуванням для супер-користувачів, і, здається, відповідає на питання ОП інакше, ніж прийнята відповідь. (Посилання говорить, що коли GNU tar відновлює використання --sam-owner, він спочатку шукає імена в / etc / passwd.) Єдиним невирішеним питанням є те, чи є версія програми OP для tar-версії - last-owner.
Майк Шеррілл 'Відкликання кішок'

ОП використовує деякий дистрибутив Linux так краще, ніж навіть шанс використання смоли GNU, методів. Відправившись в документації це є можливим в той час як загальноприйнятий відповідь вказує , що це не так ...
Colin «т Харт

@Catcall - вибачте, я прийняв відповідь, навіть не маючи можливості перевірити її. Десь я просто сліпо довіряю людям. Тим не менш, людина, яка відповіла, була якоюсь правильною, оскільки я не відновлювався з "- тим самим власником", а потім ви додали відповідь. Шкода, що я не можу прийняти обох. Я використовую стиснення Debian, яке дійсно підтримує "- last-last". Дякую за пораду.
Маріус

@Marius: Я впевнений, що ви можете змінювати прийняту відповідь, коли завгодно. (Я просто зазначу, що я не дав жодної відповіді на це запитання, лише коментарі. У мене немає жодної репутації.)
Майк Шеррілл 'Cat Cat Recall'

4

Якщо ви намагаєтеся перенести файли між двома системами, rsync за замовчуванням встановить дозволи на ім’я користувача, а не uid, переглянувши імена користувачів з обох кінців. Тільки якщо користувач не існує в одній із систем, він скопіює його разом із uid, якщо ви не скажете інше.


Це не відповідає безпосередньо на питання ОП, але кожен, хто задає питання ОП, повинен дізнатися і це.
Майк Шеррілл 'Відкликання котів'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.