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)