Terminologia
Nesta resposta:
-
normaluseré um usuário normal que não é administrador e não pode executar comandos comorootcomsudo. -
adminé um administrador que pode executar comandos comorootcomsudo. (É claro que qualquer comando gráfico deve usar uma interface gráfica comogksu/gksudoe nãosudodiretamente.) -
anyapplicationé o nome do aplicativo gráficonormaluserque deseja executar comoroot.normaluserconhece a senha deadmine 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 , é:
-
gksupode ser configurado para usarsudoousucomo seu back-end. O comportamento padrão degksuno Ubuntu é atuar como um frontend parasudo, não parasu. Isso significa que, por padrão,gksuegksudose comportam exatamente da mesma maneira. Veja a página do manual . -
normalusernão é um administrador e, portanto, não pode executar comandos comorootcomsudo.sudosolicita 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 . Masgksuage como um frontend parasudo, nãosu. -
normalusernão pode diretamente executar qualquer comando comoroot, porquenormalusernão pode usarsudo, e nobody pode se tornarrootcomsuporque não hárootpassword .
A solução
A solução requer escrever um comando que execute duas etapas de autenticação:
-
normaluserdeve se tornaradminpara executar um comando gráfico. Para fazer isso,normaluserdeve executargksucom o sinalizador-wpara torná-lo em su-mode em vez do sudo-mode padrão e o sinalizador-upara executar o comando comoadminem vez deroot. - O comando é executado quando
admindeve invocargksusem o sinal-wpara usarsudopara 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
adminpara permitir quenormaluserexecute um comando comoadmincom osubackend. - Em segundo lugar, você deve inserir a senha de
adminpara permitir queadminexecute um comando comorootcom osudobackend.
Isso mesmo. Você digita a senha do admin duas vezes.
Notas diversas:
- Se desejar, você pode substituir o segundo
gksuporgksudopara torná-lo menos confuso. No Ubuntu, eles são equivalentes. (Você também pode substituir o primeirogksuporgksudo, 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 xclockxclocké um aplicativo simples, com janela de relógio.