我可以将非特权应用程序绑定到 Mac OS X 上的特权端口吗?

Posted

技术标签:

【中文标题】我可以将非特权应用程序绑定到 Mac OS X 上的特权端口吗?【英文标题】:Can I bind an unprivileged application to privileged port on Mac OS X? 【发布时间】:2012-02-03 03:47:31 【问题描述】:

我正在编写一个服务器类型的应用程序,它通常由用户运行,但需要绑定到特权 TCP 端口(502 - Modbus TCP)。端口号是行业标准,而我的应用程序是模拟器,所以我无法真正更改为 >1024,因为大多数设备都针对此端口号进行了预编程,无法更改。

“根 EUID 安全策略”保护端口 502 不被除根以外的任何人访问(请参阅 Authentication, Authorization, and Permissions Guide )。因此,使用端口

出于明显的安全原因,我试图避免以 root 身份运行我的模拟器应用程序。 沙盒可以解决这个问题,但我知道它只在 10.7 Lion 中可用,我必须在 10.6 SL 中工作。

有人可以指出在这种情况下什么被认为是端口访问的“最佳实践”,也许还有一些指向示例和进一步阅读的指针。

非常感谢

PS:我看过 Apple 的 Better Authorization Sample,但它已有 5 年历史,涉及由 launchd 运行的特权帮助工具有点麻烦。我希望有一个更好的解决方案,不涉及以 root 身份运行进程。

【问题讨论】:

【参考方案1】:

您可以使用ipfw 来执行此操作;尝试here 了解它,man ipfw 了解更多详情。

【讨论】:

抱歉,我最初的问题并没有说明我正在编写一个 coca 应用程序并且需要从我的应用程序中绑定到端口。我已经编辑了我的原始问题以反映这一点。【参考方案2】:

看看 Apache 的 https 启动方式……它以 root 身份启动,足以获取端口 80 / 443,然后从那时起以 'apache' 或 'http' 用户身份运行。

【讨论】:

以上是关于我可以将非特权应用程序绑定到 Mac OS X 上的特权端口吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何将Mac OS X10.10.5下的Python2.7升级到最新的Python3.5

Mac OS X Leopard 上的 Emacs 键绑定

Mac OS X Leopard 上的 Emacs 键绑定

Mac OS X 绑定80端口,不装nginx的小技巧

在 OS X 上使用 python 的 CoreLocation

install4j 可以用来允许应用程序绑定到特权端口吗?