CGI 프로그램 리디렉션 실패

CGI 프로그램 리디렉션 실패

명령 출력을 CGI 프로그램의 파일로 리디렉션하려고 합니다. 나에게 문제는 출력 파일이 생성되지 않았다는 것입니다.

CGI 코드 조각은 다음과 같습니다.

#!/bin/bash

echo "Content-type: text/html"
echo ""

echo "<html>"
echo "<body>"

`mysql -u root -predhat -H  -D mysql -e "select host,db from  db;" > output.txt`

 echo "</body>"
 echo "</html>" 

CGI 스크립트는 HTML 프로그램에서 호출됩니다. 또한 명령 INTO OUTFILE으로 작업할 수 있지만 출력 리디렉션이 모든 명령에서 작동해야 합니다.mysql

소유권은 다음과 같습니다.

  #ls -l /var/www/cgi-bin/example.sh
  -rwxr-xr-x 1 root root 839 Apr 11 21:34 /var/www/cgi-bin/example.sh

# ps -ef | grep httpd root 2442 1 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2464 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2465 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2466 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2467 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2468 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd

이 문제를 어떻게 해결할 수 있나요?

답변1

먼저 이 스크립트는 웹 서버(아파치인 것 같아요)를 실행하는 사용자가 실행할 수 있도록 설정되어 있습니까? 스크립트의 권한을 보면 이를 확인할 수 있습니다.

$ ls -l somescript.cgi
-rwxrwxr-x. 1 apache apache 1199 Jan 17 20:47 somescript.cgi

누구나 실행할 수 있도록 권한이 필요하며, 스크립트를 사용자가 소유한 경우 apache최소한 소유자만 실행할 수 있습니다.

그렇다면 다음으로 명령 출력이 어디에 있는지에 집중하겠습니다 mysql. Apache가 mysql파일을 쓰려고 시도하는 위치 에 쓰지 못할 수도 있습니다 output. 다음과 같이 실제 물리적 위치로 설정하겠습니다.

mysql -u root -predhat -H  -D mysql -e "select host,db from  db;" \
    > /tmp/output.txt

그리고 백틱은 불필요하므로 제거할 수 있습니다.

관련 정보