2013-04-09 3 views
0

mod_python을 사용하여 Apache 2.x에서 python 스크립트를 실행하려고합니다. 내가 루트 권한을 필요로 파이썬 스크립트를 사용하여 방화벽 규칙을 추가하려고openbsd에서 mod_python을 사용하여 아파치에서 루트 권한을 필요로하는 python 스크립트를 실행하는 방법

LoadModule python_module /usr/local/apache2/modules/mod_python.so 
<Directory /usr/local/apache2/htdocs/mod_python> 

SetHandler mod_python 
PythonHandler mod_python.publisher 
PythonDebug On 

게시자와 httpd.conf 파일을 편집했다. 루트 권한을 요청하고 있습니까? 제발 누군가 도와주세요.

#!/usr/local/bin/python 
    #from mod_python import apache 
    import sys 
    import errno 
    import pf 

    def index(req): 
     filter = pf.PacketFilter() 

     try: 
       # Enable packet filtering 
       filter.enable() 
       print "pf is enabled" 
       return "pf is enabled" 
     except IOError, (err, msg): 
       if err == errno.EACCES: 
         #sys.exit("Permission denied: are you root?") 
         return ("Permission denied: are you root?") 
       elif err == errno.ENOTTY: 
         #sys.exit("ioctl not supported by the device: is the pf device correct?") 
         return ("ioctl not supported by the device: is the pf device correct?") 

이것은 openBSD에서 아파치를 실행하고 싶은 python 스크립트입니다. mod_python을 사용합니다.

+0

제발, 맨! 귀하의 질문은 이해하기가 매우 어렵습니다. 또한, 당신이 묘사하고있는이 물건은 나에게 아주 잘못된 것 같습니다. pfctl (8)을 통해서만 fw 상태를 변경하십시오. 스크립트에 대한 링크를 게시하여 도움을 받으십시오. httpd는 priviledge가 분리되어 있으므로 사용자 www로 실행되므로 sudo를 허용하지 않는 것이 올바른 동작입니다. 그래서 : 더 많은 정보, 더 명확하게. – ramrunner

+0

이제 포트에서 apache2를 사용하는 것으로 나타났습니다 (이유는?). 기본적으로이 포트는 chroot되지 않습니다. 어떤 사용자로서 httpd를 실행하고 있습니까? – ramrunner

+0

@ramrunner mod_python 버전 3.x는 아파치 2.x 만 지원합니다. GUI를 사용하여 pf에 규칙을 추가하려고합니다. On 버튼을 클릭하면 파이썬 스크립트가 실행되고 규칙이 추가됩니다. 나는 mod_python을 apache2에 삽입하고 파이썬 스크립트를 실행하려고합니다. 그러나 루트 권한을 요청하고 있습니다. 어떻게 그런 스크립트를 실행하도록 설정 할 수 있습니까? –

답변

1

파이썬 스크립트를 어딘가에 게시하고 링크를 보내주십시오. 파이썬 스크립트가 pf와 통신을 시도하는 방법은 무엇입니까? pfctl을 통해? 해당 사용자를 가지고 당신이 을/etc /의 sudoers에게을 편집해야합니다 사용자가 다음 아파치에게

ps aux | grep apache 

를 실행

pfctl -t thetable -T add x.x.x.x 

이 찾아 테이블에 IP를 추가 할 수 tryng 있습니다 말할 수 실행할 수 암호없이 pfctl 명령. 그래서 당신이 아파치를 www로 운영한다고 가정 해 보겠습니다. 가 sudoers에 다음과 같은 장소 : 파이썬 스크립트의 마지막

www ALL=(ALL:ALL) NOPASSWD: /sbin/pfctl 

는 전체 체계는 정말 나쁜 생각이라고

from subprocess import call 
call(["sudo","pfctl","-T","theTable","-t","add", "x.x.x.x"]) 

그러나 명심하십시오 (당신이 하위 프로세스와 외부 명령을 호출 말할 수) 그런 식으로해서는 안됩니다. 가능하다면 파이썬 스크립트를 제거하고 privseped이고 감사 된 번들 된 아파치 1.3을 실행하십시오. chroot에서 웹 서버를 실행하십시오. 특별히 웹상에서 사용자 입력에 방화벽 제어권을 노출시키지 마십시오. 네가하고 싶은 일을 정교하게하면 훨씬 효율적이고 안전한 설정을 찾을 수있을 것이라고 확신한다.

+0

sir 나는 plz가 그것에 대해 살펴 본 질문을 편집했다. pfctl을 사용하지 않습니다. 그것은 pf를 유지하기 위해 python에서 py-pf 라이브러리를 사용하고 있습니다. –

1

mod_python에서 루트 사용자로 Python 스크립트를 실행할 수 없습니다. 이는 Apache가 항상 신뢰할 수없는 사용자에게 권한을 삭제하기 때문입니다. 이 문제를 해결할 수있는 유일한 방법은 소스 코드에서 Apache를 다시 컴파일하고 Apache 작업자 프로세스를 루트 권한으로 실행할 수있는 보안 구멍을 허용하는 마법 전 처리기 매크로를 정의하는 것입니다.

요약하면 위험하지 않습니다.

또한 mod_python이 더 이상 유지 관리되지 않았거나 개발되지 않았으므로 먼저 사용해야하는지 여부는 의심 스럽습니다.