Python의 http.server 모듈은 단기 테스트나 신뢰할 수 있는 전송을 위해 정적 파일을 제공할 수 있습니다. 프로덕션 웹 서버가 아니며 인증, 권한 부여, TLS, 속도 제한 또는 적대적 트래픽에 대한 강화된 처리를 제공하지 않습니다.
네트워크 공유 · 레슨 3
간단한 HTTP 서버
Python HTTP 서버로 통제된 디렉터리를 임시로 공개하는 방법을 알아봅니다.
공유 디렉터리 준비하기
공개하려는 파일만 담은 전용 디렉터리를 만듭니다. 시작 전에 숨김 파일, 심볼릭 링크, 권한 및 민감한 메타데이터를 검토하십시오. 홈 디렉터리, 저장소 루트, 자격 증명 디렉터리 또는 시스템 경로는 제공하지 마십시오.
공유 루트를 명시하려면 --directory를 사용합니다.
$ python3 -m http.server 8000 --directory /srv/temporary-share
인덱스 파일이 없으면 모듈은 일반적으로 디렉터리 목록을 생성합니다. 리스너에 도달할 수 있는 사람은 누구나 제공되는 내용을 열거하고 내려받을 수 있습니다.
--directory /srv/temporary-share를 사용하는 이유는 무엇입니까?
수신 주소 제어하기
같은 호스트만 연결해야 한다면 루프백에 바인딩합니다.
$ python3 -m http.server 8000 --bind 127.0.0.1 --directory /srv/temporary-share
신뢰할 수 있는 네트워크에서 공유하려면 적절한 인터페이스 주소에 의도적으로 바인딩하고 방화벽 정책을 확인합니다. 제한적인 바인딩 없이 실행하면 일반적으로 사용 가능한 모든 인터페이스에서 수신하므로 의도한 네트워크 밖에 디렉터리가 노출될 수 있습니다.
127.0.0.1에 바인딩한 서버에는 일반적으로 누가 접근할 수 있습니까?
접근 테스트하기
서버를 실행하는 호스트에서 알려진 파일을 요청하고 응답을 검사합니다.
$ curl -f http://127.0.0.1:8000/example.txt
승인된 원격 테스트에는 루프백 대신 선택한 인터페이스 주소를 사용합니다. 의도한 파일에 접근할 수 있는지와 문서 루트 밖의 파일에는 접근할 수 없는지를 모두 확인합니다. 브라우저에서 성공했다는 사실만으로 적절한 공개 범위나 기밀성이 입증되지는 않습니다.
python3 -m http.server 8000에서 명시적으로 선택한 포트는 무엇입니까?
중지 및 정리하기
감독하는 터미널에서 임시 서비스를 실행하고 전송이 끝나면 Ctrl-C로 중지합니다. 리스너가 사라졌는지 확인합니다.
$ ss -ltn 'sport = :8000'
데이터 처리 정책에 따라 임시 사본을 제거하고 임시 방화벽 규칙을 되돌립니다. 영구적이거나 인증이 필요하거나 인터넷에 공개되는 배포에는 접근 제어와 TLS가 설정된 유지 관리형 서버를 사용하십시오.
임시 전송이 완료된 뒤 무엇을 해야 합니까?
레슨 완료
간단한 HTTP 서버 완료
이제 공개 범위를 제한한 임시 Python HTTP 서버를 실행할 수 있습니다.
검토한 전용 디렉터리만 제공합니다.
가능한 가장 좁고 적절한 주소에 바인딩합니다.
의도한 접근과 의도하지 않은 경계를 테스트합니다.
이후 리스너를 중지하고 임시 접근을 정리합니다.