如何更改通过Bazel生成的二进制文件的所有权?

问题描述

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

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

然后我在测试中使用此二进制文件

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

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

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

解决方法

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

该标记导致测试在其namespace中以root用户身份运行。这意味着它可以做root可以做的许多事情(创建suid根文件,挂载,配置网络设备等),但是对命名空间以外的任何影响(例如,它无法关闭计算机)都不会。

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