如何让普通用户在 ubuntu 上使用端口 80?

如何让普通用户在 ubuntu 上使用端口 80?

我以普通用户身份登录 ubuntu 服务器,需要在 80 端口启动服务。目前,它不允许我这样做,因为它是为管理员用户保留的。

但是我在另一台 ubuntu 服务器上看到了相同类型的用户,该用户已启动服务并使用端口 80。我想设置当前用户以达到相同的行为,但我不知道该怎么办?我完全控制了这台 ubuntu 服务器。

这是我在该服务器上的当前服务状态:

systemctl -l status  gns3.service
● gns3.service - GNS3 server
     Loaded: loaded (/lib/systemd/system/gns3.service; enabled; vendor preset: enabled)
     Active: activating (auto-restart) (Result: exit-code) since Wed 2022-03-23 16:57:07 UTC; 4s ago
    Process: 78994 ExecStartPre=/bin/mkdir -p /var/log/gns3 /var/run/gns3 (code=exited, status=0/SUCCESS)
    Process: 79003 ExecStartPre=/bin/chown -R gns3:gns3 /var/log/gns3 /var/run/gns3 (code=exited, status=0/SUCCESS)
    Process: 79007 ExecStart=/usr/local/bin/gns3server --log /var/log/gns3/gns3.log (code=exited, status=1/FAILURE)
   Main PID: 79007 (code=exited, status=1/FAILURE)

以下是服务日志文件中的内容:

tail -10 /var/log/gns3/gns3.log
2022-03-23 17:13:13 INFO run.py:224 Config file /etc/gns3/gns3_server.conf loaded
2022-03-23 17:13:13 INFO run.py:243 Running with Python 3.8.10 and has PID 82762
2022-03-23 17:13:13 INFO run.py:79 Current locale is en_US.UTF-8
2022-03-23 17:13:13 INFO web_server.py:318 Starting server on 0.0.0.0:80
2022-03-23 17:13:13 INFO __init__.py:63 Load controller configuration file /etc/gns3/gns3_controller.conf
2022-03-23 17:13:13 INFO __init__.py:67 Controller is starting
2022-03-23 17:13:13 INFO compute.py:64 Create compute local
2022-03-23 17:13:13 INFO compute.py:364 Connecting to compute 'local'
2022-03-23 17:13:13 WARNING compute.py:367 Cannot connect to compute 'local': Cannot connect to host 127.0.0.1:80 ssl:default [Connect call failed ('127.0.0.1', 80)]
2022-03-23 17:13:13 CRITICAL web_server.py:88 Could not start the server: [Errno 13] error while attempting to bind on address ('0.0.0.0', 80): permission denied

该系统建立在 ubuntu 20.4 映像之上。

答案1

1024(1000?)以下的端口是为 root 配置和 root 服务器进程保留的。如果没有 root 干预,您将无法在小于 1024(1000?)的端口上运行服务器进程。

但是,您可以以普通用户的身份在 1000/1024 以上的任何端口上启动服务器进程,但除了用于测试之外,这可能对您没有帮助。

另外,您是否知道端口 80 通常保留给 Web 服务器进程,对吗?

希望你现在有足够的信息。

答案2

我在另一个帖子中找到了解决方案。因此,如果有人遇到类似问题,以下是详细信息:

  1. 我的服务正在运行gns3server,它是python代码。

  2. 在运行时,它使用“/usr/bin/python3.8”来触发实际服务。

  3. 因此为了让“python3.8”能够使用端口 80,我需要以 root 身份运行此命令:

    sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/python3.8

  4. 然后重新启动我的 ubuntu 服务器。

一旦恢复,我发现我的服务在端口 80 上正常运行,没有任何问题。

相关内容