Você pode pelo menos testar se root
tem uma senha. Nesse caso, você provavelmente vai querer experimentar sudo
:
if [ foo = "$(echo | su -c "echo foo")" ]; then
su -c whatever
else
sudo whatever
fi
Eu tenho um script bash ( x11docker ) que precisa executar alguns comandos como root ( docker
), e alguns comandos como usuário sem privilégios (servidores X como Xephyr
). O script solicita senha em algum momento. Ele deve rodar em sistemas Linux arbitrários sem configurar o sistema primeiro.
Alguns sistemas usam su
, alguns usam sudo
para obter privilégios de root.
Como posso reconhecer qual deles irá funcionar? Eu tentei sudo -l docker
. Isso deve me dizer se sudo docker
é permitido. Infelizmente, ele precisa de uma senha, mesmo para essa informação.
O ponto é que o root pode ou não ter uma senha (que é necessária para usar su -c
) e sudo
pode ou não ter permissão para executar o docker. Como decidir qual deles fará o trabalho (= executando um comando com privilégios de root)?
Verificar o sudo do grupo pode ser uma boa suposição, mas não é confiável, pois não me diz se /etc/sudoers
está configurado para permitir o acesso à raiz arbitrária do sudo do grupo. Além disso, docker
pode ser permitido em /etc/sudoers
sem que o usuário seja membro do grupo sudo.
pkexec
deve ser uma solução, mas não é confiável. O prompt de senha falha no console, falha em servidores X diferentes de DISPLAY=:0
e falha no OpenSuse.
Atualmente, o script usa como padrão su
, e a opção --sudo
permite usar sudo
. Possível, mas não bacana.
Estou trabalhando em uma atualização que permite executar o script como root e verificar o usuário "real" não privilegiado com logname
, SUDO_USER
e PKEXEC_UID
. Não é bacana também.
Existe uma maneira de saber se devo usar su
ou sudo
?
Você pode pelo menos testar se root
tem uma senha. Nesse caso, você provavelmente vai querer experimentar sudo
:
if [ foo = "$(echo | su -c "echo foo")" ]; then
su -c whatever
else
sudo whatever
fi
O comando su alterna para o super usuário - ou usuário root - quando você o executa sem opções adicionais. Você precisará inserir a senha da conta raiz. Isso não é tudo o que o comando su faz - você pode usá-lo para alternar para qualquer conta de usuário. Se você executar o comando su bob, será solicitado que você insira a senha do Bob e o shell mudará para a conta de usuário do Bob.
Quando terminar de executar comandos no shell do root, digite exit para sair do shell do root e voltar para o modo de privilégios limitados.
Sudo executa um único comando com privilégios de root. Quando você executa o comando sudo, o sistema solicita a senha da sua conta de usuário atual antes de executar o comando como o usuário root. Por padrão, o Ubuntu lembra a senha por quinze minutos e não pedirá uma senha novamente até que os quinze minutos terminem.