use*_*963 12 tar permissions files
我正在以用户身份工作,我想创建一个 tar 存档,在解压缩时(由 root 用户)将提取具有 root 所有权的文件(否则,在提取文件后,root 必须手动更改每个文件的所有权到达目的地)。
我发现fakeroot这似乎正是这样做的。但是我找不到创建存档所需的语法。
如何创建 tar.xz 存档,以便文件在被 root 解压时拥有 root 所有权?
do something with fakeroot ...
tar cfpJ foo.tar.xz foo/
Run Code Online (Sandbox Code Playgroud)
gol*_*cks 15
如何创建 tar.xz 存档,以便文件在被 root 解压时拥有 root 所有权?
这取决于解包的根:
tar --no-same-owner -xf ...
Run Code Online (Sandbox Code Playgroud)
如果你想让它们都成为 root,你可以使用
tar --owner=root --group=root -cf ...
Run Code Online (Sandbox Code Playgroud)
的fakeroot的效用,或较新的实用的fakeroot-NG(同样的目的,不同的实现技术)上运行的程序和假装的程序,它运行为根,并且该系统调用,如chown成功了。只有程序认为这些调用成功了,文件系统中实际上没有任何反映(不可能,因为fakeroot没有额外的权限)。但是,如果程序更改了文件的所有权,然后根据该文件的所有权采取了某些操作,则可能会更改程序的行为。
通过运行 fakeroot 环境来从 fakeroot 中获得有用的工作的典型方法是:
例子:
fakeroot sh -c '
chown root:root usr/bin/foo
tar cf foo.tar usr
'
Run Code Online (Sandbox Code Playgroud)
您需要使用 的单个调用fakeroot,因为调用之间没有内存。
为了完整起见,我会提到,如果您有 Linux 内核 3.8,那么命名空间是创建假装 root 环境的另一种方式。用户空间支持还没有完全到位,所以我不会详细介绍。
解决问题的另一种方法是将存档安装为目录。您可以使用archivemount,它能够通过libarchive修改多种存档格式,包括压缩的 tar。
mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt
Run Code Online (Sandbox Code Playgroud)