无法在 SonarQube 上使用端口 80
Can't use port 80 on SonarQube
我第一次尝试使用 root 用户 运行 SonarQube 时失败了。在互联网上搜索我发现新的 Sonar 应该由非 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
您当前无法通过端口 80 使用 SonarQube 实际上是由于几乎所有 Linux 发行版提供的限制:特权端口。
所有低于1024的端口不能被非root用户执行的程序监听——也就是说,只有用户"root"可以运行程序运行 在这些端口上。这是为了确保当您连接到该端口上的应用程序 运行ning 时,该应用程序是 "the real thing" 而不是黑客伪造的。
因为 SonarQube 不允许您以 root 身份执行它,将端口 80 代理到 SonarQube 正在执行的高于 1024 的端口是绕过此限制的唯一方法。
存在一些允许非root用户使用端口80和433的方法,使用iptables
重定向端口请求,CAP_NET_BIND_SERVICE
和authbind
。更简单的方法是authbind
.
使用authbind
授予一次性访问权限,具有更精细的user/group/port控制:
authbind
(man page) 工具正是为此而存在。
使用您最喜欢的包管理器安装 authbind
。
将其配置为授予对相关端口的访问权限,例如允许来自所有用户和组的 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
现在通过 authbind
执行命令(可选择指定 --deep
或其他参数,请参阅手册页):
authbind --deep /path/to/binary command line args
例如
authbind --deep java -jar SomeServer.jar
此选项向 user/group 授予信任并提供对每个端口访问的控制,但据我所知,仅支持 IPv4。
这些是我用来记录我的链接:
- allow non-root process to bind to port 80 and 443
- Is there a way for non-root processes to bind to "privileged" ports on Linux?
- how to run a server on port 80 as a normal user on linux
我第一次尝试使用 root 用户 运行 SonarQube 时失败了。在互联网上搜索我发现新的 Sonar 应该由非 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
您当前无法通过端口 80 使用 SonarQube 实际上是由于几乎所有 Linux 发行版提供的限制:特权端口。
所有低于1024的端口不能被非root用户执行的程序监听——也就是说,只有用户"root"可以运行程序运行 在这些端口上。这是为了确保当您连接到该端口上的应用程序 运行ning 时,该应用程序是 "the real thing" 而不是黑客伪造的。
因为 SonarQube 不允许您以 root 身份执行它,将端口 80 代理到 SonarQube 正在执行的高于 1024 的端口是绕过此限制的唯一方法。
存在一些允许非root用户使用端口80和433的方法,使用iptables
重定向端口请求,CAP_NET_BIND_SERVICE
和authbind
。更简单的方法是authbind
.
使用authbind
授予一次性访问权限,具有更精细的user/group/port控制:
authbind
(man page) 工具正是为此而存在。
使用您最喜欢的包管理器安装
authbind
。将其配置为授予对相关端口的访问权限,例如允许来自所有用户和组的 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
现在通过
authbind
执行命令(可选择指定--deep
或其他参数,请参阅手册页):authbind --deep /path/to/binary command line args
例如
authbind --deep java -jar SomeServer.jar
此选项向 user/group 授予信任并提供对每个端口访问的控制,但据我所知,仅支持 IPv4。
这些是我用来记录我的链接:
- allow non-root process to bind to port 80 and 443
- Is there a way for non-root processes to bind to "privileged" ports on Linux?
- how to run a server on port 80 as a normal user on linux