su ou sudo - como saber qual deles irá funcionar?

1

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 ?

    
por mviereck 04.08.2017 / 14:13

2 respostas

0

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
    
por 06.08.2017 / 02:57
0

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.

    
por 06.08.2017 / 17:54