我负责设置一个通过SSL运行的JBoss Web应用程序,因此应该可以通过端口443访问。
当然,它可以由具有root权限的用户启动,但这是我想要避免的。我想由非特权用户运行它,这样我就可以严格控制这个应用程序所做的一切,并且不会提供超出需要的访问权限。
但是,问题是非特权用户无法绑定到< 1024端口。我知道为什么设计这样做的原因,但是,这个安全原则不允许我用我的JBoss应用程序实现良好的安全性。
解决此问题的最佳方法是什么?我当然希望避免像绑定到端口8443那样丑陋的解决方案。
答案 0 :(得分:0)
<强> 1 强>
编写使用特权端口的网络服务的常用方法是:
setuid(2)
不可逆转地删除权限; seteuid(2)
删除权限,但仍可以切换回root。<强> 2 强>
允许非特权用户启动特权服务的常用方法是设置setuid bit
。
绑定到特权端口后,服务可以切换回real user id
(启动服务的用户)或某个特殊用户(如cron守护程序的cron
用户)。
第3 强>
另一个(特定于Linux)选项是在不提供完全root权限的情况下提供服务CAP_NET_BIND_SERVICE
功能。
这可以使用libpcap
直接在代码中完成(但您仍然需要setuid bit
),或者将功能位附加到可执行文件,如果您的文件系统支持它(因此您不需要) setuid bit
)。