Запуск команд из питона, которым нужен root-доступ - PullRequest
6 голосов
/ 03 июня 2011

Я играл с подпроцессом в последнее время. Как я делаю все больше и больше; Мне нужен root-доступ. Мне было интересно, есть ли простой способ ввести пароль root для команды, которая нуждается в нем с помощью модуля подпроцесса. Поэтому, когда мне будет предложено ввести пароль, мой сценарий предоставит его и запустит команду. Я знаю, что это плохая практика, когда код, который будет выполняться, помещается в песочницу и отделен от остальной системы; Я также не хочу работать от имени пользователя root.

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

Спасибо.

1 Ответ

9 голосов
/ 03 июня 2011

Вероятно, было бы лучше использовать sudo для пользователя, запускающего программу Python. Вы можете указать конкретные команды и аргументы, которые можно запускать из sudo без пароля. Вот пример:

Есть много подходов, но я предпочитаю тот, который назначает наборы команд группам. Допустим, мы хотим создать группу, чтобы люди могли запускать tcpdump от имени пользователя root. Итак, давайте назовем эту группу tcpdumpers.

Сначала вы должны создать группу с именем tcpdumpers. Затем измените /etc/sudoers:

# Command alias for tcpdump
Cmnd_Alias      TCPDUMP = /usr/sbin/tcpdump

# This is the group that is allowed to run tcpdump as root with no password prompt
%tcpdumpers     ALL=(ALL) NOPASSWD: TCPDUMP

Теперь любой пользователь, добавленный в группу tcpdumpers, сможет запускать tcpdump следующим образом:

% sudo tcpdump 

Оттуда вы можете легко запустить эту команду как подпроцесс.

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

...