Pkexec'i şifre istemeyecek şekilde nasıl yapılandırırım?


12

Süper kullanıcı ayrıcalıkları ile bir daemon (Python ile yazılmış) çağırmak için gereken bir GUI uygulaması var. Bunu kullanıcıya şifre sormadan yapmak istiyorum.

Arka plan programı bir komut dosyası olduğundan, SUID bitini doğrudan ayarlayamıyorum. Bunun için bir C sarıcı yazabilirdim, ancak özellikle benim tarafımdaki bir hata sistemin güvenliğinin ciddi şekilde tehlikeye girmesine yol açtığında, tekerleği yeniden icat etmemeyi tercih ederim.

Bu durumda normalde yaptığım /etc/sudoersşey, kullanıcıların NOPASSWD yönergesini kullanarak kullanıcıların arka plan programını şifre olmadan kök olarak yürütmesine izin veren bir satır eklemektir . Bu komut satırından iyi çalışır. Ancak, bunu GUI'den yaptığımda pkexec, kullanıcının parolasını soran bir iletişim kutusu açılır. Ubuntu'da, GUI'den sudogelen çağrılar bir şekilde müdahale ediliyor gibi görünüyor pkexec.

Bu konuda temiz bir yol var mı? Gerçekten setuid betiğinin zorluklarıyla uğraşmak istemem.


Hangi uygulama hakkında konuşuyorsunuz?
Radu Rădeanu

Herhangi bir GUI uygulaması. Bir GUI uygulaması çalışmaya çalıştığında , programın yürütülmesine izin veren bir sudoers politikası olup olmadığına bakılmaksızın sudo somecommandaçılan iletişim kutusu bir pkexecşifre iletişim kutusudur .
Chinmay Kanchi

Yanıtlar:


14

Şunu söylemek yanlış: "Ubuntu'da GUI'den sudogelen çağrılar bir şekilde kesiliyor gibi görünüyor pkexec" . pkexecile pek ortak yanı yok sudo. Buna karşılık sudo, pkexectüm bir sürece kök izni vermez , aksine merkezi sistem politikasının daha iyi kontrol edilmesine izin verir.

Şimdi, bir GUI uygulamasını parola sormadan çalıştırmak istiyorsanız pkexec, bunun yapılması zor değildir. Örneğin GParted'ı ele alalım . Açtığınızda, size bir şifre soran aşağıdaki iletişim penceresini göreceksiniz:

gparted kimlik doğrulaması

Click Detaylar ve iletişim penceresi gibi şimdi görünecektir:

gparted kimlik doğrulaması - ayrıntılar

Buradan tek yapmanız gereken, örneğin aşağıdaki komutu kullanarak dosyayı açmaktır:/usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy

gksu gedit /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy

ve aşağıdaki satırları değiştirin:

      <allow_any>auth_admin</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
      <allow_active>auth_admin</allow_active>

aşağıdakilerle birlikte:

      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>

Dosyayı kaydedin ve kapatın. Ardından, GParted'ı açtığınızda artık bir şifre girmeniz istenmeyecek.


Evet, pkexec gerçekten sudo çağrılarına müdahale ediyor. Bakalım bu davranışa minimal bir örnek oluşturabilir miyim.
Chinmay Kanchi

Bunu basit bir uygulamada çoğaltamıyorum, sadece bazı çok özel durumlarda olabilir ve hatayı izlemek için zamanım yok. Cevabınızı kabul edeceğim. Şerefe.
Chinmay Kanchi

@ChinmayKanchi Daha net olalım. Örneğin tekrar alacağım gparted. Terminalden sudo gpartedçalıştırdığınızda, /usr/sbin/gparteddosyayı kök ayrıcalıklarına sahip olarak çalıştırırsınız . İlk başladığınızda gpartedGUI, sen aslında başlayacak gparted-pkexec(Eğer bu iç kontrol edebilirsiniz /usr/share/applications/gparted.desktopdosyası) olan /usr/bin/gparted-pkexec: O, amacı aşağıdaki komutu çalıştırmaktır bir kabuk pkexec "/usr/sbin/gparted"ile eşdeğerdir pkexec gparted. Yani, hiçbir ilgisi yok sudo. Ve bu komutu terminalde kullanmalısınız, değil sudo gparted.
Radu Rădeanu

1
@ChinmayKanchi sudo, GUI uygulamaları için değil, yalnızca kabuk uygulamaları için kullanılmalıdır. Bakın man sudove man pkexecbu anlamda.
Radu Rădeanu

Evet, her iki noktanızın da farkındayım. Benim durumum sudo kullanarak bir kabuk programı (benim tarafımdan da yazılmış bir daemon) başlatmaya çalışan bir GUI uygulaması (benim tarafımdan yazılmış) var. Bazı nedenlerden dolayı, bu işlem sudo yerine pkexec'in çağrılmasına neden olur, bu da arka plan programı için oluşturduğum sudo politikalarının yok sayıldığı anlamına gelir.
Chinmay Kanchi
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.