Mam aplikację GUI, która musi wywoływać demona (napisanego w języku Python) z uprawnieniami administratora. Chciałbym to zrobić bez pytania użytkownika o hasło.
Ponieważ demon jest skryptem, nie mogę ustawić bitu SUID bezpośrednio. Mógłbym do tego napisać opakowanie C, ale wolałbym nie wymyślać na nowo koła, zwłaszcza gdy błąd z mojej strony może poważnie zagrozić bezpieczeństwu systemu.
Zwykle w tej sytuacji dodam wiersz, /etc/sudoers
który pozwala użytkownikom uruchamiać demona jako root bez hasła, przy użyciu dyrektywy NOPASSWD. Działa to dobrze z wiersza poleceń. Jednak gdy robię to z GUI, pkexec
pojawia się okno dialogowe z pytaniem o hasło użytkownika. Wygląda na to, że w Ubuntu połączenia sudo
z GUI są w jakiś sposób przechwytywane pkexec
.
Czy jest na to czysty sposób? Naprawdę wolałbym nie mieć do czynienia z kłopotami ze skryptem setuid.
źródło
sudo somecommand
, pojawia siępkexec
okno dialogowe z hasłem, niezależnie od tego, czy istnieją zasady sudoers umożliwiające wykonywanie programu.Odpowiedzi:
Niewłaściwe jest powiedzenie: „Wygląda na to, że w Ubuntu połączenia
sudo
z GUI są w jakiś sposób przechwytywanepkexec
” .pkexec
nie ma wiele wspólnego zsudo
. W przeciwieństwie dosudo
,pkexec
nie przyznaje uprawnień rootowi całemu procesowi, ale pozwala na dokładniejszy poziom kontroli scentralizowanych zasad systemowych.Teraz, jeśli chcesz uruchomić aplikację GUI bez podania hasła
pkexec
, nie jest to trudne. Weźmy na przykład GParted . Po otwarciu zobaczysz następujące okno dialogowe z pytaniem o hasło:Kliknij Szczegóły, a okno dialogowe będzie teraz wyglądać następująco:
Stąd wszystko, co musisz zrobić, to otworzyć plik, używając na przykład następującego polecenia:
/usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy
i zmień następujące linie:
z następującymi:
Zapisz plik i zamknij go. Następnie, kiedy otworzysz GParted , nie będziesz już proszony o hasło.
źródło
gparted
. Podczas uruchamiania z terminalasudo gparted
uruchamiany jest/usr/sbin/gparted
plik z uprawnieniami administratora. Kiedy zaczynaszgparted
z GUI, zaczynasz w rzeczywistościgparted-pkexec
(możesz zweryfikować ten/usr/share/applications/gparted.desktop
plik wewnętrzny ), czyli/usr/bin/gparted-pkexec
skrypt powłoki, którego celem jest uruchomienie następującej komendy:pkexec "/usr/sbin/gparted"
co jest równoważne zpkexec gparted
. Więc nie ma z tym nic wspólnegosudo
. A tego polecenia nie powinieneś używać w terminalusudo gparted
.sudo
powinno być używane tylko w aplikacjach powłoki, a nie aplikacjach GUI. Zobaczman sudo
iman pkexec
w tym sensie.