dbusとpolicykitを使用したルートタスク


10

ある時点で、私のアプリケーションは、/ etcにファイルを作成したり、ルート権限でコマンドを実行したりするなどの管理タスクを実行する必要があります。

私はQ&Dを行うことができることを知っています:

os.popen("pkexec foo bar")

しかし、これはそれを行うための予測されたクリーンな方法ではないことも知っています。セッションのような処理をするのではなく、常にパスワードを再入力する必要があるため、ユーザーにとってなんらかの煩わしさがあります。

認証のためのpythonの例を見つけたので、私は非常に楽観的でした。

これはすぐに機能する簡単な例です:

import dbus

bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.PolicyKit1', '/org/freedesktop/PolicyKit1/Authority')
authority = dbus.Interface(proxy,  dbus_interface='org.freedesktop.PolicyKit1.Authority')

system_bus_name = bus.get_unique_name()

subject = ('system-bus-name', {'name' : system_bus_name})
action_id = 'org.freedesktop.policykit.exec'
details = {}
flags = 1            # AllowUserInteraction flag
cancellation_id = '' # No cancellation id

result = authority.CheckAuthorization(subject, action_id, details, flags, cancellation_id)

print result

承認後、いくつかのos.popen()コマンドを使用してスクリプトを続行できると私は非常に世間知らずでした。今私はよく知っています:(

上記の例でタプルの結果を確認できますが、以降のドキュメントでは、この時点で機能するコードを見つけることができませんでした。

この結果をどうすればよいですか?どうすれば必要なタスクを実行できますか?使用可能なメソッドを提供する例のPythonリファレンスはありますか?

私はdir()を使用して認証の方法を一覧表示しようとしましたが、続行するための手掛かりを見つけることができませんでした。

フォールバックの使用は避けたいのですが、それが最後の手段です。正しい方法で私を助けてください:)

よろしくお願いします

アンドレ

編集:

私はこれを機能させなかったため、gksuでプログラムを開始することによる以前の解決策は/ opt /で機能しません。少なくとも、プログラムの基本的な作業を行うために、パスワードを要求する1000の要求をあきらめて実装する必要がありました。アプリの対決のTシャツ。

最初にすばやく共有したため、問題に気づきませんでした。すべてが正しく機能しました。最初にパスワードを要求する。私は今完全にダウンしています。AppShowdownに対する私の貢献はhttps://launchpad.net/armorforgeでした。;-(


StakOverflowでより良い答えを見つけることができると思います。この質問をそこで移行するように依頼する必要があります。
jgomo3

回答:


7

最初に理解する必要がある基本的な概念があります。PolicyKitは権限の昇格ではなく、承認のみを処理します。PolicyKitは「ユーザーにこのタスクを実行する権限があるか」という質問に答えますが、root権限は付与されません。

一般的に使用されるモデルは、ルート権限で実行されるDBusシステムサービスを作成することです。非ルートプロセスから要求を受け取り、PolicyKitを使用して、そのプロセスがその要求を行うことを承認されているかどうかを判断し、要求されたタスクを実行します。

数年前にubuntuforums.orgでPythonを使用しPolicyKitとDBusのチュートリアルを書きました。原則は同じですが、更新が必要になる場合があります。今寝る必要があるので、見て、更新が必要かどうか教えてください。


通常のユーザーでvirtualboxが拡張パックをインストールできるようにするために使用できますか?
Gryu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.