Jak mogę uruchomić aplikację z graficznym interfejsem użytkownika jako administrator z sesji użytkownika innego niż administrator?

33

Zdefiniowałem 2 konta użytkowników:

  • jeden z uprawnieniami administratora (z sudoprawem) => pozwala to nazwać adminuser.
  • drugi bez żadnych uprawnień => pozwala to nazwać i skonfiguruję automatyczne logowanie dla tego drugiego użytkownika . normaluser
    normaluser

Kiedy więc otwieram normalusersesję i chcę uruchomić aplikację z uprawnieniami administratora,
otwieram terminal Ctrl+ Alt+ Ti:

su adminuser
sudo anyapplication ...

Działa dobrze, bez konieczności wychodzenia z normalusersesji (nie trzeba otwierać adminusersesji).


Ale co powinienem zrobić, jeśli aplikacja musi działać z graficznym interfejsem użytkownika?
Myślałem o tym:

su adminuser
gksu anyapplication ...

ale rozumiem

** (gksu:9122): WARNING **: the connexion is closed
No protocol specified
No protocol specified
(gksu:9122): Gtk-WARNING **: cannot open display: :0.0
Boris
źródło
Pytanie brzmi: dlaczego tak skonfigurowałeś swój system? Czy uważasz, że poprawia to bezpieczeństwo? Tak nie jest :) Zamiast tego mogłeś skonfigurować automatyczne logowanie na swoim koncie „admin”, aby nie wymagało podania hasła podczas logowania - nadal będzie wymagało hasła podczas wykonywania zadań administracyjnych.
Siergiej
5
@Sergey Jeśli normaluserczasem jest używany przez kogoś, kto nie powinien być w stanie uruchamiać poleceń jako root, wówczas uczynienie użytkownika normaluserniebędącego administratorem zdecydowanie poprawia bezpieczeństwo . Niebezpieczeństwo związane z udostępnieniem komuś konta użytkownika, ale nie przekazaniem mu własnego hasła, wykracza daleko poza sytuację Borisa w kłopotach i złożoności. Jeśli chcesz uzyskać pełne wyjaśnienie, dlaczego jest to problematyczne, sugeruję opublikowanie nowego pytania, ale 3 powody są takie, że użytkownik powinien mieć możliwość zablokowania i odblokowania ekranu, wylogowania się i zalogowania przy użyciu innego typu sesji oraz odszyfrować ecryptfsdane.
Eliah Kagan
2
właśnie dla mnie nie ma sensu korzystać z komputera mojej rodziny, aby wszyscy znali hasło administratora, aby odblokować ekran. To normaluseri adminuserustawienie jest złotą zasadą.
Boris,
1
Szczerze mówiąc, właśnie miałem wrażenie, że OP używa normaluserkonta do codziennej pracy i adminkonta do wykonywania zadań administracyjnych, co tak naprawdę niczego nie poprawia. Na komputerze z wieloma użytkownikami ma to sens.
Siergiej

Odpowiedzi:

5

PAM może się tym zająć

Działa to dla mnie na Ubuntu 16.04 (edytuj: działa również na 18.04 LTS):

postaw linię:

session optional pam_xauth.so

gdzieś w:

/etc/pam.d/su

i / lub

/etc/pam.d/sudo

a następnie wykonując „su -” lub „sudo su -” Mogę używać aplikacji graficznych jako root.

Gerben
źródło
Potwierdzenie, że działa to również na Kubuntu 16.04. Dzięki!
akhmed
Dzięki, działa również dla mnie 18.04! wydaje się być najlepszą alternatywą do suxi gksuże nie są już dostępne.
Boris
29

Terminologia

W tej odpowiedzi:

  • normaluserjest normalnym użytkownikiem, który nie jest administratorem i nie może uruchamiać poleceń jak w rootprzypadku sudo.
  • adminjest administratorem, który może uruchamiać polecenia tak jak w rootprzypadku sudo. (Oczywiście wszelkie polecenia graficzne powinny używać graficznego interfejsu użytkownika, takiego jak gksu/gksudo , a nie sudobezpośrednio.)
  • anyapplicationto nazwa aplikacji graficznej, którą normaluserchce uruchomić root. normaluserzna adminhasło i (prawdopodobnie) powiedziano mu, że może go użyć do tego celu.

Problem

Przyczyną problemu, a powodem większości innych odpowiedzi do tej pory nie działają (z wyjątkiem Marty Fried „s doskonała odpowiedź ), to:

  • gksumoże być skonfigurowany do używania jednego z nich sudo lub su jako zaplecza. Domyślnym zachowaniem gksuw Ubuntu jest działanie jako interfejs dla sudo, a nie dla su. To znaczy, że domyślnie, gksui gksudozachowują się dokładnie tak samo . Zobacz stronę podręcznika .
  • normalusernie jest administratorem i dlatego nie może uruchamiać poleceń jak w rootprzypadku sudo. sudowyświetla monit o podanie hasła użytkownika, który go uruchomił , a nie hasła użytkownika, którym chce zostać . Brak możliwości używania hasła do wykonywania czynności jako osoby, które nie są tobą, oznacza, że ​​nie jesteś administratorem .
  • normaluserPod warunkiem, że nie jest to konto gościa, można uruchomić polecenia jako inny użytkownik zsu , oddanie w hasło innego użytkownika . Ale gksudziała jak nakładka sudo, nie su.
  • normaluserNie można bezpośrednio uruchomić dowolną komendę jako root, ponieważ normalusernie można używać sudo, i nikt nie może stać rootsię subo nie ma roothasła .

Rozwiązanie

Rozwiązanie wymaga napisania polecenia wykonującego dwa kroki uwierzytelniania:

  • normalusermusi zostać adminuruchomione polecenie graficzne. Aby to zrobić, normalusernależy uruchomić gksuz -wflagą, aby go uruchomić w su-mode zamiast domyślnego sudo-mode , a -uflaga uruchomić polecenie jako adminzamiast root.
  • Run komenda jak admintrzeba wykorzystać gksu bez tej -wflagi używać sudostać root.

Oto polecenie (tak, przetestowałem je ;-) ):

gksu -w -u admin gksu anyapplication

Zostaniesz dwukrotnie zapytany o hasło :

  1. Najpierw musisz wprowadzić adminhasło, aby normaluseruruchomić polecenie tak jak adminw przypadku subackendu.
  2. Po drugie, musisz wprowadzić adminhasło, aby adminuruchomić polecenie tak jak rootw przypadku sudobackendu.

Zgadza się. Podajesz adminhasło dwukrotnie.

Różne uwagi:

  • Jeśli chcesz, możesz zastąpić drugą gksuz gksudoaby uczynić go mniej mylące. W Ubuntu są one równoważne. (Można również wymienić pierwsze gksuz gksudo, ale to byłoby sprzeczne z intuicją i bardzo mylące).
  • -wjest krótką formą --su-mode.
  • -Sjest krótką formą, --sudo-modeale nie należy jej używać, ponieważ domyślny jest tryb sudo .
  • Możesz najpierw przetestować to za pomocą całkiem nieszkodliwego polecenia, aby upewnić się, że działa tak, jak chcesz. (Będzie, ale nie musisz mi ufać w tej sprawie.) Na przykład:
    gksu -w -u admin gksu xclock
    xclock jest ładną, prostą aplikacją okna z zegarem.
Eliah Kagan
źródło
1
DOSKONAŁE, dodaję alias w moim .bashrc od razu, aby uniknąć zapomnienia o tej sprytnej wskazówce
Boris
nie wiem dlaczego, ale teraz (z Ubuntu 14.04) muszę zacząć od, sudoaby działało. Przykład:sudo gksu -w -u thedude gksu xclock
Boris,
FYI: kdesudowygląda na czystsze, przynajmniej na KUbuntu.
MDTech.us_MAN
niestety wydaje się, że gksunie jest już dostępny
Boris
11

Jednym ze sposobów, który prawdopodobnie będzie działał, jest użycie „sux” zamiast „su” po pierwszym przełączeniu na użytkownika administratora. sux naprawia problem z uruchomieniem aplikacji x od sfałszowanego użytkownika. Znajduje się w standardowym repozytorium i można go zainstalować, wpisując sudo apt-get install suxw wierszu polecenia.

Następnie po prostu użyj „sux” zamiast „su” i powinno działać tak, jak się spodziewasz.

Pozwala ponownie wykorzystać przykład aplikacji xclock:

sux admin
gksu xclock
Marty Fried
źródło
3
Nie ma już wersji suxUbuntu 14.04 64bits;(
Boris
2
Wydaje się, że istnieje alternatywa
Boris
@ Boris To skrypt powłoki, można go pobrać z historycznego repozytorium i umieścić na swojej ścieżce, na przykład z packages.debian.org/source/wheezy/sux
Nikt
2

pkexec

Istnieje wszechobecna alternatywa dla kdesudo i gksu - pkexecktóra pochodzi z policykit-1pakietu wymaganego przez wiele pakietów.

int_ua
źródło
Polecam rozszerza tę odpowiedź do wyjaśnienia, jak zwykły użytkownik (który nie jest administratorem i nie może stać się korzeń z sudolub polkit), która zna hasło administratora (czyli kogoś, kto może stać się korzeń z sudolub polkit), można używać pkexecdo uruchom program graficzny jako root. Oto pytanie tutaj. To nie jest dla mnie jasne, że pkexecbędzie to zrobić, przynajmniej w znacznym stopniu bez edycji plików konfiguracyjnych, zwłaszcza, że pkexecnie można na ogół używane do uruchamiania dowolnych programów graficznych (bez profili polkit) w ogóle . Czy istnieje sposób?
Eliah Kagan
@EliahKagan Działa na Ubuntu z domyślną konfiguracją - po prostu uruchom pkexec commandi działa. Konfiguracja znajduje się w pliku /usr/share/polkit-1/actions/org.freedesktop.policykit.policyinstalowanym przez nazwany pakiet. W rzeczywistości wymaga to
wpisania
0

Zamiast

su admin
gksu anyapplication ...

Sugeruję, aby spróbować gksu -u admin anyapplication, gdzie wszystko robisz za pomocą samego gksupolecenia. Pamiętaj również, że musisz wprowadzić hasło użytkownika wymienionego w poleceniu, tj. W tym przypadku musisz wprowadzić hasło administratora .

l0n3sh4rk
źródło
1
W domyślnie skonfigurowanym systemie Ubuntu, jeśli zostanie normaluseruruchomiony gksu -u admin anyapplication, wyświetli monit o podanie normaluserhasła, które będzie adminużywane przez sudobackend, podobnie jak o gksu anyapplicationpodanie normaluserhasła, które będzie rootużywane przez sudobackend. Oba zawiodą z tego samego powodu - normalusernie ma mocy, aby wykonywać polecenia sudo.
Eliah Kagan
-1

Oto polecenie, aby to osiągnąć.

gksu app-name

Uruchom najpierw bez uruchamiania su. Musisz tylko uruchomić powyższe polecenie z normalnej sesji użytkownika, a aplikacja zostanie uruchomiona jako root.

SirCharlo
źródło
1
to nie działa - pamiętaj, że próbuję z sesji użytkownika bez uprawnień
Boris,
Jaki jest komunikat o błędzie?
SirCharlo,
wpisując normalhasło użytkownika - pojawia się komunikat „Niemożliwe do uruchomienia jako użytkownik root”
Boris,
wpisując superuser/adminhasło - pojawia się komunikat „nieprawidłowe hasło, spróbuj ponownie”
Boris,
-1

Powinieneś użyć:

gksudo AppName

Spowoduje to wyświetlenie najpierw graficznego żądania hasła (hasło użytkownika), a następnie uruchamia aplikację GUI jako root (właśnie próbowałem, to naprawdę działa. Zabawna rzecz: gksu AppNamepotem spróbowałem natychmiast, i to też zadziałało - tak jak jest prawdopodobnie powinien, jak sugeruje przedrostek „gk”. Nie jestem więc całkowicie pewien, gdzie może być zlokalizowany problem).

Izzy
źródło
1
działa w twoim przypadku, ponieważ próbowałeś sesji administratora z sudo. A co z sesją użytkownika innego niż administrator bez sudo, prawda?
Boris,
Użyłem gksudo z normalnego okna terminala z użytkownikiem niebędącym administratorem (moim własnym użytkownikiem). Masz jednak rację przy drugiej próbie, ponieważ nadal miałem wtedy sudo perms. Ale problem Borysa jest inny: jego aplikacja nie może połączyć się z X, co w moim przypadku działało za każdym razem. Jak widać z pierwotnego pytania, sudow trybie tekstowym działa dla niego.
Izzy
-1

Jest tylko jeden superużytkownik i jest to root.

Użytkownik 1 jest administratorem i ma prawa sudo.
Użytkownik 2 nie jest administratorem i nie ma uprawnień sudo.

Spróbuj zalogować się jako użytkownik 1, a następnie za pomocą polecenia

gksudo app-name  

(zastępując nazwę aplikacji nazwą aplikacji)
Mam nadzieję, że to pomoże - daj mi znać. : o)

EDYCJA: Więcej informacji zgodnie z życzeniem

Jeśli to tylko Ty na komputerze,
korzystanie z użytkownika 1 (który ma uprawnienia do korzystania z sudo)
nie różni się od korzystania z użytkownika 2 (który nie ma uprawnień do korzystania z sudo).
Użytkownik 1 ma takie same uprawnienia jak użytkownik 2.
Chyba że użytkownik 1 wyda polecenie poprzedzone sudo i / lub poda swoje hasło, aby umożliwić aplikacjom uruchamianie z uprawnieniami root.
Jedyną różnicą jest to, że użytkownik 2 nie może uruchamiać aplikacji jako root.

Mam nadzieję, że to ci trochę wyjaśni. : o)

Projekt Fernhill Linux
źródło
dzięki za wyjaśnienie między superużytkownikiem a administratorem, zmienię moje pytanie. Co rozumiesz przez „logowanie jako użytkownik 1” => otwórz sesję z użytkownikiem 1? cóż, tego chciałbym uniknąć.
Boris,
dodał więcej informacji, aby odpowiedzieć zgodnie z prośbą: o)
Fernhill Linux Project
cóż, moja żona i moje dzieci używają user2 z autologinem, więc wolę nie mieć sudo z tym użytkownikiem.
Boris,
Brzmi jak dobry pomysł - ja też mam dzieci; o). Czy próbowałeś już zalogować się jako użytkownik1 i uruchomić polecenie?
Fernhill Linux Project,
1
Tak, mogę, ale zmiana sesji użytkownika jest bolesna. Zwykle muszę to zrobić kilka razy: przejdź do sesji administratora, aby zdefiniować niektóre ustawienia, przełącz się na normalną sesję użytkownika, aby przetestować, i wciąż bardzo dobrze, że mogę to zrobić pozostając w normalnej sesji. Przez większość czasu obsługuję go za pomocą su admin+ sudo ...przykładu sudo vi file, z wyjątkiem aplikacji z GUI
Boris