파일 실행 스크립트의 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(예: 사용자 제공 데이터에서 오는 경우) PHP escapeshellcmd()기능을 사용하여 정리해야 할 수도 있습니다.

관련 정보