0

mod_python を使用して Apache 2.x で python スクリプトを実行しようとしています。パブリッシャーで httpd.conf を編集しました

    LoadModule python_module /usr/local/apache2/modules/mod_python.so
 <Directory /usr/local/apache2/htdocs/mod_python>

SetHandler mod_python
PythonHandler mod_python.publisher
PythonDebug On

root 権限を必要とする Python スクリプトを使用してファイアウォールにルールを追加しようとしています。それはルート権限を求めていますか?誰か助けてください。

    #!/usr/local/bin/python
    #from mod_python import apache
    import sys
    import errno
    import pf

    def index(req):
         filter = pf.PacketFilter()

         try:
              # Enable packet filtering
              filter.enable()
              print  "pf is enabled"
              return "pf is enabled"
         except IOError, (err, msg):
                if err == errno.EACCES:
                      #sys.exit("Permission denied: are you root?")
                       return ("Permission denied: are you root?")
                elif err == errno.ENOTTY:
                        #sys.exit("ioctl not supported by the device: is the pf device correct?")
                        return ("ioctl not supported by the device: is the pf device correct?")

これは、openBSD で apache を介して実行したい python スクリプトです。mod_python を使用します。

4

2 に答える 2

1

root ユーザーとして mod_python の下で Python スクリプトを実行することはできません。これは、Apache が常に信頼できないユーザーに特権をドロップするためです。これを回避する唯一の方法は、Apache をソース コードから再コンパイルし、魔法のプリプロセッサ マクロを定義して、Apache ワーカー プロセスをルートとして実行できるようにするセキュリティ ホールを有効にすることです。

要約すると、それをしないでください、それは危険です。

また、mod_python はもはや保守も開発もされておらず、そもそもそれを使用する必要があるかどうかについては疑問があることに注意してください。

于 2013-04-14T04:48:45.453 に答える
1

Pythonスクリプトをどこかに投稿して、リンクを教えてください。Python スクリプトはどのように pf と通信しようとしていますか? pfctlを介して?IPをテーブルに追加しようとしているとしましょう

pfctl -t thetable -T add x.x.x.x 

Apache を実行しているユーザーを調べる

ps aux | grep apache 

次に、 /etc/sudoersを編集して、そのユーザーがパスワードなしで pfctl コマンドを実行できるようにする必要があります。では、apache を www として実行するとしましょう。以下を sudoers に配置します。

www ALL=(ALL:ALL) NOPASSWD: /sbin/pfctl

最後に、Pythonスクリプトで(サブプロセスで外部コマンドを呼び出すとしましょう)

from subprocess import call
call(["sudo","pfctl","-T","theTable","-t","add", "x.x.x.x"])

しかし、スキーム全体は本当に悪い考えであり、そのようにすべきではないことに注意してください. できれば python スクリプトを削除し、バンドルされた apache 1.3 を実行してください。chroot で Web サーバーを実行します。これが Web 経由で行われる場合は、ファイアウォールの制御をユーザー入力に公開しないでください。やりたいことを詳しく説明していただければ、より効率的で安全なセットアップを見つけることができると確信しています。

于 2013-04-10T10:20:08.080 に答える