змінити право власності на файли в архіві tar


10

Я працюю як користувач, і я хотів би створити архів tar, який при розпакуванні (за допомогою root) буде витягувати свої файли з власністю root (інакше root повинен буде змінити право власності на кожен файл після вилучення файлів до місця призначення).

Я знайшов, fakerootщо, здається, робить саме це. Але я не в змозі знайти синтаксис, який мені потрібно використовувати для створення свого архіву.

Як я можу створити архів tar.xz, щоб файли мали право власності на root при розпакуванні корінця?

do something with fakeroot ...
tar cfpJ foo.tar.xz foo/

Відповіді:


12

Як я можу створити архів tar.xz, щоб файли мали право власності на root при розпакуванні корінця?

Це до кореня, який розпаковується:

tar --no-same-owner -xf ...

Якщо ви хочете змусити їх усіх почати, можна скористатися

tar --owner=root --group=root -cf ...

це не працює для мене: tar --owner=root --group=root cfpJ files.tar.xz files/дає мені помилку tar: You must specify one of the -Acdtrux 'або --test-label' options Try tar --help' абоtar --usage' for more information.
user1968963

Вам потрібен -перед вами короткий рядок параметрів: tar --owner=root --group=root -cfpJ ...тобто -cfpJ, ні cfpJ.
goldilocks

tar --owner=root --group=root -cfpJ files.tar.xz files/дає мені ще одну помилку: tar: files.tar.xz: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errorsі крім того, він створює файл, який називається pJ.
користувач1968963

3
Добре. Я завжди ставлю fв кінці (тому що це має більше сенсу, інтуїтивно) і низько, і ось, я отримую такий же провал з роботами -cfpJАЛЕ -cpJf.
goldilocks

@ user1968963: f завжди має бути безпосередньо перед назвою файлу, оскільки це означає "наступним параметром є ім'я файлу". Якщо ви не поставите його безпосередньо перед назвою файлу, tar подумає, що ім'я файлу "", а потім спробує відкрити "" файл, який він не може стати (звичайно).
Олів'є Дулак

8

Фейкворт

Fakeroot утиліта або новіша утиліта fakeroot-нг ( тієї ж мети, інший метод реалізації) запускає програму і робить вигляд програми , що він працює як корінь , і що системні виклики , такі , як chownвдалося. Тільки програма вважає, що ці виклики вдалися, нічого фактично не відображається у файловій системі (це не може бути, оскільки fakerootне має зайвих привілеїв). Однак якщо програма змінить право власності на файл і потім вчинить певні дії, засновані на власності на цей файл, це може змінити поведінку програми.

Типовий спосіб отримати корисну роботу з підробленого файлу, запустивши середовище підробленого файлу, де відбувається таке:

  1. Створіть деякі файли, перемістіть їх, змініть їх власність та режими тощо.
  2. Створіть архів цих файлів.

Приклад:

fakeroot sh -c '
    chown root:root usr/bin/foo
    tar cf foo.tar usr
'

Вам потрібно використовувати одне виклик fakeroot, оскільки між викликами немає пам'яті.

Простори імен Linux

Просто для повноти згадаю, що якщо у вас є ядро ​​Linux ≥3.8, то простори імен - це ще один спосіб створення середовища кореневих виглядів . Підтримка користувальницької програми ще не існує, тому я не буду вникати в більш докладно.

Монтуйте архів

Інший спосіб вирішити вашу проблему - це встановити архів як каталог. Ви можете використовувати archivemount , який здатний змінювати декілька форматів архівів за допомогою libarchive , включаючи стиснутий tar.

mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt

Хороший трюк archivemount, але він все ще вимагає підвищення привілеїв, і навіть якщо користувач перебуває у довіреній групі, якій дозволено монтувати та демонтувати, процес не працює chown, тому потрібно використовувати якісь сторонні інструменти, такі як fakerootпростори імен , теж.
Антон Самсонов
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.