允许特定的linux用户绑定到端口443

时间:2015-07-24 21:49:38

标签: linux ssl jboss

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

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

但是,问题是非特权用户无法绑定到< 1024端口。我知道为什么设计这样做的原因,但是,这个安全原则不允许我用我的JBoss应用程序实现良好的安全性。

解决此问题的最佳方法是什么?我当然希望避免像绑定到端口8443那样丑陋的解决方案。

1 个答案:

答案 0 :(得分:0)

<强> 1

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

  • 以root身份启动服务;
  • 创建套接字并将其绑定到特权端口;
  • 通过切换到非特权用户来删除root权限:
    • 使用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)。