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 () 명령으로 계속 진행할 수 있다고 생각했습니다. 이제 나는 더 잘 알고있다 :(

위의 예제에서 튜플 결과를 볼 수 있지만 추가 문서 에서이 시점에서 진행할 작업 코드를 찾을 수 없습니다.

이 결과와 어떤 관계가 있습니까? 필요한 작업을 계속 수행하려면 어떻게해야합니까? 사용 가능한 방법을 제공하는 예제와 함께 파이썬 참조가 있습니까?

dir ()을 사용하여 권한 부여 방법을 나열하려고했지만 진행 방법을 찾을 수 없었습니다.

나는 내 폴백을 사용하지 않기를 원하지만 그것이 나의 마지막 수단이 될 것입니다. 올바른 방법으로 도와주세요 :)

감사와 안부

안드레

편집하다:

이 작업을 수행하지 않았고 gksu로 프로그램을 시작하여 이전 솔루션이 / opt /에서 작동하지 않기 때문에 마침내 프로그램의 기초 작업을 수행하기 위해 수천 번의 암호 요청을 포기하고 구현해야했습니다. 앱 대결에서 티셔츠.

처음에 빠르게 공유했기 때문에 문제를 알지 못했습니다. 모든 것이 제대로 작동했습니다. 처음에 비밀번호를 한 번 묻습니다. 나는 지금 완전히 아래로입니다. AppShowdown에 대한 나의 기여는 https://launchpad.net/armorforge 입니다. ;-(


StakOverflow에서 더 나은 답변을 찾을 수 있다고 생각합니다. 이 질문을 마이그레이션하도록 요청해야합니다.
jgomo3

답변:


7

먼저 파악해야 할 기본 개념이 있습니다. PolicyKit은 권한 상승이 아닌 권한 만 처리합니다. PolicyKit은 "사용자에게이 작업을 수행 할 권한이 있습니까?"라는 질문에 대답하지만 루트 권한은 부여하지 않습니다.

일반적으로 사용되는 모델은 루트 권한으로 실행되는 DBus 시스템 서비스를 작성하는 것입니다. 루트가 아닌 프로세스의 요청을 가져오고 PolicyKit을 사용하여 해당 프로세스가 해당 요청을 수행 할 권한이 있는지 판별 한 후 요청 된 태스크를 수행하십시오.

몇 년 전에 ubuntuforums.org 에서 Python으로 PolicyKit 및 DBus에 대한 자습서를 작성했습니다 . 업데이트가 필요할 수 있지만 원칙은 동일합니다. 지금 자러 가야하므로 업데이트가 필요한지 알려주세요.


일반 사용자로 virtualbox 설치 확장팩을 허용하는 데 사용할 수 있습니까?
Gryu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.