2013-04-21 3 views
2

Я пытаюсь построить api, используя django, который должен изменять iptables с использованием параметров POST. Я использую django 1.4, djangorestframework, python-iptables. Проблема, с которой я сталкиваюсь, заключается в том, что для python-iptables необходим root-доступ для изменения правил iptables. Я могу изменить правила iptables, выполнив $ sudo python, и из оболочки python я могу изменить эти правила. Также я могу изменить эти правила, используя модуль iptdump, который принимает параметры iptables и создает те правила, которые я могу впоследствии сохранить в файле (iptables.rules.txt), и использовать . Но это всегда будет запрашивать у пользователя пароль root. Есть ли способ, которым я могу предоставить привилегии администратора приложения django, чтобы я мог обойти запрос пароля sudo.Предоставление доступа к корневой папке django?

ответ

3

Если вам действительно нужна часть приложения для запуска от имени пользователя root, вы можете переписать его как демон и связаться с ним из основного приложения Django, как предлагается в this answer. Я бы рекомендовал это только в том случае, если приведенная ниже альтернатива не соответствует вашим требованиям.

Альтернатива sudo iptables-restore < iptables.rules.txt гораздо проще, просто сказать Sudo не запрашивать пароль только для этой команды, добавив в ваш /и т.д./sudoers файла:

djangouser ALL=(ALL) NOPASSWD: /sbin/iptables-restore 

Где djangouser это пользователь Процесс Django работает как.

EDIT: Вы можете избежать написания промежуточного файла, посылая новые IPTables непосредственно в процессе iptables-restore:

import iptdump 
import subprocess 

ipt = iptdump.Iptables() 
proc = subprocess.Popen(['sudo', '/sbin/iptables-restore'], 
         stdin=subprocess.PIPE) 
proc.communicate(ipt.dump()) 
+0

эй спасибо это работает, но есть способ, что я могу перепускной Судо запрос на ввод пароля. – Saad

+1

@Saad строка в **/etc/sudoers ** должна предотвратить запрос пароля, вы уверены, что код работает как пользователь, указанный в sudoers? –

+0

Да, я сделал это, наконец, спасибо – Saad

Смежные вопросы