1

假设我有一个从以下规则生成的二进制文件:

cc_binary(
  name = "script",
  srcs = ["script.c"],
)

然后我在我的测试中使用这个二进制文件:

cc_test(
  name = "test",
  srcs = ["test.cc"],
  data = [":script"],
)

我的问题是:是否可以通过bazel 本身更改此二进制文件的所有权( chown root:root)和权限( ) ?chmod +s

该二进制文件包含一些只能由 root 执行的命令,因此需要更改所有权和权限。

4

1 回答 1

2

Bazel 测试在沙箱中运行。详细信息取决于您的操作系统、您传递给 bazel 的标志以及哪个 bazel 版本。tags = ["requires-fakeroot"](在你的cc_test)是要求沙盒实现以 root 身份运行测试的方式。正如文档所说This is only supported on Linux.

该标记导致测试在其命名空间内以 root 身份运行。这意味着它可以做很多 root 可以做的事情(创建 suid 根文件、挂载东西、配置网络设备等),但在命名空间之外没有任何影响(例如,它不能关闭您的计算机)。

您提到的权限将使文件setuid root。普通用户不能这样做,因为你可以复制 bash suid root,运行它,然后成为 root。这意味着如果要生成一个 setuid 根文件,您需要以 root 身份运行您的构建,这不是运行 bazel 的常用方法。如果您只是想在您的目标系统上创建 setuid 根文件,我会使用pkg_tar将这些文件打包在一个 tarball 中,并使用mode = "6555"它来使其成为 suid。默认所有者已经是0.0,又名 root。

于 2020-10-27T22:09:14.513 回答