스크립트는 터미널에서 작동하지만 PHP를 사용할 때는 작동하지 않습니다.

스크립트는 터미널에서 작동하지만 PHP를 사용할 때는 작동하지 않습니다.

PHP를 통해 웹서버에서 "apt-get install"을 수행하는 스크립트를 실행하려고 하는데 작동하지 않는 것 같습니다. 다음을 사용하여 터미널에서 로컬로 스크립트를 실행하려면:

sudo/var/www/html/dl.sh

효과가있다. 하지만 이 코드를 사용한 후에는...

l.php 강제:

 <?php
      if ($_GET['run']){
        $output = shell_exec("/var/www/html/dl.sh");
        echo "<pre>$output\n</pre>";
      }
    ?>

<a href=?run=true>Click Here</a>

dl.sh:

#!/bin/bash
sudo apt-get install slowhttptest

다른 머신에서 "CLICK HERE"를 클릭한 후(dl.sh의 명령이 ifconfig로 변경되면 작동함) 스크립트가 실행될 서버에서는 아무 일도 일어나지 않습니다.

기억이 정확하다면 PHP와 Apache2가 설치되어 있습니다. 이 작업을 수행하는 데 다른 것이 필요한지 모르겠습니다.

요청된 명령:

ls -lZ /var/www/html/dl.sh

출력은 다음과 같습니다

rwxr-xr-x 1 루트? 188 1월 2일 21:58 /var/www/html/dl.sh

편집 #2:

sudoers에 WWW-DATA를 추가하고 PHP를 편집하여 이 문제를 해결했습니다.

l.php 강제:

 <?php
      if ($_GET['run']){
        $output = shell_exec("sudo /var/www/html/dl.sh");
        echo "<pre>$output\n</pre>";
      }
    ?>

<a href=?run=true>Click Here</a>

답변1

PHP는 사용자로 실행되고 있지 않으므로(다행히!) root실행할 권한이 없습니다 apt install. 이 suid비트는 쉘 스크립트에서 무시되므로 쉘 스크립트에서 이 비트를 설정하는 것도 해결책이 아닙니다.

만약 너라면정말apt-getPHP에 사용자 권한으로 실행 권한을 부여하고 싶습니다 root(생각해 보세요.진짜이 작업은 어렵습니다.) sudoers이를 수행할 수 있도록 항목을 추가할 수 있지만 명령은 sudo apt-get [...].

인증을 사용하여 웹 기반 프런트엔드를 통해 스크립트를 실행하는 것은 현명하지 않습니다 sudo. 왜냐하면 누군가가 어떻게든 해당 파일을 편집할 수 있는 방법을 찾았다면 이제 PHP가 시스템의 수퍼유저로 수행되도록 하여 원하는 모든 작업을 수행할 수 있기 때문입니다.

관련 정보