홈 디렉토리 내에서 웹 사이트를 실행할 필요는 없습니다 . 이제까지. 그렇지 않으면 웹 서버가/home/
디렉토리 구조를 볼수 있도록 통과하는 기능을 제공해야하지만/home/$USER/
다른 하위 폴더뿐만 아니라 (사용자 디렉토리에 무엇이 있는지 볼 수있는 사용자의 홈 디렉토리) 거기에. 잘못 구성되거나 잘못 구성되거나 패치되지 않은 웹 서버는 이러한 방식으로 막대한 데이터 유출 또는 자격 증명 손실을 유발하여 개인 정보 및 로그인이 다른 상황에 노출 될 수 있습니다. 사용중인 symlink 접근 방식은 Apache에게 읽기 권한을 부여하려는 것과 같은 이유로 도움이되지 않습니다./home/andre/www/moodle
-웹 서버는 홈 디렉토리를 탐색하여 심볼릭 링크가 /var/www/html
가리키는 위치에 도달 해야 보안 위험이 여전히 있습니다.
먼저을 사용하십시오 sudo cp -r /home/andre/www/moodle/ /var/www/html/
. 파일을에 복사하여 /var/www/html
자신의 홈 디렉토리에서 멀리 보관합니다. 그런 다음 사용자와 웹 서버가 해당 디렉토리의 모든 항목에 액세스하고 모든 파일과 디렉토리에 대한 전체 읽기 / 쓰기 권한을 부여 할 수 있도록 권한을 다시 실행합니다. 그런 다음 /var/www/html
사이트를 벗어나 면됩니다.
데이터를 /var/www/html
다음으로 다시 복사 한 후 4 단계로 진행됩니다 .
- Apache가 폴더와 파일에 액세스 할 수 있도록하여 403 오류없이 사이트를 제공 할 수 있습니다.
- 사용자에게 파일과 폴더를 '소유자'로 지정하고 모든 파일과 폴더를 읽고 쓸 수있을뿐만 아니라 디렉토리를 탐색 할 수 있습니다.
- (선택적이지만 권장 됨) 전체 디렉토리 구조에서 여기에서 작성된 파일 또는 폴더가 그룹이로 설정되도록 설정하십시오
www-data
.
- (선택 사항) 최종 보안 정리. 권한을 설정하여 귀하와 웹 서버가 사이트 데이터를 볼 수 있지만 다른 사용자는 사이트의 파일 또는 디렉토리 구조에 액세스 할 수 없습니다.
(1) Apache가 폴더 및 파일에 액세스 할 수 있도록 허용하십시오.
sudo chgrp -R www-data /var/www/html
sudo find /var/www/html -type d -exec chmod g+rx {} +
sudo find /var/www/html -type f -exec chmod g+r {} +
이렇게하면 '그룹' www-data
이 폴더와 파일에 대해 반복적으로 설정 됩니다. 그러면 웹 서버는 사이트 문서 루트 디렉토리 구조에 대한 액세스 권한을 재귀하고 액세스 할 수 있습니다 ( +x
디렉토리 전용). 그런 다음 웹 서버가 모든 파일에 대한 읽기 권한을 갖도록하여 사이트 데이터를 수신 할 수 있습니다.
이 파일로 웹 서버 쓰기 권한을 부여해야 할 경우도있을 수 있습니다, 또는 디렉토리에 - 이것은 수행하여 달성 할 수있는 sudo chmod g+w /var/www/html/PATH
곳 ( PATH
당신이 적용하는 데 필요한 디렉토리 구조에서 파일 또는 폴더의 경로입니다 웹 서버에 대한 쓰기 권한).
주의 사항 : 사이트 구성에 대한 '보안'정보 (예 : 데이터베이스 액세스 신임 정보 등)가 노출 될 수있는 경우가 많으며 다음과 같은 개별 파일 또는 디렉토리에서 해당 데이터에 대한 '기타'액세스 권한을 제거해야합니다. 다음 sudo chmod o-rwx /var/www/html/FILEPATH
(대체 FILEPATH
받는 상대적인 경로와 /var/www/html
파일의 폴더).
또한 '새 파일'에 403 문제가 발생하면 웹 서버에 올바른 권한을 부여하여 작성 및 복사 된 파일 및 폴더에 계속 액세스 할 수 있도록하기 위해이 명령을 나중에 다시 실행해야 할 수도 있습니다. www-data
그룹이 올바르게 설정 되지 않았습니다 .
(2) 소유자에게 폴더와 파일에 대한 읽기 / 쓰기 권한을 부여하고 폴더 액세스가 디렉토리 구조를 통과하도록 허용하십시오.
sudo chown -R USER /var/www/html/
sudo find /var/www/html -type d -exec chmod u+rwx {} +
sudo find /var/www/html -type f -exec chmod u+rw {} +
대체 USER
자신의 이름으로 첫 번째 명령에!
우리는 여기서 3 가지를합니다. 먼저, 사용자를의 모든 파일 및 디렉토리의 "소유자"로 설정했습니다 /var/www/html
. 다음으로 폴더에 대한 읽기 및 쓰기 권한을 설정하고 폴더에 액세스하여 폴더에 액세스 할 수 있도록 허용합니다 ( +x
디렉토리 항목의 항목). 그런 다음 모든 파일이 방금 설정 한 소유자에 대한 읽기 / 쓰기 권한을 갖도록 설정했습니다.
(3) (선택 사항) 이 파일 이후의 모든 새 파일 www-data
은 'access'사용자로 작성해야 합니다.
sudo find /var/www/html -type d -exec chmod g+s {} +
디렉토리의 그룹에 "set gid"비트를 설정합니다. 이 디렉토리 안에 생성 된 파일과 폴더는 항상 www-data
그룹으로서 웹 서버 액세스를 허용합니다.
(4) (선택 사항) 다른 사용자가 데이터를 볼 수 없도록하려면 최종 보안 정리
디렉토리와 파일을 보려면 사용자가 필요합니다. 그렇게하려면 웹 서버가 필요합니다. 다른 시스템 사용자 (루트 제외)가 데이터를 보지 못하게 할 수 있습니다. 따라서 액세스 권한을 부여하지 말고 사용자와 웹 서버 만 데이터를 볼 수 있도록하십시오.
sudo chmod -R o-rwx /var/www/html/
참고 : 나중에 다시 실행하거나 '기타'권한 범주의 권한을 편집 할 필요가 없습니다. '다른'사용자가 접근 할 수없는 경우 /var/www/html/
( 파일 구조 및 디렉토리 구조를 순회 하는 데 필요한 +x
비트 /var/www/html
가 없거나 +r
파일 목록을 읽을 비트가없는 경우) 다른 사용자가 해당 디렉토리 아래에있는 항목에 대한 권한 또는 그룹은 실제로 너무 중요하지 않을 것입니다.
이것에 대해 약간 덜 침습적 인 해결책이 있지만 모든 새 파일에서 작동한다고 보장하지는 않으며 파일 액세스 제어 목록을 포함하는 모든 파일 시스템 에서 작동하지 않을 수도 있습니다. 이렇게하면 파일 소유권을 가지게 www-data
되지만 파일을 개인적으로 소유하지 않아도 모든 의도와 목적에 대해 효과적인 소유자 권한을 부여 할 수 있습니다.
이 솔루션은 조금 덜 침습적이며, 디렉토리 및 모든 파일을 소유 www-data:www-data
하거나 root:www-data
액세스 할 수 있습니다. 그것은 사용하는 액세스 제어 목록 개별 그룹을 설정하지 않고 여러 사용자가 권한을 가지고 있습니다. 또한 사용자 root
또는 www-data
시스템 사용자가 파일을 소유 할 수 있지만 사례별로 추가 권한을 추가하고 특정 사용자에 대한 권한을 미세 조정하여 내용을 읽을 수는 있지만 편집 할 수는 없습니다.
우리가 여전히 작업하고 /var/www/html/
있고 우리 이외의 사용자와 시스템 (및 루트) 이외의 사용자를 스누핑하여 데이터를 보지 않으려면 다음 작업을 수행해야합니다.
- 웹 서버 시스템 사용자에게 소유권을 다시 부여하십시오
www-data
.
sudo chown -R www-data : www-data / var / www / html
- 재귀 적으로 다른 사용자에게 제공하지 (제외하는 동안, 파일에 읽기 / 쓰기 제공
www-data
및 root
파일에 액세스 할 수 물론).
sudo 찾기 / var / www / html -type f -exec setfacl -mu : YOURUSERNAME : rw -m 기타 :: --- {} \;
- 재귀 적으로 디렉토리에 대한 읽기 / 쓰기 / 트래버스를 제공하고 다른 사용자의 폴더에 대한 액세스 권한을 제거하고 (
www-data
및 제외 root
)이를 디렉토리의 새 파일에 대한 '기본'ACL로 설정하십시오.
sudo 찾기 / var / www / html -type d -exec setfacl -d -mu : YOURUSERNAME : rwx -mo :: --- {} \;
- 또한
setgid
모든 디렉토리에 대한 비트 를 설정해야 파일을 작성할 경우 웹 서버가 www-data
그룹 권한 을 통해 여전히 액세스 할 수 있습니다 .
sudo find / var / www / html -type d -exec chmod g + x {} \;
그리고 지금 당신은 모든 디렉토리에 액세스 할 수있어, 그리고 당신은 멀리 접근을에서하지 않았다 www-data
가 필요로 웹 서버는 여전히 사방에 파일을 만들 수있는 도움 (예 : PHP 기반의 프론트 엔드가 자신의 캐시 디렉토리를 갖는 등 올바른 작동을 위해 작성하고 기록해야합니다).
유일한주의 사항 : 수동으로 새 파일을 생성하는 경우 웹 서버에 소유권을 부여하기 위해 파일을 chown해야합니다. 이는 간단 sudo chown www-data:www-data filename
하며 액세스 제어 목록을 통해 파일에 대한 효과적인 소유자 권한을 보유 할 수 있습니다.
주어진 파일의 소유자를 변경하지 않고 일부 유형의 비표준 액세스에 대해 sysadmin 으로이 작업을 수행 해야하는 경우가 여러 가지 있습니다. 모든 파일 시스템 이 파일 액세스 목록을 지원하는 것은 아니기 때문에 작동하지만 문제가 있습니다.
+x
는 파일에 실행 권한을 부여 할 것이며, PHP 명령 줄을 통해 또는 서버 자체에서 실행 파일로 PHP 파일을 실행하는 것을 원하지 않습니다. 웹 서버의 PHP 파서에 의해 처리되기를 바랍니다.+x
PHP 파서가 읽고 처리하기 위해 PHP 파일이 필요하지 않습니다 ). 디렉토리+x
는 디렉토리를 통한 순회를 허용하기 위해 필요합니다 . 즉, 디렉토리가+x
루트 가 아니고 디렉토리가 아닌 경우 디렉토리에 액세스 할 수 없습니다. 이는 Apache에서 심볼릭 링크 및 홈을 사용하지 않는 문제입니다. 예배 규칙서.