RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'Learning Linux/Security'에 해당되는 글 23

출처 : 대전국제IT교육센터 정성재 강사

 

1. ipchains란?
리눅스커널 2.2버전 이상에서 부터 사용하는 일종의 방화벽(firewall)이다. 커널에서 들어오고 나가
는 패킷을 선택적으로 구별하는 필터링을 한다. 이 필터링에 규칙을 정하고 자신만의 규칙에 맞게 조
절할 수 있는 것이 ipchains이다. 이것을 이용하여 리눅스서버에 강력한 IP보안 기능을 설정할 수 있
고, 리눅스 박스를 GATEWAY화하여 많은 클라이언트와 다른 서버를 보호할 수 있다.
(참고) ipchains의 버전확인
/sbin/ipchains --version


2. ipchains의 기본구조
(1) 개요: ipchains는 논리적인 3개의 사슬(Chains)으로 구성되어 있고 각각 Input, Forward,
          Output체인이라는 이름을 가지고 있다. 또한 새로운 사용자 정의사슬도 만들 수 있다.
(2) 구성
   1) input체인   : 리눅스박스를 향해 들어오는 패킷들이 거치는 체인
   2) forward체인 : 리눅스박스를 거쳐 output체인을 향하는 체인
   3) Output체인  : 리눅스박스를 나가는 패킷들이 들어가는 체인
(3) 연결단계
    Input Chain => Forward Chain => Output Chain

3. ipchains의 정책(Policy)
(1) 개요: ipchains의 정책이라는 것은 패킷을 어떻게 처리할 것인가를 의미한다. 패킷의 처리는
          크게 수용할 것이냐 거부할 것이냐 두가지 정책이지만, 실질적으로는 ACCEPT, REJECT,
          DENY 세가지 정책이 관리한다. 기타정책으로는 MASQ등이 있다.
(2) 기본정책
   1) ACCEPT : 패킷을 수용한다.
   2) REJECT : 거부메시지와 함께 거부한다.
   3) DENY   : 메시지를 보내지 않고 상대를 무시한다.
   4) 기타
    ㄱ. MASQ : IP 매스커레이딩(Masquerading)에 사용하는 정책이다. 이 정책은 반드시 FORWARD
              사슬에서만 존재한다.

4. 사슬(Chains)의 이용
(1) 개요: 사슬에 관련된 많은 옵션이 존재하며, 옵션을 이용하여 다양한 정책을 지정할 수 있다.
(2) 사용법
   ipchains 옵션 [지정하고자 하는 사슬] [정책]
     => 일반사용자일 경우에는 /sbin/ipchains 라고 입력해야 한다.
(3) 옵션
   -N : 새로운 사슬을 만든다.
   -X : 빈 사슬을 지운다. 참고로 사슬이 비어있지 않으면 지울 수 없고 INPUT, FORWARD, OUTPUT
         은 기본 사슬로서 지울 수 없다.
   -P : 내장 사슬에 대한 기본 정책(Policy)을 변경한다.
   -L : 사슬 속에 든 규칙을 나열한다.
   -F : 사슬 속의 모든 규칙을 방출한다.
   -Z : 사슬 속의 모든 규칙에 대한 패킷, 바이트 카운터 값을 0으로 설정한다.
   -A : 사슬에 새로운 규칙을 추가한다. 보통 -A [사슬명]이 온다.
       예) -A input
   -I : 사슬 속에 어딘가에 새로운 규칙을 추가한다.
   -R : 사슬 속 특정 위치의 규칙을 교체한다.
   -D : 사슬 속 특정 규칙을 삭제한다.
   -M -L : 현재 매스커레이드된 접속 규칙을 나열한다.
   -M -S : 매스커레이딩 타임아웃값을 설정한다.
   -C : 현재의 설정을 테스트한다.
   -s : source 패킷이 들어오는 곳을 위치를 명시한다.
   -d : destination 패킷이 가고자 하는 최종 목적지
   -p : protocol 명시
      예) -p tcp, -p udp, -p icmp등
   -! : inverse역규칙 명시
      예) -p ! tcp : !는 프로토콜, 발신, 수신 등의 표현과 함께 사용 가능하나, icmp프로토콜과
         는 함께 쓸 수 없다.
   -i : interface 명시
      예) -i eth0, -i ppp0
   -y : 접속동기화 요청(SYN)명시
      예) -s any.host.com -y => any.host.com으로부터 오는 접속요청(syn flag)를 명시
   -j : 정책을 설정한다.
      예) -s any.host.com -j DENY => any.host.com에서 들어오는 모든 패킷을 거절한다.
   -l : 패킷을 기록
      예) -s any.host.com -l -j DENY => any.host.com에서 들어오는 모든 패킷을 기록하고 거절
   -b : 양방향 규칙
   -t : 서비스 유형 처리하기
(4) 옵션과 관련된 규칙
   1) -s(발신지), -d(도착지)의 사용
    ㄱ. 개요: 이 두가지 옵션을 각각 발신지(-s)와 도착지(-d)를 IP로 표현하는 옵션으로 4가지
             방법으로 사용가능하다.
    ㄴ. 표현법
     a. 도메인으로 표기하기
       예) -s localhost, -d www.linux.ac.kr
     b. IP주소로 표기하기
       예) -s 192.168.0.3
     c. Netmask값을 이용하여 표기(1)
       예) -s 192.168.1.0/24 : 192.168.1.0 ~ 192.168.1.255
           -s 192.168.0.0/16 : 192.168.0.0 ~ 192.168.255.255
     b. Netmask값을 이용하여 표기(2)
       예) -s 192.168.1.0/255.255.255.0
           -s 192.168.0.0/255.255.0.0
   2) -p의 사용
    ㄱ. 개요: 프로토콜을 명시하는 옵션으로 tcp, udp, icmp와 같은 이름을 사용해서 표현한다.
             또한 "!"를 사용하여 역표현이 가능하다.
    ㄴ. tcp, udp에서의 사용
      a. 설명: tcp, udp포트 또는 포트의 범위를 추가로 지정할 수 있다. 또한 콜론(:)을 사용하여
              포트의 범위를 지정할 수 있다. 예를 들면 7000:7010이면 7000부터 7010까지의 11개의
              포트번호를 의미한다. 여기서 시작값이 생략되면 0으로 간주하고 끝값이 생략되면
              65535로 간주한다.
      b. 사용예
        -p TCP -s 0.0.0.0/0 :1024
          => 1024포트 이하로부터 오는 모든 tcp접속을 말한다.
        -p TCP -d 192.168.0.1 !www
          => 192.168.0.1 시스템으로 들어오는 www포트 이외의 TCP접속을 말한다.
        -p TCP -d ! 192.168.0.1 www
          => 192.168.0.1 시스템을 제외한 모든 시스템의 www포트를 사용하는 TCP접속을 말한다.
    ㄷ. icmp에서 사용
      a. 설명: ICMP는 포트라는 것이 없지만 여러가지 옵션을 가지고 있다.
      b. 사용법:
        -s 유형 -d 코드
         => 유형과 코드는 ipchains -h icmp라고 치면 확인할 수 있고, 유형과 코드는 숫자로 된
           값을 입력하면 된다.

5. ipchains의 사용예
(1) 사슬의 설정값 확인
   1)[root@house /root]# ipchains -L                 // 전체 사슬의 내용을 확인
     Chain input (policy ACCEPT):
     Chain forward (policy DENY):
     target     prot opt     source                destination           ports
     MASQ       all  ------  192.168.0.0/24       anywhere              n/a
     Chain output (policy ACCEPT):
   2)[root@house /root]# ipchains -L forward        // 특정 사슬의 내용만 확인
     Chain forward (policy DENY):
     target     prot opt     source                destination           ports
     MASQ       all  ------  192.168.0.0/24       anywhere              n/a
(2) 사슬의 설정값 지우기
   1) ipchains -F : 전체 사슬의 내용을 지운다.
   2) ipchains -F forward : forward사슬의 내용을 지운다.
   3) ipchains -F input   : input사슬의 내용을 지운다.
(3) 응용예
   1) ipchains를 이용한 ping에 응답하지 않기
     ipchains -A input -p icmp --icmp-type echo-request -j DENY
    (참고1) ping과 관련된 파일 /proc/sys/net/ipv4/icmp_echo_ignore_all
   2) 특정사이트인 www.abc.com의 패킷을 막기
     ipchains -A input -s www.abc.com -d localhost -j DENY
      => 목적지(-d)가 localhost인 모든 패킷(프로토콜이 명시되지 않으면 모든 프로토콜이다.)을
        DENY로 한다.
   3) 192.168.0의 주소를 가진 C클래스의 모든 호스트(192.168.0.1 ~ 192.168.0.255)들의 접근을 거
     부하기
     ipchains -A input -p tcp -s 192.168.0.0/24 -d localhost telnet -j DENY
      => INPUT사슬에 출발지(-s)가 192.168.0.0/24인 모든 호스트로부터 프로토콜은 TCP(-p tcp)를
       사용하고 목적지가 localhost의 telnet서비스 포트인 패킷을 DENY한다.
    (참고2)Netmask값을 이용한 IP표현
      예) 192.168.1.0/24  : 192.168.1.0 ~ 192.168.1.255
          192.168.0.0/16  : 192.168.0.0 ~ 192.168.255.255
          0/0             : 모든 호스트
   4) 웹서비스를 제외한 모든 서비스를 제한하고, 모든 로그를 남기도록 설정하기
     ipchains -A input -p tcp -s 0/0 -d localhost !www -j DENY -l
      => input사슬에 프로토콜은 TCP(-p tcp)이고, 출발지는 모든 호스트(-s 0/0으로 표기하지만 생
        략가능),목적지는 localhost인데 웹서비스 이외에는 모두 DENY한다. 참고로 !www대신에 !80
        이라고 된다. 맨 뒤에 -l은 패킷을 기록하라는 옵션이다.
   5) 어떠한 서비스도 하지 않을 경우의 설정
     ipchains -A input -s DNS_server -d localhost -j ACCEPT
     ipchains -A input -p tcp -s !localhost -d localhost 0:1024 -j DENY -y -l
     ipchains -A input -p udp -s !localhost -d localhost 0:1024 -j DENY -l
      => 첫번째는 DNS와의 통신을 위해 자신의 네임서버와의 통신을 위해 열어놓은 것이고, 두번째
        는 로컬호스트가 아닌(!localhost) 호스트로부터 localhost의 0번부터 1024번포트(-d 0:102
        4)사이로 오는 모든 접속 동기화 요청(SYN)비트가 설정된 TCP(-y)패킷을 거부한다. 0번부터
        1024번까지는 시스템이 사용하는 예약된 포트이므로 대부분의 해킹이 이곳에서 일어난다.
        SYN패킷만 걸러내면 외부로부터의 TCP연결은 원천적으로 봉쇄된다. 그러므로 비교적 안전하
        다고 할 수 있다. 세번째는 같은 내용이지만 프로토콜만 바뀐것이다. 참고로 UDP프로토콜은
        SYN신호가 존재하지 않는다.
   6) 매스커레이딩 설정하기
      ipchains -A forward -s 192.168.0.1/24 -j MASQ

6. ipchains의 규칙 저장하고 불러오기

(1) 개요: 원하는 대로 방화벽 사슬을 설정해 놓은 후, 그 설정을 저장하여 다시 설정할 때 번거로
          움을 덜 수 있다. 이 때 저장하는 명령이 ipchains-save라는 스크립트이고, 불러오는 명령
          은 ipchains-restore이다.
(2) ipchains-save
   1) 설명: 설정한 내용을 저장하는 스크립트이다.
   2) 사용법
     ipchains-save > 파일명
   3) 사용예
    ㄱ. ipchains-save >firewall.txt
       => 현재 설정을 firewall.txt라는 파일로 저장한다.
    ㄴ. ipchains-save -v
       => 저장한 내용을 화면에 출력한다.
(3) ipchains-restore
   1) 설명: ipchains-save로 저장한 사슬을 복구하는 스크립트이다.
   2) 사용법
     ipchains-restore < 파일명

7. ipchains로 막아서는 안될 것들
(1) ICMP: ICMP패킷을 필터링 할 경우에는 주의해야 한다. ICMP프로토콜에는 여러가지 타입이 있는
          이 중 절대로 막아서는 안되는 패킷이 destination-unreachable타입이다. 이는 모든 TCP/
          IP자료 교환시에 필요한 패킷이다. ICMP와 관련된 사항을 보려면 ipchains -h icmp라 입
          력하면 된다.
(2) 도메인 네임 서비스와 관련된 패킷: 도메인 네임 서버는 도메인이름을 IP주소로 바꿔주는 서버
                                      이므로 kr.yahoo.com등의 주소를 사용할 수 없다. 네임 서
                                      버는 UDP프로토콜을 사용하며 53번 포트를 사용하고, TCP도
                                      사용한다. 따라서 네임서버와의 통신(TCP/UDP 53번 포트)는
                                      절대로 막아서는 안된다.
(3) 메일서비스와 관련된 패킷들: 메일 서버의 경우도 마찬가지다. 자신이 메일 서버를 운영한다면
                                다른 메일서버와의 통신로인 25번을 막으면 안된다.
(참고3) 서비스의 확인은 /etc/services 파일에서 확인한다.

8. 로그 파일 분석
(1) 개요: -l 플래그는 기록을 의미한다. 이 기록 파일은 일반적인 리눅스시스템에서는
          /var/log/messages에 남는다.
(2) 로그예
    Packet log: input DENY eth0 PROTO=17 192.168.2.1:53 192.168.1.1:1025 L=34 s=0x00 I=18
      F=0x0000 T=254 (#5)
(3) 로그설명
   input       : 규칙(로그 파일을 남기게 만든)을 포함한 사슬을 나타낸다.
   DENY        : 규칙이 패킷에게 한 행동이다. 만약 이 필드가 '-'라면 룰은 그 패킷에게 아무런
                효과도 주지 않은 것이다.
   eth0        : 패킷이 들어온 인터페이스이다.
   PROTO=17    : 패킷이 17번 프로토콜이라는 뜻이다. 가장 일반적인 프로토콜 번호는 1=icmp, 6=
                tcp, 17=udp정도이다.
   192.168.2.1 : 패킷의 출발지 IP주소
   :53         : 패킷의 출발지 포트 번호
   192.168.1.1 : 패킷의 목적지 IP주소
   :1025       : 패킷의 목적지 포트 번호
   L=34        : 패킷의 총길이 (byte)
   S=0x00      : TOS(Type Of Service)필드
   I=18        : ip의 ID
   F=0x0000    : 16bit fragment offset plus flags.
   T=254       : 패킷의 TTL(Time To Live)값이다. TCP/IP헤더에는 TTL값이 있는데 이것의 내용이
                다. 이것은 모든 홉(hop)들의 값이다. 보통 15 또는 255에서 시작한다.
   (#5)        : 괄호안의 값은 커널 2.2.9이후 버전에서만 볼 수 있다.
(참고4) ipchains 명령후에 즉시 반영시려면 ipchains-save하면 된다.

9. 기본동작 익히기
(1) 정책세우기
   예) 127.0.0.1 이라는 IP주소로부터 오는 ping패킷(ICMP패킷)을 무시하려 한다고 하자.
      => (분석)
        프로토콜: ICMP
        발신주소: 127.0.0.1
        목표(target): DENY
(2) 현재 정책의 확인
   [root@mybestone /root]# ipchains -L
   Chain input (policy ACCEPT):
   Chain forward (policy ACCEPT):
   Chain output (policy ACCEPT):
    => 어떠한 정책도 설정이 안되어 있음을 알 수 있다.
(3) 정책설정
   1) ping 테스트해보기
     [root@mybestone /root]# ping localhost
     PING localhost.localdomain (127.0.0.1) from 127.0.0.1 : 56(84) bytes of data.
     Warning: time of day goes back, taking countermeasures.
     64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=0 ttl=255 time=116 usec
      => 현재 ping이 됨을 알 수 있다.
   2) 정책설정하기
     [root@mybestone /root]# ipchains -A input -s 127.0.0.1 -p icmp -j DENY
     [root@mybestone /root]# ping -c 1 localhost
     PING localhost.localdomain (127.0.0.1) from 127.0.0.1 : 56(84) bytes of data.

     --- localhost.localdomain ping statistics ---
     1 packets transmitted, 0 packets received, 100% packet loss
      => ping이 되지 않음을 알 수 있다.
   3) 정책확인
     [root@mybestone /root]# ipchains -L
     Chain input (policy ACCEPT):
     target     prot opt     source                destination           ports
     DENY       icmp ------  localhost.localdomain anywhere              any ->   any
     Chain forward (policy ACCEPT):
     Chain output (policy ACCEPT):
(4) 정책지우기
   1) 번호로 지우기
    ㄱ. 개요: ipchains -L 했을 때 리스트를 보면 각 정책(현재는 input만 설정)의 리스트번호가
             위에서부터 차례로 1,2,3.. 번호가 설정되었다고 생각하면 된다. 그러므로 현재는
             input중에서 1번만 설정되었다.
    ㄴ. 사용예
       [root@mybestone /root]# ipchains -D input 1
        => 1번 규칙을 지운다.
   2) 전체명령으로 지우기
    ㄱ. 개요: 원래 설정한 명령에서 -A대신에 삭제하는 옵션인 -D를 사용하면 된다.
    ㄴ. 사용예
       [root@mybestone /root]# ipchains -D input -s 127.0.0.1 -p icmp -j DENY
    ㄷ. 정책확인
       [root@mybestone /root]# ipchains -L
       Chain input (policy ACCEPT):
       Chain forward (policy ACCEPT):
       Chain output (policy ACCEPT):
        => 삭제되었음을 알 수 있다.

10. 전체사슬 관련 동작익히기

(1) 개요: ipchains는 연관된 규칙을 묶어서 사용자가 정의한 사슬로 만들 수 있다. 사슬이름은
          기본 사슬명인 input, output, forward와 기본정책인 ACCEPT, DENY, REJECT, MASQ등을
          제외하고 정하면 되고 8자까지만 가능하다.
(2) 새로운 사슬 만들기
   [root@mybestone /root]# ipchains -N firewall
    => firewall이라는 사슬을 생성한다.
(3) 생성된 사슬의 확인
   [root@mybestone /root]# ipchains -L
   Chain input (policy ACCEPT):
   Chain forward (policy ACCEPT):
   Chain output (policy ACCEPT):
   Chain firewall (0 references):
    => firewall이라는 사슬이 생성되었음을 알 수 있다.
(4) 사슬 지우기
   [root@mybestone /root]# ipchains -X firewall
    => firewall이라는 사슬을 지운다. 사슬을 지우려면 사슬에 정책이 없는 빈사슬이어야 하고
      내장사슬을 지울 수 없다.
(5) 사슬비우기
   1) 개요: -F를 사용하여 사슬에 설정된 규칙을 지울 수 있다.
   2) 사용법
      ipchains -F [사슬명]
   3) 사용예
    ㄱ. ipchains -F
       => 전체 사슬에 대한 내용을 지운다.
    ㄴ. ipchains -F input
       => input 사슬에 대한 규칙만을 지운다.
(6) 사슬 규칙보기
   1) 개요: -L을 사용하여 사슬 속의 규칙을 볼 수 있다.
   2) 사용법
     ipchains -L [사슬명]
   3) 사용예
    ㄱ. ipchains -L
       => 전체 사슬의 내용을 출력한다.
    ㄴ. ipchains -L input
       => input사슬의 내용만을 출력한다.

11. IP 마스커레이드(Masquerade)
(1) 개요: IP Masquerade란 하나의 공인 IP를 가지고 여러 대의 컴퓨터가 인터넷을 이용하도록 하는
          기능을 말한다. 즉, TCP/IP패킷에 비공인 IP가 발신지일 경우 이를 실시간에 공인 IP로
          치환시켜주는 기능이다. 공인IP부여뿐만아니라, 동시에 여러 대의 클라이언트를 보호하는
          방화벽이 된다.
(2) IP 마스커레이드설정하기
   1) LAN CARD 추가 장착하기
     기존의 실질적으로 IP를 부여한 랜카드가 eth0로 세팅되어 있다. 여기에 추가로 랜카드를 하나
    더 장착한다. 이 랜카드는 리눅스상에서 eth1로 장착된다.
   2) eth1에 IP부여하기.
    ㄱ. 설명: 공인 IP대역말고 내부IP대역으로 할당된 것들중에서 IP를 부여한다. IP의 부여는
             /etc/sysconfig/network-scripts/ifcfg-eth1 이라는 파일에 적는다.
    ㄴ. 사용예: 여기서는 내부IP대역중에서 192.168.0.0대역을 쓰는 것으로 하고, IP는 192.168.0.1
               을 부여한다.
       DEVICE=eth1
       BOOTPROTO=static
       BROADCAST=192.168.0.255
       IPADDR=192.168.0.1
       NETMASK=255.255.255.0
       NETWORK=192.168.0.0
       ONBOOT=yes
   3) /etc/sysconfig/network 설정하기
     이 파일은 eth0의 게이트웨이값과 hostname을 지정해주는 파일이다. 이 파일에
    FORWARD_IPV4=true라는 항목을 추가한다.
   4) /etc/rc.d/rc.local파일에 다음의 항목을 추가한다.(대소문자 구분할 것.)
     ㄱ. 설명: /etc/rc.d/rc.local파일은 dos나 windows로 말하면 autoexec.bat파일에 해당하는
              것으로 부팅시 마다 참조하는 파일이다. 즉, 부팅할 때마다 마스커레이드 기능을
              이용하도록 설정하는 것이다.
     ㄴ. 설정예
       /sbin/ipchains -P forward DENY        // 기본정책은 모두 거부이다.
       /sbin/ipchains -A forward -s 192.168.0.0/24 -j MASQ  // C클래스대역의 내부아이피를 모두
                                                             사용
       echo 1 > /proc/sys/net/ipv4/ip_forward      // 내부아이피를 사용하도록 값을 인위적으로
                                                     부여
       /sbin/modprobe ip_masq_ftp            // 내부사용자들이 외부로 ftp서비스를 사용가능하게
                                              해줌
   5) 재부팅한다.
   6) eth1으로 부터 랜선을 뽑아 hub로 연결한다.
   7) 클라이언트(PC) 세팅
     ㄱ. 192.168.0.2부터 IP를 부여하여 세팅한다.
     ㄴ. 클라이언트 PC의 게이트웨이는 192.168.0.1(리눅스서버의 eth1의 값)로 세팅하고, Netmask
        는 255.255.255.0으로 세팅한다.

Trackback
Reply

출처 : 대전국제IT교육센터 정성재 강사

 

1. 접근통제란?
(1) 설명: 네트워크 환경체제에서는 항상 권한이라는 것이 있다. 어떠한 시스템에 접근하려면 그
          시스템에 접근권한이 있어야 한다. 권한을 가지지 않은 자가 권한이 부여되지 않은 자료에
          불법적인 접근을 시도할 때 이를 차단하는 행위를 접근통제(Access Control)이라 한다. 리
          눅스시스템에서도 소유자, 그룹, 그 외의 사용자 등 3계층으로 분리하여, 파일 또는 디렉
          토리에 읽기, 쓰기, 실행에 대한 권한을 부여한다.
(2) 접근통제방법: 접근통제하는 방법에는 학문적으로 보면 어떤 계층에서의 통제냐 운영체제의
                  위치가 어디냐에 따라 굉장히 많이 나누지만 여기서는 간단히 분류해보자.
   1) 완전접근통제: 말 그대로 어떠한 사람도 접근을 못하게 막는 것이다. 그러나, 완전통제라면
                    네트워크로서의 기능이 없다고 말할 수 있다.
   2) 일부접근통제: 선별적으로 접근을 허가하는 통제법이다. 대표적인 방법이 TCP Wrapper이다.

(3) 참고: 일부접근통제방식과 Set-Uid
   1) 설명: 리눅스에서 비밀번호를 변경할 때 passwd라는 명령을 이용한다. 이 passwd의 권한은
           root에게 있다. (실제적으로 확인해보면 소유자와 소유그룹 모두 root다. 파일의 위치는
           /usr/ bin/passwd) 그런데, 어떻게 일반 사용자가 그 명령을 사용할 수 있을까? 그것은
           root가 패스워드 권한 일부를 양도했기 때문이다. 이를 setuid, setgid라고 부른다. 이
           러한 경우와 같이 패스워드를 바꾸는 행위 또는 그 역할에만 권한을 허용한 경우가 일부
           접근통제방법에 해당한다.
   2) passwd의 setuid 확인
     ㄱ. /etc/bin으로 이동한다.
     ㄴ. 'ls -l passwd'라고 입력
     ㄷ. 다음과 같이 결과가 출력된다.
       -r-s--x--x    1 root     root        12244 Feb  8  2000 passwd
         => 이와 같이 소유자부분에서 x가 있어야 할 자리에 s가 있다. 이런 경우가 setuid 또는
          setgid가 부여된 경우이다. 이 파일의 소유자와 그룹은 root이다.


2. TCP Wrapper란?
리눅스 커널 2.2 버전에서 TCP Wrapper는 슈퍼데몬인 inetd데몬에 의하여 수행되는 서비스들의 접근
을 제어한다. 즉, 시스템에 접속을 허락한 호스트만 접속할 수 있도록 한다거나, 또는 원하지 않는
호스트의 접근을 막도록 해주는 접근 제어 프로그램이다. TCP 연결을 기반으로 하는 TELNET, FTP,
FINGER,RLOGIN 등을 감시하고 필터링할 수 있다. 현재 사용하는 커널 2.4 버전에서는 inetd가 확장
된 xinetd라는 슈퍼데몬을 사용하면서 자체적으로 접근제어를 하지만 tcp wrapper의 구성요소중
/etc/hosts.allow와 /etc/hosts.deny을 이용한 접근제어는 아직도 사용하고 있다.

3. TCP Wrapper의 구성
(1) 개요: TCP Wrapper는 데몬 프로세서인 /usr/sbin/inetd와 환경파일인 /etc/inetd.conf로 구성
          되어 있다. 또한 리눅스에서는 스크립트파일인 /etc/rc.d/init.d/inet이 있고, /usr/sbin
          /tcpd에서 참조하는 /etc/hosts.allow 파일과 /etc/hosts.deny파일이 있다.
(2) 구성파일
   1) /usr/sbin/inetd
    이 데몬은 여러 가지 다른 서버 프로그램들(telnet, ftp 등)을 관리하기 때문에 슈퍼 데몬이라고
   불리운다. 만약 호스트에서 telnet서비스를 요청하면 inetd는 환경파일인 /etc/inetd.conf파일을
   참고하여 in.telnetd를 구동하고 telnet서비스를 처리한다.
  2) /etc/inetd.conf(커널 2.2 버전만 해당)
    ㄱ. 설명: TCP Wrapper가 구동될 때 참고하는 환경파일이다. 전반적인 설정에 관여한
             다.
    ㄴ. inetd.conf 필드의 구성 : 총 7개의 필드로 구성되어 있다.
      a. 구성예
       telnet  stream  tcp     nowait  root    /usr/sbin/in.telnetd  in.telnetd
      (서비스이름) (소켓타입)(프로토콜)(플래그)(사용자)(서버프로그램) (매개변수)
      b. 필드의 설명
        - 서비스이름 : /etc/services에 정의된 이름
        - 소켓타입 : stream은 tcp, dgram은 udp이다.
        - 프로토콜 : /etc/protocols에 있는 이름
        - 플래그 : 프로세스의 시작방법
        - 사용자 : 서비스가 수행될 때 그 서비스의 소유자
        - 서버프로그램 : 실제 서버 프로그램 및 경로
        - 매개변수 : 서버에 넘겨줄 명령어 라인 매개변수

    ㄷ. inetd.conf의 역할: 이 파일에서 TCP Wrapper에서 사용하는 서비스를 제어할 수 있다. 보통
                         telnet, ftp, shell, login, exec, talk, ntalk, dtalk, pop-2, pop-3,
                         imap, uucp, tftp, bootps, finger, cfinger, sysstat, netstat 등 TCP연
                         결을 기반으로 하는 것들을 제어할 수 있다. 서비스를 하지 않으려면 해당
                         서비스의 맨 앞에 '#'문자를 삽입한다. 즉, 해당서비스열이 주석처리된다.
   3) /etc/rc.d/init.d/inet: 리눅스 배포판만에 있는 스크립트 파일이다. 리눅스에서 inetd 전체의
                            시작과 종료는 이 파일을 이용한다. 커널 2.4에서는 xinetd이다.
   4) /usr/sbin/inetd 와 /usr/sbin/tcpd
     리눅스에서 /etc/inetd.conf 파일의 필드 구성을 보면 위의 구성예와 서버프로그램부분이 다
    르다.
       telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
    그럼 /usr/sbin/tcpd는 무엇인가? inetd는 /etc/inetd.conf파일을 참고하여 TCP Wrapper의 초기
    구동을 담당한다. 즉, /etc/inetd.conf 파일의 설정을 다음과 같이 했다고 가정하자.
       telnet  stream  tcp     nowait  root    /usr/sbin/in.telnetd  in.telnetd
     이 경우에 inetd는 단순히 텔넷서비스 요청이 들어오면 텔넷서비스로 연결만 해준다. 이런 설정
    은 텔넷서비스요청에 대한 어떠한 접근 거부나 허가를 할 수 없게 된다. 그래서, 중간에 접근
    여부를 판단하는 데몬이 tcpd이다. tcpd는 접근허용 파일인 /etc/hosts.allow와 /etc/hosts.deny
    파일을 참조하여 접근 여부를 결정한다. 또한 서비스에 접근하는 과정에서 발생하는 모든 사항에
    대하여 상세한 접속 로그를 남긴다. 즉, tcpd는 inetd와 서버사이에서 중요한 판단을 수행한다.

4.TCP Wrapper의 운용
(1) 개요: TCP Wrapper의 운용은 크게 3가지로 구분할 수 있다. 첫번째는 슈퍼 데몬인 inetd를 종료
          시켜 어떠한 서비스도 하지 않는 것이고, 두번째는 inetd.conf파일을 수정(커널 2.4에서는
          /etc/xinetd.d 디렉토리내의 서비스제어)하여 선택적으로 서비스를 제어하는 것이고, 마지
          막은 /etc/hosts.allows파일과 /etc/hosts.deny파일을 가지고 클라이언트를 선택제어하는
         것이다.
(2) TCP Wrapper 전체 서비스의 중단
   1) 설명: TCP Wrapper를 작동하지 않으려면 inetd 데몬을 중단시키면 된다. 보통 리눅스배포판에
           서는 스크립트파일을 이용하면 된다.
    ㄱ. 서비스의 중단
      /etc/rc.d/init.d/inet stop
    ㄴ. 서비스의 시작
      /etc/rc.d/init.d/inet start
        => 커널 2.4버전인 경우에는 xinetd이다.
(3)선택적인 서비스의 중단
   1) 설명: TCP Wrapper에서는 여러 서비스를 한다. telnet, ftp, rlogin등 많은 서비스등을 한꺼번
          에 관리한다. 따라서, 이중 한가지 서비스를 중단하려면 /etc/inetd.conf파일을 수정하면
          된다. 만약 현재 telnet서비스를 한다면 다음과 같이 설정되어 있을 것이다.
            telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
          그럼, 텔넷서비스를 중단해보자. 맨 앞에 주석을 뜻하는 '#'만 붙여주면 된다.
   2) 사용예
     #telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
(4)호스트의 접근제어 : /etc/hosts.allow와 /etc/hosts.deny파일을 이용하여 선택적으로 호스트
                       를 제어할 수 있다. 실제적으로 xinetd를 사용하는 커널 2.4버전에서도 사용
                       가능한 파일이 이 두 개의 파일이다.
    1)/etc/hosts.allow : 접근이 허가된 호스트들의 목록을 적는다.
    2)/etc/hosts.deny : 접근이 금지된 호스트들의 목록을 적는다.
    3)hosts.allow와 hosts.deny의 검색순서
       hosts.allow를 먼저 검색한 후 hosts.deny를 검색한다. 만약 hosts.deny에 모든 서비스에 대
     해 접근 금지로 설정했을 경우, hosts.allow에 허용된 접근외에는 모든 접근이 금지된다.

5.접근제어 규칙
(1) 설명: /etc/hosts.allow파일과 /etc/hosts.deny파일은 정해진 접근통제규칙을 가지고 있다. 이
         규칙대로 설정을 하여 접근을 제어해야 한다.
(2) 파일 작성시 문법상의 규칙
   1) 새로운 줄(줄바꿈)은 무시되고, 줄을 연장할 경우에는 백슬래쉬를 사용해야 한다.
   2) 빈줄 혹은 '#'으로 시작되는 줄은 주석처리된다.
   3) 다른 모든 줄은 아래의 형식을 따라야 한다.
      예) daemon_list  :  client_list   [ : shell_command ]
     daemon_list : 한개 이상의 데몬(서버프로그램)프로세스 혹은 예약어(와일드카드)
     client_list : 한 개 이상의 호스트 이름, 주소, 패턴 혹은 예약어(클라이언트 이름 혹은
                  주소가 일치하는 것)
(3) 예약어(와일드카드라고도 부름)
    ALL        : 모든 서비스 또는 모든 호스트를 나타냄.
    LOCAL      : 같은 네트워크에 있는 모든 호스트
    KNOWN      : 이름이 KNOWN인 호스트, 혹은 이름 또는 주소를 알고 있는 호스트
    UNKNOWN    : 이름이 UNKNOWN인 호스트, 혹은 이름이나 주소를 모르는 호스트
    PARANOID   : 호스트네임이 주소와 일치되는 않는 호스트
    B EXCEPT A : 리스트 B에서 A를 제외한 모든 B
(4) 패턴형식 : '.'의 위치에 유념해야 하고, ALL과 ':'은 공백이 있어야 한다.
    1)모든 서비스를 모든 호스트에 대해 거부 : /etc/hosts.deny파일에 적는다.
      ALL : ALL
    2) 특정 호스트에 특정서비스 접근 허용 : /etc/hosts.allow파일에 적는다.
      ALL : localhost, .aaa.com   => localhost와 aaa.com의 모든 호스트들에게 모든 서비스를
                                    허용한다는 뜻이다.
      in.telnetd : 192.168.0.2 => 192.168.0.2에서 텔넷 접속에 대해서만 접근을 허용한다.
      ALL : .aaa.com EXCEPT killer.aaa.com => killer.aaa.com를 제외한 aaa.com의 모든 호스트들
                                             에게 모든 서비스를 허용한다.
      ALL EXCEPT in.ftpd : .aaa.com EXCEPT bad.aaa.com => bad.aaa.com를 제외한 aaa.com의 모든
                                                         호스트들에게 ftp서비스를 제외한 모든
                                                         서비스를 허용한다.
      in.telnetd, in.figerd : 233.234.235., .aaa.com => 233.234.235.* 네트워크에 속한 모든 호
                                                       스트와 .aaa.com에 속하는 모든 호스트들
                                                       은 텔넷서비스와 finger서비스를 허용함.
      ALL : ALL : DENY => 그외의 모든 네트워크 호스트는 어떠한 서비스도 받을 수 없다. 만약에
                         hosts.allow를 이렇게 설정해 놓으면 별도로 hosts.deny파일이 필요없다.
      ALL : 192.168.0.0/24 => IP/넷마스크를 이용하여 설정하는 방법으로 192.168.0.0부터 192.16
                             8.0.255까지 모든 서비스에 대하여 허가한다.
(5) Shell Command
   1) 명령
     spawn : 현재 수행중인 프로세스의 자프로세스로 수행
     twist : 현재 수행중인 프로세스의 이미지 교체 후 수행(프로세스의 이미지가 교체되므로 규칙
            의 마지막 옵션으로 사용해야 한다.
   2) 확장 옵션
     %a (%A) : 클라이언트(서버)의 주소
     %c      : 클라이언트의 정보 (user@host 또는 user@address)
     %n (%N) : 클라이언트의 이름
     %d      : 서비스 데몬의 이름
     %h (%H) : 클라이언트(서버) 이름 또는 주소
     %n      : 클라이언트(서버) 이름
     %p      : 데몬 프로세스 ID
     %s      : 서버 정보
     %u      : 클라이언트 사용자 이름
   3) 사용예 : 의심되는 호스트(cracker.aaa.com)가 시스템에 접근을 시도할 경우 이 접속을 거부하
              고 관리자에게 관련 정보를 전송하기 위하여 hosts.deny파일에 다음과 같이 설정한다.
      ALL : cracker.aaa.com : twist (finger -l @%h | mail -s %d -%h root) &

6.TCP Wrapper의 단점
TCP Wrapper는 클라이언트에서 보내진 네트워크 패킷들로부터 제공된 발신지주소의 정보를 보고 그
호스트에 대해 접근을 허가를 하든지 거부를 하든지 동작을 하는데, 이 정보를 전적으로 믿을 수는
없다. 만약 TCP Wrapper에서 192.168.0.2로 부터 오는 telnet 요청을 허가하도록 설정되어 있다고
할 때, 크래커가 자신의 주소를 192.168.0.2라고 속여서 접근한다면 속수무책이다. 이런 식의 공격을
IP 스푸핑이라고 한다.

Trackback
Reply

출처 : 대전국제IT교육센터 정성재 강사

 

1. r로긴에 대하여
r로 시작하는 명령중에 대표적인 명령이 rsh 및 rlogin이 있다. 이 명령은 접속하고자하는 서버에
/etc/hosts.equiv 라는 파일과 .rhosts라는 파일을 참조하여 접속을 할 수 있다. 또한, rsh과 rlogin
은 리눅스에서 inetd(커널 2.4대일 경우에는 xinetd)라는 슈퍼데몬이 관리하므로 사용하려면 /etc/
inetd.conf(커널 2.4대인 경우에는 /etc/xinetd/rlogin등)파일에서 사용할 수 있도록 활성화시켜야
한다. 리눅스에서 rlogin 등 r-command 계열의 사용이 보안상 취약점으로 인해 점점 어려워지고 있
다. 로그인하기 위한 설정이나 .rhosts파일 생성시에 더욱 더 주의를 하도록 되어 있고, 초기에 설
정하던 방법들이 적용이 잘 안된다.


2. rlogin
(1) 설명: remote login의 약어로 호스트에 원격으로 로그인할 때 사용하는 명령이다. 원격으로
          접속할 원격지에는 .rhosts파일 또는 /etc/hosts.equiv 파일에 호스트가 등록되어 있어야
          한다.
(2) 사용법
   rlogin [option] host
(3) option
  -l : 계정을 미리 지정하여 로그인 할 수 있다. 현재 이 옵션이 지원되지 않는다.
(4) 사용예
   1) rlogin www.aaa.co.kr => www.aaa.co.kr으로 접속을 한다.
   2) rlogin -l posein www.aaa.co.kr => www.aaa.co.kr로 접속을 시도할 때 aaa.co.kr의 posein
                                        이라는 계정을 가지고 한다.
   3) rlogin 203.247.xxx.xx
     => 203.247.xxx.xxx 로 접속을 시도한다. 현재 버전에서 사용가능한 방법이다.

3. /etc/hosts.equiv 파일과 .rhosts파일의 설정
(1) 설명: rlogin으로 접속하려면 /etc/hosts.equiv파일 또는 사용자의 홈디렉토리에 .rhosts파일이
          존재해야 한다. 본인 계정으로 rlogin을 이용하려면 자신의 홈디렉토리에 .rhosts파일을
          만든다.
(2) .rhosts파일 및 /etc/hosts.equiv 의 형식
   (호스트네임)  (들어올 수 있는 계정아이디)
(3) 사용예
   1) aaa.co.kr   posein
      => aaa.co.kr이라는 호스트의 posein이라는 사람이 자신의 계정에 패스워드없이 들어올 수
        있다.
   2) aaa.co.kr   +
      => aaa.co.kr이라는 호스트의 모든 계정에서 나의 계정(즉, 현재 .rhosts파일에 존재하는 홈디
        렉토리)에 패스워드없이 들어 올 수 있다.
   3) +   posein
     => 모든 호스트에서 posein이라는 계정이 있는 사람이 들어올수 있다.
   4) +   +
     => 모든 호스트의 모든 계정에서 들어올 수 있다.
   5) 203.247.xxx.xxx
     => 신뢰하는 호스트의 IP를 적는다. 해당 IP에서 접속하는 계정에 대해 패스워드없이 접속이
       가능하다. 현재 버전에서 사용가능한 방법이다.

4. rsh
(1) 설명: remote shell의 약자로 원격으로 명령을 내릴 경우에 사용한다. rlogin과 다른 점은
          rlogin으로 접속했을 경우에 who나 w명령을 치면 접속했다는 것이 보이지만 rsh로 옵션을
          주어 접속하거나 원격지에서 그냥 명령만 수행시에는 보이지 않는다. 물론 .rhosts파일이
          존재해야 사용가능하다.
(2) 사용법
   rsh [option] host
(3) option
   -l : 계정을 지정하여 로그인할 수 있다. 현재 이 옵션이 지원되지 않는다.
(4) 사용예
   1) rsh -l root aaa.co.kr sh -i
       =>  aaa.co.kr의 root 권한으로 shell을 실행시킨다. 이 명령을 실행시킨 뒤에 'id'라고 입력
         하면 root로 나타난다. 하지만, w이라고 입력하면 나타나지 않는다.
   2) rsh -l root aaa.co.kr ls -l /    
       => aaa.co.kr으로 접속한 뒤에 ls -l /을 실행시킨다.
   3) rsh aaa.co.kr cp /etc/passwd passwd
       => 원격지의 /etc/passwd 파일을 현재디렉토리에 복사한다.

5./etc/inetd.conf의 설정(커널 2.2대인 경우)
(1) 설명: rlogin과 rsh은 슈퍼데몬인 inetd에서 관리하므로 작동유무는 /etc/inetd.conf에서 한다.
          기본설정은 작동을 하지 않는다. 활성화시키려면 다음과 같은 항목에서 주석처리('#')을
          없애면 된다.
(2) 설정
   (기본설정)
     #shell  stream  tcp     nowait  root    /usr/sbin/tcpd  in.rshd
     #login  stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind
   (활성화된 상태)
     shell  stream  tcp     nowait  root    /usr/sbin/tcpd  in.rshd
     login  stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind

6./etc/xinetd.d 설정(커널 2.4대인 경우)

(1) 설명: 커널 2.4대 인 경우에는 xinetd라는 슈퍼데몬으로 작동한다. 각각의 해당서비스에 대한
          설정은 /etc/xinetd.d디렉토리에서 각 서비스이름과 같은 이름(예를 들면 rlogin, rsh등)
          으로 관리된다.
(2) 설정
   1) rlogin과 rsh파일을 vi편집기로 열어보면 disable = yes라는 항목이 있다. 즉 이것은 사용하지
    않겠다는 설정이다. 이 값에서 yes를 no로 바꾼다.
   2) 데몬을 재시작한다.
     /etc/rc.d/init.d/xinetd restart

7. rlogin 사용예
(1) /etc/hosts.equiv 파일이용하여 A(Client) 시스템에서 B(Server)로 접속
   1) B(Server)에서 rlogin을 허용하기 위한 설정
    ㄱ. /etc/hosts.equiv 파일에 접속을 허가하고자 하는 호스트를 등록한다.
       [root@server root]# cat /etc/hosts.equiv
       203.247.xxx.xxx
         => 해당 IP에서 들어오는 계정에 대해 패스워드 없이 로그인이 가능하다.
    ㄴ. rlogin 서비스를 열기: /etc/xinetd.d/rlogin 파일의 설정에서 disable = yes를 no로 바꾼
                             다.
    ㄷ. 참고 : 리눅스는 기본적으로 pam이라는 사용자 인증을 사용한다. rlogin사용을 위해서는
              pam에도 설정이 되어 있나 확인해야 한다.
       [root@www root]# cat /etc/pam.d/rlogin
       #%PAM-1.0
       # For root login to succeed here with pam_securetty, "rlogin" must be
       # listed in /etc/securetty.
       auth       required     /lib/security/pam_nologin.so
       auth       required     /lib/security/pam_securetty.so         // 이 부분도 필요하다.
       auth       required     /lib/security/pam_env.so
       auth       sufficient   /lib/security/pam_rhosts_auth.so       // 기본선택되어 있다.
       auth       required     /lib/security/pam_stack.so service=system-auth
       account    required     /lib/security/pam_stack.so service=system-auth
       password   required     /lib/security/pam_stack.so service=system-auth
       session    required     /lib/security/pam_stack.so service=system-auth
   2) A(Client)에서 B(Server)로 접속하기
    ㄱ. 조건: client와 Server에 동일 계정으로 접속해야 한다. 접속하고자하는 Server에도 posein
             이라는 계정이 있고 Client에도 posein이라는 계정이 있다고 가정하자.
    ㄴ. 접속하기
       [posein@client posein]$ rlogin 203.247.xxx.xxx
       Last login: Thu Jan 30 01:53:21 from xxx.xxx.xxx.xxx
       [posein@server posein]$
         => 패스워드없이 로그인이 됨을 알 수 있다.
(2) .rhosts파일을 이용하여 A(Client) 시스템에서 B(Server)로 접속
   1) B(Server)에서 rlogin을 허용하기 위한 설정
     ㄱ. 개인 홈디렉토리의 .rhosts파일에 만들고 그곳에 원격지 IP를 등록한다.
        [posein@server posein]$ cat .rhosts
        203.247.xxx.xxx
         => 해당 IP에서 들어오는 계정에 대해 패스워드없이도 로그인이 가능하다.
     ㄴ. 리눅스에서는 .rhosts 파일의 퍼미션을 소유자만 rw이 가능하도록 설정해야 한다. 이렇게
        설정되어 있지 않으면 운영체제에서 보안상의 이유로 무시한다.
        [posein@server posein]$ ls -l .rhosts
        -rw-------    1 posein   posein         14  1월 30 02:04 .rhosts
   2) A(Client)에서 B(Server)로 접속하기
       [posein@client posein]$ rlogin 203.247.xxx.xxx
       Last login: Thu Jan 30 02:18:34 from xxx.xxx.xxx.xxx
       [posein@server posein]$
   3) 참고 : root로 로그인하기
     root사용자로 로그인하기 위해서도 일반사용자가 로그인하기 위해 한 설정과 같다. 다만 root
    사용자인 경우에는 /etc/securetty에서 원격지 접속에 대한 제한을 두었기 때문에 접속이 불가
    하다. 만약 root로 접속하려면 /etc/securetty를 제거하거나 다른 이름(securetty~ 추천)으로
    변경하면 접속할 수 있다. 그러나 이 방법은 절대 사용하지 말아야 한다. 다만 보안상 참고로
    알아두는 수준이 좋다.

8. rsh 사용예
(1) 접속하고자하는 Server의 설정: rlogin 설정과 같다.
(2) A(Client)에서 B(Server)로 접속하기
   1) [posein@client posein]$ rsh 203.247.xxx.xxx sh -i
      sh-2.05b$
       => 프롬프트가 바뀌면서 접속한 상태와 같다.
   2) [posein@client posein]$ rsh 203.247.40.252 ls -l /
       => 접속하지 않아도 원격지 서버의 / 디렉토리의 내용확인이 가능하다.
   3) [posein@client posein]$ rsh 203.247.xxx.xxx cat /etc/passwd > passwd.txt
       => 원격지 서버의 /etc/passwd의 내용을 내 디렉토리의 passwd.txt파일로 저장 가능하다.
(3) 참고
   1) who명령이나 w 명령으로는 확인이 불가능하다.
   2) last같은 로그기록으로도 보이지 않는다.
   3) 접속의 확인은 netstat명령으로만 가능하다.

9. rlogin과 해킹
(1) rlogin과 백도어
   과거의 해커들이 루트의 홈디렉토리에 .rhosts라는 파일을 만들고 그안의 내용을 '+ +'로 하여 소
  위 백도어라는 것을 만들어 놓았다. 그러나, 현재의 리눅스는 보안의 측면이 많이 강화되어 일단 r
  oot 계정자로 rlogin이 불가능하다. 또한, 일반계정자로 .rhosts를 만들고 파일의 내용을 '+ +'라
  하여도 패스워드를 치도록 되어 있다. rsh도 현재의 리눅스시스템에서는 사용이 어렵다. 원격에서
  의 쉘권한은 상당히 규제하고 있다. 그러나, 과거의 해킹방법이라도 알아두어야만 대응하기가 쉽다.
(2) rlogin의 제한
   1) /etc/inetd.conf에서의 설정(커널 2.2대) : shell부분과 login부분을 주석처리한다.
      #shell  stream  tcp     nowait  root    /usr/sbin/tcpd  in.rshd
      #login  stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind
   2) /etc/xinetd.d 디렉토리의 파일제한(커널 2.4대)
      이 디렉토리에 존재하는 rlogin과 rsh파일을 삭제하거나 이 파일을 vi편집기로 열어
     disable = yes로 바꾼뒤에 데몬을 재시작한다.
   3) .rhosts파일의 제한 : rlogin과 rsh은 .rhosts파일이 존재해야 한다. 그러므로 이 파일의 생
                          성을 막는다.
     ㄱ. 퍼미션을 통한 제한 : 루트디렉토리의 퍼미션을 700으로 하여 다른 사용자에 의한 파일의
                             생성을 막는다.
     ㄴ. .rhosts의 생성 제한
       a..rhosts라는 디렉토리를 미리 생성해 놓으면 같은 이름의 파일을 생성할 수 없다.
       b. ln -s /dev/null ~/.rhosts 나 ln -s /dev/null /etc/hosts.equiv 명령을 내려 어떠한
         설정을 할 수 없도록 설정한다.
     ㄷ. 감시 : who나 w 명령으로는 나타나지 않을 수 있으니 항상 netstat 명령을 이용하여 감시한
              다.

Trackback
Reply
우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
My Advanced Linux (73)
Learning Linux (96)
Fundamental (41)
AdminCourse (32)
Security (23)
OperatingSystem (5)
Databases (4)
OpenSource (1)
Tips! (1)
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31