tar 的 -p(保留权限)标志实际上保留了什么?

nic*_*coX 25 permissions command-line tar

-p创建和提取 tarball 时,标志实际上保留了什么?是rwx它保留的权限吗?

当我创建一个htdocs/由 root 拥有的tarball 时,将其解压缩到我的本地机器将所有权从 root 更改为我的用户。

ter*_*don 26

所有权和权限是两个不同的东西。该-p标志保留权限。在 *nix 系统上,普通用户不能将文件所有权更改为不是他们自己的用户。

正如这里所解释的:

只有有效用户 ID 等于文件用户 ID 或具有适当权限的进程才能更改文件的所有权。如果 _POSIX_CHOWN_RESTRICTED 对路径有效:

  • 更改用户 ID 仅限于具有适当权限的进程。

  • 当且仅当 owner 等于文件的用户 ID 或 ( uid_t)-1 且 group 相等时,允许更改组 ID 的进程的有效用户 ID 等于文件的用户 ID,但没有适当的权限调用进程的有效组 ID 或其补充组 ID 之一。

@Gilles 在这个Unix & Linux answer 中很好地解释了这背后的基本原理:

此限制的原因是,将文件赠送给其他用户可能会导致在不常见但仍然很重要的情况下发生坏事。例如:

  • 如果系统启用了磁盘配额,Alice 可以在只有她可以访问的目录下创建一个全局可写文件(因此其他人无法访问该全局可写目录),然后运行 ​​chown 使该文件归另一个用户 Bill 所有. 即使只有 Alice 可以使用该文件,该文件也将计入 Bill 的磁盘配额。
  • 如果 Alice 向 Bill 赠送了一个文件,则没有任何痕迹表明 Bill 没有创建该文件。如果文件包含非法或以其他方式妥协的数据,这可能是一个问题。
  • 某些程序要求其输入文件属于特定用户,以便对请求进行身份验证(例如,该文件包含一些程序将代表该用户执行的指令)。这通常不是一个安全的设计,因为即使 Bill 创建了一个包含语法正确指令的文件,他也可能不打算在这个特定时间执行它们。尽管如此,允许 Alice 创建一个包含任意内容的文件并将其作为 Bill 的输入只会让事情变得更糟。

因此,即使您使用 tar 的--same-owner标志,您仍然需要提取文件root以保留所有权。该标志默认为root,所以您想要的是:

sudo tar xpf foo.tgz
Run Code Online (Sandbox Code Playgroud)


Rin*_*ind 11

还有 2 个有趣的 tar 选项:

--same-owner
       try extracting files with the same ownership as exists in the ar?
       chive (default for superuser)

--no-same-owner
       extract files as yourself (**default for ordinary users**)
Run Code Online (Sandbox Code Playgroud)

第二个是默认设置,因此您可以添加--same-owner以保存您的用户。您可能必须使用sudo.

除此之外:这仅适用于支持 POSIX 的系统。Ubuntu 以外的操作系统可能没有这两个选项(它们不是标准的)。

  • `--same-owner` 不适用于非 root 用户,他们无权将所有权设置给除自己之外的任何人。这是由 [POSIX](http://pubs.opengroup.org/onlinepubs/009695399/functions/chown.html) 定义的。 (4认同)