【问题标题】:Allow specific linux user to bind to port 443允许特定的 linux 用户绑定到端口 443
【发布时间】:2023-03-09 04:49:01
【问题描述】:

我负责设置一个通过 SSL 运行的 JBoss Web 应用程序,因此应该可以通过端口 443 访问。

当然,它可以由具有 root 权限的用户启动,但这是我想避免的。我想由非特权用户运行它,这样我就可以严格控制这个应用程序所做的一切,并且不会提供超出需要的访问权限。

但是,问题是非特权用户无法绑定到

解决此问题的最佳方法是什么?我当然希望避免使用丑陋的解决方案,例如绑定到端口 8443。

【问题讨论】:

  • 应该在 Unix & LinuxServer Fault 恕我直言。
  • 感谢您的建议,我现在在 Unix & Linux 论坛发帖。
  • 我认为这不是严格的管理问题,因为解决这个问题的常用方法需要对应用程序设计进行一些编码和更改 :)

标签: linux ssl jboss


【解决方案1】:

1.

编写使用特权端口的网络服务的常用方法是:

  • 以 root 身份启动服务;
  • 创建套接字并将其绑定到特权端口;
  • 通过切换到非特权用户来删除 root 特权:
    • 使用setuid(2) 不可逆转地放弃特权;
    • 使用seteuid(2) 删除权限,但仍可以切换回root。

2.

允许非特权用户启动特权服务的常用方法是设置setuid bit

绑定到特权端口后,服务可以切换回real user id(启动服务的用户)或某些特殊用户(如 cron 守护进程的cron 用户)。

3.

另一个(特定于 linux 的)选项是为您的服务提供 CAP_NET_BIND_SERVICE 功能,而不提供完全的 root 权限。

这可以使用libpcap(但您仍然需要setuid bit)在代码中直接完成,或者如果您的文件系统支持,也可以通过将功能位附加到可执行文件(因此您不需要setuid bit)。

【讨论】:

  • 我采用了 authbind 方式,感觉更简单更自然。
  • 我同意它更简单,但在我看来,它是设计不佳程序的一种解决方法。所以我不会推荐它用于“真正的”应用程序。请参阅 authbind 手册页中的“BUGS”部分。
猜你喜欢
  • 2011-12-28
  • 1970-01-01
  • 2013-02-25
  • 2015-11-05
  • 2018-12-11
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
相关资源
最近更新 更多