簡體   English   中英

以非 root 用戶身份運行 python-iptables (iptc)

[英]Run python-iptables (iptc) as non-root user

我正在嘗試以非 root 用戶身份運行 python-iptables。

我的腳本是test.py:

import iptc
import os

uid = os.getuid()
print("Real user ID of the current process:", uid)

table = iptc.Table(iptc.Table.FILTER)
print("Table is:".format(table))

我試過了:

  1. 將能力 CAP.NET_ADMIN 賦予/usr/bin/python2.7 (結果是: $ getcap /usr/bin/python2.7 /usr/bin/python2.7 = cap.net_admin+eip )並執行/usr/bin/python2.7./test.py描述如下: Python Scapy sniff without root
  2. 使用以下定義的環境功能進行編譯和運行: https://gist.github.com/tomix86/32394a43be70c337cbf1e0c0a56cbd8d並執行./ambient -c '12' /usr/bin/python2.7./test.py
  3. 我尚未使用 python-prctl 進行測試,但我很快計划按照以下所述進行測試: 無法讓 CAP_CHOWN 和 CAP_DAC_OVERRIDE 為普通用戶工作

日志是:

('Real user ID of the current process:', 1000)
Traceback (most recent call last):
  File "test.py", line 7, in <module>
    table = iptc.Table(iptc.Table.FILTER)
  File "/usr/lib64/python2.7/site-packages/iptc/ip4tc.py", line 1566, in __new__
    obj._init(name, autocommit)
  File "/usr/lib64/python2.7/site-packages/iptc/ip4tc.py", line 1582, in _init
    self.refresh()
  File "/usr/lib64/python2.7/site-packages/iptc/ip4tc.py", line 1619, in refresh
    self.strerror()))
iptc.ip4tc.IPTCError: can't initialize filter: Permission denied (you must be root)

我的 kernel 是:

$ uname -r
4.4.224-1.el7.elrepo.x86_64

我的 python 版本是:

Python 2.7.5

我的 python-iptables 版本是:

python-iptables            0.12.0

我可以以非 root 用戶身份成功運行“iptables -L”,但無法以非 root 用戶身份成功運行 iptc python 命令。

有沒有其他方法可以提供我的 python 腳本功能,或者它與 iptc 代碼有關?

它會因為需要額外的功能而失敗嗎?

使用 sudo 運行 python 或在超級用戶憑據下運行此 python。 因為 iptables 需要 (sudo) 超級用戶憑據。

例如: sudo python test.py

iptc 不是為了運行 iptables 而進行的——它是直接加載 c 綁定。 由於腳本在下面調用 python,因此您必須直接為 python 提供這些功能。

在系統范圍內為 python 提供功能不是一個好主意 (tm)。 使 python 的本地副本只能由用戶運行,使用 cap_raw.net 的附加功能就可以了。

njl@mymachine:~/myproject $ which python3
/home/njl/bin/python3

njl@mymachine:~/myproject $ getcap ~/bin/python3
/home/njl/bin/python3 cap_net_admin,cap_net_raw=ep

njl@mymachine:~/myproject $ ls -l ~/bin/python3
-rwx------ 1 njl njl 4703672 Jan  7 21:18 /home/njl/bin/python3
njl@mymachine:~/myproject $ ./demo.py
{'INPUT': [], 'FORWARD': [], 'OUTPUT': []}

示例代碼:

#!/usr/bin/env python3
import iptc

def dump_iptables():
    return iptc.easy.dump_table('filter',ipv6=False)

print(dump_iptables())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM