fsx писал(а):
А как насчет вызвать chmod для устройства через sudo? Если sudo попросит пароль, то тоже его попросить? Так не принято?
Абсолютно точно не принято. Что касается прав ФС, то это задача системы - предоставить такие права чтобы к чему нужно был доступ, а к чему не нужно не было, и у FreeBSD есть куча средств для этого - devfs.conf, devfs.rules, devd, ручной chmod наконец. То что доступа нет из коробки не должно вас смущать - исторически FreeBSD не очень-то ориентирована на однопользовательский десктоп, а на сервере обычные пользователи конечно же не должны иметь возможность делать что угодно с железом. Поэтому это не повод добавлять странные решения и костыли в приложение. В десктопных дистрибутивах такой проблемы не будет.
chmod из приложения не вариант потому что оно не должно оставлять за собой неожиданных изменений в системе, а у вас нет возможности гарантировать что права вернутся обратно.
Использовать sudo не вариант потому что sudo ещё надо поставить и настроить, а это точно не легче чем настроить права на устройство.
suid бит будет работать, но при этом создаст дыру в безопасности. Во-первых, с ним нужно очень аккуратно писать приложение - оно должно первым делом сделать привилегированную операцию (открыть устройство), после чего сразу сбросить привилегии, и только после этого инициализовать Qt и делать какие-то ещё вещи. Это неудобно, не всегда возможно поскольку некоторые библиотеки могут исполнять код до main(). Кажется в вашем случае
Цитата:
Сделал автодетект порта (без виндовых событий, отдельный поток, который мониторит порты).
так уже не получится. Поэтому почти никогда не делают графических suid приложений. Можно сделать отдельный маленький suid бинарник с которым общаться через сокет, но это неоправданное усложнение архитектуры. Во-вторых, даже если соблюсти все эти требования может остаться возможность сделать какую-нибудь гадость с помощью этого suid приложения - например, открыть вместо устройства /etc/fstab, приложение запишет туда мусор и система больше не загрузится. Или открыть kmem и убить систему.