Jak skonfigurować pkexec?

32

Czytanie tych pytań i odpowiedzi:

przyniósł mi kolejny, który spowoduje problemy dla nowych użytkowników tego polecenia:

  • Jak skonfigurować w pkexeccelu łatwego użycia?

Na przykład podczas wykonywania następujących czynności:

(Otwieranie pliku w terminalu)

pkexec nano /etc/mysql/my.cnf  

(Otwieranie pliku w GUI)

pkexec gedit /etc/mysql/my.cnf  

Ostatni otrzymuje następujący błąd:

 pkexec must be setuid root

To przyniosło mi następujące pytania:

  1. Jak skonfigurować, pkexecaby tego uniknąć? Podobne do zachowania sudo/ gksuzachowania podczas robienia tego samego (proszą tylko o hasło).

  2. Jeśli ma to zastosowanie, jak powiedzieć mu, aby nie pytał o hasło po pierwszym zastosowaniu go do polecenia (lub włączając pierwsze polecenie, jeśli można je skonfigurować)?

  3. Gdzie zapisać plik konfiguracyjny, jeśli jeszcze nie istnieje?

  4. Czy istnieje aplikacja GUI do konfiguracji pkexecużytkowania (Policy Kit)?

Luis Alvarado
źródło
1
Na marginesie Ubuntu zajmującego się biznesem w tym zakresie w 13.04 robię to dla gedit & nautilus. Działa tutaj dobrze, ale nie będzie stanowić odpowiedzi, ponieważ to tylko moje rozwiązanie, dopóki nie zajmie się Ubuntu. ubuntuforums.org/...
Doug
Hmm, nie mogę dodać komentarza - więc uciekaj się do odpowiedzi ... Używanie: alias pkexec = 'pkexec env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY' Oznacza, że ​​GUI logowania zwraca ścieżkę env zamiast polecenia ostatecznie wykonywane. Czy istnieje sposób zorganizowania użycia „env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY”, aby pkexec gui zwrócił ścieżkę do ostatecznie wykonywanego polecenia? Zobacz zdjęcie tutaj: okno dialogowe

Odpowiedzi:

39

Jak skonfigurować, pkexecaby uniknąć błędów podczas uruchamiania aplikacji GUI?

Znalazłem dwa możliwe sposoby:

  1. Jak widać, używając:

    pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
    

    nie spowoduje błędu. Jest to normalne, ponieważ man pkexecw tej sprawie jest bardzo jasne:

           [...] pkexec will not allow you to run X11 applications
           as another user since the $DISPLAY and $XAUTHORITY environment
           variables are not set.[...]
    

    W rezultacie możesz utworzyć ( stały ) alias (jest to najprostszy sposób):

    alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
    
  2. Lub (ponownie) jak man pkexecmówi:

           [...] These two variables will be retained if the
           org.freedesktop.policykit.exec.allow_gui annotation on an action is set
           to a nonempty value; this is discouraged, though, and should only be
           used for legacy programs.[...]
    

    możesz utworzyć nowy plik strategii o /usr/share/polkit-1/actionsnazwie com.ubuntu.pkexec.gedit.policyz następującym kodem xml wewnątrz, w którym najważniejsze jest ustawienie org.freedesktop.policykit.exec.allow_guiniepustej wartości:

    <?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="com.ubuntu.pkexec.gedit">
        <message gettext-domain="gparted">Authentication is required to run gedit</message>
        <icon_name>gedit</icon_name>
        <defaults>
          <allow_any>auth_admin</allow_any>
          <allow_inactive>auth_admin</allow_inactive>
          <allow_active>auth_admin</allow_active>
        </defaults>
        <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gedit</annotate>
        <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
      </action>
    
    </policyconfig>
    

Jak powiedzieć, aby nie pytał o hasło po pierwszym zastosowaniu go do polecenia?

Z tych trzech znaczników Otoczenie: allow_any, allow_inactivea allow_activez pliku zasad, dostępne są następujące opcje:

  • nie : Użytkownik nie jest upoważniony do wykonania akcji. Dlatego nie ma potrzeby uwierzytelniania.
  • tak : Użytkownik jest upoważniony do przeprowadzenia akcji bez uwierzytelnienia.
  • auth_self : Wymagane jest uwierzytelnienie, ale użytkownik nie musi być użytkownikiem administracyjnym.
  • auth_admin : Wymagane jest uwierzytelnienie jako użytkownik administracyjny.
  • auth_self_keep : To samo co auth_self, ale, podobnie jak sudoautoryzacja, trwa kilka minut.
  • auth_admin_keep : To samo co auth_admin, ale tak jak sudoautoryzacja trwa kilka minut.

     Źródło: Polkit - Struktura - Działania

Tak więc, jeśli użyjesz opcji auth_admin_keep (lub, w stosownych przypadkach, auth_self_keep ), pkexecprzez pewien czas nie poprosisz o hasło (domyślnie czas ten jest ustawiony na 5 minut, jak sprawdziłem). Wadą jest to, że ta rzecz ma zastosowanie tylko do jednego - tego samego - polecenia / aplikacji i jest ważna dla wszystkich użytkowników (chyba że zostanie ona zastąpiona w późniejszej konfiguracji).

Gdzie zapisać plik konfiguracyjny, jeśli jeszcze nie istnieje?

Pliki konfiguracyjne lub definicje pakietu polkit można podzielić na dwa rodzaje:

  • Działania są zdefiniowane w plikach .policy XML znajdujących się w /usr/share/polkit-1/actions. Do każdej akcji przypisany jest zestaw domyślnych uprawnień (np. Musisz zidentyfikować się jako administrator, aby użyć akcji GParted). Wartości domyślne można zmienić, ale edytowanie plików działań NIE jest poprawnym sposobem. Nazwa tego pliku zasad powinna mieć ten format:

    com.ubuntu.pkexec.app_name.policy
  • Reguły autoryzacji są zdefiniowane w plikach .rules JavaScript. Można je znaleźć w dwóch miejscach: pakiety innych firm mogą z nich korzystać /usr/share/polkit-1/rules.d(choć niewiele, jeśli w ogóle) i /etc/polkit-1/rules.dmożna je konfigurować lokalnie. Pliki .rules wyznaczają podzbiór użytkowników, odnoszą się do jednej (lub więcej) akcji określonych w plikach akcji i określają, z jakimi ograniczeniami te akcje mogą być podejmowane przez tego / tych użytkowników. Na przykład plik reguł może unieważnić domyślny wymóg uwierzytelniania wszystkich użytkowników przez administratora podczas korzystania z GParted, co oznacza, że ​​określony użytkownik nie musi tego robić. Lub w ogóle nie wolno używać GParted.

     Źródło: Polkit - Struktura

Czy istnieje aplikacja GUI do konfiguracji pkexecużycia?

Z tego co wiem, do tej pory (18.01.2014) nie istnieje coś takiego. Jeśli w przyszłości coś znajdę, nie zapomnę też zaktualizować tej odpowiedzi.

Radu Rădeanu
źródło
4
jaka piękna odpowiedź !! Dziękuję bardzo. Teraz rozumiem, dlaczego nie mogłem pracować doublecmdz ROOT PRIVELEGES, ponieważ musiałem eksportować środowiska DISPLAY & XAUTHORITY!! Po prostu małe pytania: czy jest jakaś różnica w pisaniu zasad lub po prostu uruchamianiu programu z poleceniem przez pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY doublecmdcały czas?
Ilia Rostovtsev,
@IliaRostovtsev myślę, że pkexecstanie się tak niebezpieczny, jak gksudogdyby działał przez taki alias? może zamiast aliasu może być skrypt z uprawnieniami administratora, może być bezpieczniejszy?
Aquarius Power
@AquariusPower W jaki sposób może to być niebezpieczne? Oczywiście możesz spróbować, ale nie jestem pewien. Problem powstaje, gdy trzeba użyć GUI (X Server) działającego pod „ty” i innego programu GUI, który musi być uruchomiony jako root. Pobaw się i odeślij, jeśli coś znajdziesz.
Ilia Rostovtsev
@ radu-rădeanu On Utopic auth_admin_keepwydaje się nie działać. Jeśli uruchomię synaptic z GUI (co jest równoważne pkexec synaptic), to za każdym razem pyta o hasło. Masz pomysł, dlaczego?
Khurshid Alam
0

Oprócz odpowiedzi Radu: nie użyłbym aliasu pkexec, ale gksudo .

Czemu? Nie musisz przepisywać skryptu.

Używam następującej konfiguracji:

  • otwórz terminal
  • cd /usr/local/bin
  • sudo gedit gksudo (utwórz nowy plik o nazwie „gksudo”
  • napisz następującą treść:

    • pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY $@

    • (nie zapomnij $@na końcu. Służy to do przekierowania wszystkich parametrów)

  • Zapisz i wyjdź

  • uczynić plik wykonywalnym: chmod 755 gksudo
  • Teraz powinieneś mieć w pełni funkcjonalną komendę gksudo dostępną w twoim systemie - na stałe.

Z powodów związanych z dokumentacją napiszę, co próbowałem i nie wyszło:

  • alias pkexec = 'pkexec env [...]'
  • alias gksudo = 'pkexec [...]'
    • Nie był stały i pozostał tylko w jednym terminalu
  • dodanie aliasu do ~/.bash_aliases
    • Działa, jeśli najpierw otworzysz terminal. Nie działa, jeśli dwukrotnie klikniesz skrypty
  • Utwórz link do pkexec z parametrami ( ln -s pkexec [...])
    • Po szybkim googleowaniu wygląda na to, że linux nie obsługuje parametrów w linkach
TheTrowser
źródło