2013-02-12 3 views
0

У меня есть сценарий (A.py), который будет генерировать новые процессы (B.py) динамически, но эти сценарии должны быть созданы как root. Если я бегуPython sudo privileges

$ python A.py 

как обычный пользователь, а затем, когда я бегу

>>> subprocess.Popen('sudo nohup python B.py &') 

мне нужно ввести root пароль для запуска. Я действительно не хочу этого делать.


Теперь, если я бегу первый сценарий как root

$ sudo python A.py 

тогда я буду иметь возможность запускать

>>> subprocess.Popen('nohup python B.py &') 

как нормальный. Вещь, которая касается меня, - это период ожидания с помощью sudo, и он будет снижаться до нормальных привилегий, а затем, когда A.py хочет, чтобы запустить/убить процесс, он попросит пароль и перестанет работать по назначению.

  1. Будет запущен sudo python A.py сохранить привилегии суперпользователя для жизни сценария, или он потеряет ее с sudo timeout (я считаю, по умолчанию 15мин) как обычный терминал?
  2. Есть ли лучший способ сделать это?

ответ

4

Будет запущен Судо питон A.py сохранить привилегии суперпользователя для жизни сценария, или он потеряет ее с sudo timeout (я считаю, по умолчанию 15мин) как обычный терминал?

Он сохранит права root для срока службы сценария.

Запускающие команды не имеют своих привилегий root; это не то, что делает тайм-аут. Тайм-аут просто контролирует, как часто пользователь вводит свой пароль, когда выполняет команду sudo. Поскольку ваш root-привилегированный скрипт просто выполнил бы nohup python B.py, а не sudo nohup python B.py, тайм-аут sudo не вступил в игру.

0

У вас может быть дополнительный скрипт, который будет запускать python B.py, этот скрипт принадлежит root, с установленным флагом setuid. (В качестве альтернативы, дайте B.py подходящий shebang и сделайте его исполняемым непосредственно.) Тогда его запуск в любое время будет запускать его как root. (Естественно, тогда вам необходимо убедиться, что он защищен так, что он может быть запущен только соответствующим образом и не может выполнять произвольный код, обеспечивая эскалацию привилегий.)

+0

'setuid' [обычно игнорируется в сценариях оболочки] (http: // www.faqs.org/faqs/unix-faq/faq/part4/section-7.html). Также см. [Это] (http://unix.stackexchange.com/a/2910). – Dougal

+0

Интересно, я этого не знал. Однако предложение perl может помочь. –

+0

На самом деле, удалены вещи perl suid; см. комментарии там. – Dougal