Terminologia
Nesta resposta:
-
normaluser
é um usuário normal que não é administrador e não pode executar comandos comoroot
comsudo
. -
admin
é um administrador que pode executar comandos comoroot
comsudo
. (É claro que qualquer comando gráfico deve usar uma interface gráfica comogksu
/gksudo
e nãosudo
diretamente.) -
anyapplication
é o nome do aplicativo gráficonormaluser
que deseja executar comoroot
.normaluser
conhece a senha deadmin
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 usarsudo
ousu
como seu back-end. O comportamento padrão degksu
no Ubuntu é atuar como um frontend parasudo
, não parasu
. Isso significa que, por padrão,gksu
egksudo
se comportam exatamente da mesma maneira. Veja a página do manual . -
normaluser
não é um administrador e, portanto, não pode executar comandos comoroot
comsudo
.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 comsu
, colocando o senha de outro usuário . Masgksu
age como um frontend parasudo
, nãosu
. -
normaluser
não pode diretamente executar qualquer comando comoroot
, porquenormaluser
não pode usarsudo
, e nobody pode se tornarroot
comsu
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 tornaradmin
para executar um comando gráfico. Para fazer isso,normaluser
deve executargksu
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 comoadmin
em vez deroot
. - O comando é executado quando
admin
deve invocargksu
sem o sinal-w
para usarsudo
para se tornarroot
.
Aqui está o comando (sim, testei ; -) ):
gksu -w -u admin gksu anyapplication
Você será solicitado a fornecer uma senha duas vezes :
- Primeiro, você deve inserir a senha de
admin
para permitir quenormaluser
execute um comando comoadmin
com osu
backend. - Em segundo lugar, você deve inserir a senha de
admin
para permitir queadmin
execute um comando comoroot
com osudo
backend.
Isso mesmo. Você digita a senha do admin
duas vezes.
Notas diversas:
- Se desejar, você pode substituir o segundo
gksu
porgksudo
para torná-lo menos confuso. No Ubuntu, eles são equivalentes. (Você também pode substituir o primeirogksu
porgksudo
, 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.