Разрешение на запуск определенной команды с помощью sudo как пользователя www-data без пароля

Разрешение на запуск определенной команды с помощью sudo как пользователя www-data без пароля

У меня есть веб-сервер, который также проигрывает интернет-радио. Как пользователь www-data я хочу запустить некоторые команды, например, я сделал это в/etc/sudoersфайл:

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

А с помощью PHP я могу управлять громкостью без использования пароля:

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

И:

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

Но теперь я хочу иметь возможность перезапустить свою собственную службу, выполнив команду:

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

Итак, я попробовал:

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

И это:

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

И даже это:

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

Но ни один из них, похоже, не работает. Пожалуйста, помогите мне.


Извините, ребята - моя ошибка. Я сделал некоторые изменения, пытался связать форму /sbin с /bin

Теперь я изменил это на:

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

И это работает! Спасибо! Тема закрыта.

решение1

Будьте осторожны с вашим решением: таким образом вы можете запустить, остановить или перезапустить любую службу!

Лучше создать скрипт оболочки, который запускает эту команду:

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

Предоставьте соответствующие права (550 означает, что root и группа www-data могут читать и выполнять, никто не может писать)

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

И разрешите Apache выполнить sudo для этого скрипта:

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

решение2

Вот что я в итоге сделал:

  1. Установите apache2, запустивsudo apt-get install apache2
  2. Убедитесь, что Apache разрешено запускать cgi-скрипты, выполнив командуsudo a2enmod cgi
  3. Перезапустить апачsudo service apache2 restart
  4. Проверьте, могу ли я запускать скрипты bash, создав следующий скрипт по адресу/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. сделать скрипт исполняемымchmod +x /usr/lib/cgi-bin/test.sh

  6. Проверяю, могу ли я выполнить скрипт. curl localhost/cgi-bin/test.shПолучаю следующий ответ:

     Today is Wed Sep  6 12:19:34 PDT 2017 
     Current user is www-data
    
  7. Поскольку пользователь www-data, я добавляю этого пользователя как sudoer. Затем я изменяю файл, /etc/sudoersдобавляя эту строку в конец:

    www-data ALL=(ALL) NOPASSWD: ALL

  8. Теперь этот пользователь должен иметь права root. Затем я изменяю свой скрипт test.sh следующим образом:

    #!/bin/bash
    
    # get today's date
    OUTPUT="$(date)"
    USR=$(sudo whoami)
    
  9. Затем вы должны увидеть следующий ответ при выполнении запроса get снова localhost/cgi-bin/test.sh:

    Today is Wed Sep  6 12:28:38 PDT 2017
    Current user is root
    

Связанный контент