我有一个在EC2 Linux实例上运行的Mosquitto代理。当我尝试使用端口设置为1883启动mosquitto时,它可以正常工作,但是当我尝试使用端口443启动它时,它显示“ Opening ipv4 port 443”,然后下一行是“错误:权限被拒绝”。我在我的实例中打开了该端口。我找不到有关此特定错误的任何信息。
答案 0 :(得分:1)
在Linux和UNIX计算机上,限制使用1024以下的端口,以便只有以root用户身份运行的进程才能侦听它们。如果您的进程未以root用户身份运行,则尝试在该端口或1024以下的任何端口上侦听时,都会收到“权限被拒绝”错误。
这是按照惯例完成的,以确保运行在知名端口上的服务器只能由对计算机具有管理访问权限的人员启动。这样可以防止多用户系统上的普通用户启动伪装成系统上正式服务器的恶意服务器。
如果必须使用1024以下的端口,则可以通过确保以root用户身份运行服务器来确认这是问题所在。
以root身份运行服务器不是生产系统的最佳选择。必须侦听特权端口的服务器通常将以root用户身份启动,打开端口,然后通过将其userid更改为特定于该服务器的非root用户来降级其特权。然后,如果远程攻击者设法利用服务器中的漏洞,则与服务器以root用户身份运行相比,他们对系统的访问较少。
如果以root用户身份运行mosquito,请确保使用 mosquitto.conf 中的 user 选项来设置用户名mosquitto在启动后应切换为用户名。
BTW,443是运行MQTT代理的特殊选择,因为它是HTTPS使用的端口。