Apache / 디렉토리 안에 있는 디렉토리 또는 파일 목록 출력하는 방법

Apache HTTP Server에서 디렉터리의 파일과 하위 디렉터리 목록을 표시하려면 해당 디렉터리에 Options +Indexes를 설정합니다. 접근 권한이 있고 기본 인덱스 파일이 없으며 mod_autoindex가 활성화되어 있을 때 목록이 생성됩니다.

목록이 표시되는 조건

Apache 2.4에서 디렉터리 URL을 요청하면 먼저 DirectoryIndex에 지정된 파일을 찾습니다. 예를 들어 index.html이 있으면 보통 그 파일이 표시됩니다. 해당 파일이 없을 때 Indexes가 활성화되어 있으면 mod_autoindex가 목록을 만들 수 있습니다. 자세한 동작은 Apache의 DirectoryIndex 설명과 mod_autoindex 문서를 참고하세요.

목록 설정은 접근 권한을 부여하지 않습니다. 접근이 거부된 디렉터리나 Apache가 읽을 수 없는 경로에는 목록이 표시되지 않습니다. 또한 403 Forbidden은 인증이나 파일 시스템 권한 등 여러 원인으로 발생하므로, 403이 나왔다는 이유만으로 목록을 켜서는 안 됩니다.

설정 전에 확인하기

  • 목록과 파일을 공개해도 되는 전용 디렉터리를 준비합니다. 설정 파일, 백업, 개인정보 등 공개하면 안 되는 자료는 넣지 않습니다.
  • 설정할 사이트의 가상 호스트와 실제 파일 경로를 확인합니다. 아래 예는 Ubuntu의 Apache 2.4에서 사이트의 문서 루트가 /var/www/html이고 공개 디렉터리가 그 아래 downloads인 경우입니다. 실제 환경의 경로와 URL로 바꾸세요.
  • 기존 설정을 백업하고, 사이트 관리 권한과 Apache 설정을 다시 불러올 수 있는 권한을 확인합니다. 운영 서버라면 먼저 시험 환경에서 확인하세요.

목록에 나타나지 않더라도 파일 URL을 직접 알면 접근할 수 있을 수 있습니다. 목록에서 이름을 숨기는 설정은 파일 접근을 차단하는 권한 설정의 대체 수단이 아닙니다.

가상 호스트에서 특정 디렉터리에 적용하기

Ubuntu에서는 활성 사이트 설정이 보통 /etc/apache2/sites-available/의 파일에 있습니다. 해당 사이트의 가상 호스트 설정 안에 다음 블록을 추가하거나 기존의 해당 경로 설정을 수정합니다. 이미 접근 제한이 있는 디렉터리에 무심코 공개 권한을 추가하지 마세요.

<Directory "/var/www/html/downloads">
    Options +Indexes
    Require all granted
</Directory>

Options +Indexes는 상속된 옵션에 목록 표시를 추가합니다. Require all granted는 이 경로에 대한 접근을 허용하므로 공개할 디렉터리에서만 사용하세요. 실제 적용 범위는 다른 설정 구역이나 하위 디렉터리 설정에 따라 달라질 수 있습니다. Apache Options 지시어에서 옵션의 상속과 병합 규칙을 확인할 수 있습니다.

설정을 저장한 뒤 Ubuntu에서 문법을 검사합니다. Syntax OK가 표시되면 설정을 다시 불러옵니다. 오류가 나오면 경로와 오타를 수정하고 검사에 성공할 때까지 다시 불러오지 마세요.

sudo apache2ctl configtest
sudo systemctl reload apache2

Ubuntu가 아닌 배포판은 설정 파일 위치와 서비스 이름이 다를 수 있습니다. 검사와 다시 불러오기 명령도 해당 배포판의 안내를 따르세요.

목록과 접근 범위 확인하기

  1. 공개해도 되는 테스트 파일을 대상 디렉터리에 넣고, 지정된 인덱스 파일이 그곳에 없는지 확인합니다.
  2. 브라우저에서 해당 디렉터리 URL을 엽니다. 위 예에서 서버 주소가 https://example.com이라면 https://example.com/downloads/가 예시 URL입니다. 실제 도메인으로 바꾸세요.
  3. 목록에 테스트 파일이 표시되는지 확인하고 링크를 열어 접근 범위가 의도와 일치하는지 확인합니다. 하위 디렉터리에도 설정이 상속될 수 있으므로 공개 범위를 함께 살펴봅니다.

목록 대신 페이지가 나타나면 DirectoryIndex 파일이나 다른 핸들러·리디렉션이 있는지 확인합니다. 403이면 오류 로그에서 접근 제한, 디렉터리 권한과 인덱스 설정을 확인합니다. autoindex 모듈이 활성화되어 있는지도 apache2ctl -M으로 점검할 수 있습니다. 경로가 틀리면 404가 나올 수 있습니다.

.htaccess를 사용하는 경우

서버 관리자가 해당 디렉터리의 .htaccess에서 Options 변경을 허용한 경우에는 그 파일에 다음 한 줄을 넣을 수도 있습니다. 상위 설정의 AllowOverride가 해당 옵션을 허용하지 않으면 작동하지 않거나 서버 오류가 발생할 수 있으므로 관리자에게 확인하세요.

Options +Indexes

서버 설정에 접근할 수 있다면 Apache는 일반적으로 주 설정 파일 사용을 권장합니다. Apache의 .htaccess 안내에서 적용 조건을 확인하세요.

목록 표시를 중지하려면

해당 경로에서 Options -Indexes를 설정하거나 변경 전 설정을 복원한 뒤 문법을 검사하고 Apache를 다시 불러옵니다. .htaccess에 추가했다면 해당 줄을 제거하거나 허용된 경우 Options -Indexes로 바꿉니다. 상속된 설정이 있을 수 있으므로 변경 후 디렉터리 URL을 다시 확인하세요.

목록을 끄는 것만으로 이미 알려진 파일 URL에 대한 접근이 차단되지는 않습니다. 파일 자체를 보호하려면 별도의 접근 제어를 적용하고, 승인되지 않은 사용자에게 실제로 차단되는지 검증해야 합니다.