Files
修改 tar 存檔中文件的文件所有權
我正在以使用者身份工作,我想創建一個 tar 存檔,在解壓縮時(由 root 使用者)將提取其具有 root 所有權的文件(否則,在提取文件後,root 必須手動更改每個文件的所有權到目的地)。
我發現
fakeroot
這似乎正是這樣做的。但我找不到創建檔案所需的語法。如何創建 tar.xz 存檔,以便在由 root 解包時文件具有 root 所有權?
do something with fakeroot ... tar cfpJ foo.tar.xz foo/
如何創建 tar.xz 存檔,以便在由 root 解包時文件具有 root 所有權?
這取決於解包的根:
tar --no-same-owner -xf ...
如果你想讓它們都以 root 開頭,你可以使用
tar --owner=root --group=root -cf ...
假根
fakeroot實用程序或較新的實用程序fakeroot -ng(目的相同,實現技術不同)執行一個程序,並假裝該程序以 root 身份執行並且系統呼叫
chown
成功。只有程序認為這些呼叫成功了,文件系統中實際上沒有任何反映(因為fakeroot
沒有額外的權限,所以不可能)。但是,如果程序更改文件的所有權,然後根據該文件的所有權採取一些行動,這可能會改變程序的行為。通過執行 fakeroot 環境從 fakeroot 中獲得有用工作的典型方法會發生以下情況:
- 創建一些文件,移動它們,更改它們的所有權和模式等。
- 創建這些文件的存檔。
例子:
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