Dbus ve ilke seti kullanarak kök görevleri


10

Bir noktada uygulamamın / etc'de bir dosya oluşturmak veya kök ayrıcalıklarına sahip komutları çalıştırmak gibi yönetim görevleri yapması gerekir.

Sadece bir Soru-Cevap yapabileceğini biliyorum:

os.popen("pkexec foo bar")

Ama aynı zamanda bunun öngörülen temiz yol olmadığını biliyorum. Kullanıcı için bir tür can sıkıcı, çünkü oturum benzeri bir işlem yapmak yerine her zaman şifresini tekrar girmesi gerekiyor.

Kimlik doğrulaması için python örneğini bulduğum için çok iyimserdim .

Hemen çalışan basit bir örnek:

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

Yetkilendirmeden sonra senaryoda sadece os.popen () - komutları ile devam edebileceğimi düşünüyordum. Şimdi daha iyi biliyorum :(

Yukarıdaki örnekte tuple sonucunu görebiliyorum, ancak daha sonraki belgelerde bu noktada devam etmek için bir çalışma kodu bulamadım.

Bu sonuçla ne yapmam gerekiyor? İhtiyacım olan görevleri nasıl yerine getirebilirim? Kullanılabilir yöntemleri sunan örneklerle bir python referansı var mı?

Dir () kullanarak yetkilendirme yöntemlerini listelemeye çalıştım, ancak nasıl devam edeceğine dair herhangi bir ipucu bulamadım.

Gerçekten benim fallback kullanmaktan kaçınmak istiyorum ama benim son çare olurdu. Lütfen doğru şekilde yapmama yardım et :)

Teşekkürler ve saygılar

André

Düzenle:

Bunu işe getirmedim ve gksu ile programımı başlatarak eski çözümümü / opt / 'dan çalışmadığı için, nihayet programın en azından almak için programın işe yaramasını sağlamak için bin şifre istemek zorunda kaldım. uygulama hesaplaşmasında bir T-Shirt.

Sorunu fark etmedim çünkü önce hızlı bir şekilde paylaştım. Orada her şey yolunda gitti. Başlangıçta bir kez şifre sorma. Tamamen aşağıdayım. AppShowdown'a katkım https://launchpad.net/armorforge idi . ;-(


StakOverflow'da daha iyi cevaplar bulabileceğinizi düşünüyorum. Bu sorunun oraya taşınmasını istemelisiniz.
jgomo3

Yanıtlar:


7

İlk olarak kavramanız gereken temel bir kavram vardır: PolicyKit, yetkilendirme artışını değil, yalnızca yetkilendirmeyi ele alır. PolicyKit şu soruyu yanıtlar: "kullanıcı bu görevi yapmaya yetkili mi?", Ancak size kök ayrıcalıkları sağlamaz.

Sık kullanılan model, kök ayrıcalıklarıyla çalışan bir DBus sistem hizmeti oluşturmaktır. Kök dışı işlemlerden istek alır, bu işlemin bu isteği yapmaya yetkili olup olmadığını belirlemek için PolicyKit'i kullanın ve ardından istenen görevi yapın.

Birkaç yıl önce ubuntuforums.org üzerinde Python ile PolicyKit ve DBus hakkında bir eğitim yazdım . Bazı güncelleştirmeler gerekebilir, ancak ilkeler aynıdır. Şimdi yatağa gitmem gerekiyor, bu yüzden bir göz atın ve güncellenmesi gerekiyorsa bana bildirin.


Virtualbox, normal kullanıcı altında uzantı paketlerinin yüklenmesine izin vermek için kullanılabilir mi?
Gryu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.