我正在编写一个服务器类型的应用程序,它通常由用户运行,但需要绑定到特权TCP端口(502 - Modbus TCP)。端口号是行业标准,我的应用程序是模拟器,所以我无法真正更改为> 1024,因为大多数设备都是针对此端口号预编程的,无法更改。
根据EUID安全政策"保护端口502不被除root之外的任何人访问(参见Authentication, Authorization, and Permissions Guide)。因此,使用端口<时,对CFSocketSetAddress的调用失败。 1024。
出于明显的安全原因,我试图避免以root身份运行我的模拟器应用。 沙盒可以解决这个问题,但据我所知,它仅适用于10.7 Lion,我必须使用10.6 SL。
有人可以指出会考虑什么"最佳做法"在这个实例中进行端口访问,可能还有一些指向示例和进一步阅读的指针。
非常感谢
PS:我见过Apple的Better Authorization Sample,但它已经有5年了,涉及一个由launchd运行的特权帮助工具,有点麻烦。我希望有一个更好的解决方案,不涉及以root身份运行流程。答案 0 :(得分:0)
您可以使用ipfw
执行此操作;请尝试here了解相关信息,并man ipfw
了解详情。
答案 1 :(得分:-1)
看看Apache的https启动的方式......它以root身份启动,足以获取端口80/443,然后从此开始以'apache'或'http'用户身份运行。