无法在SonarQube上使用端口80

时间:2018-04-13 14:19:12

标签: sonarqube sonarqube7

我第一次尝试使用root用户运行SonarQube时失败了。在互联网上搜索我发现新的声纳应该由非root用户执行。我使用folow命令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

2 个答案:

答案 0 :(得分:2)

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

非root用户执行的程序无法侦听 1024 以下的所有端口 - 也就是说,只有用户“root”才能运行在这些端口上运行的程序。这是为了确保当您连接到在该端口上运行的应用程序时,该应用程序是“真实的”而不是黑客提出的虚假应用程序。

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

答案 1 :(得分:1)

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

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

authbindman 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
    

    E.g。

    authbind --deep java -jar SomeServer.jar
    
  4. 此选项授予对用户/组的信任,并提供对每端口访问的控制,但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