BSDPORTAL.RU

На этом сайте обсуждаются вопросы использования ОС FreeBSD
 Портал  •  Статьи  •  Форум  •  Wiki  •  Поиск  •  FAQ  •  Обои  •   Официальная документация  •  Новые темы 

Часовой пояс: UTC + 4 часа




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

Зарегистрирован: Пн 02 фев, 2009 12:54 pm
Сообщения: 486
Всем привет.

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как рулить правами на ком-порт?
СообщениеДобавлено: Чт 27 май, 2021 9:19 pm 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5357
Откуда: Москва
Обычно добавляют пользователя в нужную группу, которой позволено взаимодействовать с устройствами. Например dialer или operator.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как рулить правами на ком-порт?
СообщениеДобавлено: Пт 28 май, 2021 9:36 am 
Не в сети

Зарегистрирован: Пн 02 фев, 2009 12:54 pm
Сообщения: 486
Я вроде в operator, но не работало. Проверю.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как рулить правами на ком-порт?
СообщениеДобавлено: Пт 28 май, 2021 11:35 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пн 26 мар, 2007 6:04 pm
Сообщения: 1209
Откуда: Kyiv
man devd.conf на предмет action: просто запускаете что-то через sudo/ksudo, и, если для этого нужен будет ввод пароля, у юзера будет выведено соответствующее окно/запрос.

_________________
"Винда съела дрова и резет здесь не фурычит"
"Все говорят, что у меня /dev/hands кривой и я всё делаю через /dev/ass. А у меня этих файлов вообще нет!"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как рулить правами на ком-порт?
СообщениеДобавлено: Пт 28 май, 2021 2:18 pm 
Не в сети

Зарегистрирован: Чт 14 май, 2009 6:56 pm
Сообщения: 839
Еще можно программе поставить root в качестве владельца и сделать chmod +s

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как рулить правами на ком-порт?
СообщениеДобавлено: Пт 28 май, 2021 4:21 pm 
Не в сети
Модератор

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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как рулить правами на ком-порт?
СообщениеДобавлено: Пт 28 май, 2021 5:32 pm 
Не в сети

Зарегистрирован: Пн 02 фев, 2009 12:54 pm
Сообщения: 486
AMDmi3 писал(а):
Абсолютно точно не принято.


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как рулить правами на ком-порт?
СообщениеДобавлено: Пт 28 май, 2021 9:37 pm 
Не в сети

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


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как рулить правами на ком-порт?
СообщениеДобавлено: Пт 28 май, 2021 10:44 pm 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5357
Откуда: Москва
У меня нет под рукой линукса, но думаю что в большинстве дистрибутивов это тоже решается самое сложное добавлением пользователя в группу.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Зарегистрированные пользователи: Bing [Bot], Majestic-12 [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
Яндекс.Метрика