PHP에서 리눅스 명령어 route를 실행하고자 합니다

PHP에서 리눅스 명령어 route를 실행하고자 합니다

PHP에서 route 명령어를 실행하려는 시도에서 문제가 발생하는 이유는 주로 권한 문제 또는 환경 문제일 가능성이 높습니다. 아래에서 문제를 분석하고 해결 방법을 제안하겠습니다.

✅ 문제 분석

  1. 리눅스 route 명령어는 관리자(root) 권한이 필요

  • route 명령어를 실행하려면 root 권한이 필요합니다.

  • 콘솔에서 직접 실행할 때는 관리자 권한을 사용할 가능성이 있지만, PHP는 기본적으로 웹서버 프로세스(www-data 또는 apache) 권한으로 실행됩니다. 이 권한은 제한적이라 명령어 실행이 실패합니다.

  1. Python에서 subprocess.call이 실패하는 이유

  • PHP에서 Python 스크립트를 호출할 때, 웹서버 프로세스의 권한으로 실행됩니다.

  • 따라서 Python 스크립트 내부에서 실행된 route 명령어가 권한 부족으로 실패합니다.

  1. 에러 코드 7의 의미

  • 7은 route 명령어가 실패했음을 나타냅니다. 이 문제는 권한 또는 환경 설정 문제로 인해 발생했을 가능성이 높습니다.

✅ 해결 방법

1. sudo를 사용하여 관리자 권한으로 실행

route 명령어에 sudo를 추가하여 관리자 권한으로 실행합니다.

Python 코드 수정:

import sys import subprocess comms = "sudo route add -host " + sys.argv[1] + " reject" re = subprocess.call(comms, shell=True) print(re)

2. sudo 권한 비밀번호 입력 생략 설정

PHP 또는 Python에서 실행 시 sudo가 비밀번호를 요구하지 않도록 설정해야 합니다.

  1. sudoers 파일 수정:

  • 터미널에서 sudo visudo 실행.

  • 아래와 같이 웹서버 사용자(www-data 또는 apache)가 sudo route를 비밀번호 없이 실행하도록 추가:

  • www-data ALL=(ALL) NOPASSWD: /sbin/route

  • 위에서 www-data는 웹서버 프로세스 사용자 이름입니다. (다른 사용자라면 변경)

  1. 명령어 절대 경로 사용:

  • route 명령어의 경로를 확인 후, 절대 경로로 실행합니다:

  • which route

  • 결과가 /sbin/route라면, Python 코드에서 명령어를 다음과 같이 수정합니다:

  • comms = "sudo /sbin/route add -host " + sys.argv[1] + " reject"

3. PHP에서 Python 실행

PHP에서 Python 스크립트를 실행할 때는 shell_exec 또는 system을 사용합니다.

PHP 코드 예제:

<?php // IP 주소를 전달 $ip_address = "192.168.0.1"; $command = escapeshellcmd("python3 /path/to/script.py $ip_address"); $output = shell_exec($command); echo $output; ?>

4. PHP 자체에서 route 명령어 실행

Python 없이 PHP만으로도 route 명령어를 실행할 수 있습니다.

PHP 코드:

<?php $ip_address = "192.168.0.1"; $command = "sudo /sbin/route add -host $ip_address reject"; $output = shell_exec($command); echo $output; ?>

✅ 테스트 및 확인

  1. sudo 권한 확인

  • 위 설정을 완료한 후, PHP 또는 Python에서 명령어 실행 시 권한 문제가 없어야 합니다.

  1. 명령어 로그 확인

  • /var/log/syslog 또는 /var/log/messages에서 route 명령어 실행 로그를 확인하여 문제가 발생하는지 확인합니다:

  • sudo tail -f /var/log/syslog

  1. 실행 결과 확인

  • PHP 또는 Python에서 명령어가 성공하면 출력 결과(0)가 나타납니다. 실패 시 추가적으로 에러 로그를 확인합니다.

결론

  • 문제는 권한 부족으로 발생.

  • sudo를 사용하여 권한 문제를 해결하고, NOPASSWD 설정으로 비밀번호 입력을 생략.

  • Python과 PHP 모두 권한 설정 후 route 명령어를 성공적으로 실행할 수 있습니다.

추가적으로 궁금한 점이 있다면 언제든 질문해주세요!

광고 [X]를 누르면 내용이 해제됩니다

AI 분석 및 채팅

3/3
시스템 리소스 로딩 중... 0%

여기를 클릭하면 빠른 로딩(가속)이 가능합니다.