ubah kepemilikan file untuk file di dalam arsip tar

10

Saya bekerja sebagai pengguna, dan saya ingin membuat arsip tar, yang ketika dibongkar (oleh root) akan mengekstrak file-nya dengan kepemilikan root (jika tidak root harus mengubah kepemilikan secara manual untuk setiap file, setelah file telah diekstraksi ke tujuannya).

Saya telah menemukan fakerootyang tampaknya melakukan hal itu. Tetapi saya tidak dapat menemukan sintaks yang perlu saya gunakan untuk membuat arsip saya.

Bagaimana saya bisa membuat arsip tar.xz, sehingga file-file tersebut memiliki kepemilikan root ketika dibongkar oleh root?

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

Jawaban:

12

Bagaimana saya bisa membuat arsip tar.xz, sehingga file-file tersebut memiliki kepemilikan root ketika dibongkar oleh root?

Terserah root yang membongkar:

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

Jika Anda ingin menjadikan semuanya root, Anda dapat menggunakannya

tar --owner=root --group=root -cf ...
goldilocks
sumber
itu tidak bekerja untuk saya: tar --owner=root --group=root cfpJ files.tar.xz files/beri saya kesalahan tar: You must specify one of the -Acdtrux 'atau --test-label' options Try tar --help' atautar --usage' for more information.
user1968963
Anda perlu -sebelum string opsi pendek: tar --owner=root --group=root -cfpJ ...Yaitu -cfpJ, tidak cfpJ.
goldilocks
tar --owner=root --group=root -cfpJ files.tar.xz files/memberi saya kesalahan lain: tar: files.tar.xz: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errorsdan terlebih lagi, itu menciptakan file bernama pJ.
user1968963
3
Baik. Saya selalu menempatkan fpada akhirnya (karena itu lebih masuk akal, intuitif) dan rendah dan lihatlah, saya mendapatkan kegagalan yang sama dengan -cfpJTETAPI -cpJfbekerja.
goldilocks
@ user1968963: f harus selalu sebelum nama file, karena itu berarti "parameter selanjutnya adalah nama file". Jika Anda tidak meletakkannya tepat sebelum nama file, tar akan mengira nama file "", dan kemudian mencoba untuk membuka file "", yang tidak bisa stat (tentu saja).
Olivier Dulac
8

Fakeroot

The fakeroot utilitas, atau yang lebih baru utilitas fakeroot-ng (tujuan yang sama, teknik implementasi yang berbeda) menjalankan program dan berpura-pura program yang sedang berjalan sebagai root dan sistem yang memanggil seperti chownberhasil. Hanya program yang percaya bahwa panggilan ini berhasil, tidak ada yang benar-benar tercermin dalam sistem file (tidak mungkin karena fakeroottidak memiliki hak istimewa tambahan). Namun, jika program mengubah kepemilikan file dan kemudian mengambil tindakan berdasarkan kepemilikan file itu, ini dapat mengubah perilaku program.

Cara tipikal untuk mendapatkan pekerjaan yang bermanfaat dari fakeroot dengan menjalankan lingkungan fakeroot di mana hal berikut terjadi:

  1. Buat beberapa file, pindahkan, ubah kepemilikan dan modenya, dll.
  2. Buat arsip dari file-file ini.

Contoh:

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

Anda perlu menggunakan satu pemanggilan fakeroot, karena tidak ada memori di antara pemanggilan.

Ruang nama Linux

Hanya untuk kelengkapan, saya akan menyebutkan bahwa jika Anda memiliki kernel Linux ≥3.8, maka namespace adalah cara lain untuk menciptakan lingkungan pretend-root. Dukungan userland belum cukup jadi saya tidak akan membahas lebih detail.

Pasang arsip

Cara berbeda untuk menyelesaikan masalah Anda adalah dengan memasang arsip sebagai direktori. Anda dapat menggunakan archivemount , yang mampu memodifikasi beberapa format arsip melalui libarchive , termasuk tar terkompresi.

mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Trik yang bagus dengan archivemount, tetapi masih memerlukan peningkatan hak istimewa, dan bahkan jika pengguna berada di grup tepercaya yang diizinkan untuk memasang dan melepas, proses gagal chown, jadi beberapa jenis alat pihak ketiga seperti fakerootatau ruang nama harus digunakan juga.
Anton Samsonov