날짜: 1996-05-15 | 글쓴이: 도아 | 8258 번 | 프린트 | 메일로보내기

제 15강 - 접근제한(Access Control)


이제 특정 데이터베이스에대한 접근을 특정 사용자로 제한하자. NCSA 계열의 서버는 온라인 데이터베이스와 연동시키는데 쉽게 적용할 수 있는 내장된 사용자 인증 기능을 가지고 있다. 방어란 ?

서버 인증 이론은 파일 시스템에 대한 접근을 처리하기 위해 고안되었으며, 서버 인증으로 특정 사람(또는 호스트)의 접근을 허가하거나 특정 사람(또는 호스트)의 접근 거절할 수 있다.

앞절에서 작성한 CGI는 검색 CGI와 삽입, 수정 CGI로 구성되어 있다. 검색 CGI는 누구나 접근해서 사용해도 무방하지만 삽입, 수정 CGI는 인증된 사용자만 접근할 수 있어야 한다. 검색용 CGI와 삽입, 수정용 CGI를 분리시킨 이유는 차차 알게되겠지만 근본적으로 현재 사용되고 있는 서버 인증 이론은 파일에대한 접근을 제어할 수 없기때문이다. 따라서 하나의 파일에 모든 기능을 삽입하는 경우 부가적인 절차가 필요하다. 개인인증 접근 제어 파일(Access Control File)

보호되어야 하는 스크립트가 존재하는 디렉토리에 .htaccess라고 불리는 파일을 생성하고 그 파일에 다음과 같은 내용을 둔다.

주의1: 전역-ACF 파일의 <Directory>에 아래의 내용을 두어도 동일한 효과를 얻을 수 있지만 이경우 서버를 재기동해야 하는 단점이 있다.

주의2: 이 기능을 사용하기위해서는 전역-ACF 파일의 Document Root 디렉토리의 AllowOverride옵션이 All로 되어 있어야 한다.

AuthUserFile /home/artech/.htpasswd 
AuthGroupFile /dev/null 
AuthName Test 
AuthType Basic 

<Limit GET POST> 
require user artech 
</Limit>

AuthUserFile에대한 적당한 이름과 디렉토리를 선택한다. AuthUserFile은 간단하게 생성할 수 있다. 그러나 가급적 이 파일을 .htaccess 파일과 함께 두지 않는 것이 좋다. 왜냐하면 이 파일은 해당 디렉토리를 접근을 제어하는데 사용되는 사용자 이름과 암호를 저장하고 있기 때문이다.

AuthGroupFile은 그룹파일을 지정함으로서 특정 그룹의 접근을 설정하는데 사용될 수도 있다. 이 것은 아래에 자세히 나와있다.

위에서 AuthName은 암호입력을 요구하는 대화상자에 나타나게될 폼의 이름이다. 암호파일

NCSA 계열의 서버는 htpasswd라고 불리는 프로그램을 포함하고 있다. 암호파일을 생성하고, 이 파일에 사용자를 추가하기 위해서는 암호 파일의 경로를 자신의 시스템에 맞추어 다음과 같이 실행한다.

htpasswd -c /home/artech/.htpasswd artech

주의: htpasswd 파일은 일반적으로 웹서버가 설치된 디렉토리의 support라는 디렉토리에 존재한다. support라는 디렉토리가 존재하지 않것나 이 파일을 CGI를 이용해서 생성하려면 Unix에서 제공하는 crypt라는 함수를 사용하면 된다.

위와 같이 수행하면, 암호 파일이 생성되며, artech라는 사용자가 추가된다. 이 경우 artech의 암호를 두 번 입력해야 한다.

이 파일 내의 사용자와 로컬 시스템의 사용자 사이에는 어떠한 관계도 없다. 로컬 시스템에 계정을 갖는 사용자는 로컬 시스템의 암호파일과 동일한(또는 다른) 사용자 명, 사용자 암호를 사용할 수 있다. 이러한 방법은 단지 원하는 디렉토리 내에 파일에대한 접근만 제어한다.

보호된 디렉토리내의 파일에 접근하려는 사용자에게 사용자의 브로우저는 암호입력을 요구하며 인증을 위해 이 것을 서버로 건네준다. 만약 사용자 이름과 암호가 암호파일에 존재하는 경우, 접근이 허용된다. 그룹인증

그룹에대해 사용자 인증을 하기위해서는 위에서처럼 htpasswd를 사용해서 암호파일에 사용자를 추가한다. 암호파일 있는 디렉토리(반드시 필요한 것은 아니지만 나쁜 생각은 아니다)에 접근을 허용할 사용자 명을 포함하는 그룹파일을 만든다. 일관성을 위해 이 파일을 .htgroups라고 이름 붙이고 다음과 같이 그룹이름과 사용자명을 포함한 그룹을 지정한다.

add-access: artech pumpkin peanuts almonds walnuts

.htaccess 파일을 다음과 같이 변경한다.

AuthUserFile /home/artech/.htpasswd 
AuthGroupFile /home/artech/.htgroups 
AuthName AddForm 
AuthType Basic 

<Limit GET POST> 
require group add-access 
</Limit>

필요에 따라 더 많은 그룹을 추가할 수 있다. 그룹 파일내의 사용자를 .htpasswd 파일에 추가하는 것을 잊지 말기 바란다. - 이들은 암호를 필요로 한다. 특정 파일의 제어

여기에 몇몇 기법이 있다. 특정 파일에 대한 접근은 제한할 수 없다. 단지 특정 디렉토리만 제한 할 수 있다. 만약 특정 파일의 접근을 제한하려면 위에서와 마찬가지로 보호된 디렉토리를 설정하고, 접근을 제한하려는 파일을 보호된 디렉토리에 두면 된다.

만약 서버를 Unix에서 기동하고 있다면, 훨씬 환상적이다. 이 예에서는 데이터 베이스를 가지고 있으며 사용자에게는 단지 데이터베이스의 검색만 가능하게 하려고 한다. dbupdate.cgi라고 부르는 하나의 스크립트는 데이터 베이스의 검색, 추가, 변경, 삭제와 같은 데이터베이스에 대한 모든 동작을 포함한다. 같은 스크립트에 필요한 모든 기능을 포함하고 있을 때 어떻게 한 기능만 접근하도록 제어할 수 있을 까 ? 프로그램의 여러 개로 나누는 대신 다음과 같이 하면된다.

빈 디렉토리를 만들고, 이 디렉토리에 대한 보안을 설정한다. 이 경우에 .htaccess 파일은 다음과 같아야 한다:

AuthUserFile /home/artech/.htpasswd 
AuthGroupFile /dev/null 
AuthName DBAccess 
AuthType Basic 

<Limit GET POST> 
require user artech 
</Limit>

이 디렉토리에 스크립트에 대한 단축 링크를 생성한다. 파일을 복사할 수도 있지만 왜 디스크의 공간을 낭비하겠는가? 이 디렉토리내의 유일한 파일은 .htaccess와 단축 링크이다.

마지막으로 원래의 프로그램이 아니라 단축 링크를 호출할 필요가 있다. 단축 링크에 대한 접근은 보호되지만 원래의 프로그램에 대한 접근은 제한되지 않을 것이다. 내 예제 스크립트는 다음과 같이 호출한다.

<FORM ACTION="http://qaos.com/cgi-bin/dbupdate.cgi/path"> 
<INPUT TYPE="submit" VALUE="검색">

URL로 정보를 전송함으로 영리한 크래커는 보호되지 않은 스크립트를 호출함으로서 보호기능을 접근할 수 있을 것이다.

이러한 가능성을 제거하기 위해 스크립트가 호출될 때 SCRIPT_NAME 환경변수를 검사하면 된다. 만약, 스크립트가 보호된 스크립트를 사용해서 호출되었다면, 보호된 기능을 쓸 수 있지만 만약 그렇지 않다면, 보호된 기능을 사용할 수 없다.

예를 들어 다음과 같은 펄 코드를 조사해보기 바란다.

if ( $ENV{'SCRIPT_NAME'} =~ [Regexp] ) { 
	$MyScriptUrl = [secure link]; 
	$form{'TABLE'} = 'Private_Sequences'; 
	$form{'TITLE'} = 'All Records';
} else {
	$MyScriptUrl = [public link]; 
	$form{'TABLE'} = 'Public_Sequences'; 
	$form{'TITLE'} = 'Public Records'; 
}

이것으로 보호되지 않은 스크립트로 보호된 기능을 호출하는 크래커를 막을 수 있다. 만약, 스크립트가 보호된 경로로부터 호출되지 않는다면, 보호된 기능을 사용할 수 없다.

주의: 일단 사용자가 사용자 명과 패스워드를 입력하면, 자신의 웹 브로우저를 종료하기 전까지 보호된 디렉토리의 모든 파일을 접근할 수 있다. 만약 사용자가 브로우저를 종료하고, 다시 기동한 후, 보호된 디렉토리로 접근하는 경우, 다시 사용자 이름과 암호를 입력해야 한다. 특정 호스트로(부터)의 접근 제한

.htaccess 파일의 또 다른 응용은 다음과 같다.

AuthUserFile /dev/null 
AuthGroupFile /dev/null 
AuthName ExampleAllowFromNCSA 
AuthType Basic 

<Limit GET POST> 
order deny,allow 
deny from all 
allow from .ncsa.uiuc.edu 
</Limit>

접근을 제어할 필요에 따라 allow와 deny 필드를 변경할 수 있다.

개인 사용자의 접근을 거절하기 위해서는 .htpasswd 파일에서 사용자 이름을 삭제하면 된다.



다음글: Part IV - CGI Security (5083)1996-05-31
이전글: 제 14강 - 도서관리 CGI - 소스 변경중 (5233)1996-05-14

세상사는 이야기

  • 찾아라! 아이폰 순정용 >
  • 만원대 피젯 스피너를 >
  • 망하는 길을 택한 쿠팡 >
  • 물놀이에 적당한 가성 >
  • 컴퓨터를 IPTV로 2, po >
  • 컴퓨터를 IPTV로 만들 >
  • Warning.or.kr도 우회 >
  • 한국의 100대 부자, 어 >
  • 세상을 바꾼 크롬: 크 >
  • 장난(?)으로 시작한 여 >


  • RSS 구독 (익명 | 회원 | 강좌 | 포럼)
    (C) 1996 ~ 2017 QAOS.com All rights reserved.