У меня есть ситуация, когда я хочу повысить разрешения, которые у меня есть в веб-среде, чтобы я мог получить доступ к последовательному устройству.
В конкретном случае у меня есть веб-интерфейс для настройки модема, который подходит для /dev/ttyUSB[0-9]
.
Конечный пользователь подключит ноль или более модемов. Я пишу какое-то программное обеспечение, способное распознавать беспроводной USB-модем, читая /sys/devices
и разговаривая с модемом, используя некоторые AT-команды.
Я хотел бы иметь возможность открыть устройство и сделать что-то вроде:
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 или программного обеспечения, которое я не рассматривал.