우분투 Nginx 디렉토리 폴더에 암호 거는 방법

WEB

우분투 Nginx 디렉토리 폴더에 암호 거는 방법

우성군 0 12213 0

1. 들어가며


최근에 Zend OPcache와 Memcached를 깔고 GUI로 잘 보고 있는데요. (관련 링크:결국 Zend OPcache와 memcached로 정착했네요.)


이게 아무래도 보안이 걸려있는게 좋을 것 같아서 찾아보게 되었습니다.


전체적인 내용은 관련링크1을 번역한 수준이므로, 정확하게 보시려면 관련링크를 참조하세요.



2. 암호가 저장 될 폴더 생성하기


우선 암호파일이 저장될 공간을 지정하는 것이 좋습니다.


웹에서는 원천적으로 접근이 불가능한 곳이 좋죠.



nginx를 쓰니깐 /etc/nginx/passwd 이 경로로 넣겠습니다.



mkdir /etc/nginx/passwd


위 명령어로 폴더를 만듭니다.


물론 본인이 원하는 폴더에 넣어도 상관없습니다. 위 경로는 단지 예시입니다.



3. 암호파일 생성하기


암호파일을 만드는 방법은 크게 두가지가 있습니다.



(1) 아파치의 htpasswd 명령어를 이용하면 됩니다.


그런데 아파치를 깐적이 없다면


htpasswd


위 명령어를 내릴 때


-bash: htpasswd: command not found


위와 같이 그런 명령어가 없다고 합니다.



apt-get install apache2-utils


그러면 위 명령어로 아파치 관련 유틸을 깔아줘야겠죠.


이제 htpasswd 명령어를 쓸 수 있습니다.



htpasswd -c /etc/nginx/passwd/.htpasswd woosung


위 명령어는 woosung이라는 user의 암호를 .htpasswd라는 암호파일에 생성(-c옵션)한다는 말입니다.


암호를 2번 물어봅니다. 같은 암호 두번 넣으면 되구요.


참고로 -c는 처음에만 쓰면 되고, 


다른 유저의 암호를 추가하고 싶다면 -c 옵션을 빼면 됩니다.


만약에 기존 유저가 있을 때 -c 옵션을 쓴다면 기존유저의 암호정보는 날아갑니다.




(2) 아파치 명령어를 쓰기 싫거나, 패키지를 깔 상황이 아니라면, 파이썬 스크립트를 사용해도 됩니다.


cd /usr/local/bin


wget http://trac.edgewall.org/export/10791/trunk/contrib/htpasswd.py


chmod 755 /usr/local/bin/htpasswd.py


위 명령어를 한줄씩 실행하면 됩니다.



htpasswd.py -c -b /etc/nginx/passwd/.htpasswd woosung woopasswd


위와 같이 -c와 -b 옵션을 같이 쓰는데요.


-c는 생성입니다. 앞선 아파치명령어와 같습니다.


암호 파일이 없을 때 생성하며, 있어도 덮어쓰므로 기존 유저의 암호 정보는 날아갑니다.


그리고 -b 옵션은 woosung이라는 유저이름으로 woopasswd라는 암호를 저장한다는 옵션입니다.


아파치 명령어와는 달리 암호를 물어보지 않습니다.



그리고 해당 암호파일에 유저를 추가하려면 -c옵션만 빼면 됩니다.



4. 암호파일 권한 설정하기


참고로 .htpasswd 처럼 파일 앞에 .이 있으면 숨김파일이 됩니다.


chmod 640 /etc/nginx/passwd/.htpasswd


위와 같이 640으로 주면 나름 안전하게 보관 가능합니다.



5. Nginx에서 설정하기


이제 특정 폴더에 암호를 걸어보겠습니다.


홈페이지의 root는 /var/www 로 설정하고, 암호를 걸고 싶은 폴더는 /var/www/test 라고 지정하구요.



nano /etc/nginx/sites-available/default


위와 같이 nginx설정에 들어가서



server {

       listen 80;

       server_name www.example.com example.com;

       root /var/www;

[...]

       location /test {

                auth_basic "Restricted";

                auth_basic_user_file /etc/nginx/passwd/.htpasswd;

       }

[...]

}



위와 같이 location /test 부분만 넣어주면 끝입니다. 완전 쉽죠?


만약에 root폴더부터 암호를 걸어주려면



server {

       listen 80;

       server_name www.example.com example.com;

       root /var/www;

[...]

       location / {

                auth_basic "Restricted";

                auth_basic_user_file /etc/nginx/passwd/.htpasswd;

       }

[...]

}


위와 같이 넣으면 됩니다.



이상 Nginx 디렉토리 폴더에 암호거는 방법에 대해서 알아보았습니다.

, , , , , , , , ,

0 Comments
Facebook Twitter GooglePlus KakaoStory KakaoTalk NaverBand