Na área de trabalho X, eu ocasionalmente usei gksudo
ou apenas sudo somegui
para iniciar aplicativos GUI como outro usuário, incluindo root. Descobri recentemente que isso não é possível em desktops Wayland contemporâneos (início de 2018). Todos os aplicativos devem ser iniciados como o usuário atual da área de trabalho e são limitados aos privilégios desse usuário.
Esse é um recurso permanente do Wayland (por design) ou o uso do tipo su é um aprimoramento que ainda não foi implementado?
Estou procurando uma declaração documentada (roteiro, página de design...), não preferência ou opinião.
Não. Isso não tem nada a ver com o protocolo Wayland. É mais uma questão de configuração do ambiente.
Wayland usa um soquete, seu nome é armazenado em
WAYLAND_DISPLAY
. Ele está localizado emXDG_RUNTIME_DIR
que normalmente é configurado apenas para acesso do usuário. Mas o root também pode acessá-lo. (Alguns aplicativos também consideramXDG_SESSION_TYPE
quais podem ter valoreswayland
oux11
para decidir se devem usar X ou Wayland.)sudo
exclui a maioria das variáveis de ambiente, incluindoXDG_RUNTIME_DIR
eWAYLAND_DISPLAY
.Você pode executar aplicativos wayland como root com:
ou menor
-EH
para preservar quase todas as variáveis de ambiente (mas definindoHOME
como/root
). Isso incluiráDISPLAY
eXAUTHORITY
para acesso Xwayland também:No entanto, se o aplicativo executado como root gravar qualquer coisa em
XDG_RUNTIME_DIR
, isso poderá causar problemas de permissão de arquivo para os aplicativos do usuário.No entanto, executar aplicativos gráficos como root no wayland é muito menos um problema de segurança do que no X11.
Para evitar o uso acidental do X11, você pode executar sem
DISPLAY
:A documentação de Wayland menciona
WAYLAND_DISPLAY
, mas não encontro nada sobreXDG_RUNTIME_DIR
. No entanto, todos os compositores de wayland, incluindo a implementação de referênciaweston
, dependem doXDG_RUNTIME_DIR
.Se
WAYLAND_DISPLAY
estivesse em outro local, não seria um problema executar aplicativos de usuários arbitrários na mesma exibição de wayland. MasXDG_RUNTIME_DIR
é especificado para ser restrito ao usuário logado e deve conter soquetes relacionados ao usuário:Os problemas com a execução de outro usuário ou root no wayland estão mais relacionados à
XDG_RUNTIME_DIR
especificação do que ao próprio wayland. Se você especificar um customXDG_RUNTIME_DIR
com/tmp
acesso arbitrário (quebrando assim sua especificação), todos os usuários poderão usar a exibição do wayland.Há alguma esperança para o futuro não precisar
XDG_RUNTIME_DIR
, mas depende da implementação: Wayland docu cap.4 :Eu escrevi
ego
(Alter Ego) para este caso de uso. Não é um aplicativo GUI, mas você pode iniciar aplicativos GUI a partir do console como outro usuário, ele lida automaticamente com o compartilhamento de soquete xhost e Wayland e PulseAudio: https://github.com/intgr/egoO truque é usar Posix ACLs para conceder acesso aos soquetes Wayland/PulseAudio a outro usuário e definir variáveis de ambiente para que os aplicativos do usuário de destino saibam como se conectar a ele.
Se você tiver problemas, abra um problema no GitHub.
Existem duas soluções bastante fáceis. Os exemplos abaixo iniciam o synaptic, mas qualquer outro comando deve funcionar.
/etc/ssh/sshd_config
ou configurar a chave de autenticação):Acredito que, de qualquer forma, a solução alternativa é ter um processo de propriedade do usuário para se conectar ao soquete X11 e fornecer tunelamento.
Embora eu não esteja respondendo diretamente à sua pergunta, acho que há pessoas que podem ter vindo parar aqui por causa do mesmo problema.
Este é um script que eu fiz é uma solução alternativa para pessoas que precisam executar aplicativos gráficos (como Gedit , Synaptic ou GParted ) como root via sudo em uma sessão Wayland :
https://gist.github.com/wachambo/bd22e12db2d5a46dc109bd0d553733be
Importado aqui:
Isso estende a resposta de Thomas Guyot-Sionnest .
Sinto que isso merece sua própria resposta, já que resolveu muitos problemas para mim. Crie um script de shell chamado
wlsudo
com o seguinte conteúdo:Salve-o em um diretório no seu
$PATH
e dê a ele permissões executáveis (chmod +x ./wlsudo
). Você deve ser capaz de iniciar aplicativos GUI usandowlsudo
no lugar desudo
Wayland, por exemplo,wlsudo synaptic
apenas funciona .