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


33

Eu defini 2 contas de usuário:

  • um com privilégio de administrador (à sudodireita) => vamos chamá-lo adminuser.
  • um segundo sem nenhum privilégio => vamos chamá-lo e eu configuro o login automático neste segundo usuário . normaluser
    normaluser

Portanto, quando abro uma normalusersessão e quero executar um aplicativo com privilégio de administrador,
abro um terminal Ctrl+ Alt+ Te:

su adminuser
sudo anyapplication ...

Funciona bem, sem precisar sair da normalusersessão (não é necessário abrir uma adminusersessão).


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 entendo

** (gksu:9122): WARNING **: the connexion is closed
No protocol specified
No protocol specified
(gksu:9122): Gtk-WARNING **: cannot open display: :0.0

Portanto, a pergunta é: por que você configurou seu sistema dessa maneira? Você acha que isso melhora a segurança? Não é :) Em vez disso, você poderia ter configurado o login automático na sua conta "admin" para não solicitar uma senha ao fazer login - ainda será necessária uma senha ao executar tarefas administrativas.
Sergey

5
@Sergey Se normaluseràs vezes é usado por alguém que não deveria executar comandos como root, tornar normaluserum não administrador definitivamente melhora a segurança . Os perigos de dar a alguém uma conta de usuário, mas não de informar sua própria senha, vão muito além da situação de Boris em problemas e complexidade. Se você quiser uma explicação completa sobre por que isso é problemático, sugiro postar uma nova pergunta, mas três dos motivos são que um usuário deve ser capaz de bloquear e desbloquear a tela, sair e voltar com um tipo de sessão diferente e descriptografar ecryptfsdados.
Eliah Kagan 17/07/2012

2
exatamente, para mim, não faz sentido usar o PC da minha família, informando a senha de administrador para desbloquear a tela. Essa configuração normalusere adminuseré a regra de ouro.
Boris

1
Justo, fiquei com a impressão de que o OP estava usando a normaluserconta para o trabalho diário e admina execução de tarefas administrativas, o que realmente não melhora nada. Em uma máquina multiusuário, isso faz totalmente sentido.
Sergey

Respostas:


5

O PAM pode cuidar disso

Isso funciona para mim no Ubuntu 16.04 (editar: funciona também no 18.04 LTS):

coloque a linha:

session optional pam_xauth.so

Em algum lugar em:

/etc/pam.d/su

e / ou

/etc/pam.d/sudo

e depois executando "su -" ou "sudo su -", posso usar aplicativos gráficos como raiz.


Confirmando que isso também funciona no Kubuntu 16.04. Obrigado!
akhmed 12/02

Obrigado, funciona para mim também em 18.04! parece ser a melhor alternativa para suxe gksuque não estão disponíveis.
Boris

29

Terminologia

Nesta resposta:

  • normaluseré um usuário normal que não é administrador e não pode executar comandos como rootem sudo.
  • adminé um administrador que pode executar comandos como rootem sudo. (Obviamente, qualquer comando gráfico deve usar uma interface gráfica como gksu/gksudo , e não sudodiretamente.)
  • anyapplicationé o nome do aplicativo gráfico que normaluserdeseja executar como root. normalusersabe admina senha e (presumivelmente) foi informado de que pode usá-la para esse fim.

O problema

A causa do seu problema, ea razão pela qual a maioria das outras respostas até agora não fazer o trabalho (com exceção de Marty Fried 's excelente resposta ), é:

  • gksupode ser configurado para usar um sudo ou su como back-end. O comportamento padrão do gksuUbuntu é atuar como um frontend sudo, não para su. Ou seja, por padrão, gksue gksudose comporta exatamente da mesma maneira . Veja a página de manual .
  • normalusernão é um administrador e, portanto, não pode executar comandos como rootem sudo. sudosolicita a senha do usuário que está executando , não a senha do usuário que eles desejam se tornar . Não poder usar sua senha para executar ações como pessoas que não são você é o que significa não ser um administrador .
  • normaluser, Desde que não seja uma conta do cliente, pode executar comandos como outro usuário comsu , colocando na senha outro usuário . Mas gksuatua como uma interface para sudo, não su.
  • normalusernão pode executar nenhum comando diretamente como root, porque normalusernão pode ser usado sudo, e ninguém pode ficar rootcom ele suporque não há rootsenha .

A solução

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

  • normaluserdeve tornar admin- se para executar um comando gráfico. Para fazer isso, normaluserexecute gksucom o -wsinalizador para executá-lo no modo su, em vez do modo sudo padrão , e o -usinalizador para executar o comando como em adminvez de root.
  • O comando executado como admindeve ser chamado gksu sem o -wsinalizador a ser usado sudopara se tornar root.

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

gksu -w -u admin gksu anyapplication

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

  1. Primeiro, você deve digitar admina senha de um usuário, para permitir normaluserexecutar um comando como adminno suback - end.
  2. Segundo, você deve digitar admina senha de um usuário, para permitir adminexecutar um comando como rootno sudoback - end.

Está certo. Você digita admina senha duas vezes.

Notas diversas:

  • Se desejar, você pode substituir o segundo gksupor gksudopara torná-lo menos confuso. No Ubuntu, eles são equivalentes. (Você também pode substituir o primeiro gksupor gksudo, mas isso seria extremamente contra-intuitivo e confuso.)
  • -wé a forma abreviada de --su-mode.
  • -Sé a forma abreviada de, --sudo-modemas nenhuma deve ser usada porque o modo sudo é o padrão.
  • Você pode testar isso com algum comando bastante inofensivo primeiro, para garantir que ele faça o que você deseja. (Sim, mas não há necessidade de você confiar em mim nisso.) Por exemplo:
    gksu -w -u admin gksu xclock
    xclock é uma aplicação simples e agradável da janela do relógio.

1
PERFEITO, eu adicionar um alias no meu .bashrc imediatamente para evitar esquecer esta dica inteligente
Boris

não sei por que, mas agora (com o ubuntu 14.04) eu tenho que começar sudopara fazê-lo funcionar. Exemplo:sudo gksu -w -u thedude gksu xclock
Boris

FYI: kdesudoparece funcionar mais limpo, pelo menos no KUbuntu.
MDTech.us_MAN

infelizmente, parece que gksunão está mais disponível
Boris

11

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

Em seguida, basta usar "sux" em vez de "su" e deve funcionar da maneira que você espera.

Permite reutilizar o exemplo do aplicativo xclock:

sux admin
gksu xclock

3
Não há mais versão suxno Ubuntu 14.04 64bits;(
Boris

2
Parece que há uma alternativa
Boris

@Boris É um shell script, você pode simplesmente baixá-lo de um repositório histórico e colocá-lo no seu caminho, por exemplo, em packages.debian.org/source/wheezy/sux
Ninguém

2

pkexec

Existe uma alternativa onipresente ao kdesudo e ao gksu - pkexecque é do policykit-1pacote exigido por muitos pacotes.


Eu recomendo expandir esta resposta para explicar como um usuário comum (que não é administrador e não pode se tornar root sudoou polkit), que conhece a senha de um administrador (ou seja, de alguém que pode se tornar root sudoou polkit), pode usar pkexecpara execute um programa gráfico como root. É isso que a pergunta aqui está fazendo. Não é claro para mim que pkexecvai fazer isso, pelo menos sem editar extensivamente os arquivos de configuração, especialmente desde que pkexecgeralmente não podem ser usados para executar programas gráficos arbitrárias (sem perfis polkit) em tudo . Há algum jeito?
Eliah Kagan

@EliahKagan Funciona no Ubuntu com configuração padrão - basta executar pkexec commande funcionar. A configuração está no arquivo /usr/share/polkit-1/actions/org.freedesktop.policykit.policyque é instalado pelo pacote nomeado. E ele realmente exige que você escrever a senha de administrador apenas uma vez
pqnet

0

Ao invés de

su admin
gksu anyapplication ...

Eu sugiro que você tente gksu -u admin anyapplication, onde você faz tudo usando o gksupróprio comando. Além disso, observe que você deve digitar a senha do usuário mencionado no comando, ou seja, nesse caso, você deve digitar a senha do administrador .


1
Em um sistema Ubuntu configurou-padrão, se normaluserexecutado gksu -u admin anyapplicationele irá pedir para normaluser'password s para se tornar adminusando o sudobackend, assim como gksu anyapplicationiria solicitar normalusera senha para se tornar rootusando o sudobackend. Ambos falharão pelo mesmo motivo - normalusernão tem o poder de executar comandos sudo.
Eliah Kagan

-1

Aqui está o comando para fazer isso.

gksu app-name

Execute-o sem executar suprimeiro. Você só precisa executar o comando acima em uma sessão normal do usuário e o aplicativo será executado como root.


1
ele não funciona - nota que eu estou tentando de uma sessão de usuário sem privilégio
Boris

Qual é a mensagem de erro?
18712 SirCharlo

digitando minha normalsenha de usuário - recebo a mensagem "Impossível iniciar como usuário root"
Boris

entrando no meu superuser/admin senha - recebo a mensagem "senha incorreta, tente novamente"
Boris

-1

Você deveria usar:

gksudo AppName

Isso traz uma solicitação gráfica de senha primeiro (a senha do usuário) e, em seguida, inicia o aplicativo GUI como root (eu tentei, realmente funciona. Coisa engraçada: tentei gksu AppNameimediatamente depois e funcionou tão bem - como é provavelmente deveria, como sugere o prefixo "gk". Portanto, não tenho certeza de onde seu problema pode estar).


1
funciona no seu caso porque você tentou a partir de uma sessão de usuário administrador com o sudo right. Que tal partir de uma sessão de usuário não administrador sem o sudo, certo?
22412 Boris

Eu usei o gksudo a partir de uma janela de terminal normal com um usuário não administrador (meu próprio usuário). Você está correto, no entanto, para a segunda tentativa, pois eu ainda tinha permissões de sudo. Mas o problema de Boris é outro: o aplicativo dele não pode se conectar ao X, que no meu caso funcionou duas vezes. Como você pode ver na pergunta original, sudono modo de texto está funcionando para ele.
Izzy

-1

Há apenas um super usuário e isso é raiz.

O usuário 1 é um administrador e possui 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 for apenas você no computador,
usar o usuário 1 (que 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).
O 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 privilégios de root.
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)


obrigado pelo esclarecimento entre superusuário e administrador, editarei minha pergunta. O que você quer dizer com "registrando-se como usuário 1" => abre a sessão com o usuário 1? bem, é isso que eu gostaria de evitar.
Boris

adicionou mais informações para responder conforme solicitado: o)
Projeto Fernhill Linux

bem, minha esposa e meus filhos estão usando o user2 com o login automático, então eu gosto de não ter o sudo certo com esse usuário.
21412 Boris

Parece uma boa idéia - eu também tenho filhos; o). Você já tentou efetuar login como user1 e executar o comando?
Fernhill Linux Project

1
Sim, posso, mas é doloroso alterar a sessão do usuário. Normalmente, eu tenho que fazer isso várias vezes: vá na sessão de administrador para definir algumas configurações, mude para a sessão normal do usuário para testar e, repetidamente, é muito bom poder fazer isso permanecendo na sessão normal. Na maioria das vezes eu trato com su admin+ sudo ...exemplo sudo vi file, exceto para aplicação com GUI
Boris
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.