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-get
PHP에 사용자 권한으로 실행 권한을 부여하고 싶습니다 root
(생각해 보세요.진짜이 작업은 어렵습니다.) sudoers
이를 수행할 수 있도록 항목을 추가할 수 있지만 명령은 sudo apt-get [...]
.
인증을 사용하여 웹 기반 프런트엔드를 통해 스크립트를 실행하는 것은 현명하지 않습니다 sudo
. 왜냐하면 누군가가 어떻게든 해당 파일을 편집할 수 있는 방법을 찾았다면 이제 PHP가 시스템의 수퍼유저로 수행되도록 하여 원하는 모든 작업을 수행할 수 있기 때문입니다.