3

Python に cap_net_raw 機能を提供せずに、Linux (Python を使用) で raw ソケットを開きたいです。プログラムではなく、ユーザーにこの機能を持たせたいのです。Ubuntu 12.4 を使用しています。

4

2 に答える 2

0

私もこれに苦労してきました。少なくとも python のようなインタープリタ言語の場合、適切な回避策はないようです。ルートで実行するか、生のパケットをキャプチャしないでください:)。私が考えられる唯一のことは、スクリプトをデーモンとして実行することです。

sudo サービス開始 snifferd

snifferd は次のようなものです。

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/home/<user>/projects/sniffer.py
DAEMON_NAME=snifferd

case "$1" in
    start)
      log_daemon_msg "Starting $DAEMON_NAME"
      setcap cap_net_raw=+ep /usr/bin/python2.7
      start-stop-daemon --start --background --pidfile $PIDFILE --make-pid --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON
      setcap cap_net_raw=-ep /usr/bin/python2.7
      log_end_msg $?
    ;;
...

ソケットを初期化する直前にコードで setcap を実行し、直後にキャップを削除しようとしましたが、インスタンスが開始される前に Python にアクセス許可が必要なようです。

特権ドロップ用のhttp://www.subspacefield.org/security/privilege/code/privilege/もありますが、実際には見ていません。

EDIT 1 試してみました。機能しますが、プログラムが必要とする前にデーモンが機能を削除すると、失敗します。推測しますが、そこには何らかの一時停止が必要です。

于 2014-07-13T13:32:34.507 に答える