Golang删除权限(v1.7)

时间:2016-12-20 18:20:41

标签: security go setuid

我想通过golang制作自定义网络服务器。 它需要root才能绑定到端口80。 但是我想尽快删掉root。     syscall.SetUid()根据ticket #1435返回“不支持”。

我总是可以通过iptables将端口80重新路由到其他地方,但是这会打开任何非root进程来构建我的网络服务器 - 我不希望这样做。

如何删除应用程序的权限(或者干净地解决此问题)。

1 个答案:

答案 0 :(得分:3)

我会做@JimB建议的。

另一方面,在Linux上还有另一个技巧:您可以使用os/exec.Command()执行/proc/self/exe,同时告诉它在SysProcAttr.Credential os/exec.Cmd字段中使用替代凭据它生成的实例。

请参阅go doc os/exec.Cmdgo doc syscall.SysProcAttrgo doc syscall.Credential

确保当您重新执行程序时,需要确保生成的程序将其标准I / O流连接到其父程序,并且还继承了所有必需的打开文件。 / p>

另一个值得一提的替代方案是,根本不尝试绑定到端口80,并在那里挂一个合适的Web服务器,然后反向代理基于主机名的虚拟主机或特定的URL路径前缀(或前缀)到你的Go进程监听任何TCP或Unix套接字。 Apache(至少2.4)和Nginx都可以轻松完成。