Como alternativa sux
, para executar com segurança o comando gráfico ( firefox-esr
no exemplo abaixo) como $AUTHUSER
( guest
no exemplo abaixo):
AUTHUSER=guest
AUTHSTRING=SI:localuser:${AUTHUSER}
xhost +${AUTHSTRING} > /dev/null
SUDO_ASKPASS=/usr/bin/ssh-askpass
export SUDO_ASKPASS
sudo -k --askpass -u ${AUTHUSER} /usr/bin/firefox-esr
xhost -${AUTHSTRING} > /dev/null
sudo -K
o código faz:
- dá ao
guest
usuário acesso ao seu usuário atual $DISPLAY
viaxhost +SI:localuser:guest
- usa
ssh-askpass
para solicitar graficamente sua senha (é claro, você pode sudoers(5)
NOPASSWD:
evitar isso, se sua política de segurança achar que está ok. Ou você pode usar outros askpass
programas ou especificá-los nos arquivos de configuração (veja sudo(8)
detalhes em --askpass
)
- se a senha estiver correta (e você tiver permissões
sudoers(5)
), executa o comando /usr/bin/firefox-esr
como outro usuário ( guest
)
- após a conclusão do programa, as permissões para outro usuário (
guest
) para acessar o seu $DISPLAY
são revogadas viaxhost -SI:localuser:guest
finalmente, sudo -K
remove a senha em cache; portanto, a próxima chamada de ssh-askpass
solicitará a senha novamente (em vez de usar a senha em cache)
Embora seja um pouco mais trabalhoso do que o que gksu(8)
ou o que sux(8)
foi feito, ele pode ser script e é muito mais seguro do que:
xhost +
(qualquer usuário terá acesso à sua exibição gráfica enquanto estiver em vigor)
- legível ~ / .xauth por outros usuários (acesso indefinido desse usuário ao seu monitor)
- what
gksu
/ sux
did (cópia temporária de ~/.Xauthority
, o que permitiu que o usuário especificado copiasse o seu MIT-MAGIC-COOKIE-1
e continuasse usando o seu monitor mesmo após a conclusão do gksu / sux (desde que você não desligasse a máquina ou desconectasse o monitor - protetores de tela, hibernação etc. não alteraram a mágica biscoito).
pois permitirá apenas um usuário local acessar sua tela e somente enquanto o comando for executado (quando o comando for concluído, $AUTHUSER
não será mais possível acessar sua tela de nenhuma maneira).
Outra alternativa segura é ssh -X
(sem -Y
que realmente o torna menos seguro! Ver ForwardX11Trusted
em ssh_config(5)
para mais detalhes), como é mais fácil de usar se você não está scripting, mas induz sobrecarga additinal (por exemplo., É mais lento) e alguns programas podem não funcionar corretamente sem inseguro -Y
.
$XAUTHORITY
ainda está definido como user1's~/.Xauthority
, que o programa, eu acho, tentará ler, e falha porque esse arquivo normalmente tem o modo 0600 (-rw-------
), o que significa que não está disponível para leitura por qualquer pessoa do grupo "outro", que inclui o usuário2. Ou seja, se vocêchmod o+r ~/.Xauthority
(como usuário1), você terá invadido esse problema. Eu escrevi um script que demonstra isso.