>> Edit article
이름
제목
패스워드
적수님 PHP School에서 적수님을 보고 여기로 달려왔습니다. 그런데 조금 문제가 있군요. 사용자의 GID를 nobody로 두는 것은 아니겠지요. PHP School에서는 그렇게 정리를 했더군요. 그렇게 된다면 아주 위험합니다. 지금의 (정리?)를 보면 사용자의 홈페이지의 시작 디렉토리만 nobody로 설정하는 것으로 보이는데 혼동을 줍니다. GID를 바꾸면 절대로 안됩니다. : PHP의 보만 문제 해결책 : : Q. 같은 시스템에 있는 사용자들이 간단하게 소스를 살펴 볼 수 있다. : : A. 사용자 홈 디렉토리의 권한을 조정함으로서 해결할 수 있습니다. 물론 이는 : 관리자의 힘을 조금 빌려야 하고 관리자가 계정 생성시에 다음과 같이 먼져 : 작업을 해준다면 그렇게 많은 수고는 들지 않을 것입니다. : : 사용자 홈페이지 디렉토리(보통 ~/public_html)의 그룹을 nobody 로 만들고 : 접근 권한을 710으로 맞추면 됩니다. : : redhands 사용자의 홈페이지 디렉토리의 권한은 다음과 같이 되겠지요. : drwx--x--- 3 redhands nobody 4096 3월 30 16:51 public_html/ : : 이렇게 함면 쉘에서 직접 사용자 홈페이지 디렉토리에 접근하는 것을 방지 : 할 수 있습니다. : : Q. 위와 같이 쉘에서 접근을 차단한다 하여도 PHP 스크립트나 CGI 를 이용해서 : 상대방의 파일을 읽어 오도록 한다면 역시 nobody 권한이기 때문에 쉽게 파 : 일을 읽어 내용을 볼 수 있다. : : A. 역시 해결책이 있습니다. 경우를 나누어 설명을 드리겠습니다. : : 1. PHP의 경우 : : PHP에서는 내부적으로 safe_mode 를 제공합니다. 이 모드를 사용하게 되 : 면 많은 제약을 가지게 되지요. exec(), system() 함수가 실행할 수 있 : 는 바이너리의 위치를 지정할 수 있습니다. 또한 include()로 불러올 수 : 있는 파일의 위치도 지정 가능하구요. safe_mode는 컴파일시 지정하거나 : /etc/httpd/php3.ini 같은 php3 설정 파일에서도 설정할 수 있습니다. : : 그리고 중요한 것이 소유자가 틀린 파일을 불러오는 것을 막을 수 있습 : 니다. 이럼으로써 함부로 다른 사용자의 파일을 include() 혹은 fopen() : 등으로 가져오는 것을 막을 수 있겠지요? : : 그리고 실행할 수 있는 파일의 위치도 잘 설정해 주셔야 합니다. 기본값 : 은 실행이 불가능하게 되어 있는데(맞나?) cat 같이 다른 파일의 내용을 : 열어 올 수 있는 프로그램이 있는 곳으로 설정을 하게 되면 아무리 설정 : 을 해도 그냥 열어 볼 수 있습니다. : : system("cat /home/redhands/public_html/foobar.php3", $r); 이러면 간 : 단히 내용을 볼 수 있으니까요. : : 2. CGI의 경우 : : 확실한 테스트 해보지 않았지만 아파치에서 제공되는 suexec를 사용하면 : 해결될 것이라 생각됩니다. 각 홈페이지 소유자의 권한으로 돌아가기 때 : 문에 다른 사용자의 홈페이지 디렉토리에는 접근 권한이 없을 것이고 고 : 로 파일을 열어 보지도 못하겠지요. : : 3. SSI의 경우 : : 이 부분은 어떻게 동작하는지 테스트해보지 않았습니다. (사실 SSI 어케 : 하느지 까먹어서 T_T) 역시 사용을 못하게 하면 가장 간단한 것이겠지만 : 이 글을 보시는 분 중 아무나 테스트를 해보십시오. (굳이 PHP를 허가하 : 면서 SSI까지 열 필요는 없다고 생각합니다.) : : FollowSymlinks 옵션에는 IfOwnerMatch라는게 있는데 Include에는 있는 : 지 없는지 모르겠군요. :) : : 먼가 까먹은게 있는거 같은데... 암튼 문제 있는 부분은 댓글 달아 주시 : 면 감사하겠습니다. (정말 먼가 안 적은게 있는거 같은데...)
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved