将go代码提升到root?最佳实践?



我在Linux上有一个Go web应用程序,需要操作网络堆栈。执行操作的代码在Go包中,需要以root权限运行-例如,如果它没有sudo - d,它会因权限失败而失败。

但是,我不想以更高的权限运行整个web应用程序。只是需要它的代码。我是否必须在单独的文件中调用(exec.Command)并使用suid?还是有更优雅的方法?

最佳实践是什么?

您可以使用Linux Capabilities并为您的进程提供完成任务所需的最小功能集(如CAP_NET_ADMIN)。一旦代码达到所有设置的点,您的进程就可以放弃由分配的功能赋予的特权。

Go包cap为Linux libcap提供了执行此任务的绑定。

下面是一个很好的Go示例程序做特权的事情,然后放弃特权使用上面链接的包:https://sites.google.com/site/fullycapable/getting-started-with-go/building-go-programs-that-manipulate-capabilities?authuser=0

请注意,进程在执行之前仍然需要被赋予初始的能力集(例如使用setcap,如sudo setcap cap_net_admin+ep ./path/to/binary)。

相关内容

最新更新