강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

리눅스웹암호인증및 튜닝에 관한 연구

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스웹암호인증및 튜닝에 관한 연구

 

주제

리눅스 웹암호인증 및 튜닝에 관한 연구

 

 

 


목차 

1. 특정페이지 암호인증법(Linux)

1-1. 사용자인증이란?

1-2. 인증사용을 위한 설정사항들

1-3. .htaccess 파일만들기

1-4. 인증사용자의 ID, 패스워드 생성하는 방법

1-5. 인증사용자 웹브라우즈로 확인하기

1-6. 보안에 유의할 사항


2. 아파치를 활용한 가상호스트 설정법

2-1. 가상호스트(Virtual Host)란?

2-2. 하나의 IP Address로 여러개의 가상호스트 설정하기

2-3. 각각의 IP Address별로 가상호스트 설정하기

2-4. Port별로 운용하는 가상호스트 설정하기

2-5. Default 가상호스트 설정하기


3. 아파치웹서버 튜닝 #1 : 아파치 성능향상을 위한 설정


4. 아파치웹서버 응답속도 및 성능테스트(밴치마킹)

4-1. 아파치웹서버 응답속도 및 성능테스트 개론

4-2. Apache Benchmarking tool의 버전확인 (-V 옵션)

4-3. Apache Benchmarking tool의 도움말 보기(-h 옵션)

4-4. 테스트할 세션수 지정 및결과 분석법(-n requests 옵션)

4-5. 동시에 여러 개의 세션 밴치마킹하기(-c concurrency 옵션)

4-6. KeepAlive 옵션 활성화하여 테스트하기 (-k 옵션)

4-7. 테스트에 사용할 최대 허용시간 설정(-t timelimit 옵션)

4-8. 헤드정보와 함께 출력하기 (-v 옵션)

4-9. 결과를 웹문서(HTML코드)로 출력하기 (-w 옵션)

4-10. 그외의 다양한 테스트 옵션들


                                                   작성자

                                 박   성   수

((주)수퍼유저코리아 대표이사)

papa@superuser.co.kr



1. 특정페이지 암호인증법(Linux)

1-1. 사용자인증이란?

홈페이지제작을 해보신 분이나 웹사이트관리를 해보신 분이라면 홈페이지전체나일부의 내용을 ID와 패스워드로 인증을 받은 후에 접속가능하도록 설정을 해보신 경험이 있으리라 생각합니다.

특히 상업적인 사이트나 고급회원에 대한 특별서비스등은반드시 그런 서비스를 받을 만한 자격을 (인증창을 통하여)검증받은 후에 이용할 수 있도록 해야합니다.

이는 경제학의 고객 차별화와 관계가 있는 것입니다.

즉 100개의 페이지로 되어 있는 페이지에서 60개의 페이지는 일반방문자 누구나 볼 수 있도록 하고 나머지 40개의 페이지에 대해서는 특정권한(가입등의 절차를 거친 고객)을 가진 고객들에게만 서비스되는 정보라고 할 경우에 무료로 회원등록을 하게하여 이런 정보를 제공한다고 하면 아마도 일반방문자들은 회원등록을 하게될지 모릅니다.

이렇게 등록한 고객과 등록하지 않은 일반고객과의 서비스에 대한 차이를 두어 등록고객에게는특별한 서비스를 받고 있다는 자부심을 줄 수 있도록하여 고객유치를 할 수 있도록 하는 정책입니다. 이런 사용자 인증을 통한 특정페이지 접속허용은 요즘 한창 떠오르고 있는 유료정보와 CP등에서 활용이 될 수 있는 것입니다.

위의 설명처럼 전체 페이지중의 일부만을 사용자인증을 통해 접속을 허용할 수 있으며, 또한 홈페이지 전체를 처음부터 사용자 인증을 통해 접속을 허용하게 할 수도 있습니다.

단 한가지 주의 할 점은 유료로 운영을 할 경우에는 등록절차를 거쳐서 접속을 하게될 가입자들의 개인정보와 ID 및 Password등의 개인정보를 철저하게 보호해야 한다는 것입니다.

이런 보안을 위해서 쿠키를 이용하는 것과 아파치에서 제공하는 다른 인증모듈을 통해 해결할 수가 있습니다.

후자의 예를 든다면 텍스트파일 인증모듈(mod_auth), DBM인증모듈(mod_auth_dbm), Berkeley DB 인증모듈(mod_auth_db), Anonymous 인증모듈(mod_auth_anon), PostgreSQL인증모듈등이 있습니다.

사용자 인증을 통해 접속을 허용하는 사이트를 운영하는 경우는 다음과 같은 웹사이트를 운용하려고 할 경우에 주로 쓰이고 있습니다.

- 회원제로 운영하는 사이트

- 특정그룹별로 접속을 허용하는 사이트

- 일반에겐 공개페이지를 사내직원에겐 업무용페이지를 보여주는 사이트

- 운영자용 페이지에 접속할 때

홈페이지 전체나 일부에 접근하려고 할 때에 다음과 같은 창이 뜨면서 ID와 패스워드를 입력하라는 창입니다.

 PIC1B0.gif


1-2. 인증사용을 위한 설정사항들

이런 인증작업을 하기 위해서 웹호스팅 사용자들은 다음과 같은 작업을 하셔야합니다. 특정페이지에 사용자암호를 걸기 위해서는 세개의 파일이 필요합니다.  즉, .htaccess와 .htpasswd 그리고 htpasswd이 그것입니다.

 .htaccess <- 점( . )주의

인증을 어떻게 할것인지에 대한 설정(인증방법 및 설정파일지정등)

직접만들어줘야함.(아래에서 설명됨)

htpasswd

위의 .htaccess의 내용을 기준으로하여 인증할 ID와 패스워드를 만들어주는  명령어(유틸리티)이며 이 명령의 결과 아래의 .htpasswd라는 파일이 생성됨.

아파치웹서버를 사용하는 서버사용자는 기본적으로 사용할 수 있음.(즉, 서버에 존재함)

  .htpasswd <- 점( . )주의

htpasswd라는 명령어의 결과 자동적으로 생성되며 인증받을 사용자의 ID와 패스워드가 저정될 파일. 물론 파일이름을 바꿔줄 수도 있음. 특정디렉토리에 대한 인증을 하기위해 고객분들이 해야할 작업내용과 절차는 다음과 같습니다.

     사용자인증을 할 디렉토리로 이동합니다. 

         .htaccess파일의 내용을 작성합니다.

         htpasswd 명령어(유틸리티)를 사용하여 허가할 사용자의 ID와 패스워드를 만든다. (htpasswd파일이 없을 경우에는 which등의 명령어를 사용하여 찾아본다.)

     웹브라우즈를 통하여 사용자인증이 되는지 확인해 본다.

설명드린 바와같이 첫 번째 파일(.htaccess)은 직접 만들어 주셔야 하며 두 번째 파일(.htpasswd)은 세 번째 유틸리티(htpasswd)를 이용해서 만들어 주면 됩니다.

그리고 세 번째 파일은 Linux의 경우에 보통 /usr/bin에 존재하며 이 디렉토리는 일반적으로 계정사용자에게 path로 잡혀있으므로 사용자들은 그냥 사용이 가능합니다.

참고로 htpasswd파일의 위치를 찾지 못했을 경우에 다음과 같은 명령으로 위치를 확인할 수 있습니다.

PIC1B1.gif

일반사용자의 경우에는 다음과 같이 which 나 whereis로 확인가능하며, 만약 시스템관리자일 경우에는 find라는 명령어로 파일의 위치를 확인할 수 있습니다.

PIC1B2.gif

위의 명령어는 루트디렉토리(/)에서부터 htpasswd라는 파일(-name)을 찾아서 (find) 보여달라(-print)는 명령입니다. 위에서 출력된 결과는 /usr/bin에 있다는 것입니다. 참고로 리눅스에서는 -print옵션을 사용하지 않아도 기본옵션이므로 -print 옵션이 적용됩니다.

1-3. .htaccess 파일만들기

.htaccess 파일은 사용자들이 직접 에디터(vi, 메모장등)를 이용해서 아래와 같이 만들어 주셔야 합니다.

텔넷으로 Linux나 UNIX시스템에 로그인 했다면 vi를 사용하고, vi 사용이 어려우신 분들은 PC에서 메모장을 열어서 만들어 주신 후에 ftp client(Ws_ftp, Cute_ftp등)를 이용하여 서버에 있는 자기계정의 사용자인증 할 특정디렉토리로 전송을 해 주셔야합니다.

이때 전송모드를 반드시 ASCII모드로 해주셔야 합니다.

.htaccess파일의 예가 아래에 있습니다. 여러분의 사용편의를 위하여 .htaccess파일의 작성예는 다음과 같으며, 아래의 파일내용중 AuthUserFile 내용만을 고객의 디렉토리 위치대로만 바꿔주시면 됩니다.

PIC1B3.gif

 ● AuthName "메뉴얼랜드"

인증창의 이름으로 임의로 지정가능 하며 보통은 홈페이지이름을 적는다.사용자는  회사이름이나 그룹이름, 홈페이지이름등을 적당히 적어주시면 됩니다.

AuthType Basic

인증타입은 일반적으로 Basic으로 합니다.

AuthUserFile /home/myid/www/.htpasswd

htpasswd유틸리티를 실행할 경우 이 파일(.htpasswd)이 생성됩니다.

AuthGroupFile /dev/null

그룹으로 인증확인을 할 경우에 그룹인증 파일명을 입력합니다.

<Limit GET POST>

GET방식과 POST 방식의 접근만을 허용하는 설정입니다.

require valid-user

인증된 사용자만이 접속을 허용하는 설정입니다.

</Limit>

닫기


1-4. 인증사용자의 ID, 패스워드 생성하는 방법

이제 htpasswd라는 명령어를 사용하여 인증받을 사용자를 생성하도록 하겠습니다. 즉 htpasswd라는 명령어를 사용하여 .htpasswd라는 파일을 만들어 줘야합니다.

이 파일(.htpasswd)은 인증 할 사용자의 ID와 패스워드리스트를 보관하고 있는 파일이며, 해당 페이지로 접근하려할 때 인증창이 뜬 후에 이 파일에 있는 ID와 패스워드를 맞게 입력하면 접속을 허용하게되고, 그렇지 않으면 접속허용을 불허하게 됩니다.

이 파일은 바로 앞에서 생성한 .htaccess파일내의 "AuthUserFile"항목에서 지정했던 파일과 같은 디렉토리 위치(/home/sspark/www)에 동일한 파일이름(.htpasswd)으로 존재해야 합니다.

이 파일의 위치가 정확히 지정되지 않아서 인증창이 뜨지 않는 경우가 많으므로 정확히 확인하도록 하십시요. 그럼 이제 .htpasswd 파일을 만들어 보겠습니다.

PIC1B4.gif

처음으로 사용자를 생성할때에는 반드시 -c옵션을 사용해야합니다.

-c 옵션은 한번만 사용하시고, 이후에는 옵션없이 그냥 사용하시면 됩니다.

만약 위의 명령의 결과가 "No such file or directory" 라면 이는 htpasswd명령어를 찾지 못하는 경우이며, which나 whereis등의 명령어로 확인 한 후에 path가 잡혀있지 않다면 절대경로로 명령어를 사용하셔야합니다.

예를 들어 파일의 위치가 /usr/sbin이라면 절대경로로 명령을 사용하는 경우의 예는 다음과 같습니다.

$ /usr/sbin/htpasswd -c .htpasswd webmaster

위의 명령어가 정상적으로 종료되었다면 .htpasswd파일이 생성되었을 것입니다. htpasswd파일은 점(.)으로 시작하는 숨겨진파일이므로 그냥 ls로는 볼 수가 없습니다. 따라서 -a옵션과 함께 사용하셔야만 보실 수가 있습니다. 아래의 예처럼 "ls -al"로 확인 해야만 .htpasswd파일을 볼 수 있습니다.

PIC1B5.gif

그리고 "cat .htpasswd"라는 명령어는 위에서 등록한 webmaster라는 사용자를 등록한 후에 정상적으로 등록이 되어있는지를 확인하는 것입니다. 사용자를 등록할 때마다

.htpasswd 파일에는 ID와 암호화된 Password가 누적되어 입력됩니다.

암호는 cript()라는 함수를 사용하여 생성하게 됩니다.  이후에는 -c라는 옵션없이 htpasswd라는 명령어를 사용하여 사용자를 계속 추가해 주시면됩니다.  사용자를 추가생성 할 때에는 다음과 같은 형식으로 사용하면 됩니다.

형식 : htpasswd .htpasswd 등록할사용자ID

이런 형식으로 명령을 실행한 다음에는 아래의 예에서 보는 바와 같이 패스워드의 입력과 재확인을 하면 등록이 완료됩니다.

PIC1B6.gif

위의 예에서 sspark, minoz, hokiz 사용자 세명을 추가등록 하였습니다. 이들 명령어를 잘 보시면 명령의 형식이 모두 동일하다는 것을 알 수 있습니다. 그리고 마지막에 cat으로 생성한 ID와 패스워드를 확인해 보았습니다. 자, 그럼 인증에 사용할 ID와 패스워드를 처음등록하는 방법과 추가로 등록하는 방법에 대해서 알아보았는데 한가지 궁금한 것이 생겼습니다. 원하는 자기의 고객이 사용하는 패스워드를 여러 가지 이유로 인하여 바꿔달라고 요구할 수 있습니다. 사용자의 패스워드변경은 어떻게 하면될까요?

대답은 의외로 간단합니다. 바로 앞에서 사용자를 추가하는 방법 그대로 해 주시면됩니다.

단 패스워드를 입력할 때 사용중인 기존의 패스워드 대신 원하는 패스워드를 입력하면됩니다. 아래의 예를 보십시요.

PIC1B7.gif

보시는 바와 같이 사용자를 추가생성하는 방법과 사용중인 ID의 패스워드를 변경하는 방법은 동일하다는 것을 알 수 있습니다.


1-5. 인증사용자 웹브라우즈로 확인하기


드디어 위에서 생성한 인증사용자를 웹브라우즈로 확인할 때가 왔습니다.

정상적으로 작업이 완료되었다면 해당 페이지로 접근하려고 할 때 다음과 같은 창이 뜰 것입니다.

PIC1B8.gif

보시는 이 창에서 앞에서 등록한사용자의 ID와 패스워드를 입력하면 원하는 페이지로 들어갈 수가 있습니다.

만약 등록이 되어있지 않은 사용자나 등록된 사용자의 암호를 3회이상 잘못 입력했을 경우에는 access.conf 파일의 해당디렉토리 인증부분에 "ErrorDocument 401 "죄송합니다. 가입인증이 되지 않았습니다."와 같은 설정을 해 두었기 때문에 다음과 같은 에러메시지 창이 뜰 것입니다. 이런 간단한 메시지 뿐만아니라 html파일을 지정해서 에러 안내페이지로 사용할 수도 있습니다.

PIC1B9.gif


1-6. 보안에 유의할 사항

htpasswd 유틸리트를 이용하여 사용자 인증을 하는 경우에 다음의 보안사항에 유념해야 합니다.  이 글을 쓰고 있는 이 순간 "보안사항"에 대해서 언급을 하는 것이 옳은 것이지, 아니면 옳지 않은 것인지에 대해서는 확신할 수 없지만 이 부분에 대해서는 알만한 분들은 다들 알고 계실 것이라 생각합니다.

여기서 말씀드리는 보안이라는 것은 이 사용자인증에 대한 부분에 국한된 것이 아니라 모든 웹사이트의 공통적인 문제라고 할 수 있습니다.

다음의 웹브라우즈로 확인 가능한 웹브라우즈창 두 개를 잘 살펴보기시 바랍니다.

PIC1BA.gif   PIC1BB.gif

어떻습니까?  좀 전에 만들었던 .htaccess파일의 내용과 .htpasswd파일의 내용이 웹브라우즈에서그대로 보이지 않습니까?  누구나 이런 것이 가능하다는 것은 아닙니다.

암호와 패스워드로 사용자 인증을 거친 후에는 이렇게 확인이 가능하다는 것입니다.

즉, 인증을 거치고 난 뒤에 "http:도메인/해당디렉토리/.htaccess" 이런식으로 웹에서 불러보면 .htaccess에 있는 인증옵션과 .htpasswd에 어떤 사용자들이 있는가를 볼 수 있다는 의미입니다.

물론 패스워드는 cript()라는 함수로 암호화 되어 있지만, 크랙(crack) 같은 툴(프로그램)을 사용하면 조금의 노력으로 패스워드를 알 수가 있기 때문에 위험하다고 할 수 있습니다.

그럼, 어떻게 하면 이런 낭패를 당하지 않게 할 수 있을까요?

방법은 두가지가 있습니다.

첫 번째 방법은 default로 지정된 .htpasswd 파일이름 대신에 다른 이름을 사용하는 것이고, 두 번째는 .htpasswd 파일을 사용자의 홈페이지 디렉토리의 이전디렉토리에 두면 이런 낭패쯤은 방지가능합니다.

웹호스팅서비스를 이용하는 고객의 예를 들어 본다면 다음과 같이 할 수 있습니다.

    .htpasswd 파일 대신에 .kingpasswd를 사용합니다.(임의지정가능)

        /home/sspark/www 대신에 /home/sspark/pw/ 디렉토리에 .kingpasswd를 저장하여 사용합니다.

계정가입자의 홈디렉토리가 /home/sspark/www이므로 웹으로 확인가능한 곳은 이디렉토리 이하가되므로 웹으로는 도저히 확인할 길이 없어지는 셈입니다.

자기가 운용 및 관리하는 사이트가 유료로 운용되고 있다면 이정도의 보안으로도 부족하지만 최소한의 보안을 하여 등록된 사용자를 보호하는 것이 사이트관리자의기본의무가 아닐까합니다.



2. 아파치를 활용한 가상호스트 설정법

2-1. 가상호스트(Virtual Host)란?

웹서버에는 기본적으로 존재하는 호스트가 있습니다.  이를 웹서버의 주호스트(main host)라고 합니다.  하나의 웹서버에는 주호스트 외에 별도의 홈디렉토리를 가진 여러개의 호스트를 설정하여 운용할 수 있습니다. 주로 웹호스팅 서비스에 사용되며 주호스트외에 나머지 호스트들을 모두 가상호스트(virtual host)라고 합니다.

이런 가상호스트를 가장 적절하게 이용하는 것이 웹호스팅 서비스입니다.

웹호스팅 서비스를 하려면 하나의 서버에 여러 가입자를 수용해야 하는데 이때 아파치 웹서버의 가상호스트로 설정하여 운용하면 해결할 수 있습니다.

물론 다른 웹서버에도 이런 기능은 있으며 설정하는 방법에는 조금씩 차이가 있습니다.

이런 가상호스트에는 몇가지 종류가 있습니다. 즉, 다음과 같은 종류가 있습니다.


이름기반의 가상호스트(Name-based virtual host)
주소기반의 가상호스트(IP-based virtual host)
포트기반의 가상호스트(Port-based virtual host)
기본 가상호스트(Default virtual host)

위의 네가지 경우 모두 하나의 물리적인 서버에서 운용된다는 것과 다수개의 가상호스트를 운용한다는 것을 전제로 합니다.

이름기반의 가상호스트는 하나의 IP Address에 여러개의 가상호스트를 운용하는 것이며, 주소기반의 가상호스트는 가상호스트 각각에 하나씩의 IP Address를 할당하여 운용하는 것이고 포트기반의 가상호스트는 하나의 동일한 호스트에 포트만 다르게 지정하여 운용하는 것입니다.

그리고 마지막 기본 가상호스트는 설정되어있는 어떤 호스트도 해당사항이 없는 호스트의 로딩요구를 받았을때 기본으로 응답하게 될 호스트를 지정하게 됩니다.

자 그럼 위에서 제시한 4가지 방법의 가상호스트 운용방법을 하나씩 배워보도록 하겠습니다.


2-2. 하나의 IP Address로 여러개의 가상호스트 설정하기

일명 이름기반의 가상호스트(name-based virtual host)라고 합니다.

이름기반의 가상호스트는 하나의 IP Address에 여러개의 가상호스트를 사용하는 것이며 이 방법이 가장 보편적인 방법입니다.

인터넷 사용인구의 급격한 증가로 인하여 IP Address가 많이 필요하게 되었고 급기야는 IP Address가 모자라는 지경에 이르게 되었습니다.

이런 시점에서 웹호스팅 사업등과 같이 하나의 서버에 여러개의 웹서버를 운용해야하는 오늘날의 여건에는 이름기반의 가상호스트가 가장 적절하다고 할 수 있습니다.

아래의 예는 하나의 IP Address(168.126.72.51)에 3개(A, B, C)의 가상호스트를 설정한 것입니다.

PIC1BC.gif


2-3. 각각의 IP Address별로 가상호스트 설정하기

일명 IP Address기반의 가상호스트(IP-based virtual host)라고 합니다.

웹호스팅 사업을 하는 초기에 사용된 방법으로 주소기반의 가상호스트는 하나의 시스템에 여러개의 IP Address를 할당하여 가상호스트에 각각 하나씩 할당하여 운용하는 것입니다.

가입자에게 각각 하나씩의 IP Address를 할당하는 주소기반의 가상호스트로 웹호스팅등의 서비스를 하려면 IP Address의 개수를 수용할 가입자 수 이상 확보를 해 둬야 합니다.

약 1년전 까지만 해도 대부분의 웹호스팅업체에서는 주소기반의 가상호스트로 운용을 했었습니다.

하지만 인터넷의 활용인구가 급속히 늘어난 현재 웹서버등의 수요와 함께 IP Address에 대한 수요도 급팽창하게 되어 IP Address를 확보하기가 어려워 졌습니다.

웹호스팅서비스의 초기 시절에는 주소 기반의 가상호스트로 서비스를 했으나 현재는 이름기반의 가상호스트로 운용을 하지 않을 수 없는 실정이 되었습니다.

하지만 이름기반의 가상호스트보다도 더 안정적이고, 더 효율적이며 관리하기도 편한 것이 주소기반의 가상호스트입니다.

아래의 예는 3개의 가상호스트에 각각 하나씩의 IP Address를 할당하여 운용하기위한 설정입니다.

PIC1BD.gif

이 경우에 서버의 기본 IP Address인 168.126.72.51은 주호스트인 ciss9.kornet.net(가)으로 할당하고 첫번째 가상호스트인 www.manualand.co.kr(나)은 168.126.72.52에 할당하였습니다. 그리고 두 번째 가상호스트인 www.hyung.co.kr(다)은 168.126.72.53에 할당하였습니다.  이로써 각각의 웹사이트를 하나의 물리적인 서버에서 별도로 관리할 수 있는 것입니다.


2-4. Port별로 운용하는 가상호스트 설정하기

일명 Port기반의 가상호스트(Port-based virtual host)라고 합니다.

포트기반의 가상호스트는 하나의 웹서버에서 기본포트 80번은 주호스트로

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,850 개
  • 현재 접속자 :  100 명