Execute o comando do Linux como usuário predefinido

6

Eu criei um script de shell para iniciar um programa server .

startup.sh  start

Quando o comando acima for executado, ele tentará iniciar o server as adminuser . Para conseguir isso, meu script escreveu assim.

SUBIT="su - adminuser -c "
SERVER_BOX_COMMAND_A="Server"

##############
# Function to start cluster

function start(){

   $SUBIT "$SERVER_BOX_COMMAND_A"

}

Quando executo o comando, ele pede senha. Existe alguma outra maneira de fazer isso, então não vai pedir senha.

Eu tenho visto esse comportamento no script de inicialização do Jboss fornecido no jboss. Esse script muda o usuário para jboss e então inicia o servidor jboss. Eu queria que meu script se comportasse da mesma maneira.

    
por vijay.shad 30.03.2010 / 13:29

4 respostas

1

A menos que eu esteja sentindo falta de algo que você pergunta, não é possível.

O script jboss é projetado para

  1. Iniciar como raiz
  2. Mude para o usuário do jboss que possui menos privilégios

Mas o que você pergunta é

  1. Comece como um usuário não privilegiado
  2. Mude para admin / root que tenha mais privilégios.

É por isso que você sempre precisa de uma senha, independentemente do comando que você tente.

Existe alguma razão específica para o seu servidor precisar de privilégios elevados?

    
por 30.03.2010 / 14:10
3

Se você é root, use o sudo :

$1 sudo -u adminuser startup.sh start
    
por 30.03.2010 / 13:33
1

Assim como o JBoss, você pode verificar se é o usuário alvo antes de executar seu comando.

TARGET_USER='adminuser'
SUBIT="su - adminuser -c "
SERVER_BOX_COMMAND_A="Server"

##############
# Function to start cluster

function start(){

   if [[ 'whoami' == "$TARGET_USER" ]]
   then
      $SERVER_BOX_COMMAND_A
   else
      $SUBIT "$SERVER_BOX_COMMAND_A"
   fi
}
    
por 30.03.2010 / 16:58
0

Você sempre pode usar o bit setuid. Torne o proprietário do arquivo o usuário para o qual você deseja executar o script e, em seguida, faça seu script setuid.

Observe que isso pode ser um risco à segurança, portanto, certifique-se de que o usuário tenha apenas as permissões necessárias. Afinal, um usuário sem privilégios pode executar esse script, certo?

EDIT: Não faça scripts setuid. Seu exemplo do jboss é um programa que descarta privilégios, não um script.

    
por 30.03.2010 / 16:22