2014-05-14 4 views
2

나는 SSH를 통해 로컬 컴퓨터에 로그인하는 PHP 응용 프로그램을 가지고 있으며 셸 스크립트를 시작하고 실시간으로 스크립트의 출력을 브라우저에 다시 인쇄합니다 (페이지로드 유지). 그러나 원격으로 실행 된 쉘 스크립트에서 sudo를 호출하면 임의의 메모리가 덤프됩니까?

의 쉘 스크립트는 겉으로는 임의의 메모리 sudo service apache2 reload > /dev/null 1024 바이트가 덤프됩니다 명중하고 스크립트가 정상적으로 완료 동안 출력이 중단 될 때.
연결이 마지막으로 종료되면 (예 : 죽이는 등) 연결이 열린 채로 남아있는 시간에 따라 화면에 걸쳐 임의의 추가 양이 구토됩니다.

는 실행 PHP 스크립트는 이벤트가 발생할 종료/일부 중단합니다 때까지 SSH 연결의 표준 출력을 읽습니다. 모든 보안이 사람들을 걱정 들어

stream_set_blocking($this->stdo, true); 
fwrite($this->stdo, $cmd . "\n"); // write command to start running shellscript 

$buf = ''; 
do 
{ 
    $buf = fread($this->stdo, 256); 

    if ($ansicolor) 
     echo $this->ansicolor($buf); // color codes are translated to HTML here 
    else 
     echo $buf; 

    flush(); 
    ob_flush(); 
} 
while (strpos($buf, '$') === false); 

flush(); 
ob_flush(); 

: 그것은 ANSI 컬러 코드를 변환하는 것을 제외하고는 <span>의를 HTML로 PHP는 매우에만 명령이에 대한 "NOPASSWD"sudo를 가진 일반 사용자로 로그인합니다.

은 스크립트가 echo을 통해 자주 발생하는 결과를 출력하므로 문제가되는 것으로 알릴 수 있습니다.
또한 재로드가 실패하고 실제로 유용한 오류가 나오는 경우 stderr를 멀리 파이프하고 싶지 않습니다. 해당 일의

설치된 버전 :

  • PHP는 5.3.3-7+squeeze17 with Suhosin-Patch (cli) (built: Aug 23 2013 15:06:16)
    때문에 나는 캔트 최신 버전을 처리하는 기존 응용 프로그램의 PHP 5.3이 필요합니다.
  • libssh2-PHP 0.11.0-2.1
  • OpenSSL을 1.0.1e-2+deb7u7 (https://www.debian.org/security/2014/dsa-2896)
  • 는 openssh-서버 1:6.0p1-4+deb7u1

어떻게 더 이상 임의 메모리를 덤프하지 않도록이 문제를 해결할 수 있습니까?

+3

OpenSSL의 컨텍스트에서 "덤프 임의 메모리"는 혼란스러운 개념입니다. Heartbleed 버그가있는 OpenSSL 1.0.1e를 사용하고 있습니다. 1.0.1g (또는 그 이상)로 업그레이드하는 것이 좋습니다. –

+0

@BrianKendig https://www.debian.org/security/2014/dsa-2896에 따르면 heartbleed는 wheezy 용으로'1.0.1e-2 + deb7u5'에서 수정되었습니다. deb-repo를 통해 새로운 버전을 얻지도 않습니다. –

+2

좋습니다. 그러면 첫 번째 질문은'ssh' 또는'sudo'에서 메모리 덤프가 오는가, 아니면 원격으로 실행중인 명령에서 오는 것입니까? 다른 것들에'sudo'를 쓰거나 명령 줄에서 직접 명령을 실행 해보십시오.그 쓰레기의 원인이되는 퍼즐 조각 하나를 분리 할 수 ​​있는지 확인하십시오. –

답변

0

화면에 "메모리 덤프"가 표시되지 않습니다. 당신이보고있는 것은 stderr에있는 service 명령의 결과입니다. 그것은 일반적으로 화면에 다음과 같이 보일 것입니다 :

* Reloading web server config apache2  [OK] 

[확인] 메시지가 계속 일부 ANSI 형식을 가지고 있으며, 이는 1024 바이트의 나머지 부분을 채 웁니다. 당신은 여전히 ​​오류를보고하면서 "쓰레기"를 방지하려면

, 당신은 ANSI 형식 모두를 제거하고 싶다. 이런 식으로 :

service apache2 reload >/dev/null 2> >(sed -r "s/\x1B\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]//g") 
+0

두 가지 : (1) 실제로 OP가 표시되지 않았기 때문에 OP가보고있는 것을 확실히 말할 수는 없습니다. (2) 질문에서 ANSI 색상 코드를 HTML로 변환하는 것에 대한 논의를 감안할 때, OP는 ANSI 이스케이프 시퀀스를 인식하고 다른 것을 이야기하고 싶습니다. –

+0

@AndrewMedico 나는 (1)에 대한 교육적 추측을하고있다. 당신은 옳을 수 있는데, 나는 겸허하게 철수 할 것입니다. (2) OP가 HTML 변환을 설명하는 것을 왜 귀찮게하는지. 그것은 제목의 질문에 부수적 인 것 같습니다. 어쨌든 sterr에 "쓰레기"를 포함하지 않을 최종 출력물 만 번역합니다. –