Ubuntu运行Python Modbus/TCP服务脚本遇[Errno 13]权限拒绝求助
解决Ubuntu下Modbus/TCP服务端绑定502端口权限问题
问题原因
Linux系统中,1-1023端口属于特权端口,普通用户进程没有权限直接绑定这类端口——这是你遇到PermissionError: [Errno 13] Permission denied的核心原因(Windows系统无此限制)。你的脚本文件权限-rw-rw-r--是正常的,错误和文件目录权限无关。
解决方法
方法1:使用root权限运行脚本
直接用sudo以管理员身份执行脚本,注意指定conda环境的Python解释器路径,避免调用系统默认Python:
sudo /home/ben/anaconda3/bin/python test.py
方法2:修改监听端口到非特权范围
把脚本中的监听端口从502改成1024以上的端口(比如5020),修改示例:
# 原代码(类似) server = ModbusServer(host="0.0.0.0", port=502, ...) # 修改后 server = ModbusServer(host="0.0.0.0", port=5020, ...)
修改后普通用户直接运行python test.py即可,同时需要确保客户端连接时使用新端口。
方法3:给Python解释器添加绑定特权端口的能力
通过setcap命令给conda环境的Python赋予绑定特权端口的权限,这样后续无需sudo就能运行脚本:
sudo setcap 'cap_net_bind_service=+ep' /home/ben/anaconda3/bin/python
注意:如果后续更新conda环境的Python版本,需要重新执行此命令。
内容的提问来源于stack exchange,提问作者bbartling
相关产品推荐
相关产品推荐

