2012-09-12

FreeBSD]사용자 로그인 컨트롤


사용자 로그인 컨트롤

Michael Lucas 저.
OpenBIRD, Inc. mailto:editors@openbird.com 역.

어떤 서버들은 각기 다른 목적으로 수백명이 사용하기도 합니다. 이들 각자에게 서로 다른 권한을 부여하고 싶을 땐 어떻게 할까요? FreeBSD는 몇가지 방법으로 사용자의 접근을 컨트롤 할 수 있습니다. /sbin/nologin은 어카운트 제한에 유용한 프로그램입니다. 더욱 일반적인 컨트롤은 /etc/login.access로 가능합니다.
여러분이 접하는 일반적인 경우중 하나는 사용자 ftp 억세스는 가능하게 하고 telnet 억세스는 못하게 하고자 할 경우입니다. 이것은 /sbin/nologin을 이용하여 간단히 해결할 수 있습니다. /sbin/nologin이 login shell로 지정된 사용자는 telnet과 SSH 접속이 불가능 한 반면 /etc/shells에 /sbin/nologin를 추가하면 ftpd를 통한 접속은 가능하게 됩니다.
사용자의 login shell이 /sbin/nologin로 지정 되었을때 telent과 SSH의 요구에 대해 아래와 같은 결과가 나오게 됩니다. :

  login: loserusername
  Password:
  Last login: Tue Mar 27 20:33:59 from localhost
  Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
    The Regents of the University of California. All rights reserved.

  FreeBSD 5.0-CURRENT (TURTLEDAWN) #3: Wed Mar 28 14:24:46 EST 2001

  This account is currently not available.
  Connection closed by foreign host.

이런 방식이 가진 문제점은 이미 시스템이 커넥션을 수행하고 해당 사용자에 대한 환경을 구축한다는 것입니다. shell을 셋팅하는 것은 이미 어느 정도의 프로세서 타임을 사용한 후에 행해지며, 사용자가 shell을 사용할 수 없다라는 것을 인식했을 때는 이미 많은 작업을 수행한 후 입니다.
CPU time이 문제되지 않는다면 /sbin/nologin만으로도 충분합니다. 이것은 유닉스 세계에선 이미 인정받은 보편적인 방법이며 거절당한 커넥션을 /usr/ports/sysutils/no-login에 로그로 남길수 있는 한층 진보된 버젼까지 나왔습니다.
그래도 덩치가 큰 설치작업에선 /sbin/nologin을 사용하는 것은 부담스러울수 밖에 없습니다. 사용자의 shell이 잘못 셋팅되는 경우는 관리자가 경험이 별로 없거나 일반적인 실수가 대부분입니다. FreeBSD는 /etc/login.acess 파일을 사용하여 훨씬 더 쉽게 할수 있습니다. 여러분이 FreeBSD 시스템에 연결을 시도할때 마다 login.access 파일을 체크됩니다. login.access를 적절하게 구성해 놓았다면 여러분이 필요한 모든 기능을 좀더 쉬운 방법으로 얻을수 있습니다.
/etc/login.access을 한번 보시기 바랍니다. 콜론으로 구별되는 세개의 필드가 있습니다. 첫번째 부분은 로그온을 할 수 있는 권한을 주거나(+) 안주거나 (-)를 결정합니다. 두번째 부분은 사용자나 그룹의 리스트입니다. 세번째 부분은 커넥션 소스의 리스트입니다. 이 파일은 "all"과 "all except" 구문을 사용하여 관리자가 기본적인 규칙을 만들수 있습니다.
시스템이 그룹과 커넥션 소스 둘 모두에 해당되는 첫번째 규칙을 찾으면 즉시 커넥션을 허락 또는 거절합니다. 따라서 규칙의 순서가 매우 중요합니다.
예를 들어 "wheel" 그룹의 멤버들과 root에게 console로 로그온 할수 있게 하려면 다음과 같이 사용하면 됩니다:

  +:wheel root:console

이 규칙의 재미있는 점은 다른 규칙들 또한 계속 진행된다는 것입니다. 다른 것들은 거절한다고 하는게 아니라 단지 이것들은 허락한다고 말하는 것입니다. 결국, console로 로그인을 시도하는 Joe Average는 이 규칙에 해당되지 않습니다. 이와 반대로 사용한다면 여러분은 좀 더 빨리, 관리자의 에러 위험을 덜면서 커넥션을 거절할 수 있습니다.

  -:ALL EXCEPT wheel root:console

Joe Average는 이 규칙에 해당되므로 그가 접속하면 바로 거절당합니다. 이런 규칙은 의도하지 않은 접속을 막아주며 뒤에 해당되는 규칙이 있는지 생각할 여지를 주지 않습니다. 허용하는 계정보다 거절해야 하는 계정을 리스트에 사용하는 게 더 좋습니다.
마지막 필드인 커넥션 소스는 상당히 다양하게 사용할 수 있습니다. 여기에는 여러가지 다른 타입을 사용할 수 있습니다: 호스트 네임, 호스트 어드레스, 네트워크 번호, 도메인 네임, LOCAL, 그리고 ALL 등.
먼저, ALL은 항상 해당되며 아래에 보는 것 처럼 EXCEPT와 함께 사용하여 특별한 의미를 나타냅니다.
호스트 네임은 DNS 와 hosts 파일에 따릅니다.

  -:ALL EXCEPT wheel:fileserver.mycompany.com

wheel 그룹은 파일 서버를 통해 로그인 가능하지만 그 외는 아무도 안됩니다.
DNS에 상관없다는 것 빼고는 호스트 어드레스도 비슷합니다. 만약 네임서버가 언제 해킹당할 지 걱정된다면 아마도 네임서버를 사용하길 원치 않을 것입니다.

  -:ALL EXCEPT wheel:169.254.8.3

아래의 경우는 .로 끝나는 모든 네트워크 번호가 해당됩니다.:

  -:ALL EXCEPT wheel:169.254.8.
         
만일 여러분의 방화벽에 관리 워크스테이션에서 들어오는 것을 제외한 모두를 접근금지시키고 싶다면 이렇게 할수도 있습니다.

  -:ALL EXCEPT wheel:ALL EXCEPT 192.168.89.128 192.168.170.33
         
가장 복잡한 것은 LOCAL입니다. 이것은 '.' 없는 호스트 네임은 모두 해당되며 일반적으로 로칼 도메인의 호스트들만을 의미합니다. 예를 들어 서버  www.blackhelicopters.org에서의 LOCAL의 의미는 "blackhelicopters.org"에 있는 모든(any) 호스트를 나타냅니다. 반면 접속하는 호스트가  "pedicular.blackhelicopters.org"이라는 호스트 네임을 갖더라도 그것의 IP  address(reverse DNS된 IP)가 pedicular.home.net과 같이 blackhelicopters.org 이외의 호스트명으로 변환(reverse DNS) 된다면 그 호스트는 LOCAL에 포함되지 않게 됩니다. 이것은 reverse DNS를 이용하기 때문입니다.
그러면 우리는 어떻게 이 모두를 한번에 할 수 있을까요? login.access에 다음 한줄로 다른 모든 리모트 커넥션을 거절하면서 관리자들이 서버에 로그온 할 수 있습니다.
  -:ALL EXCEPT wheel:ALL
         
이런 것은 각자의 환경에 따라 다릅니다: 많은 회사들은 스태프 그룹을 가지고 있습니다. 저의 경우는 미리 "dns" 그룹(도메인 존 파일을 수정할 수 있는 사람들)과 "www" 그룹(웹 서버 구성들을 수정할수 있는 사람들)으로 미리 환경 셋팅을 해 놓습니다. 우리 login.access은 아래와 같습니다.

  -:ALL EXCEPT wheel dns www:ALL
         
제 시스템의 login.access 파일은 아래와 같습니다.:

  -:ALL EXCEPT wheel:console
  -:ALL EXCEPT wheel dns www:ALL
         
여러분이 허용된 그룹에 사용자를 추가하지 않는 한 사용자들은 로그인 할수 없게 됩니다. 사용자의 login shell을 /sbin/nologin로 설정하는 것도 가능하지만 더 이상 필요치 않습니다. 천명의 사용자 계정을 수정하는 대신 하나의 파일을 건드리는 것으로 쉽게 해결되기 때문입니다.

댓글 없음:

댓글 쓰기