【问题标题】:Can't use port 80 on SonarQube无法在 SonarQube 上使用端口 80
【发布时间】:2018-09-23 22:32:15
【问题描述】:

我第一次尝试以 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)。我认为这是因为用户声纳没有80端口的使用权限。SonarQube怎么不能使用80端口?

我当前的操作系统是 debian 9

【问题讨论】:

  • 我已经读过了,但我认为使用 nginx 或 apache 代理从端口 80 到 9000 不是一个好主意,如果这可以通过使用声纳配置文件来完成
  • 很遗憾,您无法以非 root 用户身份在端口 =

标签: sonarqube sonarqube7


【解决方案1】:

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

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

authbind (man page) 工具正是为此而存在的。

  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. allow non-root process to bind to port 80 and 443
  2. Is there a way for non-root processes to bind to "privileged" ports on Linux?
  3. how to run a server on port 80 as a normal user on linux

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-30
      • 1970-01-01
      • 2018-05-12
      • 2021-06-05
      • 2019-03-01
      • 2023-02-12
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      相关资源
      最近更新 更多