ファイル実行スクリプトのVisudo権限

ファイル実行スクリプトのVisudo権限

PHPを介してシェルスクリプトを実行しようとしたときに権限エラーが発生しますが、www-dataユーザーにパスワードなしでsudoコマンドを使用する権限を追加しようとしましたが、うまくいきません。私が間違って報告したのかわかりません。私の「visudo」ファイルを編集する方法は次のとおりです。

www-data ALL=(ALL) NOPASSWD:/var/www/mysite/classes/builder-sites-nginx.sh
www-data ALL=(ALL) NOPASSWD:/var/www/mysite/classes/MyClassToCallScript.php

私のPHPコードは次のとおりです

$command = "sudo sh ".dirname(__FILE__)."/builder-sites-nginx.sh {$domain}";
// dump($command);
$response = shell_exec($command);

私のコードシェル:

#!/bin/bash

FILE_FROM=/etc/nginx/sites-available/sites-builders
FILE_TO=/etc/nginx/sites-enabled/"$1"

[ ! -d "$FILE_FROM" ] && mkdir -p "$FILE_FROM"

if test -f "$FILE_TO"; then
    echo "syntax is ok. $FILE_TO already exists"
else
        ln -s "$FILE_FROM/$1" /etc/nginx/sites-enabled/

        #check stats
        if nginx -t > /dev/null 2>&1; then
                echo "syntax is ok"
                service nginx reload
        else
                echo "syntax is not ok"
                rm "$FILE_TO"
        fi
fi

しかし、私の答えは「空です」です。私は「visudo」に次の抜粋を追加してこれをテストしました。

www-data ALL=(ALL) NOPASSWD:ALL

上記のアプローチを使用すると効果がありますが、私のサイトのセキュリティが損なわれると思います。そうですか?私のApacheユーザーにsudo権限があるのはなぜですか?誰かが悪意のあるファイルを置くと問題が発生する可能性があるため、元の質問に戻ります。与えられたスクリプトを実行するときに「visudo」パスを正しく配置する方法ですか?

ベストアンサー1

実行していません。sudo /var/www/mysite/classes/builder-sites-nginx.sh実行中であり、www-dataの実行を許可するように設定されていません(これを行うことはできません。これは巨大なセキュリティホールになります。これに相当します)。sudo sh /var/www/mysite/classes/builder-sites-nginx.shsudosudo shwww-data ALL=(ALL) NOPASSWD:ALL

/var/www/mysite/classes/builder-sites-nginx.shmake実行可能ファイルを使用し、これが最初の行であることをchmod +x確認してください(スクリプトはbash専用の機能を使用していないため動作します)。#!/bin/bash#!/bin/sh

次に、PHPコードを次のように変更します。

$command = "sudo ".dirname(__FILE__)."/builder-sites-nginx.sh {$domain}";

ただし、定義された場所と方法によっては$domain(たとえば、ユーザー提供のデータからのものなど)、PHPescapeshellcmd()機能を使用してクリーンアップする必要があるかもしれません。

おすすめ記事