私の目標は、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
です。
私はそれらをまとめて、最初のドキュメントが提案した最初の方法を使用してみましSystemBus
たget_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 ファイルによって提供されなかったと言った理由がわかりません...何らかの理由でこのファイルを使用していない場合を除きますか?