登录
首页 >  Golang >  Go问答

Golang 删除权限 (v1.7)

来源:Golang技术栈

时间:2023-03-22 21:53:45 323浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《Golang 删除权限 (v1.7)》,介绍一下golang,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

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

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

如何放弃我的应用程序的权限(或者干净地解决这个问题)。

正确答案

我会按照@JimB 的建议做:

首选的方法是使用 linux 功能,只允许您的程序绑定到正确的端口,而不具有完整的 root 功能。

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

见和。go doc os/exec.Cmd_go doc syscall.SysProcAttr``go doc syscall.Credential

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


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

理论要掌握,实操不能落!以上关于《Golang 删除权限 (v1.7)》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>