【问题标题】:Does my golang webserver need to be run as the root user in order to support HTTPS/TLS?我的 golang 网络服务器是否需要以 root 用户身份运行才能支持 HTTPS/TLS?
【发布时间】:2016-08-20 21:59:00
【问题描述】:

我想使用 golang 内置的 ListenAndServeTLS() 函数来提供我的网络服务器(这是一个非常简单的),我需要向它展示我的密钥存储位置。密钥存储在只有 root 用户可以访问的位置(Let's Encrypt 默认这样做),除非我是 root 用户,否则我无法监听端口 80 或 443。

这是否意味着我必须一直以 root 身份运行脚本?这不是不安全吗?

【问题讨论】:

  • 应用程序二进制文件和证书不能在同一个组吗?
  • 这是一个 Linux 问题,与 golang 无关。

标签: http ubuntu ssl go https


【解决方案1】:

要添加到@ma_il 的答案,您可以使用 setcap 但您仍然需要更改证书的权限。

或者构建您的应用,然后以 root 身份运行,例如:go build && sudo ./app

【讨论】:

  • 为什么不总是以 root 身份运行它呢?
  • @mickdoe 人们不喜欢这样做,主要是因为代码中存在漏洞可以让攻击者获得 root 访问权限,但在容器和 docker 时代,这样做还不错以 root 身份运行您的应用。
【解决方案2】:

公然引用写得很好的Caddy FAQ

没有。在 Linux 上,您可以使用 setcap 授予 Caddy 绑定到的权限 低端口。类似setcap cap_net_bind_service=+ep ./caddy 应该管用。请查阅您的操作系统的手册页以确定。你可以 也可以使用 iptables 转发到更高的端口。

特权降级是另一种选择,但它is not yet a reliable solution。一旦这成为一个 稳健的可能性。鼓励有关读者参与 帮助这成为现实。

【讨论】:

  • 那么有这方面的教程吗?我似乎找不到如何使用 setcap 之类的东西。
猜你喜欢
  • 1970-01-01
  • 2021-06-22
  • 2015-09-28
  • 2018-05-11
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
  • 2017-02-04
  • 2012-09-04
相关资源
最近更新 更多