본문 바로가기
IT 실무/서버 관리

Permission denied: cannot read directory for multi

by 아이들링 2020. 3. 16.

이 오류는 

(13)Permission denied: cannot read directory for multi

AH00686: cannot read directory for multi

과 같은 형태로 아파치 로그에서 발견된다.

 

메시지만 보면 명백히 퍼미션 오류 같다. 실제로 퍼미션이 잘못 설정되어 있어 아차하고 수정하고 해결되는 경우도 있으나, 저 메시지는 실제론 퍼미션으로 풀어낼 수 없는 경우가 많다.

 

이 오류는 MultiView 옵션이 활성화되었고, public_html 의 퍼미션이 711인 경우 발생할 수 있다.

 

일반적으로 보안상의 이유로 홈 디렉터리(웹에서 접근하는 디렉터리)는 퍼미션이 711(rwx--x--x)일 것이다. 디렉터리에서 '실행 권한'이 의미하는 것은, 당신이 만약 디렉터리 내에 위치한 파일 명을 정확히 알고 있다면 그 파일을 실행시킬 수 있다는 것이다. 그러나 디렉터리의 파일 목록을 볼 순 없다. 파일의 '실행 권한'은 말 그대로 파일을 실행시킬 수 있는 권한인데 반해 디렉터리의 '실행 권한'은 이렇게 좀 더 이해가 필요하다.

 

디렉터리의 파일 목록을 보려면 '읽기 권한(r)'이 있어야 한다. 보안상의 이유로, 웹에서 접근하는 디렉터리는 읽기 권한을 넣지 않는 것이 일반적이며, 권장된다. 일반 유저들은 알려진 특정 URL로 접근해야지 파일 목록을 읽는 다는 것은 심각한 보안 취약점일 수 있다.

 

그러나, 아파치의 MultiViews 옵션은 이 리스팅을 가능하게 한다. 그러므로 이 옵션을 위해선 '읽기 권한'이 필요하다. 사실 MultiViews 옵션은 당신이 웹을 통해 뭔가 이런 저런 파일을 배포하고 싶지만 굳이 웹페이지를 만들고 싶지 않을 때나 한정적으로 사용되어야 하는 옵션이다.

 

즉, 저 오류의 원인은 MultiViews라는 옵션으로 야기된 것이며, 당신이 실제로 MultiViews 옵션이 필요한 경우가 아니라면 그 옵션을 삭제하는 것이 가장 빠른 해결책이다.

 

MultiViews 옵션은 아파치 설정파일(httpd.conf)에서 <Directory> 파트에서 찾을 수 있다. MultiViews로 검색해 볼 수도 있다. 만약 MultiViews가 검색되지 않는다면? 그리고 만약 당신이 최근에 Apache를 업그레이드 했고 그 이후부터 저 에러가 발생되기 시작한 것이라면 /etc/httpd 폴더에서 conf.d 와 같은 설정 파일을 모아놓는 폴더를 살펴보면 높은 확률로 저 옵션을 찾을 수 있다.

 

최근의 아파치는 /etc/httpd/conf.d/userdir.conf 에 아래와 같은 옵션이 기본적으로 들어간다.

 

<Directory "/home/*/public_html">
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS

</Directory>

 

여기서 MultiViews를 지우고 아파치를 재시작해보자.

 

원문 참고: http://defindit.com/readme_files/apache_13_error.html

댓글0