В общем, когда небольшая часть вашего кода должна выполняться с повышенными привилегиями, но небезопасно запускать все остальное, вы делаете что-то вроде этого:
Вы запускаете свой основной скрипт как root. Но при запуске он развивает или порождает дочерний процесс (который все еще является корневым), а затем сразу же снижает привилегии. Когда вам нужно сделать что-то как root, вы используете достаточно безопасный механизм IPC (socketpair
может быть или не быть достаточно безопасным, в зависимости от остальной части вашего дизайна ...), чтобы попросить ребенка сделать это от вашего имени и отправить назад ответ. Детали немного отличаются для Windows, но одна и та же основная идея может быть использована для работы.
Есть альтернативы этому, однако, в том числе:
- Создание УИП программ, и запускать их, как дети из некорня родителя. Это не работает в Windows, и может быть неуместно в Unix, когда вы имеете дело с дочерними скриптами.
- Редизайн вашего приложения в демона/службы, который управляется отдельно (как правило, с помощью демона/диспетчера службы вашей системы) и работает от имени пользователя root, а главное приложение - к демону через IPC.
- Хранить учетные данные, которые могут использоваться для выдачи себя за корень по мере необходимости (в идеале только на непродолжительном дочернем процессе или потоке). Это отлично работает в Windows, но не работает так хорошо в Unix.
Однако, в этом случае, есть гораздо более простое решение: Единственное, что вам кажется, нужны привилегии для, чтобы прочитать (и, возможно, писать?) Файлы, которые установлены в принадлежащих другому пользователю , Просто сделайте эти файлы доступными для групп (и, возможно, -writable), и запустите скрипт как пользователь с ограниченными правами, который является членом этой группы.
IIRC это все или ничего. Если для одной части вашего скрипта требуется sudo, для этого нужен весь скрипт. Не могли бы вы дать пользователю, чтобы это выполнялось с разрешения сделать каталоги в родительской папке? Если пользователь, у которого работает этот скрипт, имеет разрешение на создание папок там, где они вам нужны, то вещь sudo становится не-проблемой, если в вашем скрипте нет чего-то другого, что потребует этого доступа. –