2012-04-11 10 views
10

Buduję rozszerzenie powłoki Gnome i chcę móc wykonywać pewne rzeczy z eskalowanymi uprawnieniami. Tak więc myślę, że muszę użyć "zestawu zasad", ale nie wiem, jak to zrobić.Eskalacja uprawnień powłoki Gnome

więc powiedzieć, że chciał zrobić coś takiego ifconfig eth0 down lub ifconfig eth0 up

mogę uruchomić z terminalu: pkexec ifconfig eth0 down i poprosi o hasło, a następnie zrobić.

Ale jak mam to zrobić z wnętrza przedłużacza?

Jestem prawie pewien, że ma to coś wspólnego z robieniem pliku w/usr/share/polkit-1/actions, ale nie mogę znaleźć niczego w Internecie lub w inny sposób.

Chcę móc ustawić tak, aby nie było potrzeby wpisywania hasła, a rozszerzenie może uruchamiać tylko niektóre polecenia.

Wiem, że to naprawdę zły pomysł, aby zezwolić na wykonanie dowolnej komendy. Nie o to proszę, chcę móc uruchomić tylko jeden program/polecenie.

EDYCJA: Nie jestem pewien, ale myślę, że nie będzie możliwe, aby nie było potrzeby wpisywania hasła. Po prostu wiem, że sudo po raz pierwszy nie prosi o hasło, więc chciałbym mieć podobną funkcjonalność. Nie jestem pewien, co jest możliwe.

+0

To na ogół nie działa zbyt dobrze, ponieważ twoje rozszerzenie powłoki (w JavaScript) będzie działać w tym samym procesie, co sama powłoka, wystawiając go na działanie wszelkiego rodzaju "wycieki bezpieczeństwa" - bezpieczny zakład polegałby na użyciu 'pkexec' lub w inny sposób odizolowaniu" niebezpiecznego "fragmentu uprzywilejowanego kodu w oddzielnym procesie ... PS: Ponowne żądanie hasła przez' sudo' et al to systemowe ustawienie zabezpieczeń; domyślnym jest zwykle ponowne monitowanie po (długim), podczas gdy – BRFennPocock

+0

@BRPocock tak, używając 'pkexec' jest to, co chcę zrobić. Jak mam to zrobić w ramach rozszerzenia? – Jay

Odpowiedz

2

To dawno nie pracowałem z PolicyKit, ale z tego co pamiętam, trzeba rzeczywiście utworzyć plik w działaniach/katalogu z zawartością, takich jak:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE policyconfig PUBLIC 
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" 
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd"> 
<policyconfig> 

    <action id="org.freedesktop.policykit.pkexec.run-ifconfig"> 
    <description>Configure network</description> 
    <message>Authentication is required to set ifconfig parameters</message> 
    <defaults> 
     <allow_any>no</allow_any> 
     <allow_inactive>no</allow_inactive> 
     <allow_active>...</allow_active> 
    </defaults> 
    <annotate key="org.freedesktop.policykit.exec.path">/sbin/ifconfig</annotate> 
    </action> 

</policyconfig> 

trzeba zmień wartość w:

<allow_active>...</allow_active> 

Do żądanej wartości. Wybór wartości:

  • „nie” będzie odmówić dostępu
  • „tak” będzie domyślnie zezwala na dostęp
  • „AUTH_USER” wymaga uwierzytelnienia użytkownika
  • „auth_admin” wymaga uwierzytelnienia administratora.
  • "auth_user_keep" i "auth_admin_keep" działają podobnie, ale zachowują uwierzytelnianie przez kilka minut później.
  • Plus kilka innych wartości, zobacz here.

Zmiana wartości klucza allow_active na "tak" powinna zatrzymać żądania uwierzytelnienia.

Następnie należy dostosować plik akcji do swoich potrzeb i wywołać go.

Hugo,

1

miałem taki sam problem i spróbować wdrożyć wybieraka dla nastrojone. Oto, co wymyśliłem.

Jak odpowiedzieli inni, być może trzeba napisać plik zasad (użyłem "auth_admin"). Umieściłem go w "/ usr/share/polkit-1/actions/tuned-adm.policy "Nie sądzę, że mogę to rozprowadzić poprzez model rozszerzenia, więc będę musiał poprosić o dodanie go do niego, aby móc go dołączyć:

Następnie użyłem pkexec i mojego polecenia, aby uzyskać" sudo popup "i mam je pracować

const GLib = imports.gi.GLib; 
const Util = imports.misc.util; 
this.pkexec_path = GLib.find_program_in_path('pkexec'); 
this.tunedadm_path = GLib.find_program_in_path('tuned-adm'); 
let result = Util.trySpawnCommandLine(this.pkexec_path + " " + this.tunedadm_path + " list") 

prawdziwy kicker tutaj było użyłem kilka innych metod, aby uruchomić wiersz polecenia, a oni zamknąć gnome-shell znalazłem kod tutaj:... https://github.com/nodefourtytwo/gnome-shell-extension-cpu-freq/blob/master/extension.js być szczególnie przydatny