들어가며
간혹 어떤 사이트 또는 페이지에 접속하면 아이디와 비밀번호를 요구하는 경우가 있습니다. 워드프레스의 경우 워드프레스 내의 기능을 통해 사이트 또는 특정 콘텐츠에 접근하지 못하도록 비밀번호로 보호할 수 있을 것입니다(이 글 하단 참조). 여기서는 특정 하위 폴더에 접근하지 못하도록 비밀번호로 보호하는 방법을 살펴보겠습니다.
예를 들어, 저는 특정 폴더에 중요한 백업 자료를 보관하고 있습니다. 사용자들이 함부로 접속하면 중요한 자료를 다운로드해갈 수 있을 것입니다. 이것은 제가 원하는 바가 아니죠. 먼저는 전면적으로 액세스를 차단하는 방법이 있을 것입니다. 이 경우 .htaccess 파일을 해당 하위 디렉터리에 만들고 다음 코드를 추가합니다.
Deny from all
또 다른 방법으로 특정 폴더 내의 폴더를 열람할 수는 있지만 파일 다운로드가 되지 않도록 할 수 있습니다. 이 경우 .htaccess 파일을 만들고 다음 코드를 추가하도록 합니다.
<FilesMatch ".*"> Order Allow,Deny Deny from All </FilesMatch> // Source: stackoverflow
nginx 서버의 경우 이 글을 참고해보시기 바랍니다.
웹사이트 또는 하위 디렉터리를 비밀번호로 접속 제한하기
이제는 아이디와 비밀번호로 보호하는 방법에 대해 살펴보도록 하겠습니다. 해당 하위 폴더에 다음과 같이 .htaccess 파일과 .htpasswd 두 개의 파일을 만들도록 합니다.
.htaccess 파일
.htaccess 파일에는 다음과 같은 코드를 추가하도록 합니다.
AuthType Basic AuthName "restricted area" AuthUserFile /absolute_full_path/.htpasswd require valid-user
/absolute_full_path/는 절대 경로가 되어야 합니다. 절대 경로를 잘 모르는 경우 다음과 같은 PHP 스크립트를 사용하여 절대 경로를 확인할 수 있습니다.
<?php $path = getcwd(); echo "This Is Your Absolute Path: "; echo $path; ?>
.htpasswd 파일
.htpasswd 파일에는 다음과 같이 각 라인에 ID:비밀번호 형식으로 추가합니다.
username:password
사용자 이름과 비밀번호(암호)는 콜론(:)으로 구분합니다. 여기에서 비밀번호는 암호화됩니다. SSH 셀에서 사용자 이름과 비밀번호를 생성해줄 수 있습니다(참고). 하지만 번거로운 작업이 될 수 있습니다. 이 사이트의 툴을 사용하여 암호화된 비밀번호를 생성할 수 있습니다.
Username과 Password를 입력한 후에 "Generate User/Pass"를 클릭하면 Result에 암호화된 비밀번호가 "Username:Password" 형식으로 표시됩니다. 그대로 복사하여 .htpasswd 파일에 추가하면 됩니다.
이제 해당 서브 디렉터리 주소를 브라우저에 입력하여 Enter를 누르면 다음과 같이 사용자 이름과 비밀번호를 요구하는 창이 뜹니다.
이상으로 SSH 셀에 접속하지 않고 간단하게 .htaccess 사용자 이름과 비밀번호를 생성하는 방법을 살펴보았습니다.
참고 - 워드프레스 사이트에서 비회원이 접속하면 로그인 페이지로 이동시키기
워드프레스에서 비회원이 접속하면 로그인 페이지로 이동하도록 하는 방법에 대한 문의를 가끔 봅니다. 여러 가지 방법이 있습니다. UserPro와 같은 플러그인을 사용하면 사이트 전체를 잠그는 기능이 있습니다. 이 플러그인은 강력한 사용자 관리 기능을 제공하므로 이런 간단한 기능을 위해 설치하는 것은 낭비(?)가 될 것 같습니다.
이와 같은 기능만 하는 간단한 플러그인으로 Redirect to login if not logged in 플러그인이 있습니다. 하지만 이 플러그인은 업데이트된지 오래되어 최신 워드프레스 버전에서 제대로 작동하지 않을 가능성도 있습니다.
가장 간단한 방법은 후크(필터/액션)를 사용하여 게스트를 로그인 페이지로 이동시키는 것입니다. 이에 대한 자세한 내용은 이 글을 참고해보시기 바랍니다. 링크된 글에 나오는 코드를 응용하여 적절히 수정해주면 됩니다. 가령 비로그인 사용자를 체크할 경우 if ( !is_user_logged_in()) 코드를 사용하면 됩니다.
저는 오랫동안 웹하드를 이용해왔는데 최근에 웹하드를 갱신하지 않고 이 방법을 사용하여 웹 호스팅 서버의 공간을 웹하드 대용으로 사용하고 있습니다. 큰 파일을 보낼 때는 지메일을 사용하고 중요한 파일 백업용도로는 이 방법을 사용합니다.