PHP를 사용하여 다른 사용자로 실행되도록 쉘 스크립트 활성화

PHP를 사용하여 다른 사용자로 실행되도록 쉘 스크립트 활성화

내 웹 루트 디렉터리에 다음 줄이 포함된 copy.sh라는 쉘 스크립트가 있습니다.

rsync -rzv -e 'ssh -p 199'  test.txt [email protected]:/home/testuser/txt
ssh  [email protected] -p 199 . /home/testuser/lty.sh > ltylog.txt 2>&1

스크립트는 먼저 텍스트 파일을 원격 서버에 복사한 다음 쉘 스크립트를 실행하여 다른 두 서버 간에 파일을 동기화합니다. 현재 서버에서 testuser에 대한 SSH 공개/개인 키를 생성하여 원격 서버에 복사했습니다. 비밀번호 없이 원격 서버에 SSH로 접속할 수 있습니다

ssh [email protected] -p 199 

위 명령을 실행하고 원격 서버에 액세스할 수 있습니다. 내 호스트에서는 testuser 상태에 있을 때 아무 문제 없이 쉘 스크립트를 실행할 수 있습니다. 파일을 복사하고 원격 스크립트를 실행합니다. 이제 스크립트 권한을 777로 설정했습니다. 하지만 PHP를 사용하여 다음과 같이 shell_exec를 실행하여 이 스크립트를 실행해야 합니다.

<?php
shell_exec('. /var/www/html/copy.sh');

echo "<pre>";
echo file_get_contents("ltylog.txt");
echo "<pre>";
?>

하지만 이 PHP를 실행하면 아무 일도 일어나지 않습니다. 쉘 스크립트를 실행하는 사용자는 테스트 사용자가 아닌 Apache 사용자라고 생각하기 때문입니다. 하지만 shell_exec PWD 또는 다른 것을 실행하면 쉘 스크립트를 실행하는 대신 완벽하게 실행됩니다. PHP 안전 모드를 비활성화하고 모든 파일에 777 권한을 부여했습니다. 그러나 나는 아직도 이것을 작동시킬 수 없습니다.

PS 저는 권한이 있는 웹 루트에 쉘 스크립트를 배치하는 것이 큰 보안 위험을 초래한다는 것을 알고 있습니다. 하지만 이것은 프로덕션 시스템이 아니며 내부 목적을 위해 작은 웹 애플리케이션을 테스트하고 있습니다. 제가 이 작업을 수행하고 있는 서버는 인터넷에 전혀 접속할 수 없습니다. 누구든지 이 문제를 해결하도록 도와줄 수 있나요? 나는 작은 해결책을 찾고 있습니다. 왜냐하면 이 작은 웹 애플리케이션은 한두 사람만이 사용하기 때문입니다. 감사해요

답변1

귀하의 질문을 올바르게 이해하고 보안 위험에 관심이 없다면 sudo를 설치하고 모든 권한이 있는 sudoers 파일에 "www-data"(www-data는 nginx/apache에서 사용하는 기본 사용자입니다)를 추가한 다음 권한이 필요하지 않습니다. 암호가 필요하며 이를 사용하여 다른 사용자로 명령을 실행합니다.

다음을 수행할 수 있습니다.

sudo를 설치합니다:

apt-get install sudo

그런 다음 구성에 사용자를 추가합니다.

nano /etc/sudoers

마지막 줄에 추가하세요:

www-data ALL=(ALL) NOPASSWD: ALL

마지막으로 sudo를 사용하여 PHP를 편집하여 명령을 실행할 수 있습니다.

shell_exec('sudo -u testuser /var/www/html/copy.sh');

@편집하다

내 서버에서 실행되도록 관리했습니다. 아래 단계를 따르기만 하면 효과가 있을 것입니다.

  1. PHP 코드를 다음 코드로 바꿔보세요.

    <?php
    echo shell_exec('/bin/sh /var/www/html/copy.sh'); #this will display the result in your browser
    
    echo "<pre>";
    echo file_get_contents("ltylog.txt");
    echo "<pre>";
    ?>
    
  2. 그런 다음 www-data가 copy.sh 파일에 액세스할 수 있는지 확인하세요.

다음과 같이 777 chmod를 지정할 수 있습니다.

    chmod 777 /var/www/html/copy.sh

또는 파일을 사용자 www-data(아파치에서 사용)에 속하도록 만들 수 있습니다.

    chown www-data:www-data /var/www/html/copy.sh

그러나 두 번째 옵션을 사용하기로 선택한 경우 다음과 같이 chmod를 적용하여 www-data가 계속 파일을 실행할 수 있는지 확인하세요.

    chmod 755 /var/www/html/copy.sh
  1. 파일을 실행 가능하게 만듭니다.

    chmod +x /var/www/html/copy.sh
    
  2. copy.sh 코드를 다음으로 변경합니다.

    rsync -rzv -e 'ssh -p 199'  test.txt [email protected]:/home/testuser/txt
    ssh  [email protected] -p 199 /bin/sh /home/testuser/lty.sh > ltylog.txt 2>&1
    
  3. 마지막으로 testuser가 다음 파일에 액세스할 수 있는지 확인하세요.

    • /집/
    • /홈/테스트사용자/
    • /home/testuser/lty.sh
    • /home/testuser/ltylog.txt

보안에 관심이 없다면 원격 서버의 콘솔에 간단히 입력하면 됩니다.

    chmod 777 -R /home/

또는 각 파일을 수동으로 검사하여 권한이 올바르게 설정되었는지 확인할 수 있습니다.

답변2

내가 올바르게 이해했다면 현재 사용자(아파치 사용자)가 아닌 파일의 소유자로서 스크립트를 실행하려는 것입니다.

이것이 당신이 원하는 것이라면 당신은 관심을 가질 것입니다.설정값.

간단한 요약작동 방식은 이전에 게시되었습니다.

관련 정보