0

私の目標は、Python を使用して CentOS 7 マシンでファイアウォールの構成を自動化することです。

OSにはfirewalldが付属しているので、それを使っています。調べたところ、dbus を使用していることがわかりました (これについて聞いたことも、対処したこともありません。間違っていることがあれば訂正してください)。

Python を使用して dbus プロセスを制御する方法に関するこのドキュメントを見つけました: http://dbus.freedesktop.org/doc/dbus-python/doc/tutorial.txt

確認したところ、OSに付属しているPythonのバージョンにはdbusモジュールが含まれているので、有望なスタートのようです.

そのドキュメントは、firewalld が dbus インターフェイスを介して公開するものについてもっと学ぶ必要があることを示唆しています。そこで、さらに調査を行ったところ、 https ://www.mankier.com/5/firewalld.dbus が見つかりました。

最初のドキュメントでは、「よく知られている名前」から始める必要があると書かれています。そのようなことの彼らの例はorg.freedesktop.NetworkManager. 2 番目のドキュメントのタイトルはfirewalld.dbusです。このドキュメントでは他の場所に明示的に名前が付けられていないため、この名前を試すのに最適な名前であると考えました。

最初のドキュメントには、オブジェクト パスの名前が必要だとも書かれています。彼らの例は/org/freedesktop/NetworkManagerです。2 番目のドキュメントのオブジェクト パスは/org/fedoraproject/FirewallD1です。

私はそれらをまとめて、最初のドキュメントが提案した最初の方法を使用してみましSystemBusget_object():

>>> from dbus import SystemBus
>>> bus = SystemBus()
>>> proxy = bus.get_object('firewalld.dbus', '/org/fedoraproject/FirewallD1')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/site-packages/dbus/bus.py", line 241, in get_object
    follow_name_owner_changes=follow_name_owner_changes)
  File "/usr/lib64/python2.7/site-packages/dbus/proxies.py", line 248, in __init__
    self._named_service = conn.activate_name_owner(bus_name)
  File "/usr/lib64/python2.7/site-packages/dbus/bus.py", line 180, in activate_name_owner
    self.start_service_by_name(bus_name)
  File "/usr/lib64/python2.7/site-packages/dbus/bus.py", line 278, in start_service_by_name
    'su', (bus_name, flags)))
  File "/usr/lib64/python2.7/site-packages/dbus/connection.py", line 651, in call_blocking
    message, timeout)
dbus.exceptions.DBusException:
    org.freedesktop.DBus.Error.ServiceUnknown:
        The name firewalld.dbus was not provided by any .service files

最初のパラメーターとしてもorg.fedoraproject.FirewallD1試してみましたが、同様のエラー メッセージが表示されました。

これらが機能しないのはなぜですか? 適切な名前が何であるかを知る方法はありますか? エラーメッセージの最後に「.service ファイル」と記載されています...そのようなファイルはどこにありますか?


編集:を使用していくつかの「.serviceファイル」が見つかりましたfind / -name *.service。そのうちの 1 つが/usr/lib/systemd/system/firewalld.service... かなり有望なようですので、チェックしてみます。

編集 2 : かなり短いファイルです... 約 10 行しかありません。そのうちの1人は言いBusName=org.fedoraproject.FirewallD1ます。したがって、名前が .service ファイルによって提供されなかったと言った理由がわかりません...何らかの理由でこのファイルを使用していない場合を除きますか?

4

1 に答える 1