如何让Django在Lubuntu下安全访问串口(无需666权限)
无需全局666权限让Django访问串口的解决方案
不用给串口开全局666权限(这会带来不必要的安全风险),试试下面两个靠谱的解决方法:
方法1:将运行Django的用户加入dialout组
Linux系统里,串口设备(比如/dev/ttyUSB0)默认归dialout组所有。只要把运行Django进程的用户加到这个组,就能让它获得串口的读写权限:
- 先确定运行Django的用户:如果是用Nginx/Apache部署,通常是
www-data;本地开发的话就是你当前登录的用户名。 - 执行命令添加组权限:
sudo usermod -aG dialout <你的用户名> - 注销当前用户重新登录,或者重启Django服务,让组权限生效。
- 验证是否生效:执行
groups <你的用户名>,输出里应该能看到dialout。
方法2:创建udev规则让串口自动分配权限
如果需要针对特定USB串口设备做精细化权限控制,或者不想依赖用户组,可以写个udev规则,让系统每次识别到该设备时自动设置正确的组和权限:
- 先查你的USB串口设备的厂商ID和产品ID:
输出会类似lsusbBus 001 Device 003: ID 1a86:7523 QinHeng Electronics CH340 serial converter,其中1a86是厂商ID(idVendor),7523是产品ID(idProduct)。 - 创建udev规则文件:
sudo nano /etc/udev/rules.d/99-usb-serial.rules - 在文件中添加以下内容(替换成你查到的ID):
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", GROUP="dialout", MODE="0660"GROUP="dialout":让设备归dialout组所有MODE="0660":允许组内用户读写,其他用户仅可读(安全性远高于666)
- 保存文件后,重新加载udev规则:
下次重启系统或插拔设备时,权限会自动配置完成,无需手动修改。sudo udevadm control --reload-rules && sudo udevadm trigger
这两种方法都遵循最小权限原则,比直接开放全局666权限安全得多。优先推荐方法1,操作简单直接;如果有多个串口设备或特殊需求,再用方法2。
内容的提问来源于stack exchange,提问作者NicoCaldo
相关产品推荐
相关产品推荐

