forbidden 오류는 여러 종류의 원인에 의해 나타날테지만요.
(1) 디렉토리 권한이 웹서버 권한으로 접근 불가인 경우
(2) .htaccess에서 접근을 막는 경우
(3) REST API 기능이 꺼져 있는 경우
이 두가지가 우선 의심됩니다.
디렉토리 권한 문제는 운영체제에서 지정한 디렉토리 접근 권한을 그룹이나 사용자별로 제한을 가하는 기능인데요. 외부인이 접근하지 못하게 하려고 설정하기도 합니다.
유닉스인 경우 owner-group-others 이 세가지로 구별됩니다. 보통 SSH나 SFTP에서 바꾸게 되는데 SSH에서는 웹서버 권한과 맞추어 저 셋중 하나를 7로 해놔야 합니다. 웹서버 권한이 www-data이고 그룹이 root라면 owner와 group을 7로 해두면 되고, 다른 권한은 5 정도로 해두면 됩니다. 7로 하면, 읽기-쓰기-실행(rwx)이 설정되구요. 5로 하면 읽기-실행(r-x)가 설정됩니다. 디렉토리인 경우에는 x가 설정되면 더 좋구요. 일반 스크립트 파일이면 r만 해놔도 읽히고, 디렉토리든 파일이든 쓰기 w가 설정되어야 forbidden이 안납니다. w는 2입니다.
https://en.wikipedia.org/wiki/Chmod
자세한 권한 표기는 위 링크를 참조하세요.
핵심은 owner 권한, group 권한, others 권한이 각각 지정되어야 한다는 것
읽기(4), 쓰기(2), 실행(1) 권한이 최대 7까지 지정가능하다는 것
디렉토리는 반드시 4와 1이 되어 있어야 접근이 되고
PHP나 JS, HTML, 이미지 파일은 읽기만 지정되도 되지만
대부분 웹서버 권한을 판단해서 700, 770 정도로 디렉토리를
PHP나 JS, HTML, 이미지 파일은 600, 660 정도로 해두면 좋고
때로는 707 도 추천하지만, others 권한은 많은 경우 0 으로 해두라는 것이네요
서버 환경에 따라 다릅니다.
.htaccess는 아파치 웹서버에서 설정을 추가하는 설정파일입니다. 가끔 이 파일에 사용자 접근을 불허하는 설정이 되어있을 수 있네요. 이 경우 검토해서 Deny, Allow 설정을 잘 바꾸면 해결됩니다.
아무것도 안건드렸는데 forbidden 오류가 난다면 대부분 REST API 기능이 꺼져서입니다. 구텐베르크 에디터와 일부 플러그인, 테마에서 설정 사항을 저장할때 REST API 기능에 의존하므로 꺼져있으면 작동을 안합니다. REST API가 보안에 안좋아서 꺼두는 플러그인들은 관리자 모드에서는 켜둔다는 표시가 나오는데 이경우에 이 표시대로 작동을 안해서 REST API가 필요한 경우에 forbidden 오류가 나죠. REST API를 켜두거나, 타플러그인으로 관리자 페이지에서만 허용하게 하면 해결됩니다.
대부분 REST API 문제일듯한데요. 경우에 따라 SSH나 SFTP를 다루다가 실수로 권한을 다르게 설정했거나, 테마나 플러그인이 해킹 용도로 개발되어 설치하고 활성화시 악성 코드가 실행되서일 수도 있습니다. 대부분 위 사항을 검토해보면 해결이 될 것이구요. 해킹을 받았다면 자료를 잘 백업하고 워드프레스를 재설치해야 할 수도 있습니다. 해킹이 아니라면 REST API부터 살펴보셔도 좋습니다.