Вопрос

(Этот вопрос Идеет идентичное название, но вопрос теста спрашивает его на точке зрения сценариев, например, su -c, Не обманывайте это к этому)

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

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

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

Это было полезно?

Решение

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

Сделать как можно меньше в программах Setuid.

Программа SETUID должна работать в очень опасной среде: пользователь находится под полным управлением его FDS, ARGS, Environ, CWD, TTY, Rlimits, таймерами, сигналами и многого другого. Еще хуже, список контролируемых предметов варьируется от Unix одного поставщика к другому, поэтому очень сложно писать портативный код, который очищает все.

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

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

А также,

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

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

Другие советы

Вы можете использовать PolicyKit, который постепенно заменяет Gksu / Su / Sudo, особенно на Ubuntu, для его более высокой безопасности и мелкозернистым контролем из-за повышения Действия, не вся программа.

Создать хелпер Setuid Программа это делает только то, что вы хотите сделать, и Fork / Exec. Ваше приложение от него. Затем снимите привилегии в детском процессе. Оба приложения могут общаться через трубы, розетки или что-то подобное.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top