Ao fazer login no sistema Ubuntu, o usuário de login é " root
".
E então, eu quero executar algum script bash em nome do " non_root
":
root@test_pc:~# echo $USER
root
root@test_pc:~# sudo -E -u non_root -g non_root -H /bin/bash -c "echo $USER"
root
root@test_pc:~#
Mas a saída ainda é " root
", em outras palavras, o comando ainda é executado sob " root
" usuário em vez de " non_root
".
Aqui está a saída esperada:
root@test_pc:~# sudo -E -u non_root -g non_root -H /bin/bash -c "echo $USER"
non_root
root@test_pc:~#
Aqui está a operação real:
sudo -E -u non_root -g non_root -H /bin/bash -c "systemctl --user disable pulseaudio.service"
Mas deu o seguinte erro:
Failed to connect to bus: Operation not permitted (consider using --machine=<user>@.host --user to connect to bus of other user)
Como executar qualquer comando bash como " non_root
" quando logado com root
o usuário " "?
Desnecessário dizer que o que você está fazendo, ou seja, fazer login como usuário,
root
é desencorajado e, portanto, oroot
usuário está desabilitado por padrão no Ubuntu.Dito isto, ...
As aspas duplas em torno da string de comando Bash permitem a expansão de parâmetros no shell atual na linha de comando atual antes que o comando seja executado … veja-o em ação:
Enquanto seu comando é realmente executado como o usuário pretendido:
Para expandir
$USER
no sub-shell criado para executar essa string de comando Bash, use aspas simples em torno da string de comando:Observe também que pulseaudio é um serviço de usuário que requer login de usuário para executar ... Veja, por exemplo, https://askubuntu.com/a/1465201 e Dbus também faz parte do ambiente de tempo de execução do usuário e requer um login de usuário como bem... Veja por exemplo https://askubuntu.com/a/1470118