2010-02-26 4 views
40

this question의 토론에 영감을 받아 어쩌면 어리석은 질문 일 수 있습니다.PHP/Apache/Linux 환경에서 chmod 777은 왜 위험한가요?

허가 수준이 777 인 Linux 기반 웹 호스팅에 디렉토리 나 파일을 남기는 것이 좋지 않으며 필요에 따라 항상 권한을 설정하는 것이 좋습니다.

정확히이 특히 PHP/Apache 컨텍스트에서 악용 될 위험이있는 곳에서 궁금합니다.

"실행 파일"로 표시되어 있는지 여부에 관계없이 외부에서 PHP 스크립트 파일을 실행할 수 있습니다 (즉, 웹 서버 호출과 인터프리터). 그리고 명령 행 php 인터프리터를 통해 호출 된 파일에도 동일하게 적용됩니다.

그래서 정확히 777에 취약점이 무엇입니까? 같은 컴퓨터에있는 다른 사용자가 세계에 쓰기가 가능한 파일에 액세스 할 수 있습니까? 그것은 하나 개의 계정에 침입하기 만 때문에

+3

** ** 모든 사람이 ** 코드를 읽고 쓰고 * 수행 할 수 있습니다. – LiraNuna

+2

@LiraNuna 예, 그렇지만이 문맥에서 모든 사람들은 무엇을 의미합니까? 같은 컴퓨터에있는 사용자입니까? 컴퓨터 외부의 사용자 - 방법? 파일 자체가 실행 가능하지 않지만 "실행 가능"플래그가 무엇을 말하는지 상관없이 해석되는 PHP 스크립트 컨텍스트에서 "실행"은 무엇을 의미합니까? –

+0

@LiraNuna, 그의 서버가 모든 것을 가지고 있다고 가정하면, 그의 index.php에 "쓸"수 있습니까? – user187291

답변

27

여기 하나 개의 시나리오입니다 :

  1. 당신은 사용자가 업로드 할 수있는 보호되지 않은 디렉토리가 있습니다. 쉘 스크립트, 쉘 스크립트 그것의 system() 통화가 있습니다 PHP 파일 :
  2. 그들은 두 개의 파일을 업로드 할 수 있습니다.
  3. 는 그들이 단지 쉘 스크립트가 실행하는 원인, 브라우저에서 URL을 방문하여 업로드 PHP 스크립트에 액세스 할 수 있습니다.

이 디렉토리가 777이면 모든 사람 (사용자 아파치를 포함하여 PHP 스크립트가 실행되는 것을 포함)이 실행할 수 있음을 의미합니다. 실행 비트가 해당 디렉토리 및 디렉토리 내의 파일로 설정된 경우 위의 3 단계는 아무 것도 수행하지 않습니다.

편집 : 코멘트는 PHP 파일의 권한이 아닙니다. system()은 리눅스 사용자 아파치 (또는 아파치가 실행하도록 설정 한 것)에 의해 리눅스 시스템 호출로 실행되는 PHP 파일 내에 있습니다.), 그리고 실행 비트가 중요 할 때 정확히 그 것이다. 이 권한에 관해서

+1

@ 이와 비슷하지만 PHP 파일을 실행하기 위해 실행 비트가 필요합니까? 지금 당장은 테스트 할 수 없지만, 아파치/PHP에 대한 권한을 파일을 실행하기에 충분하지 않을 것이라고 생각할 것입니다. –

+3

아니요, PHP 파일의 권한이 중요하지 않습니다. 리눅스 시스템 호출로 실행되는 PHP 파일 내부의 system() 호출이며, 실행 비트가 중요한 부분입니다. –

+0

아아아, 알겠습니다. 건배! –

2

그것은 매우 악의적 인 활동에 대한 귀하의 웹 사이트의 취약성 프로파일을 증가시킨다.

로그인 할 때 시스템에 액세스 할 수있는 사람은 "이 웹 사이트는 정말 안전하지 않으므로 신용 카드 정보를 알려주십시오."와 같이 페이지를 변경하는 등의 작업을 할 수 있습니다.

편집 : (명확히하고 주소를 댓글)

많은 서버가 인생에서 하나 이상의 목적을 가지고있다. 그들은 여러 서비스를 운영합니다. 당신은 신중하게 각을 할당하여 서로 이러한 서비스를 분리하는 경우 고유 한 사용자 및 그에 따라 파일 사용 권한을 관리, 그래, 누군가가 계정에 대한 자격 증명을 타협하는 경우는 뜨거운 물에 여전히,하지만 그들이 할 수있는 손상은 하나 개의 서비스로 제한됩니다 . 일반 계정이 하나 뿐이며 전체 파일 시스템을 777로 설정하면 손상된 계정이 시스템의 모든 것을 위태롭게합니다.

귀하의 서버가 Apache/PHP 만 실행하기 위해 전념하고 있으며 다른 목적으로는 사용되지 않으며 Apache/PHP가 실행되는 계정이 하나뿐일 경우 해당 계정이 손상되면 전체 응용 프로그램의 관점에서 시스템이 손상 될 수 있습니다 (PHP를 실행하는 데 사용되는 계정으로 시스템 파일을 보호하고 쓸 수 없어도 여전히 관리 계정/루트에서만 가능해야 함).

가 파일을 쓸 수 있습니다, 그리고 그것을 실행하는 경우, 그들은 컴퓨터 (실행 파일 또는 스크립트)에서 실행 뭔가로 변경 한 후 해당 실행 파일을 실행하기 위해 PHP의 shell_exec를 사용할 수 있습니다. 당신이 shell_exec을 허용하지 않도록 구성하는 경우, 그들은 당신의 구성을 변경할 수 있습니다뿐만 아니라

+0

@Eric J는 어떤 종류의 로그인으로 내 시스템에 액세스 할 수 있습니까? 쉘 로그인? 외부의 누군가가 내 리눅스 서버의 셸에 접근 할 수 있다면, 이미 내가 망쳐 놓은 것 같다. 이 모든 것이'chmod 777'입니까? –

+0

@ Eric J : 유효한 동안, 누군가가 기계에 쉘 접근하는 데 문제가 있다면, 임의의 chmod'd 777 디렉토리보다 더 긴급한 문제가 남아 있지 않습니까? – jasonbar

+0

그리고 @Eric J, 구체적으로 * 실행 * 비트에 대해 묻고 있습니다.실행 가능한 바이너리가 아닌데도 내 웹 사이트의 내용에 플래그가있는 * 실행 가능 파일이 있는지 여부가 보안에 중요한 이유는 무엇입니까? 그것이 내가 알고 싶은 것입니다. –

2

는 미니멀리즘을 따르지 많은 좋은 일반적인 이유가 있습니다,하지만 LAMP의 웹 호스트의 맥락에서, 마음에 쉽게 와서 그 일부는 공유 호스팅 플랫폼에

  • , 다른 사용자는 이제 호스트를 공유하면 스크립트를 읽고 쓸 수 있습니다.
  • 전용 호스트에서 루즈 프로세스는 파일을 읽고 쓰고 실수로 파일을 삭제할 수 있습니다. 사용자 정의 로깅 프로세스가 사용자 nobody로 백그라운드에서 실행 중이며 버그가 발생하여 그 결과로 rm -rf /을 시도한다고 가정 해 보겠습니다. 이제는 아무도 쓰기 권한이 없어야하는 파일이 거의 없기 때문에 이것은 일반적으로 무해합니다.하지만이 루즈 프로세스는 이제 파일을 가져옵니다.
  • 웹 사이트를 훼손하려면 누군가가 아무런 액세스 권한도 얻지 않아도됩니다. 일반적으로 공격자는 피해를 줄 수있는 장소에 도달하기 위해 사용자 수준의 추가 에스컬레이션 공격을 수행해야합니다. 이것은 진짜 위협입니다. 일부 중요하지 않은 서비스는 더미 계정으로 실행될 수 있으며 취약점이있을 수 있습니다.
+0

+1 매우 좋은 점, 건배. –

0

서버에 소프트웨어 패키지가 설치되어 있고 그 서버에 제로 데이 취약점이 있다고 가정하면 공격자는 모든 것을 777로 설정하면 파일 기능을 사용하여 관리자 제어판에 액세스 할 수 있습니다 그가 원하는 곳 어디에서도 쉘 스크립트를 업로드하는 것은 사소한 일이다. 그러나 아무도/www-data/etc에 쓰기 권한이 없으므로 권한을 올바르게 설정하면 할 수 없습니다.

관련 문제