Como alternar entre usuários em um terminal… completamente (variáveis de ambiente XDG (re) configuradas)?

0

Então esta pergunta já foi feita , mas as respostas não resolvem a questão das variáveis de ambiente. Existe uma maneira de alternar completamente os usuários de forma que o pam-systemd seja chamado e todas as variáveis de ambiente XDG automáticas estejam definidas?

Compare o seguinte

As seguintes opções começam ligando uma máquina desligada.

Opção 1 Faça login como root. Digite o seguinte no shell:

su -l username
echo $XDG_RUNTIME_ENV

Opção 2 Faça login como nome de usuário. Digite o seguinte no shell:

echo $XDG_RUNTIME_ENV

Você vê que há uma diferença. A opção 1 gera /run/user/0 apesar da alteração nos usuários que usam su (alternar usuário), porque o módulo pam_systemd não foi chamado durante a alternância. A opção 2 gera /run/user/$(id -u) conforme o esperado. Agora eu poderia simplesmente fazer log-in digitando exit até que a máquina solicite um login novamente e faça o login como o usuário desejado. tem outro jeito de fazer isto? Usar sudo em vez de su não ajuda.

É o caminho certo para fazer echo "XDG_RUNTIME_DIR=$(id -u) >> .bash_profile" , porque .bash_profile é executado por su ?

    
por Jonathan Komar 30.03.2017 / 15:14

1 resposta

0

Acho que a resposta seria usar login em vez de su para garantir que o módulo pam_systemd seja executado e defina as variáveis, e também como Giacomo apontou, para garantir que apenas um usuário (mais de um como no cenário de subprocesso su gerado) pode alterar arquivos dentro desse ambiente.

O perigo de su pode ser representado visualmente em um sistema usando systemd da seguinte forma:

usando su

root  -systemd
root    -login # calls pam_systemd and sets XDG_RUNTIME_DIR among others
user1     -bash
user1       -su
user2         -bash # user1 has access to spawned subprocesses?

usando login

root -systemd
root   -login # calls pam_systemd and sets XDG_RUNTIME_DIR among others
user2     -bash

Além disso, loginctl não registra o usuário encapsulado pelo sub-processo su/bash , porque o usuário nunca é registrado com systemd-logind.service por pam_systemd.mod .

    
por 30.03.2017 / 15:43

Tags