Apache 사용자는 httpd를 통해 실행할 때 sudo를 사용할 수 없습니다.

Apache 사용자는 httpd를 통해 실행할 때 sudo를 사용할 수 없습니다.

웹 애플리케이션(php)이 다른 서버에서 스크립트를 실행해야 한다는 요구 사항이 있습니다. 루트를 통해 Apache 사용자를 Sudo하고 Apache 사용자로 원격 스크립트를 실행합니다. 원격 시스템의 스크립트가 올바르게 실행되었습니다. 그러나 웹 브라우저의 요청에 따라 실행되는 PHP 스크립트를 통해 실행하면 올바르게 실행되지 않습니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

  1. 루트를 통해 로그인
  2. Apache의 sesu 액세스 권한 변경

    sudo /usr/sbin/visudo
    
    Cmnd_Alias WEBREMOTE = /usr/bin/ssh, /var/www/html/test_shell.sh
    
    apache   ALL=(ALL)       NOPASSWD:WEBREMOTE
    
  3. 아파치 사용자에게 sudo

    sudo -u apache -s
    
  4. 원격으로 스크립트 실행

    sudo -S ssh [email protected] 'bash -s' < /var/www/html/test_shell.sh test_param & > /dev/null
    
  5. 원격 컴퓨터의 로그를 보면 쉘 스크립트가 정상적으로 실행됩니다.

  6. PHP의 exec를 통해 동일한 스크립트를 실행하려고 하면 코드가 실행되지 않습니다.

     <?php
     $shellcmd = "sudo -S ssh [email protected] 'bash -s' < /var/www/html/test_shell.sh $test_param & > /dev/null";
     $ret = exec($shellcmd);
     echo "<br />";
     echo "shellcmd result: [$ret]";
    
     $ret2=shell_exec($shellcmd);
     echo "<br />";
     echo "shellcmd result: [$ret2]";
     ?>
    

생성된 PHP는 exec 또는 exec_shell을 통해 빈 결과만 반환하며 test_shell.sh 내의 로그는 원격 시스템에서 실행되지 않습니다. PHP 페이지에서도 오류가 발생하지 않습니다. 여기에 설정이 누락되어 있습니까?

관련 정보