0

当我第一次尝试使用 root 用户运行 SonarQube 时,它​​失败了。在互联网上搜索我发现新的声纳应该由非 root 用户执行。我使用以下命令创建了用户声纳useradd -m -s /bin/bash sonar并执行了chmod -R 777 sonaqube-7.0. 然后我用声纳用户登录:sudo su sonar。当我执行./sonar.sh console所有工作正常。但是当我将默认端口 9000 更改为端口 80 时,这会失败。使用命令netstat -plunt检查端口 80 是否正在使用,但我使用的唯一端口是 22 (sshd)、5432 (postgres) 和 25 (exim4)。我认为这是因为用户 sonar 没有使用权限端口 80。我怎么不能将端口 80 与 SonarQube 一起使用?

我当前的操作系统是 debian 9

4

2 回答 2

2

您目前无法通过端口 80 使用 SonarQube 实际上是由于几乎所有 Linux 发行版都提供了限制:特权端口。

非 root 用户执行的程序不能监听1024以下的所有端口——也就是说,只有用户“root”可以运行在这些端口上运行的程序。这是为了确保当您连接到在该端口上运行的应用程序时,该应用程序是“真实的”,而不是黑客伪造的。

因为 SonarQube 不允许您以 root 身份执行它,所以将端口 80 代理到 SonarQube 正在执行的高于 1024 的端口是绕过此限制的唯一方法。

于 2018-04-13T14:31:40.163 回答
1

存在一些允许非 root 用户使用端口 80 和 433 的方法,iptables用于重定向端口请求,CAP_NET_BIND_SERVICE以及authbind. 更简单的方法是authbind

用于authbind授予一次性访问权限,具有更精细的用户/组/端口控制:

authbind手册页)工具正是为此而存在的。

  1. authbind使用您最喜欢的包管理器安装。

  2. 配置它以授予对相关端口的访问权限,例如允许来自所有用户和组的 80 和 443:

    sudo touch /etc/authbind/byport/80
    sudo touch /etc/authbind/byport/443
    sudo chmod 777 /etc/authbind/byport/80
    sudo chmod 777 /etc/authbind/byport/443
    
  3. 现在通过authbind(可选地指定--deep或其他参数,请参阅手册页)执行您的命令:

    authbind --deep /path/to/binary command line args
    

    例如

    authbind --deep java -jar SomeServer.jar
    

此选项授予用户/组信任并提供对每个端口访问的控制,但 AFAIK 仅支持 IPv4。

这些是我用来记录我的链接:

  1. 允许非 root 进程绑定到端口 80 和 443
  2. 有没有办法让非 root 进程绑定到 Linux 上的“特权”端口?
  3. 如何在 linux 上以普通用户身份在 80 端口上运行服务器
于 2018-04-13T14:50:51.357 回答