Permissão para executar o comando específico pelo sudo como usuários de www-data sem senha

6

Eu tenho um servidor que também toca rádio na internet. Como usuário de www-data, eu quero executar alguns comandos, por exemplo, eu fiz isso no arquivo / etc / sudoers :

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer

E no PHP eu posso manipular o volume sem usar senha:

exec('sudo -u user amixer set Master 3%-');

E:

exec('sudo -u user amixer set Master 3%+');

Mas agora eu quero poder reiniciar meu próprio serviço executando o comando:

exec('sudo -u user service servicename restart');

Então eu tentei:

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer, NOPASSWD: /bin/service

E isso:

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer, /bin/service

E até isso:

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer
www-data        ALL=(ALL) NOPASSWD: /bin/service

Mas nenhum deles parece estar funcionando. Por favor, me ajude.

Desculpe pessoal - meu erro. Eu fiz algumas alterações, tentei ligar o formulário / sbin para / bin

Agora eu mudei para:

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer, NOPASSWD: /usr/sbin/service

E isso funciona! Obrigado! Tópico fechado.

    
por totti 22.08.2012 / 13:17

2 respostas

6

Cuidado com sua solução: você pode iniciar, interromper ou reiniciar qualquer serviço dessa maneira!

É melhor criar um script de shell que execute este comando:

echo "#!/bin/sh' > /usr/bin/amixer_restart
echo "sudo -u user service amixer restart' >> /usr/bin/amixer_restart

Conceder permissões adequadas (550 raiz média e grupo www-data pode ler e executar, ninguém pode escrever)

sudo chown root:www-data /usr/bin/amixer_restart
sudo chmod 550 /usr/bin/amixer_restart

E permita que o apache sudo neste script:

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer_restart
    
por 23.10.2013 / 21:57
0

Isso foi o que acabei fazendo:

  1. Instale o apache2 executando sudo apt-get install apache2
  2. Verifique se o apache tem permissão para executar scripts cgi executando sudo a2enmod cgi
  3. Reinicie o apache sudo service apache2 restart
  4. Verifique se posso executar scripts bash criando o seguinte script em /usr/lib/cgi-bin/test.sh

    #!/bin/bash
    
    # get today's date
    OUTPUT="$(date)"
    USR=$(whoami)
    
    # headers
    echo "Content-type: text/plain"
    echo ""
    
    # body
    echo "Today is $OUTPUT"
    echo "Current user is $USR"
    
  5. torne o script executável chmod +x /usr/lib/cgi-bin/test.sh

  6. Verifique se eu posso executar o script curl localhost/cgi-bin/test.sh e recebo a seguinte resposta:

     Today is Wed Sep  6 12:19:34 PDT 2017 
     Current user is www-data
    
  7. Como o usuário é www-data, eu adiciono esse usuário como sudoer. Em seguida, modifico o arquivo /etc/sudoers adicionando esta linha no final:

    www-data ALL=(ALL) NOPASSWD: ALL

  8. Agora, esse usuário deve ter privilégios de root. Então modifico meu script test.sh como:

    #!/bin/bash
    
    # get today's date
    OUTPUT="$(date)"
    USR=$(sudo whoami)
    
  9. Em seguida, você deverá ver a seguinte resposta ao executar uma solicitação get novamente localhost/cgi-bin/test.sh :

    Today is Wed Sep  6 12:28:38 PDT 2017
    Current user is root
    
por 06.09.2017 / 21:31