将Golang作为www-data运行

Dro*_*dOS 1 security go

当我运行Node HTTP服务器应用程序时,我通常会调用自定义函数

function runAsWWW()
{
 try 
 {
  process.setgid('www-data');
  process.setuid('www-data');
 } catch (err) 
 {
  console.error('Cowardly refusal to keep the process alive as root.');
  process.exit(1);
 }
}
Run Code Online (Sandbox Code Playgroud)

server.listen(8080,'localhost',null,runAsWWW);

所以服务器实际上作为www-data用户运行,以提供更好的安全性.当我通过发布启动Golang Web服务器时,我能做些类似的事情go run index.go吗?

Jim*_*imB 7

不可以.你不能在go中可靠地setuid或setgid,因为这对多线程程序不起作用.

您需要通过某种类型的主管(例如supervisord,runit,monit)或通过init系统直接启动程序作为目标用户.