BSDPORTAL.RU
http://bsdportal.ru/

Как рулить правами на ком-порт?
http://bsdportal.ru/viewtopic.php?f=59&t=29205
Страница 1 из 1

Автор:  fsx [ Чт 27 май, 2021 6:33 pm ]
Заголовок сообщения:  Как рулить правами на ком-порт?

Всем привет.

Написал на Qt программу для работы с одним специфическим устройством usb, под виндой к нему надо ставить фирменный драйвер и появляется виртуальный COM порт при втыкании устройства. Сделал автодетект порта (без виндовых событий, отдельный поток, который мониторит порты).

К удивлению программа заработала под FreeBSD и Линуксом без всяких фирменных драйверов, при втыкании устройства программа задетектила появившийся порт. Если бы не сделал кроссплатформенный автодетект, то и не знал бы как эти порты называются во фре и линуксе. Коннект и обмен с устройством тоже работают, но только под sudo, под юзером прав не хватает. Как решается такая проблема правильно? Как права на появившийся виртуальный порт давать юзеру?

Может какой-то окошко выдавать для ввода пароля, типа как ksudo?

Автор:  AMDmi3 [ Чт 27 май, 2021 9:19 pm ]
Заголовок сообщения:  Re: Как рулить правами на ком-порт?

Обычно добавляют пользователя в нужную группу, которой позволено взаимодействовать с устройствами. Например dialer или operator.

Автор:  fsx [ Пт 28 май, 2021 9:36 am ]
Заголовок сообщения:  Re: Как рулить правами на ком-порт?

Я вроде в operator, но не работало. Проверю.

А как насчет вызвать chmod для устройства через sudo? Если sudo попросит пароль, то тоже его попросить? Так не принято?

Автор:  skeletor [ Пт 28 май, 2021 11:35 am ]
Заголовок сообщения:  Re: Как рулить правами на ком-порт?

man devd.conf на предмет action: просто запускаете что-то через sudo/ksudo, и, если для этого нужен будет ввод пароля, у юзера будет выведено соответствующее окно/запрос.

Автор:  arrowdodger [ Пт 28 май, 2021 2:18 pm ]
Заголовок сообщения:  Re: Как рулить правами на ком-порт?

Еще можно программе поставить root в качестве владельца и сделать chmod +s

Но лучше, конечно, выставлять правильные права на файлы устройств.

Автор:  AMDmi3 [ Пт 28 май, 2021 4:21 pm ]
Заголовок сообщения:  Re: Как рулить правами на ком-порт?

fsx писал(а):
А как насчет вызвать chmod для устройства через sudo? Если sudo попросит пароль, то тоже его попросить? Так не принято?
Абсолютно точно не принято. Что касается прав ФС, то это задача системы - предоставить такие права чтобы к чему нужно был доступ, а к чему не нужно не было, и у FreeBSD есть куча средств для этого - devfs.conf, devfs.rules, devd, ручной chmod наконец. То что доступа нет из коробки не должно вас смущать - исторически FreeBSD не очень-то ориентирована на однопользовательский десктоп, а на сервере обычные пользователи конечно же не должны иметь возможность делать что угодно с железом. Поэтому это не повод добавлять странные решения и костыли в приложение. В десктопных дистрибутивах такой проблемы не будет.

chmod из приложения не вариант потому что оно не должно оставлять за собой неожиданных изменений в системе, а у вас нет возможности гарантировать что права вернутся обратно.

Использовать sudo не вариант потому что sudo ещё надо поставить и настроить, а это точно не легче чем настроить права на устройство.

suid бит будет работать, но при этом создаст дыру в безопасности. Во-первых, с ним нужно очень аккуратно писать приложение - оно должно первым делом сделать привилегированную операцию (открыть устройство), после чего сразу сбросить привилегии, и только после этого инициализовать Qt и делать какие-то ещё вещи. Это неудобно, не всегда возможно поскольку некоторые библиотеки могут исполнять код до main(). Кажется в вашем случае
Цитата:
Сделал автодетект порта (без виндовых событий, отдельный поток, который мониторит порты).
так уже не получится. Поэтому почти никогда не делают графических suid приложений. Можно сделать отдельный маленький suid бинарник с которым общаться через сокет, но это неоправданное усложнение архитектуры. Во-вторых, даже если соблюсти все эти требования может остаться возможность сделать какую-нибудь гадость с помощью этого suid приложения - например, открыть вместо устройства /etc/fstab, приложение запишет туда мусор и система больше не загрузится. Или открыть kmem и убить систему.

Автор:  fsx [ Пт 28 май, 2021 5:32 pm ]
Заголовок сообщения:  Re: Как рулить правами на ком-порт?

AMDmi3 писал(а):
Абсолютно точно не принято.


Спасибо за развернутый ответ. Чем больше думал, тем больше не нравится такая идея, как-то не по-юниксовски. И код усложняет. Выведу в лог хинт что делать для доступа к устройству. Думаю, что пользователи FreeBSD разберутся, если найдутся такие вообще.

Автор:  fsx [ Пт 28 май, 2021 9:37 pm ]
Заголовок сообщения:  Re: Как рулить правами на ком-порт?

fsx писал(а):
Спасибо за развернутый ответ. Чем больше думал, тем больше не нравится такая идея, как-то не по-юниксовски. И код усложняет. Выведу в лог хинт что делать для доступа к устройству. Думаю, что пользователи FreeBSD разберутся, если найдутся такие вообще.


Правда остаются еще пользователи Линукс, у них точно будет интерес к программе, есть много людей с Линуксом и таким устройством (это вот такая штука - http://www.parashop.ru/catalog/vysotomery/alti-2/atlas.html Официальный клиент к прибору ужасен и стоит дорого, бесплатно показывает последнюю запись), и еще маководы есть.

Линукс еще не считается десктоп-системой? Там тоже из коробки нет доступа. Но это чисто поразмышлять, я понял, что уродовать программу такими костылями нельзя. Интересно как в маке будет с доступом к устройству.

Автор:  AMDmi3 [ Пт 28 май, 2021 10:44 pm ]
Заголовок сообщения:  Re: Как рулить правами на ком-порт?

У меня нет под рукой линукса, но думаю что в большинстве дистрибутивов это тоже решается самое сложное добавлением пользователя в группу.

Страница 1 из 1 Часовой пояс: UTC + 4 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/