2

我使用echo 框架来创建我的 API 服务器。它由systemd启动,默认需要 root,以便获取 1024 以下的端口。为了安全,我喜欢在echo 框架获取监听端口后降级我的 go 程序的权限。

我知道如何降级,但我找不到合适的事件/回调?问题是,那echo.Start()并不echo.StartAutoTLS()要回来。我可以创建一个并行线程并尝试找到我的回显会话的一些状态值,告诉我端口已打开,但我也找不到这样的状态指示。

如何确保在获取端口后执行一些代码(并且确定)?

到目前为止,我在服务器创建之前运行了一个并行 go 线程,然后等待 5 秒进行降级。到目前为止它有效,但这很hacky,我不喜欢它:-(

4

1 回答 1

2

您可以使用 e.ListenerAddr() 检查端口是否打开。它将返回 nil,直到端口打开。

func degradePrivileges(e *echo.Echo, userName string) { 
    for { adr := e.ListenerAddr() if adr != nil { 
        degradeMe(userName) break 
    } 
    time.Sleep(100 * time.Millisecond) } 
} 
于 2021-06-07T14:52:25.667 回答