Запустите файл python в sudo, но файл конфигурации в пользовательском пространстве - PullRequest
0 голосов
/ 02 апреля 2020

Я написал python скрипт, который обращается к системным функциям, которые требуют root привилегий. Этот «главный» сценарий настраивается путем запуска другого Python файла сценария «config.py» с использованием exec, который будет писать пользователь моего сценария и который настраивает некоторые переменные состояния в моем сценарии.

Мастер-файл сценария root -приобретен, в то время как файл конфигурации принадлежит пользователю (поскольку пользователи моего сценария хотели бы изменить этот файл).

Очевидно, что это не идеально, так как пользователи моего сценария могут выполните команды root -level в скрипте конфигурации. Есть ли способ запустить файл конфигурации на уровне пользователя, даже если мастер-файл был запущен в root?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Поскольку это конфигурационный файл, возможно, вам лучше сделать его неисполнимым, как обычный ini / yaml et c. Я предполагаю, что вы хотите включить его для доступа к некоторым константам. Иногда для настройки требуется немного больше работы, но в конечном итоге, если единственный код, который выполняется, принадлежит вам, вы можете быть в безопасности (э).

0 голосов
/ 03 апреля 2020

Что вы можете сделать, это создать специального пользователя для выполнения команд, которые пользователи скрипта дают вам. Убедитесь, что этот пользователь заблокирован согласно вашим требованиям безопасности.

Скажите, что вы хотите, чтобы это имя пользователя было scriptkiddie (для смеха), тогда вы можете создать этого пользователя следующим образом.

$ useradd scriptkiddie

Затем оберните любую системную команду (здесь я буду использовать nmap -Pn -p22 10.0.0.0/8, команду, требующую root), которую ваш сценарий будет выполнять от имени пользователя сценария в команде runuser.

runuser будет запускать все, что вы дадите, в контексте любого пользователя, которого вы укажете.

$ runuser -l  scriptkiddie -c 'nmap -Pn -p22 10.0.0.0/8'

В Python вы можете использовать format(...), чтобы ввести любую команду, которая вам дается .

"runuser -l  scriptkiddie -c {}".format(user_cmd)

Этот метод не позволит любому пользователю запускать команду в контексте root, поскольку все команды будут выполняться в контексте нового пользователя scriptkiddie.

.
...