Como posso executar um aplicativo com uma GUI como administrador de uma sessão de usuário não administrador?

28

Eu defini duas contas de usuário:

  • um com privilégio de administrador (com sudo right) = > Vamos chamá-lo adminuser .
  • um segundo sem privilégio = > vamos chamá-lo normaluser
    e eu configuro o autologin neste segundo usuário normaluser .

Portanto, quando abro uma sessão normaluser e quero executar um aplicativo com privilégio de administrador,
Eu abro um terminal Ctrl + Alt + T e:

su adminuser
sudo anyapplication ...

Funciona bem, sem ter que sair da sessão normaluser (não é necessário abrir uma sessão adminuser ).

Mas o que devo fazer se o aplicativo precisar ser executado com uma GUI (Interface Gráfica do Usuário)?
Eu pensei sobre isso:

su adminuser
gksu anyapplication ...

mas eu recebo

** (gksu:9122): WARNING **: the connexion is closed
No protocol specified
No protocol specified
(gksu:9122): Gtk-WARNING **: cannot open display: :0.0
    
por Boris 17.07.2012 / 21:49

8 respostas

25

Terminologia

Nesta resposta:

  • normaluser é um usuário normal que não é administrador e não pode executar comandos como root com sudo .
  • admin é um administrador que pode executar comandos como root com sudo . (É claro que qualquer comando gráfico deve usar uma interface gráfica como gksu / gksudo e não sudo diretamente.)
  • anyapplication é o nome do aplicativo gráfico normaluser que deseja executar como root . normaluser conhece a senha de admin e foi (presumivelmente) informada de que pode usá-la para esse fim.

O problema

A causa do seu problema, e a razão pela qual a maioria das outras respostas até agora não funciona (com a exceção de excelente resposta do Marty Fried , é:

  • gksu pode ser configurado para usar sudo ou su como seu back-end. O comportamento padrão de gksu no Ubuntu é atuar como um frontend para sudo , não para su . Isso significa que, por padrão, gksu e gksudo se comportam exatamente da mesma maneira. Veja a página do manual .
  • normaluser não é um administrador e, portanto, não pode executar comandos como root com sudo . sudo solicita a senha do usuário que está sendo executado , não a senha do usuário que deseja se tornar . Não poder usar sua senha para realizar ações, pois as pessoas que não são você são o que significa não ser um administrador .
  • normaluser , desde que não seja uma conta Convidado, pode executar comandos como outro usuário com su , colocando o senha de outro usuário . Mas gksu age como um frontend para sudo , não su .
  • normaluser não pode diretamente executar qualquer comando como root , porque normaluser não pode usar sudo , e nobody pode se tornar root com su porque não há root password .

A solução

A solução requer escrever um comando que execute duas etapas de autenticação:

  • normaluser deve se tornar admin para executar um comando gráfico. Para fazer isso, normaluser deve executar gksu com o sinalizador -w para torná-lo em su-mode em vez do sudo-mode padrão e o sinalizador -u para executar o comando como admin em vez de root .
  • O comando é executado quando admin deve invocar gksu sem o sinal -w para usar sudo para se tornar root .

Aqui está o comando (sim, testei ; -) ):

gksu -w -u admin gksu anyapplication

Você será solicitado a fornecer uma senha duas vezes :

  1. Primeiro, você deve inserir a senha de admin para permitir que normaluser execute um comando como admin com o su backend.
  2. Em segundo lugar, você deve inserir a senha de admin para permitir que admin execute um comando como root com o sudo backend.

Isso mesmo. Você digita a senha do admin duas vezes.

Notas diversas:

  • Se desejar, você pode substituir o segundo gksu por gksudo para torná-lo menos confuso. No Ubuntu, eles são equivalentes. (Você também pode substituir o primeiro gksu por gksudo , mas isso seria extremamente contra-intuitivo e confuso.)
  • -w é a forma abreviada de --su-mode .
  • -S é a forma abreviada de --sudo-mode , mas não precisa ser usado porque sudo-mode é o padrão.
  • Você pode querer testar isso com um comando bem inofensivo primeiro, para ter certeza de que ele faz o que você quer. (Vai, mas não há necessidade de você confiar em mim sobre isso.) Por exemplo:
    gksu -w -u admin gksu xclock
    xclock é um aplicativo simples, com janela de relógio.
por Eliah Kagan 17.07.2012 / 22:49
11

Uma maneira que provavelmente funcionará é usar "sux" em vez de "su" quando você alternar para o usuário admin. O sux resolve o problema de executar x aplicativos do usuário falsificado. Ele está no repositório padrão e pode ser instalado inserindo sudo apt-get install sux em uma linha de comando.

Então, basta usar "sux" em vez de "su" e ele deve funcionar da maneira esperada.

Vamos reutilizar o exemplo do aplicativo xclock :

sux admin
gksu xclock
    
por Marty Fried 17.07.2012 / 22:54
3

O PAM pode cuidar disso

Isso funciona para mim no Ubuntu 16.04:

coloque a linha:

session optional pam_xauth.so

em algum lugar em:

/etc/pam.d/su

e / ou

/etc/pam.d/sudo

e, em seguida, fazendo "su -" ou "sudo su -" eu posso usar aplicativos gráficos como root.

    
por Gerben 23.09.2016 / 10:23
2

pkexec

Há uma alternativa onipresente ao kdesudo e gksu - pkexec , que é do pacote policykit-1 , que é exigido por muitos pacotes.

    
por int_ua 12.08.2014 / 12:56
0

Em vez de

su admin
gksu anyapplication ...

Eu sugiro que você tente gksu -u admin anyapplication , onde você faz tudo usando o comando gksu . Também por favor anote que você tem que digitar a senha do usuário mencionado no comando, ou seja, neste caso você tem que digitar a senha do admin .

    
por l0n3sh4rk 17.07.2012 / 22:13
-1

Aqui está o comando para realizar isso.

gksu app-name

Execute sem executando su primeiro. Você só precisa executar o comando acima de uma sessão de usuário normal e o aplicativo será executado como root.

    
por SirCharlo 17.07.2012 / 21:51
-1

Você deve usar:

gksudo AppName

Isso traz uma solicitação de senha gráfica primeiro (a senha do usuário) e, em seguida, inicia o aplicativo GUI como root (acabei de tentar, realmente funciona. Coisa engraçada: tentei gksu AppName imediatamente depois disso, e funcionou como bem - como provavelmente é suposto, como o prefixo "gk" sugere. Então, eu não estou completamente certo de onde seu problema pode estar localizado).

    
por Izzy 17.07.2012 / 22:08
-1

Existe apenas um superusuário e isso é raiz.

O usuário 1 é um administrador e tem direitos de sudo.
O usuário 2 não é um administrador e não possui direitos de sudo.

Tente fazer login como usuário 1 e, em seguida, use o comando

gksudo app-name  

(substituindo app-name pelo nome do aplicativo)
Espero que ajude - me avise. : o)

EDIT: Mais informações conforme solicitado

Se é só você no computador,
então usando o usuário 1 (quem tem permissão para usar o sudo)
não é diferente de usar o usuário 2 (que não tem permissão para usar o sudo).
Usuário 1 tem os mesmos direitos que o usuário 2.
A menos que o usuário 1 emita um comando prefixado com sudo e / ou forneça sua senha para permitir que os aplicativos sejam executados com priveligações raiz. A única diferença é que o usuário 2 não pode executar aplicativos como root.

Espero que ajude a explicar um pouco para você. : o)

    
por Fernhill Linux Project 17.07.2012 / 22:14

Tags