Программный запрос повышенных прав в Linux - PullRequest
4 голосов
/ 16 сентября 2010

( Этот вопрос имеет идентичное название, но тело вопроса задает его с точки зрения сценариев, например, su -c, не повторяйте этого)

У меня есть QtПриложение с графическим интерфейсом, которое должно выполнять некоторые файловые операции в / etc, основываясь на пользовательском вводе.Один из вариантов, вероятно, будет использовать system() с sudo, но даже в этом случае требуется вмешательство в файл sudoers.Я также хотел бы не делать system() плюс взломы сценариев для изменения файлов, а выполнять правильные операции с файлами.

Каков наилучший способ программно повысить права моих приложений для этого?

Редактировать: в качестве бонуса было бы неплохо, если бы это работало и на Maemo / Meego / других портативных устройствах (afaik PolicyKit там недоступен ..)

Ответы [ 3 ]

4 голосов
/ 16 сентября 2010

Я бы вообще написал отдельную программу.Нечто в духе этой философии .По сути - напишите простую программу, которая будет делать именно то, что вам нужно, и управляйте ее поведением с помощью прав доступа к файлам в файловой системе.В основном,

Делайте как можно меньше в программах setuid .

Программа setuid должна работать в очень опасной среде: пользователь полностью контролируетего fds, args, environment, cwd, tty, rlimits, таймеры, сигналы и многое другое.Хуже того, список контролируемых элементов варьируется от UNIX одного поставщика к другому, поэтому очень трудно написать переносимый код, который все очищает.

Из двадцати самых последних дыр в безопасности sendmail одиннадцать работал только потому, чтовся система sendmail настроена.

Установлена ​​только одна программа qmail: qmail-queue.Его единственная цель - добавить новое почтовое сообщение в исходящую очередь.

И,

Делать как можно меньше, чем root .

Вся система sendmail работает с правами root, поэтому ее ошибки не могут быть обнаружены встроенными средствами защиты операционной системы.Напротив, только две программы qmail, qmail-start и qmail-lspawn, работают от имени пользователя root.

4 голосов
/ 16 сентября 2010

Вы можете использовать PolicyKit, который постепенно заменяет gksu / su / sudo, особенно в Ubuntu, из-за более высокого уровня безопасности и детального контроля из-за повышения действий , а не всей программы.

1 голос
/ 16 сентября 2010

Создайте вспомогательную программу setuid , которая делает только то, что вы хотите сделать, и fork / exec ваше приложение из нее. Затем отбросьте привилегии в дочернем процессе. Оба приложения могут взаимодействовать через каналы, сокеты или что-то в этом роде.

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

...