Apache 권한이 설정된 경우에도 브라우저에서 Bash 스크립트 실행

Apache 권한이 설정된 경우에도 브라우저에서 Bash 스크립트 실행

Docker 컨테이너 안에 프로그램이 있습니다. 브라우저 페이지로 이동하여 Docker 컨테이너를 실행하여 프로그램이 시작되기를 원합니다.

그래서 Docker 명령을 실행하는 bash 스크립트를 만들었습니다(runcontainer.sh):

#!/bin/sh
sudo docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix myproject

그런 다음 쉘 스크립트(웹 script.php):

<?php
    exec('/usr/lib/cgi-bin/runcontainer.sh');
?>

나는 apache2가 설치된 우분투 16.04를 실행하고 있습니다.

질문:
php webscript.php이 프로그램은 bash 터미널에서 실행하면 실행됩니다. 컨테이너가 시작되고 프로그램이 시작됩니다. 하지만 웹 브라우저(firefox)에서 시도해 보면 그렇지 않습니다.

나 간다http://localhost/cgi-bin/webscript.php, 페이지가 표시되지만 Docker 컨테이너가 시작되지 않습니다. 그래서 /var/log/apache2/error.log를 보고 다음 오류를 확인했습니다 sudo: no tty present and no askpass program specified.

비슷한 문제를 바탕으로 sudo apachectl -SApache 사용자 및 그룹 이름을 확인하기 위해 실행했습니다. 둘 다 www-data입니다. 따라서 /usr/lib/cgi-bin/ 디렉터리 아래의 사용자와 그룹을 www-data로 설정했습니다.

www-data에 모든 권한이 있어도 이 sudo: no tty present and no askpass program specified오류가 계속 표시됩니다. 내가 찾은 다른 답변은 www-data ALL 액세스 권한을 부여하기 위해 sudoers 파일을 변경한다고 말했습니다. 하지만 안전하지 않은 것 같아서 이 작업을 수행하고 싶지 않습니다.

답변1

귀하가 겪고 있는 오류 메시지를 재현하기 위해 몇 가지 실험(Apache 대신 Cron을 사용하고 /bin/ls대신 Cron을 사용 )을 수행했습니다. 이를 바탕으로 원하는 명령을 비밀번호 없이 실행할 수 있는지 runcontainer.sh먼저 확인해 보시길 권해 드립니다 .www-data

비밀번호 없이 명령을 실행할 수 있는지 확인하려면 루트로 로그인한 다음

# su - -s /bin/bash www-data
$ sudo /usr/lib/cgi-bin/runcontainer.sh

또한 사용자 에 대해 활성화 /etc/sudoers했는지 확인해야 합니다./usr/lib/cgi-bin/runcontainer.shwww-data

%www-data ALL=(ALL) NOPASSWD: /usr/lib/cgi-bin/runcontainer.sh

위의 내용이 작동하면 다음 단계에 집중할 수 있습니다.

관련 정보