我在一个EC2 linux实例上运行了一个。当我试图在端口设置为1883的情况下启动蚊子时,它工作得很好,但是当我尝试用端口443启动它时,它会说“打开ipv4端口443”,然后下一行是“错误:权限被拒绝”。在我的例子中,那个港口是开着的。我找不到关于这个具体错误的任何信息。
发布于 2018-10-02 02:49:31
在Linux和UNIX计算机上,1024以下的端口受到限制,因此只有以root用户身份运行的进程才能监听它们。如果您的进程没有以root用户的身份运行,则当进程试图侦听该端口或1024以下的任何其他任何内容时,它将得到一个“拒绝权限”错误。
这是通过约定来实现的,以确保在已知端口上运行的服务器只能由具有对计算机的管理访问权限的人启动。这可以防止多用户系统上的普通用户冒充系统上的官方服务器启动恶意服务器。
如果您必须使用低于1024的端口,则可以通过确保在以root用户身份运行时启动服务器来确认这是问题所在。
将服务器作为root运行对于生产系统来说不是一个很好的选择。必须侦听特权端口的服务器通常以root身份启动,打开端口,然后通过将用户‘s更改为服务器特有的非根用户来降低其权限。然后,如果远程攻击者设法利用服务器中的漏洞,那么与服务器作为root用户运行时相比,他们对系统的访问将更少。
如果您运行蚊子作为根,您一定要使用mosquitto.conf中的用户选项来设置启动后应该切换到的用户名蚊帐。
顺便说一句,443是运行MQTT代理的一个特殊选择,因为它是HTTPS使用的端口。
https://stackoverflow.com/questions/52599858
复制相似问题