Como impedir que o root execute um script

9

O servidor de aplicativos Glassfish fornece scripts para administrar o servidor de aplicativos e também para iniciá-los e interrompê-los, e eu gostaria de restringir o usuário root de executar este script. O motivo é que alguns desenvolvedores-chave se esquecem de administrar o servidor como usuário não privilegiado e, se reiniciarem o servidor de aplicativos como usuário root, o servidor de aplicativos deve ser executado pelo usuário root [*].

Não é uma opção evitar o acesso root e os desenvolvedores esquecem porque estão acostumados a fazer isso em sua máquina local. Gostaria que o script asadmin fosse alterado para ser executado como o usuário não privilegiado ou, opcionalmente, exibisse uma mensagem de erro toda vez que o script fosse executado pelo root.

O shell Bash é usado.

[*]: Eu tentei consertar os direitos sobre arquivos, mas apesar de ter rastreado muitos arquivos que o root possui e chmod-los, o aplicativo tem erros estranhos e eu tenho que rodar novamente como root.

    
por tronda 08.09.2011 / 15:12

2 respostas

17

Semelhante a outras respostas, mas na direção que você queria.

if [[ $EUID -eq 0 ]]; then
  echo "This script must NOT be run as root" 1>&2
  exit 1
fi

Como alternativa, você pode usar sudo no script para forçar a execução como o usuário não privilegiado usando o sinal -u para especificar o usuário a ser executado como. Eu não uso Glassfish, mas aqui está um pseudo script de exemplo.

#!/bin/bash

if [ $1 == "start" ]; then
  sudo -u nobody /usr/bin/glassfish
fi

Espero que você entenda a ideia. Desculpe eu realmente não sei o que o script parece, ou o nome do usuário não privilegiado.

    
por 08.09.2011 / 16:56
2

@Tshepang tem a ideia certa. Eu não sei qual é o mais portável, mas aqui estão outras maneiras de detectar se o usuário é root:

id -u
$UID

Alternativamente, você pode simplesmente forçá-lo a ser executado como outro usuário com os mesmos parâmetros:

if [[ "$USER" != appuser ]]
then
    exec sudo -u appuser "$0" "$@"
fi
    
por 08.09.2011 / 15:58