以普通用户身份使用 root 拥有的文件创建 tar

car*_*rio 4 packaging root tar permissions ownership

我想以普通(非 root)用户身份构建一个 tar 文件,其中包含一些准备好的二进制文件和这样的配置文件;

etc/binaries.conf
usr/bin/binary1
usr/bin/binary2
Run Code Online (Sandbox Code Playgroud)

这意味着要提取到/目录下的文件系统中。

像传统的软件包 .deb、.rpm 等,但我需要“独立于包管理器”。所以可能我只会有一个 .tar 文件(也许一些 gzip、bzip、lzip 应该添加到混合中,但那是在外面)。

问题/问题

我在这里的问题是,我希望建立这种焦油作为用户,我想知道是否有建立这种焦油的方式常规(非root用户),然后,当.tar文件分发到机器上,真正的root用户提取这些二进制文件,它们将作为root用户或提取二进制文件的用户拥有的文件安装?

例子

因为现在,当我以普通(非 root)用户身份创建 .tar 文件时

$ tar cf dist.tar dist/
Run Code Online (Sandbox Code Playgroud)

然后以root用户身份提取 .tar

# tar xf dist.tar -C /
Run Code Online (Sandbox Code Playgroud)

我看到二进制文件和配置文件以普通用户为所有者,而不是 root 用户。

$ ls -la /usr/bin/binary1
-rwxr-xr-x 1 user user 30232 jun  20 19:06 /usr/bin/binary1
Run Code Online (Sandbox Code Playgroud)

我想拥有

$ ls -la /usr/bin/binary1
-rwxr-xr-x 1 root root 30232 jun  20 19:06 /usr/bin/binary1
Run Code Online (Sandbox Code Playgroud)

澄清一下,这种手工制作的包装非常适合封闭基础设施中的某些任务,所以现在,使用 .deb、.rpm 或任何其他更复杂的包装系统都不是一种选择。

Tho*_*key 6

提取是什么决定了所有权,而不是创建存档。您可以通过查看档案的目录来看到这一点,例如,

tar tvf dist.tar
Run Code Online (Sandbox Code Playgroud)

如果以普通用户身份创建文件

tar --owner 0 --group 0 dist.tar dist
Run Code Online (Sandbox Code Playgroud)

变魔术