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/

相关文章:

python - 我不明白python中的这种递归方法来生成排列

c - Linux 中的页表遍历

python - 加速 numpy 3D 数组的卷积循环?

python - 4 维数组的索引偏移对角线

无法从多个 fifos 读取

amazon-web-services - 默认情况下将上传的文件公开到 S3

php - 更改服务器上Wordpress生成的文件的权限

database - Web 应用程序、用户和权限(和安全性)

python - pip 10 没有名为 pip.req 的模块

python - 在 Linux 中创建两个进程并获取输出