Alterna usuários com sudo ou su em um shell script

1

Eu herdei isso. Longa história curta Eu tenho um arquivo XML que está chamando um shell para executar alguns comandos. Tudo o que tentei falhou na segunda su no script. Aqui estão algumas das mensagens de falha:

sudo: no tty present and no askpass program specified

Ou

su: must be run from a terminal

Ou

usage: sudo [-D level] -h | -K | -k | -V blah blah blah

Aqui está o trecho do meu script. Só falha na segunda su tentativa:

  <script language="shell"><![CDATA[
                  echo Doing some stuff
                  sudo -u adminuser /path/to/a/script/script
                  echo Emailing this stuff...
              su emailuser -c "mutt -e 'set content_type=text/html' -s 'Your stuff is ready' -- ${WHOEVER_PARAM_RECIPIENT} < /tmp/emailingstuff.html"
                ]]></script>

Eu brinquei tanto com permissões que esqueci onde estava com elas. Aqui eles estão atualmente em sudoers:

# See the man page for details on how to write a sudoers file

Defaults:emailuser !authenticate

adminuser ALL=NOPASSWD: /bin/su - emailuser
adminuser ALL=NOPASSWD: /bin/su emailuser
adminuser ALL=NOPASSWD: /usr/bin/sudo su emailuser

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
    
por pullsumo 29.05.2014 / 19:14

1 resposta

1

A menos que haja algo na configuração su que permita ao usuário executar esses comandos para executar comandos como emailuser com su , o comando su emailuser -c … solicitará a senha de emailuser . O uso de sudo é sempre explícito.

Dadas as regras do sudo, você provavelmente queria

sudo su emailuser -c …

Mas suas regras de sudo são estranhas: não adianta autorizar sudo a executar su para outro usuário. Altere-os para especificar o usuário de destino e esqueça su .

scriptuser ALL = (adminuser) NOPASSWD: /path/to/a/script/script ""
scriptuser ALL = (emailuser) NOPASSWD: mutt

Observe que, como o Mutt permite escudos do shell, restringir o comando como emailuser ao mutt realmente não aumenta a segurança, mas pode reduzir o uso acidental. Em seu script, use

sudo -H -u emailuser mutt -e 'set content_type=text/html' -s 'Your stuff is ready' -- ${WHOEVER_PARAM_RECIPIENT} < /tmp/emailingstuff.html

Como você está chamando sudo de um script, verifique se o sinal requiretty está desativado no arquivo sudoers (está desativado por padrão, mas alguma distribuição o adiciona, apesar das circunstâncias extremamente limitadas em que poderia melhorar a segurança de forma consciente).

    
por 29.05.2014 / 19:43