web-dev-qa-db-ja.com

パスワードなしでwww-dataユーザーとしてSudoによって特定のコマンドを実行する権限

インターネットラジオも再生できるウェブサーバーがあります。 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

そしてそれはうまくいきます!ありがとう!トピックを閉じました。

8
Peter

ソリューションに注意してください:サービスをそのように開始、停止、または再起動できます!

このコマンドを実行するシェルスクリプトを作成することをお勧めします。

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
6
Calimo

これは私がやったことです:

  1. _Sudo apt-get install Apache2_を実行してApache2をインストールします
  2. _Sudo a2enmod cgi_を実行して、Apacheがcgiスクリプトの実行を許可されていることを確認します
  3. Apacheを再起動_Sudo service Apache2 restart_
  4. _/usr/lib/cgi-bin/test.sh_で次のスクリプトを作成して、bashスクリプトを実行できることを確認します

    _#!/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. その後、_localhost/cgi-bin/test.sh_に対してgetリクエストを実行すると、次の応答が表示されます。

    _Today is Wed Sep  6 12:28:38 PDT 2017
    Current user is root
    _
1
Tono Nam