웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > webdevetc

Apache2 permission error 해결하기

Last Modified : 2022-07-18 / Created : 2022-07-14
4,883
View Count


안녕하세요 EnSSo입니다 :)
최근 오랜만에 로컬 개발 환경에 apache를 사용하여 웹서버를 구축한 후 브라우저를 확인해보니 permission 에러가 발생하였습니다... 이에 대하여 원인과 해결 방법을 간단하게 알아보려고합니다.



# apache 퍼미션 에러 해결하기


우선 permission 에러가 발생했으므로 파일과 폴더의 소유자(owner)와 apache 서버의 접근 권한을 확인이 필요하겠다고 판단했습니다~

1. 파일 및 폴더의 소유자(owner)를 확인
2. apache 서버의 접근 권한


아마 위 두 가지 원인 중 하나일 가능성이 매우 높다고 판단했죠. 그래서 가장 먼저 해당 경로의 그룹과 소유자를확인해보니 root 등이 아닌 정상 접근이 가능한 상태였습니다. 첫 번째가 문제가 아니라면 역시 원인은 apache의 권한 설정을 확인해보면 해결될 확률이 90%이상 올라왔습니다!

apache의 권한 설정을 위해 설정 파일부터 찾아야합니다. apache2의 설정 파일 경로는 다음과 같습니다.
/etc/apache2/httpd.conf

설정 파일에서 해당 경로의 접근 권한이 잘 설정되어있는지 확인해봅니다. 경로에 따른 권한은 Directory 내부에 존재합니다.

<Directory /> 내부에서 설정된 권한 확인 가능

빠르게 확인해봐야죠~ 일단 정확한 권한 설정이 되어 있는지 확인이 필요합니다. 확인 방법은 만약 /home/myWebA에 접근 권한을 허용하도록 설정한 경우 아래와 같이 all granted가 필요합니다.
<Directory /home/myWebB>
AllowOverride None
Require all granted
</Directory>

위의 경우 all granted가 이미 설정되어 있더군요~ 다만 Directory 뒤의 경로가 myWebA가 아니였기 때문에 바라보고있는 경로가 달라 권한 에러가 발생했습니다. 즉 문제의 원인은 권한 설정의 경로가 잘못되었습니다... 이제 잘못된 경로 myWebB를 myWebA로 맞게 수정합니다. 이 후 apache2 서버를 재시작하니 권한 에러 없이 잘 동작하는군요!!
service apache2 restart

// Okay


위 이슈는 경로 문제였지만 만약 아니라면 권한 설정이 잘못되어 발생할 수 있겠습니다. 예를들어 all granted가 아닌 all denied로 설정되었을 수 있겠죠! 이 경우는 all denied를 all granted로 변경하면 됩니다.

@ 변경 전 all denied 상태
<Directory /home/myWebA>
AllowOverride None
Require all denied
</Directory>


여기까지 퍼미션 에러 해결에 대한 내용입니다. 아래는 이와 관련된 기타 내용 및 정보입니다.


[ 기타사항 ] 특정 ip, host만 apache에 접근 설정하기
Directory 내부에 ip, host를 사용하여 특정 ip나 host만 따로 설정할 수 있습니다.
<Directory /home/myWebA>
ip 0.0.0.0
host webisfree.com
</Directory>

또한 not을 사용하여 반대로 적용할 수 있겠습니다.
<Directory /home/myWebA>
not ip 0.0.0.0
not host webisfree.com
</Directory>

간단하게 특정 ip와 host만 설정되었습니다.


[ Deprecated Syntax ]
마지막으로 아래와 같이 Order, Deny 또는 Allow 문법은 deprecated된 이 전 버전에서 사용한 방법이니 참고차 알아두시기 바랍니다.
<Directory />
Order deny,allow
Deny from all
</Directory>

<Directory />
Order allow,deny
Allow from all
</Directory>

추가로 allow와 deny 사이에 띄어쓰기가 있는 경우 에러 발생합니다. 붙여서 쓰세요!

Previous

[nodejs] 서버 인코딩 Header utf-8 설정하기, 한글 이슈 해결

Previous

[NodeJS] mongodb find() 검색 쿼리시 대소문자 구분하지 않는 방법