Как дать root-доступ к приложению Linux

Я делаю приложение для Linux, используя Python3 и Qt5. Когда пользователь установит это приложение, оно создаст несколько файлов в папке /usr/share. Для создания файлов приложение должно иметь root-доступ.

Я планирую, чтобы приложение показывало пользователю окно приглашения, и пользователь вводит пароль root, чтобы предоставить root-доступ к приложению. Но я не знаю, как я могу предоставить root-доступ к приложению, используя этот пароль?

1 ответ

Решение

Это мир боли. Конечно, возможно, чтобы приложение, работающее как обычный пользователь, выполняло определенные действия как привилегированный пользователь, но я всегда чувствую, что необходимость сделать это предполагает, что установка и обслуживание не были продуманы должным образом.

Чтобы повысить привилегии и предположить, что "sudo" не подходит (это, вероятно, не будет в этом случае), вам нужно будет либо использовать инструмент операционной системы, который выполняет эту работу (запрашивает учетные данные и затем что-то запускает), или реализуйте помощник для вашей программы, который имеет атрибуты suid в своем исполняемом файле.

Я ожидаю, что все системы Linux имеют доступ к "su", но стандартный su не имеет графического интерфейса, который является проблемой для программ с графическим интерфейсом. Вы можете собрать учетные данные пользователя в своем приложении, а затем передать их su (что неудобно), или вы можете использовать одну из различных графических утилит su-типа, таких как gksu. Конечно, это работает, только если эти утилиты доступны на вашей платформе.

Если вы идете по пути предоставления вашей программе suid-части, которая выполняет работу, требующую повышенных привилегий, вы должны быть чрезмерно осторожны с безопасностью - как вы собираете учетные данные, как вы проверяете, что злоумышленники не могут делать то, что им не следует и т. д.

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

Другие вопросы по тегам