【问题标题】:echo framework, downgrade privileges at which moment?echo 框架,什么时候降级权限?
【发布时间】:2021-06-07 22:52:25
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这能回答你的问题吗? stackoverflow.com/q/41248866/13860
  • TL;DR;由于它的线程模型,你正在尝试的东西在 Go 中很难甚至是不可能的。通常最好使用变通方法。
  • 你可以试试“ListenerAddr()”,它不应该在“Start”打开端口之前返回,因为它被“startupMutex”锁定了
  • @lumos0815 这成功了!我在我的额外线程中循环,直到它不返回 nil。如果它回来,端口已打开,我可以降级。如果您单独输入,我可以将其标记为解决方案!这就是我解决的方法: func descendPrivileges(e *echo.Echo, userName string) { for { adr := e.ListenerAddr() if adr != nil {gradeMe(userName) break } time.Sleep(100 * time.Millisecond ) } }

标签: go go-echo


【解决方案1】:

您可以使用 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) } 
} 

【讨论】:

    猜你喜欢
    • 2014-02-09
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 2014-09-05
    • 2023-03-15
    • 2012-05-29
    • 2012-09-04
    相关资源
    最近更新 更多