python - Web 环境中的文件访问权限提升

标签 python linux permissions serial-port cgi

我有一种情况,我想提升我在网络环境中的权限,以便我可以访问串行设备。

具体情况是我有一个用于配置 /dev/ttyUSB[0-9] 上出现的调制解调器的 Web 界面。

最终用户将插入零个或多个调制解调器。我正在编写一些软件,能够通过读取 /sys/devices 并使用一些 AT 命令与调制解调器通信来辨别哪个是 USB 无线调制解调器。

我希望能够打开设备并执行如下操作:

ser = serial.Serial(tty, baudrate=115200, timeout=10)
ser.write('AT+CGSN\r\n')
imei = ser.readline()

问题是 pyserial 这样做:self.fd = os.open(self.portstr, os.O_RDWR|os.O_NOCTTY|os.O_NONBLOCK) 到打开串行端口,其中 portstr 是 /dev/ttyUSB0,但它是以 nobody 用户身份执行的,这是无特权的。

此系统上的串行端口由 root:uucp 拥有并设置为 0660(即 rw-rw-----)。

对于像 nobody 这样应该拥有尽可能少的权限的用户来说,在 dev 中打开文件的最佳方式是什么?

我会考虑的想法:

  • 使用 sudo 在子进程中执行操作。
  • 更改 /dev/ 中文件的权限(有关如何使用 udev 正确执行此操作的说明非常感谢!)
  • 使用我未考虑过的其他 API 或软件。

最佳答案

在这种情况下,我会编写一个由系统用户运行的守护程序,它接受套接字连接并将它们中继到适当的设备,然后使用 Web 应用程序中的套接字与守护程序对话。这也有助于防止 Web 应用程序在打开尚未准备好与用户打交道的设备时发生阻塞,比使用 CGI 等更理智地解决锁问题。

但是,如果您希望应用程序能够直接与设备对话,请为它们提供与 null 相同的权限。

关于python - Web 环境中的文件访问权限提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/628956/

相关文章:

c++ - 使用 boost 构建 Python 扩展

python - 了解 datetime 模块中 datetime 类方法的用法,而无需创建实例

python - 实现双向 A* 最短路径算法

linux - 执行相对于另一个用户的主目录的脚本

python - 可以是 "C++ application signal python script on completion"吗?

windows - Windows 8 上的 mklink 权限

python - 如何根据列中值的差异拆分 Pandas 数据框

c++ - 如何使用 dlopen() 和 dlsym() 调用 .so 文件中的函数?

java - 如何在自签名Java小程序中的iText FontFactory中注册字体?

permissions - cap_dac_override 是 cap_dac_read_search 的超集吗?