티스토리 뷰

Security

unix 기본적보안설정

solarwind 2008. 6. 25. 21:26
반응형
  • 불필요한 계정 삭제하기

    시스템에서 사용하고 있지 않는 불필요한 계정은 삭제합니다. 예를 들어 lp, sync, shutdown, halt, news, uucp, operator, games, gopher 등..., 계정의 삭제는 다음과 같이 할수 있습니다.

    userdel gopher

    그룹의 삭제는

    groupdel gopher

     

  • 확실한 암호체계를 사용한다.

    1. 암호의 길이

      대부분의 배포본에서 기본적으로 암호의 길이는 5자 이상으로 설정되어 있습니다. 이것은 8자 이상으로 바꾸어야 합니다. 이것을 위해서는 login.defs 파일을 수정합니다. (보통 /etc/login.defs)

       PASS_MIN_LEN    5
      	을
      	PASS_MIN_LEN    8
      	로 바꾸어 줍니다.
      	
    2. 쉐도우 패스워드 사용

      이것은 일반적으로 리눅스 설치시 옵션입니다. 이후에는 authconfig 유틸리티를 사용할 수 있습니다. 기존 암호들과 그룹등의 쉐도우 패스워드로의 전환은 pwconv, grpconv 같은 명령을 사용할수 있습니다.

     

  • root 계정

    루트 계정은 유닉스 시스템에서 가장 강력한 권한을 가지고 있는 계정입니다. 만약 관리자가 콘솔로의 접속후, 로그아웃하는 것을 잊고 루트 프롬프트를 그대로 놔두었다면, 위험한 상황이 벌어지겠지요? 이런 상황을 피하기 위해 TMOUT 변수를 사용할수 있습니다. /etc/profile 파일 또는 루트의 해당 쉘의 설정파일, 예를 들어 bash 라면 ~/.bash_profile 에 다음과 같이 설정해 둡니다.

     HISTSIZE=0
    HISTFILESIZE=0
    TMOUT=3600
    
    숫자는 초단위 입니다. 3600초 즉, 1시간동안 아무런 입력이 없다면 자동으로 로그아웃됩니다. HISTSIZE 와 HISTFILESIZE 를 0으로 해두는 것도 만약을 위한 조치입니다.

     

  • console-equivalent 접근

    일반 유저의 콘솔 관련 프로그램 사용을 방지합니다. 예를 들어 shutdown, reboot, halt와 같은 명령어들 입니다. 다음과 같이 합니다.

    rm -f /etc/security/console.apps/명령어

     

  • 사용하지 않는 서비스 지우기

    사용하지 않고, 불필요한 서비스 패키지는 삭제합니다. 일단 /etc/inetd.conf 파일을 수정해서 사용하지 않는 서비스는 모두 주석처리(#)한후, inetd를 재시동합니다.

    1. /etc/inetd.conf 파일을 600 모드로 바꾸어서 루트만이 억세스하도록 합니다.

      chmod 600 /etc/inetd.conf

       

    2. 반듯이 /etc/inetd.conf 파일의 오너는 root 이여야 합니다.

      chown root.root /etc/inetd.conf

       

    3. inetd.conf 를 수정합니다. 예를 들어 ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger, auth등 사용하지 않는 서비스들은 모두 주석처리 합니다.

       

    4. inetd 를 재시동합니다. killall -HUP inetd

       

    5. /etc/inetd.conf 파일을 immunize 합니다.

      chattr +i /etc/inetd.conf

      다시 변경이 가능하게 하려면 chattr -i /etc/inetd.conf 하면 됩니다.

     

  • TCP_WRAPPER 사용하기

    tcp wrapper로 서버로의 접근을 제한할수 있습니다. 가장 좋은 정책은 일단 /etc/hosts.deny 에 ALL: ALL@ALL, PARANOID 로 모든 접근을 막은후, /etc/hosts.allow 에 허가 해주는 것입니다.

    1. hosts.deny 파일을 다음과 같이 수정합니다.

      ALL: ALL@ALL, PARANOID

       

    2. hosts.allow 를 다음 예와 같이 수정합니다.

      ftp: 202.54.15.99 foo.com

      위 설정은 ftp 억세스를 ip 주소인 202.54.15.99와 foo.com 도메인을 가지는 클라이언트 들에게 허용합니다.

       

    3. 마지막으로 tcpdchk 명령으로 설정파일들의 오류를 확인해 볼수 있습니다.

     

  • 시스템 정보를 보여주지 말자

    외부에 서버의 정보를 최대한 보여주지 않는 것도 공격을 예방하는 방법입니다. 예를 들어 "/etc/inetd.conf" 의 telnet 옵션을 다음과 같이 수정합니다.

     telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
    을...
    telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd -h
    와 같이...
    
    -h 옵션은 시스템 정보를 보여주지 않고, 사용자에게 id 와 암호만 물어옵니다. 그러나 언제나 telnet 보다는 sshd 의 사용을 권장합니다.

     

  • "/etc/host.conf" 파일 수정

     

     # Lookup names via DNS first then fall back to /etc/hosts. 
    order bind,hosts 
    # We have machines with multiple IP addresses. 
    multi on 
    # Check for IP address spoofing. 
    nospoof on 
    
    첫번째 줄은 DNS 관련 설정입니다. 먼저 DNS 에서 host name을 resolve 하고, 다음 hosts 파일을 참조하라는 것입니다. multi 옵션은 /etc/hosts 파일에 다중 IP 주소를 가질수 있다는 것이며, 마지막 nospoof 옵션은 서버로의 스푸핑을 방지합니다.

     

  • "/etc/services" 파일은 immunize 합니다. chattr +i /etc/services

     

  • 루트 로그인의 제한

    /etc/securetty 파일은 어떤 TTY 디바이스로 루트 로그인이 가능한지 설정합니다. 불필요한 디바이스는 주석처리 합니다.

     

  • 일반 유저의 su root 방지

    특정 유저만 su root 할수 있도록 설정하려면 다음과 같이합니다.

     /etc/pam.d/su 파일의 처음에 다음을 추가합니다.
    
    auth sufficient /lib/security/pam_rootok.so debug
    auth required /lib/security/Pam_wheel.so group=wheel
    
    /etc/group 의 wheel 그룹에 su root를 허용하고자 하는 사용자 그룹 등록합니다.
    
    wheel:x:10:root,someone 
    
  • 쉘 로그 파일

    bash 쉘은 500여개의 지난 명령어를 ~/.bash_history 에 남깁니다. 다음과 같이 크기를 줄이거나, 0로 설정해 아예 로그를 남기지 않도록 합니다.

     ~/.bash_profile 에 
    HISTFILESIZE=30 
    HISTSIZE=30
    
  • Control-Alt-Delete 키를 사용하지 못하도록 합니다.

    /etc/inittab 파일에서 다음과 같은 라인을 찾아 주석처리 합니다.

    #ca::ctrlaltdel:/sbin/shutdown -t3 -r now

     

  • "/etc/rc.d/init.d" 디렉토리와 파일들의 퍼미션 수정

    chmod -R 700 /etc/rc.d/init.d/*

    위와 같이 설정해서 루트만이 억세스 할수 있도록 합니다.

     

  • 시스템 정보 숨기기

    기본적으로 리눅스 서버로 로그인 할때 배포본, 버젼, 커널 버젼, 서버이름 등이 나타나도록 되어 있습니다. 이것은 서버를 노리는 크랙커들에게 더 많은 정보를 줄뿐입니다.

    1. "/etc/rc.d/rc.local" 의 수정

      rc.local 매 부팅시마다 /etc/issue 파일을 생성하는 루틴이 있습니다. 이 부분을 모두 주석처리 합니다.

       # This will overwrite /etc/issue at every boot.  So, make any changes you 
      	# want to make to /etc/issue here or you will lose them when you reboot. 
      	#echo "" > /etc/issue 
      	#echo "$R" >> /etc/issue 
      	#echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue 
      	# 
      	#cp -f /etc/issue /etc/issue.net 
      	#echo >> /etc/issue 
      	
    2. 이슈 파일 삭제

       

       rm -f /etc/issue 
      	rm -f /etc/issue.net
      	
  • SUID/SGID 프로그램 찾기

    일반 유저가 루트 권한으로 실행 시킬수 있는 불필요한 SUID/SGID 프로그램들은 최소화 합니다. 먼저, 다음과 같이 SUID/SGID 퍼미션의 파일들을 찾아내서

    find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls ­lg {} \;

    모드를 바꾸어 줍니다. chmod a-s [program]


  • 반응형
    댓글
    반응형
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/11   »
    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
    글 보관함