저는 현재 CentOs 6을 실행하는 자체 Linux 서버를 설정하고 있습니다. 서버의 보안을 테스트하기 위해 "네비게이터"처럼 작동하는 PHP 스크립트를 작성했습니다. 디렉토리 위로 이동하고 파일을 여는 등의 작업을 수행할 수 있습니다.
문제는 내 도구를 사용하여 "/"까지 올라갈 수 있다는 것입니다. 하지만 그게 마음에 들지 않습니다. Apache가 "nobody"로 실행되고 있더라도 전체 서버의 모든 폴더와 파일에 액세스할 수 있는 것으로 보입니다.
나는 cPanel처럼 이 문제를 해결하려고 시도했지만 cPanel이 없기 때문에 이것이 어떻게 수행되는지 정확히 알지 못합니다.
기본적으로 나는 이것을 가지고 있습니다 :
/home/account/public_html /home/anotherAccount/public_html
"anotherAccount"가 "account"의 파일에 액세스할 수 없도록 하고 싶습니다. 나는 실제로 "anotherAccount"가 자신의 디렉토리를 떠날 수 없도록 하고 싶습니다!
예, 당신이 suPHP/fastcgi/suExec를 설치하려고 생각하고 있다는 것을 압니다. 하지만 리소스를 잡아먹기 때문에 그렇게 할 수 없습니다. 나는 그것들 중 하나를 설치하지 않고도 가능하다는 것을 알고 있습니다! 나는 내 스크립트를 전문적이지만 잘 알려지지 않은 일부 웹 호스트에 업로드했고 그것을 들어가거나 사용할 수 있지만 내 디렉토리가 아닌 다른 홈 디렉토리에는 들어갈 수 없습니다. /home/ 열이 비어 있습니다!
내 홈 폴더를 어떻게 보호하나요?
답변1
자신과 루트 외에는 누구도 홈 폴더에 액세스할 수 없도록 하려면 다른 사용자가 홈 디렉터리에 대한 권한을 갖고 있지 않은지 확인해야 합니다. 이와 같이:
chmod o-rwx ~
이렇게 하면 홈 디렉터리에 대한 다른 사용자의 읽기, 쓰기 및 실행 권한이 제거됩니다.
홈 디렉터리를 소유한 그룹의 누구도 해당 디렉터리에 액세스할 수 없도록 하려면 다음도 수행해야 합니다.
chmod g-rwx ~
또한 디렉터리를 소유한 그룹의 그룹 구성원에게서 모든 권한이 제거됩니다.
더 자세한 내용을 알고 싶으면 맨페이지 man 1 chmod
와 를 확인하세요 man 2 chmod
. 그들은 당신에게 모든 세부 사항을 설명해야 합니다.
그런데. user 로만 실행 중이더라도 누구나 파일을 찾아볼 수 있도록 하는 PHP 스크립트를 내 서버에 넣는 것이 두렵습니다 nobody
.
답변2
Apache 사용자는 항상 대부분의 파일 시스템을 읽을 수 있습니다. 설계상 기본적으로 많은 위치는 모든 사용자가 읽을 수 있고 때로는 실행할 수 있습니다. 이것 자체는 문제가 되지 않습니다.
당신이 확인해야 할 것은 1) Apache가 특정 디렉토리 세트 외부의 문서를 제공하지 않는다는 것과 2) PHP가 애플리케이션의 PHP 파일을 포함하지 않는 디렉토리에 들어갈 수 없다는 것입니다.
1) <Directory>
항목을 사용하여 액세스를 제한하고 구성 파일에 안전하지 않은 기본값이 없는지 확인하십시오. 아파치가 아닌 파일을 제공하는 PHP이기 때문에 이것은 귀하의 질문과 다소 관련이 없습니다. 하지만 여전히 주목하는 것이 중요합니다.
2) 안전 모드를 활성화하고 doc_root 및 open_basedir 지시문을 설정하여 PHP가 특정 디렉터리 트리로 제한되도록 합니다 open_basedir="/var/www/htdocs/<website>/";
. 예를 들어 이러한 구성 옵션은 시스템의 php.ini부터 vhost별 php까지 여러 위치에서 설정할 수 있습니다. .ini 파일, PHP 인터프리터 아파치 지침 등에 전달된 파일;