我负责建立运行通过SSL,因此应通过端口443访问的JBoss Web应用程序的。
当然,也可以通过具有root权限的用户可以启动,但是这是我想避免的。 我想用非特权用户来运行它,所以我可以严格控制一切此应用程序,并给予不超过访问需要。
然而,问题是,非特权用户不能结合<1024个端口。 我知道的原因,这是如此的设计,但是,这种安全性原则并没有让我与我的JBoss应用养成良好的安全性。
什么是解决这个的最好方法? 我当然想避免像绑定到8443端口,而不是一个丑陋的解决方案。
我负责建立运行通过SSL,因此应通过端口443访问的JBoss Web应用程序的。
当然,也可以通过具有root权限的用户可以启动,但是这是我想避免的。 我想用非特权用户来运行它,所以我可以严格控制一切此应用程序,并给予不超过访问需要。
然而,问题是,非特权用户不能结合<1024个端口。 我知道的原因,这是如此的设计,但是,这种安全性原则并没有让我与我的JBoss应用养成良好的安全性。
什么是解决这个的最好方法? 我当然想避免像绑定到8443端口,而不是一个丑陋的解决方案。
1。
编写使用特权端口的网络服务常用的方法是:
setuid(2)
不可逆地下降特权; seteuid(2)
下降的特权,但仍然能够切换回根。 2。
允许非特权用户启动特权服务常用的方法是设置setuid bit
。
绑定到特权端口后,服务可以切换回real user id
(用户即开始为您服务)或某些特殊用户(如cron
用户对cron守护程序)。
3。
另一个(Linux特定的)选择是给你的服务CAP_NET_BIND_SERVICE
能力没有充分root权限。
这可以直接在代码中使用来完成libpcap
(但你仍然需要setuid bit
),或通过附着能力位可执行文件,如果你的文件系统支持的话(因此你不需要setuid bit
)。