윈디하나의 솔라나라: 솔라리스 기본설정



들어가기 전에





1. 읽기전에



  • 소프트웨어 설치 문서에 생략되어있는 공통 설정 사항에 대해 설명한다. 설치 직후에 해야 할 일에 대해 설명하고 있는 셈이다.
  • 다른 부분은 몰라도, LD_LIBRARY_PATH와 PATH 환경변수는 반드시 일치해야 한다.
  • APM과 같은 프로그램은 모두 /usr/local 디렉토리 안에 설치할 것이기 때문에 용량을 충분히준다. 필자는 /usr/local을 4GB 주었다.
  • 본 문서는 솔라리스 9 x86 9/04를 기준으로 작성했다. 솔라리스 10에 맞춰서 조금씩 수정하고 있는 중이다.


2. 솔라리스 설정



  1. 네트워크 설정 확인. 네트워크가 동작하는지 확인해야 한다. 아직 DNS가 설치된것은 아니므로, 도메인으로 외부 서버에 접속할 수 없다.

    # cat /etc/hosts 1)
    127.0.0.1 localhost
    192.168.0.11 wl loghost
    # cat /etc/hostname.pcn0 2)
    wl
    # cat /etc/netmasks 3)
    192.168.0.0 255.255.255.0
    # cat /etc/defaultrouter 4)
    192.168.0.1
    # ifconfig -a 5)
    lo0: flags=1000849 mtu 8232 index 1
    inet 127.0.0.1 netmask ff000000
    pcn0: flags=1000843 mtu 1500 index 2
    inet 192.168.0.11 netmask ffffff00 broadcast 192.168.0.255

    1) /etc/hosts에 자신의 호스트 이름과 맞는 IP가 입력되어있는지 확인한다. 이 예제에서 호스트 이름은 wl 이며, 호스트의IP는 192.168.0.11 이다.

    2) NIC와 호스트이름을 확인한다. pcn0는 솔라리스의 pcn 이라는 NIC의 첫번째 드라이버라는 뜻으로 벤더마다 다르다. (솔라리스 스팍용은 hme로 되어있을것이다) pcn0 인터페이스에 wl 호스트의 IP를 넣을 것이다.

    3) netmask를 확인한다. 192.168.0.11의 경우 192.168.0.0/255.255.255.0에 포함된다. 따라서 넷마스크값으로 255.255.255.0 를 정해줄 것이다.

    4) 기본 라우터를 확인한다. 윈도우XP로 따지자면 게이트웨이에 해당된다.

    5) ifconfig -a 를 해보면 pcn0에 IP및 넷마스크가 입력된 것을 확인할 수 있다. 이 정보가 정확하면, 다음으로 단계로 넘어간다. 만약 정확하지 않다면 위 파일들을 고치거나, /usr/sbin/sys-unconfig 명령을 실행해 재시작후, 네트워크 설정을 다시 한다.


  2. 네트워크 테스트

    예제의 네트워크 구성

    ┌─┐
    │A├──┐
    └─┘ ┌┴─┐ ┌───┐ ┏───┓
        │허브├─┤라우터├─┤인터넷├─
    ┌─┐ └┬─┘ └───┘ ┗───┛
    │B├──┘
    └─┘


    A: 세팅하고 있는 호스트. 192.168.0.11
    B: 이미 세팅되었으며 정상 작동하고 있는 호스트. 192.168.0.3
    라우터: 192.168.0.1


    1. 같은 스위치/허브에 물려있는 호스트로 PING 테스트

      # ping 192.168.0.3
      192.168.0.3 is alive
      #
      - 성공시 NIC와 네트워크 케이블, IP세팅, 스위치의 작동은 정상임
      - 실패시 솔라리스 설정, 호스트에 연결되어있는 케이블 및 NIC 드라이버등을 점검

    2. 라우터로 PING 테스트


      # ping 192.168.0.1
      192.168.0.1 is alive
      #
      - 성공시 라우터까지 가는 장비 스위치/허브들도 정상임. 라우터도 응답 하고 있음.
      - 실패시 라우터 관리자에게 문의 (라우터가 PING응답을 하지 않도록 설정한 경우도 있음)

    3. 외부 호스트로 PING 테스트

      # ping 211.174.186.251
      211.174.186.251 is alive
      #
      - 성공시 라우터의 설정이 정상적으로 되어있으며 네트워크는 정상적으로 작동함
      - 실패시 라우터 관리자에게 문의 (외부에 있는 임의의 호스트가 PING응답을 하지 않도록 설정한 경우도 있음)

    4. 도메인으로 ping 테스트

      # ping www.solarisschool.com
      www.solarisschool.com is alive
      #
      - 성공시 도메인 서버 세팅 및 도메인 서버가 제대로 작동함
      - 실패시 도메인 서버 세팅 확인 및 다른 도메인 서버 사용(이 문서에서 도메인 세팅방법은 하단에 나와있다)


  3. 선 권장 패치 실행
    패치는 http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/patch-access 에서 받을 수 있다. 이곳에서 원하는 버전과 아키텍처를 선택한후 다운로드 하면 된다. 솔라리스 9 x86의 경우 http://patches.sun.com/clusters/9_x86_Recommended.zip 또는 http://192.18.108.60/clusters/9_x86_Recommended.zip(192.18.108.60은 patchs.sun.com의 IP)에서 직접 받아도 된다. 이파일은 솔라리스 전체 패치가 아니라 선에서 권장하는 권장패치일 뿐이다.


  4. # wget http://patches.sun.com/clusters/9_x86_Recommended.zip
    # unzip 9_x86_Recommended.zip
    # cd 9_x86_Recommended
    # ./install_cluster
    Are you ready to continue with install? [y/n]: y
    Installing xxxxxx-yy...
    Installation of xxxxxx-yy failed. Return code z. 1)
    # sync
    # sync
    # sync
    # reboot

    1) z에 리턴된 코드중 2, 8, 35번은 무시해도 좋다. 코드에 대한 전체 설명은 message.html을 참고한다.

    2 Attempt to apply a patch that's already been applied

    8 Attempting to patch a package that is not installed

    35 Later revision already installed


  5. root의 기본 셸과 홈 디렉토리를 변경한다. 아울러 패스워드 암호화 방식도 MD5로 변경한다.

    # mkdir /root
    # vi /etc/passwd
    root:x:0:1:Super-User:/root:/bin/bash
    # vi /etc/security/policy.conf
    CRYPT_ALGORITHMS_ALLOW=1,2a,md5 1)
    CRYPT_DEFAULT=md5 2)
    # passwd root 3)

    1) md5가 있는지 확인한다.

    2) __unix__ 를 md5로 변경한다.

    1: UNIX crypt 알고리즘 사용. 기본값. __unix__ 와 동일하다.

    2a: Blowfish 알고리즘 사용

    md5: MD5 알고리즘 사용

    이후 패스워드 변경시 /etc/shadow파일을 보면 패스워드 필드가 $md5 로 시작하는 것을 볼 수 있다. 8자 이상의 패스워드도 지원해준다. 참고로 *LK*는 잠금상태, NP는 로그인 불가상태를 의미한다.

    3) MD5 암호화를 위해 root 패스워드를 한번 더 변경한다.

  6. 환경 설정 파일을 변경한다. 필자는 /etc/profile을 변경한다. 가장 아래줄에 다음과 같이 추가해준다.


  7. # vi /etc/profile
    alias ll="ls -alF"
    LANG=ko; export LANG
    tty -s && stty -istrip -parenb cs8

    PS1="\u@\h \w \\$ "; export PS1
    EDITOR=vi; export EDITOR
    CC=gcc; export CC
    CPP="gcc -E"; export CPP
    PATH=/usr/local/bin:/usr/sfw/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/ccs/bin; export PATH
    LD_LIBRARY_PATH=/usr/local/xml/lib:/usr/lib:/usr/local/lib:/usr/ucblib:/usr/ccs/lib:/usr/sfw/lib; export LD_LIBRARY_PATH
    #

    - 이 문서에서 가장 중요한 부분이 PATH 환경변수 세팅과 LD_LIBRARY_PATH 환경변수 세팅이다. 꼭 맞춰주자.
  8. 도메인 서버 세팅

    nsswitch.conf파일의 hosts: 부분을 찾아 dns를 추가해준다

    # vi /etc/nsswitch.conf
    hosts: files dns

    # vi /etc/resolv.conf
    domain xxxx.com
    nameserver 168.126.63.1 # 한국통신의 DNS 서버이다.
    nameserver 168.126.63.2

  9. SAR(System Activity Reporter)를 설정해준다.


  10. # vi /etc/init.d/perf
    에서 화면 내용의 지시에 따라 언 코멘트
    # vi /var/spool/cron/crontabs/sys
    에서 지시에 따라 언 코멘트
    # /etc/init.d/perf
    # /etc/rc2.d/S75cron stop
    # /etc/rc2.d/S75cron start

  11. 사용자를 추가해준다.


  12. # useradd -d /export/home/windy -g staff -m -u 101 -s /bin/bash windy
    # passwd windy

  13. 시간을 맞춘다. 시간은 한국 표준과학연구원의 원자시계 타임서버에서 가져온다. /usr/bin/rdate time.kriss.re.kr 이 맞으나 재시작전이라 도메인으로 찾지 못하기 때문에 IP로 접속한다. 만약 제공받는 ISP에 타임서버 또는 NTP서버가 있다면 이를 이용하는 것이 더 좋다. cron을 이용해 최소 하루에 한번정도는 실행해 시간을 맞추도록 하자.



  14. # /usr/bin/rdate 203.254.163.74

  15. 가뿐하게 한번 재시작해준다.


  16. # sync
    # sync
    # reboot


3. 기본 프로그램 설치


대부분 http://www.sunfreeware.com에서 받아 설치하는 것으로 했다. 링크는 현재 개인페이지로 했다. 각 파일에 대한 MD5는 다음과 같다. 이외에 필요한것이 있다면 그때 따로 소개하도록 하겠다.

MD5값 파일이름 패키지
e9993676d2c63417bea3adcaa0825e87 md5.tar.gz -
961e20471ac3514a171132ef1abbe8b0 gcc_small-3.4.2-sol9-intel-local.gz SMCgcc342s
0b62e11bae91e423c42737c7a08e0ecb libiconv-1.8-sol9-intel-local.gz SMCliconv
a4be1a0e4fa84da121c32d5d458489c8 top-3.5.1-sol9-intel-local.gz SMCtop


  1. MD5
    md5.tar.gz

    이 파일은 www.sun.com에서 받았다.

    root@wl ~ # gtar xvfz md5.tar.gz
    root@wl ~ # cd md5
    root@wl ~ # mv * /usr/local/bin
    root@wl ~ # cd /usr/local/bin
    root@wl /usr/local/bin # ln -s md5-x86 md5



  2. gcc 또는 gcc 라이브러리

    gcc_small-3.4.2-sol9-intel-local.gz libgcc-3.4.2-sol9-intel-local.gz(라이브러리만)

    libiconv-1.8-sol9-intel-local.gz

    root@wl ~ # gunzip gcc_small-3.4.2-sol9-intel-local.gz
    root@wl ~ # pkgadd -d gcc_small-3.4.2-sol9-intel-local
    root@wl ~ # gunzip libiconv-1.8-sol9-intel-local.gz
    root@wl ~ # pkgadd -d libiconv-1.8-sol9-intel-local
    root@wl ~ # cd /usr/local/lib
    root@wl /usr/local/lib # ln -s gcc gcc-lib
    root@wl /usr/local/lib # /usr/local/libexec/gcc/i386-pc-solaris2.9/3.4.2/install-tools/mkheaders

    ※ 헤더파일 갱신. 위 내용은 gcc를 small 버전으로 설치했을때에만 해당된다. 풀버전인 경우 디렉토리 구조가 약간 다르다.

    ※ gcc를 라이브러리로 설치(libgcc-3.4.2-sol9-intel-local.gz)한 경우 패키지만 설치하면 된다. makeheaders를 해야할 필요 없다.


  3. top

    top-3.5.1-sol9-intel-local.gz

    root@wl ~ # gunzip top-3.5.1-sol9-intel-local.gz
    root@wl ~ # pkgadd -d top-3.5.1-sol9-intel-local

    - top에 대한 설명은 top.html을 참고한다.





2006/01/09 10:31 2006/01/09 10:31

Automount

from Solaris/일반 2006/01/09 10:20
Automount의 특징

필요에의해서 file system이 마운트된다.
File system은 보다 효과적으로 자동 마운트되어질 수있다.
File system은 자동으로 unmount된다.
File system은 쓰는 동안에는 마운드 되어서 있고, 5분동안 안쓰면 자동으로 unmount된다.
 

   Automount는 어떻게 작동하는가?

The client autofs file system
Autofs 화일 시스템은 client system의 /etc 디렉토리에있는 automount  maps에 정의되어 있다. Automounting을 모니터링하는 프로그램인 automount는 현재 마운트되어 있지 않은 화일시스템을 사용하려하는 요청을 받으면 automountd를 부르고, 그것은 요청된 화일 시스템을 실제로 마운트 한다. 시스템 부팅시에 불리어지는 automount 프로그램은 autofs mount의 초기설정을 생성하기 위해서 auto_master file의 master map을 읽는다. Automountd daemon은 automount 프로그램에 의해서 시작되고 요청에 의해서 화일 시스템을 마운트한다. Automount daemon은 automount 명령으로 부터 완전히 독립적이다. 그래서 automountd daemon을 시작하거나 stop 없이 맵정보를 변환하거나 삭제, 추가가 가능하다.
 

   Automount 명령어
 

direct map을 생성하거나 master map을 변환할 때, automount 명령어를 실행함으로써 효과를 볼 수 있다.
Command Format
         automount [-t duration] [-v]

Options
        -t     duration, 초단위로 시간을 설정, 사용하지않는 시간, defualt 5분
        -v    verbose mode

   The Three autofs Maps

Master map - automount 명령어에 의해서 사용되어지는 file. 이 map의 기능은 autofs file system을 설치하기 위해서 사용되어 지는 다른 map이 기록되어 있다.
Direct map - mount point가 full path name으로 적혀있는 map. 이 map의 기능은 client상에 mount point를 지적한다.
Indirect map - 상대 path로 mount point가 구성되어있고, 이 map의 기능은 client상의 mount를 설립하기 위해서 사용되어 지는 상대 path를 사용한다.
   The Three autofs Maps-Examples
 
      * Master Map

        /etc/auto_master
         # Master map for automaster
         #
         +auto_master
         /-           auto_direct
         /net        -hosts      -nosuid
         /home    auto_home
         /xfn        -xfn
 
      * Direct Map

        /etc/auto_direct
         # Superuser-created direct map for automounter
         #
         /usr/frame              -ro,soft mars:/export/framemaker,v4.0
         /usr/local               -ro,soft jupiter:/export/unbundled
         /usr/share/man     -ro,soft sun,moon,stars:/usr/share/man
 
      * Indirect Map

        /etc/auto_home
         # Home directory map for automounter
         #
         +auto_home
         stevenu               starbug:/export/home/stevenu
         johnnyd               comet:/export/home/johnnyd
         wkd                      mars:/export/home/wkd
         JTkirk                   reddwarf:/export/home/JTkirk
 

   The Master Map

mount_point : 이것은 directory의 full path name이고, 만약 rm directory가 존재하지 않으면 autofs는 가능하면 그것을 생성한다.
map_name : direct map 또는 indirect map의 이름, 이것은 mounting 정보에 대한 방향이다.
mount-option : 이것은 NFS mount에 대한 option과 동일하다.
 
   Direct Map Entries

    /- entry는 direct map에 대한 mount point이다.
    /-는 /etc/auto_direct file에 정의된 full path name이다.

   Indirect Map Entries

    /net, /home, /xfn entris는 indirect map에 대한 mount point이다.
    -host, auto_home, and -xfn map에는 단지 상대 path만 적혀있다.
    Indirect map은 master map으로부터 초기 mount point만 얻는다.

   host map

    /etc/inet/hosts file에 적혀있는 각 NFS server로부터 모든 share된 정보를 /net/host directory에 만든다.
 
   Direct map

key : mount point의 full path name
options : The specific option for a given entry
location : The location of the resource specified in server:/pathname notation
   Indirect map

key : /etc/auto_master map에 정해져 있는 path name을 처음으로 삼는다.
option : The specific options for given entry
location : The location of the file resource specified in server:/pathname notation
 
   The Substitution String for an Indirect map

    * mars:/export/home/
      NFS server로 부터 /export/home/loginID directory mars의 /home/login ID로 마운트하려고 할때 사용
 

   How to set up a direct map

    automount daemon을 이용해서 Solaris 2.x man page를 어떻게 setup하는지 설명

/etc/master file 에서 +auto_master entry앞에 # 처리
/etc/master file에 /- auto_direct entry를 추가
/etc/auto_direct file을 만들고, 원하는 entry를 추가한다.
         /usr/share/man     -ro       server:/usr/share/man

automount -v
 
   How to setup an indirect map

/etc/auto_master file을 수정
          +auto_master를 # 처리 patch directory를 추가
          /services           auto_patch

/etc/auto_patch map 을 생성
          patch                  mars:/export/patch

automount -v
 

Example
 
 # pkginfo SUNWman
 # pkgrm SUNWman
 # man ls
 # edit /etc/auto_master
    #+auto_master
    (/etc/auto_master에 다음 라인을 추가)
    /-          /etc/auto_direct
    (/etc/auto_direct에 다음 라인을 추가)
    /usr/share/man    -ro         server:/usr/share/man
 # automount -v
 # man ls -> 확인
2006/01/09 10:20 2006/01/09 10:20
Tag //

TCP-WRAPPER

from Solaris/일반 2006/01/09 10:19
--TCP Wrapper 설치법(Solaris 8)--
    1. TCP Wrapper 란?
    TCP를 기반으로 한 네트워크 서비스(SYSTAT, FINGER, FTP, TELNET,
    RLOGIN, RSH, EXEC, TFTP, TALK, and other network services.)의청을
    받아 그 서비스를 실행하기전에 요청한 호스트에 대해 보안상으로
    필요한 검사를 하여 서비스가 실행되기 이전에 공격을 막을 수 있도록
    해주는 프로그램이다.

    2. tcpwrapper package 설치법

    2-1. www.sunfreeware.com에서 tcp_wrappers-7.6-sol8-sparc-local.gz 다운받는다.

    2-2. 압축 풀고 설치한다.
    # gzip -d tcp_wrappers-7.6-sol8-sparc-local.gz
    # pkgadd -d tcp_wrappers-7.6-sol8-sparc-local

    다음과 같은 패키지를 사용할 수 있습니다.
    1  SMCtcpwr     tcp_wrappers
                      (sparc) 7.6

    처리할 패키지(들)를 선택하십시오.(또는 모든 패키지를
    처리하려면'all'을 입력하십시오.) (default: all) [?,??,q]:

    패키지 예 <SMCtcpwr>(을)를 </data/tcp_wrappers-7.6-sol8-sparc-local>에서 처리 중

    tcp_wrappers
    (sparc) 7.6
    Wietse Venema
    디렉토리 </usr/local>(을)를 패키지의 기본 디렉토리로 사용
    ## 패키지 정보 처리 중
    ## 시스템 정보 처리 중
       5개 패키지 경로 이름이 이미 제대로 설치되어 있습니다.
    ## 디스크 공간 요구 검증 중
    ## 이미 설치되어 있는 패키지와의 충돌 여부를 확인하고 있습니다.
    ## setuid/setgid 프로그램 점검

    tcp_wrappers(을)를 <SMCtcpwr>(으)로 설치

    ## 1째 (전체: 1) 부분 설치
    /usr/local/bin/safe_finger
    /usr/local/bin/tcpd
    /usr/local/bin/tcpdchk
    /usr/local/bin/tcpdmatch
    /usr/local/bin/try-from
    /usr/local/doc/tcp_wrappers/BLURB
    /usr/local/doc/tcp_wrappers/Banners.Makefile
    /usr/local/doc/tcp_wrappers/CHANGES
    /usr/local/doc/tcp_wrappers/DISCLAIMER
    /usr/local/doc/tcp_wrappers/Makefile
    /usr/local/doc/tcp_wrappers/README
    /usr/local/doc/tcp_wrappers/README.IRIX
    /usr/local/doc/tcp_wrappers/README.NIS
    /usr/local/include/tcpd.h
    /usr/local/lib/libwrap.a
    /usr/local/man/man3/hosts_access.3
    /usr/local/man/man5/hosts_access.5
    /usr/local/man/man5/hosts_options.5
    /usr/local/man/man8/tcpd.8
    /usr/local/man/man8/tcpdchk.8
    /usr/local/man/man8/tcpdmatch.8
    [ 클래스 <none> 검증 ]

    <SMCtcpwr>(이)가 성공적으로 설치되었습니다.


    3. 사용방법
    3-1. /etc/inetd.conf 수정한다.
    기존
    ftp     stream  tcp6    nowait  root    /usr/sbin/in.ftpd       in.ftpd
    telnet  stream  tcp6    nowait  root    /usr/sbin/in.telnetd    in.telnetd

   수정후
    telnet  stream  tcp     nowait  root    /usr/local/bin/tcpd     in.telnetd
    ftp     stream  tcp     nowait  root    /usr/local/bin/tcpd     in.ftpd

    3-2. /etc/hosts.allow, /etc/hosts.deny 수정한다.
    # vi /etc/hosts.deny
    ALL: ALL       ----> 모두 막는다.

    예) ALL: ALL  ----> 앞의 ALL은 모든 서비스를 의미하며, 뒷 부분의 ALL은 모든곳(IP address)을 의미합니다.  
                       그리고 접근이 허용되어야 하는 서비스와 접근하는 곳을 /etc/hosts.allow에 등록을 합니다


    # vi /etc/hosts.allow   ---> 허락해 준다.
    in.telnetd: 192.168.0.7, 192.168.0.50
    in.ftpd: 192.168.0.7

    예) ALL: localhost     ---> 로컬호스트로부터의 액세스는 전부 인정한다
        in.telnetd: 192.168.0.0/255.255.255.0   ---> 텔넷은 자신의 네트웍 인정
        sshd2:ALL in.telnetd: 10.10.10.10 ipop3d:ALL ---->ssh2d와 ipop3d에 대해서는 모든 곳을 허용해 놓았고,
        telnet 접근에 대해서는 10.10.10.10 만 허용해  놓은 것입니다.

    ----* 콘트롤 화일의 기술법---------------------------------------
     -. 콘트롤 화일의 서식

       서버프로그램: 클라이언트 리스트 [ : 쉘의 리스트 ]

     -. 클라이언트 리스트 기술례

       a) 호스트 IP Address에 의한 기술

       165.133.1.43

       b) 네트웍 어드레스와 네트 마스크에 의한 기술

       165.133.3.0/255.255.255.0

       c) 네트 그룹에 의한 기술

       @local-network

            (이 경우 지정한 네트웍 그룹이 /etc/netgroup에 등록 필요)

       d) 호스트 명에 의한 기술

       test.bigcom.co.kr

       .bigcom.co.kr

       (상기 도메인명만을 기술하면 그 도메인에 등록된 모든 호스트에 적용)

       e) /etc/host내의 모든 로칼 호스트명을 표시 하는와일드카드

       LOCAL

       f) 모든 호스트를 표시 하는 와일드카드

       ALL

       g) 유저명과 호스트명의 조합 사용

       webmaster@domainname

   -. 기술식과 와일드카드의 표기 방법은 상기외에도 있으므로 온라인  
       매뉴얼을 찾아보기 바란다.

   -. hosts.allow와 hosts.deny에 기술되지 않은 호스트에 대하여는
      엑세스가 허가되므로 통상은 hosts.deny 에서 모든 호스트를
      거부한후 hosts.allow 에서 엑세스 허가를 지정하는 방법을 권한다.

   -. 본 문서에서의 클라이언트 리스트의 쉘 스크립트는 생략해도 무방하나
      여기서는 콘트롤 화일내의 패턴 매치가 참일경우

      쉘 스크립트가 수행 되도록 하였으므로 참고 바란다.

      특히, %h, %d 등은 TCP Wrapper에서의 표현으로 각각 호스트명과 데몬

      프로세스명을 나타낸다.
   ----------------------------------------------------------------------------

    3-3.  inetd 데몬 재실행 시킨다.
    # ps -ef | grep inetd
        root   217     1  0 15:50:41 ?        0:01 /usr/sbin/inetd -s
        root   815   482  0 18:31:24 pts/2    0:00 grep inetd
    # kill -HUP 217    

    4. 확인
     tcpdchk는 구문이나 랩되어 있지 않은 서비스를 체크하는 툴
     tcpdmatch는 클라이언트로 부터 액세스가 어떻게 표시 되는지를 보여준다.

    # tcpdmatch in.telnetd 192.168.0.7
    client:   address  192.168.0.7
    server:   process  in.telnetd
    matched:  /etc/hosts.allow line 1
    access:   granted

    # tcpdmatch in.ftpd 192.168.0.50
    client:   address  192.168.0.50
    server:   process  in.ftpd




    ---Solaris9에서 tcp-wrapper설치---
    TCP warappper 가 solaris 9 버젼 부터는 기본적으로 O/S 에 포함 되어 있습니다.
    그로 인해 이 외부에서 오는 telnet , ftp 등의 서비스를 중단 또는
    허가를 할 수 있습니다.
    즉 기본적인 방화벽 역활을 할 수 있지요..

    설정 방법

    1) /etc/default/inetd 파일안에 다음의 설정을 "YES" 로 선언함.

    #ENABLE_TCPWRAPPERS=NO
    의 내용을
    ENABLE_TCPWRAPPERS=YES
    로 바꿈..

    2) inetd 프로세스를 제기동 합니다.
    [/] # pkill -9 inetd
    [/] # /etc/rc2.d/S79inetsvc start

    3) 외부에서 접속하는 client 에 대하여 허가와 불가를 선언함.
    3.1) 모든 접속에 대해 불가를 선언함.
    [/] # vi /etc/hosts.deny
    ALL:ALL

    3.2) 특별히 허가 하려는 접속과 client 를 선언함.
    [/] # vi /etc/hosts.allow
    in.telnetd:107.2.1.1 <-- 107.2.1.1 에서 telnet 으로 접근만 허가함.
    ALL:localhost <-- 자기 자신은 모든것에 대하여 허가함.

    % 정리 하자면 외부에서 오는 모든 접속에 대해서는 불가를 선언하고난후
    그 중에서 특별한 client 에서 오는 telnet 만 접속를 허가하는 방법임.


     4) 좀더 자세한 허가와 불가방법에 대해서는 다음의 man page 를 참조하세요..

    [/] # man -M /usr/sfw/share/man -s4 hosts_access


2006/01/09 10:19 2006/01/09 10:19
TCP warappper 가 solaris 9 버젼 부터는 기본적으로 O/S 에 포함 되어 있습니다.
그로 인해 이 외부에서 오는 telnet , ftp 등의 서비스를 중단 또는
허가를 할 수 있습니다.
즉 기본적인 방화벽 역활을 할 수 있지요..

설정 방법

1) /etc/default/inetd 파일안에 다음의 설정을 "YES" 로 선언함.

#ENABLE_TCPWRAPPERS=NO
의 내용을
ENABLE_TCPWRAPPERS=YES
로 바꿈..

2) inetd 프로세스를 제기동 합니다.
[/] # pkill -9 inetd
[/] # /etc/rc2.d/S79inetsvc start

3) 외부에서 접속하는 client 에 대하여 허가와 불가를 선언함.
3.1) 모든 접속에 대해 불가를 선언함.
[/] # vi /etc/hosts.deny
ALL:ALL

3.2) 특별히 허가 하려는 접속과 client 를 선언함.
[/] # vi /etc/hosts.allow
in.telnetd:107.2.1.1 <-- 107.2.1.1 에서 telnet 으로 접근만 허가함.
ALL:localhost <-- 자기 자신은 모든것에 대하여 허가함.

% 정리 하자면 외부에서 오는 모든 접속에 대해서는 불가를 선언하고난후
그 중에서 특별한 client 에서 오는 telnet 만 접속를 허가하는 방법임.


4) 좀더 자세한 허가와 불가방법에 대해서는 다음의 man page 를 참조하세요..

[/] # man -M /usr/sfw/share/man -s4 hosts_access
2006/01/09 10:15 2006/01/09 10:15

openssh

from Solaris/일반 2006/01/09 02:48
SSH설치




ssh는 Secure Shell의 약자로 쉽게 생각하면 전송되는 패킷을 암호화시켜

네트웍상에 떠돌아 다니는 패킷을 어떤 놈이 스니퍼하더라도 그 내용이 무엇인지

파악하기 곤란(?)하게 한다.



실제 TCP/IP의 자체결함(?)으로 인해 네트웍상의 패킷을 잡아서 보는 것은

그리 어려운 일이 아니다. 그냥 스니퍼툴을 사용하면 됩니다.



SSH는 OpenSSH(www.openssh.com)를 사용했다.

그냥 ssh(www.ssh.org)도 있으나, 왠일인지 다운로드링크가 막혀있었다.

한마디로 사이트가 썰렁해서.. 이에 비해 OpenSSH는 뭔가 진행된다는 분위기가...



OpenSSH는 설치시 OpenSSL(www.openssl.org)이나 SSLeay를 필요로 한다.

여기서는 OpenSSL을 사용하겠다. SSL(Secure Socket Layer)은 암호화관련라이브러리라고 생각하면 되겠다.

나중에(?) https://으로 시작하는 보안걸린 웹페이지를 만들때도 사용된다.





OpenSSL설치

OpenSSH를 설치전 먼저 OpenSSL을 설치해야 한다.

전형적인 유닉스 설치방법인 configure, make, make install만 해주면 끝이다.



일단 www.openssl.org사이트에서 다운로드 받아온다.

이 글 작성시 최신버전은 openssl-0.9.6.tgz였다.



% tar xvzf openssl-0.9.6.tgz -C /usr/local/src

% cd /usr/local/src/openssl-0.9.6

% ./config (./configure에 비해 이 놈은 OS환경을 자동판별합니다)

% make

% make test

% make install



위의 과정을 거치면 몇몇 놈은 /usr하위의 어디어디로 들어가고, 몇몇놈은 /usr/local/ssl디렉토리로 간다

(자세한건 본인도 모른다. 아무 생각없이 설치했다)





OpenSSH설치

이 놈도 크게 어려울 것이 없다.

그냥 일사천리 configure, make, make install로 끝난다.



% tar xvzf openssh-2.3.0p1.tgz -C /usr/local/src

% cd /usr/local/src/openssh-2.3.0p1

% ./configure --prefix=/usr/local/openssh (나중에 uninstall하기 쉽게 디렉토리를 지정하자)

% make

% make install



위의 과정을 거치면 /usr/local/openssh에 모든 파일이 들어간다.





OpenSSH실행

일단 ssh를 사용하려면 서버와 클라이언트가 있는 것은 당연하다.

자신의 컴퓨터가 서버로 사용될 것이라면 /usr/local/openssh/sbin에 있는

sshd를 실행시킨다. 데몬이므로 그냥 sshd만 입력하고 엔터키를 치면 알아서 백그라운드로 돌아간다.



% cd /usr/local/openssh/sbin

% sshd



이제 서버가 실행중이다.

클라이언트로 이 놈의 서버에 접속해보자.

접속은 공개키방식으로도 가능하나, 본인은 패스워드방식으로 접속했다.

사실 공개키방식으로 하는 법은 번잡스러워서... 흠..



중요한 사실은 리눅스의 경우 대부분 PAM방식으로 사용자 인증을 받는다는 것이다.

따라서 그냥 ssh로 연결하면 십중팔구 인증실패가 발생한다.



서버로 접속하기 전에, ssh에서 pam인증을 사용하기 위해 아래와 같이 해준다.



cp /usr/local/src/openssh-2.3.0p1/contrib/sshd.pam.generic /etc/pam.d/sshd



이제 인증방식도 제대로 설정이 되었다.

다음과 같이 하여 접속테스트 해본다.



[kang@maddog kang]$ ssh localhost

kang@localhost's password:

Last login: Sat Jan 27 13:43:03 2001 from localhost

[kang@maddog kang]$



위에서 묻는 패스워드는 유닉스계정에서 자신의 암호를 입력하면 된다.

흠.. 어려운 내용없다.



윈도에서 리눅스의 SSH를 이용해 접속하고 싶다면 SecureCRT를 이용하면 좋다.

설정방법은 알아서 하도록..

리눅스에서 어떤 암호방식을 사용하고.. 대충 연결이 어떤 식으로 되는가보려면

ssh에서 -v옵션(verbose)을 사용하면 SecureCRT에서 설정시 도움이 될 것이다.



다음의 본인의 SecureCRT의 설정내용이다.

인증방식은 password방식이다.







SecureCRT메인화면









Connect 다이얼로그









옵션화면







<< 추가부분 2001-07-14 >>


ssh에 관련된 명령어 사용법 정리



다음은 외부로 ssh접속하는 예이다.

접속하고자 하는 호스트의 계정은 @나 -l옵션으로 지정한다.



[kang@ns 일기]$ ssh kang@dev2.dbakorea.pe.kr

The authenticity of host 'dev2.dbakorea.pe.kr (211.41.23.252)' can't be established.

RSA key fingerprint is 17:77:be:5d:d2:c9:8d:d9:a5:70:27:bf:5c:9c:95:cc.

Are you sure you want to continue connecting (yes/no)? yes [처음 ssh연결시에만 표시된다]

Warning: Permanently added 'dev2.dbakorea.pe.kr' (RSA) to the list of known hosts.
.ssh디렉토리의

known_hosts2파일에 dev2호스트가 등록됨


kang@dev2.dbakorea.pe.kr's password:

Last login: Sat Jul 14 22:38:48 2001 from 211.222.174.13

[kang@dev2 kang]$ l



[kang@ns 일기]$ ssh kang@dev2.dbakorea.pe.kr

kang@dev2.dbakorea.pe.kr's password:

Last login: Sat Jul 14 23:22:30 2001 from 211.41.23.236

[kang@dev2 kang]$

[kang@dev2 kang]$ exit

logout

Connection to dev2.dbakorea.pe.kr closed.

[kang@ns 일기]$ ssh -l kang dev2.dbakorea.pe.kr @대신 -l 옵션으로 지정해도 된다.

kang@dev2.dbakorea.pe.kr's password:

Last login: Sat Jul 14 23:25:54 2001 from 211.41.23.236





다음은 로컬에 존재하는 파일을 외부호스트에 복사하는 예이다.

[kang@ns 학습할 것]$
scp make.txt kang@dev2.dbakorea.pe.kr:test

[로컬에 있는 make.txt파일을 외부호스트dev2의 test디렉토리에 복사]


kang@dev2.dbakorea.pe.kr's password: 비밀번호 입력

make.txt 100% |***************************************************| 70276 00:00





다음은 외부호스트에 존재하는 sample1.pc파일을 로컬로 복사하는 예이다.

[kang@ns kang]$ scp kang@dev2.dbakorea.pe.kr:test/sample1.pc .

kang@dev2.dbakorea.pe.kr's password:

sample1.pc 100% |***********************************************************************| 2352 00:00



사실 외부호스트와 계정이름이 동일하다면 계정을 지정하지 않고 다음과 같이 해도 된다.

[kang@ns kang]$ scp dev2.dbakorea.pe.kr:test/sample1.pc .

kang@dev2.dbakorea.pe.kr's password:

sample1.pc 100% |***********************************************************************| 2352 00:00

[kang@ns kang]$



하위디렉토리까지 모두 복사하고 싶으면 cp명령어와 마찬가지로 -r옵션도 사용가능하다.

다음은 ftp기능을 해주는 sftp를 사용하는 예이다.

[kang@ns 학습할 것]$ sftp kang@dev2.dbakorea.pe.kr ssh명령과 유사하다.

Connecting to dev2.dbakorea.pe.kr...

kang@dev2.dbakorea.pe.kr's password: 비밀번호입력

sftp> put gcc1.txt

Uploading gcc1.txt to /home/kang/gcc1.txt

sftp> get smsgw.log

Fetching /home/kang/smsgw.log to smsgw.log

sftp>

<< 추가부분 끝 >>






<< 추가부분 2001-11-15 >>

Secure Shell관련사이트



OpenSSH (www.openssh.org)

가장 유명한 SSH사이트

유닉스계열 OpenSSH사이트 - 원래 FreeBSD용이나, 다른 OS에 포팅하는 개념으로 제공





FreeSSH (http://www.freessh.org/)

무료로 사용가능한 SSH툴들의 정보를 제공



Networkdimplicity (http://www.networksimplicity.com/openssh/)

윈도용 OpenSSH사이트

Openssh.org의 윈도버전 사이트







[윈도 SFTP 클라이언트(ftp기능)]



1. Cuteftp Pro(www.globalscape.com)

상용 - 제일 좋다.(ftp, sftp, ..)



2. WinSCP(http://winscp.vse.cz/eng)

무료 - 모든 윈도버전에서 사용가능(XP제외..)

ssh서버만 사용가능

인스톨과정없음



3. Secure iXplorer(http://i-tree.org/ixplorer.htm)

무료 - ssh서버만 사용가능

인스톨필요





[ssh클라이언트(telnet기능)]



1. SecureCRT(www.vandyke.com)

상용 - 제일 좋다.



2. PuTTY(http://www.chiark.greenend.org.uk/~sgtatham/putty/)

무료 - 무료치고는 상당히 괜찮다.(권장)

telnet, ssh모두 지원

인스톨필요없음



3. Tera Term Pro(http://hp.vector.co.jp/authors/VA002416/teraterm.html)

무료 - 사용이 좀 불편(SSH지원을 위해선 Plugin을 별도 설치해야함)

TTSSH(ssh plugin) - http://www.zip.com.au/~roca/ttssh.html



2006/01/09 02:48 2006/01/09 02:48
Tag //
.문제 개요

/home 디렉토리에서 화일을 만들거나 디렉토리를 만들 때, 다음과 같은
오류메세지가 발생한다.

mkdir: Failed to make directory "/home/kmg"; Operation not applicable

OR

mkdir: 디렉토리 "/home/xx" 생성 실패; 해당 오퍼레이션이 아님

이 오류메세지가 나오는 원인은 시스템이 부팅될 때, 디폴트로 /home 디렉토리를 auto mount하기 위한 mount ponit로 사용하기 때문이다.

2.문제 분석

/home 디렉토리에 화일이나 디렉토리를 만들려면, /home 디렉토리가 auto mount point로 사용되지 못하게 하여야 한다. auto mount 기능이란 특정 NFS 서버에 사용자의 홈디렉토리를 만들어 두고, 각각의 클라이언트는 서버가 제공하는 홈디렉토리를 필요할 때마다 자동적으로 마운트되게 하는 것이다.
이러한 auto mount 기능이 제대로 구현이 되려면 다음과 같은 것이 필요하다.

1. NFS server/client 설정
2. NIS server/client 설정
3. auto mount configuration 설정

3.해결 방안

/home 디렉토리가 auto mount point로 사용되지 못하게 하려면 /etc/auto_master 화일에서

/home auto_home -nobrowse

라인을 comment out하고 시스템을 다시 부팅한다.

예제) 변경후의 /etc/auto_master

# Master map for automounter
#
+auto_master
/- auto_direct -ro,bg,intr,nosuid
/net -hosts -nosuid,nobrowse
# /home auto_home -nobrowse
/xfn -xfn

2006/01/09 01:09 2006/01/09 01:09
www.sun.com - 선의 모든 사이트로의 링크가 담겨져 있습니다
www.sun.com/bigadmin/ 이곳은 특히 관리자를 위한 리소스들이 있습니다.

sunsolve.sun.com - 로그인없이도 대부부분의 트러블슈팅및 정보 문서들을
참조할수 있습니다. 또한 각종 패치도 이곳에서 얻을수 있습니다.

sunfreeware.com - 이곳은 솔라리스쪽으로 포팅된 프리웨어들이 있는곳입니다.
스파크버전과 인텔버전 모두 이곳에서 패키지및 소스형태의 프로그램들을 얻을
수 있습니다.

docs.sun.com - 선과 관련된 하드웨어와 소프트웨어에대한 대부분의 책들을 이곳에서 얻을수 있습니다.  

comp.sys.sun.admin
comp.sys.sun.apps              -  뉴스그룹들입니다.
comp.sys.sun.hardware             뉴스서버 계정이 있으시면 질문도 올릴수
comp.unix.solaris                 있고 답도 받아보실수 있습니다.    
없다면 news.elim.net 과같은 무료 뉴스서버(쓰기는 안되는것 같더군요)에서 글들을 검색및 읽어보실수 있습니다.

서로서로 링크되어있기도하고 그렇습니다. 일단 먼저 docs.sun.com에가시면 하드웨어 노트와 각 솔라리스 릴리즈별 어드미니스트레이션에 관한 책을 먼저 찾아보시고 그다음 선솔브에서 찾아보시고 그다음 웹에서도 한번 찾아보시고 하시면 원하는 것들을 하나하나 얻어가지 않을까요?
2006/01/08 22:28 2006/01/08 22:28
솔라리스 패치 관리에 대해서 한번 알아보겠습니다. 리눅스의 경우에는 워낙에 사용자층이 두텁고 또 완전 오픈소스 구조라서 커널부터 명령어까지 취약점도 자주 발견되고 또 그에따라 패치도 자주 발표됩니다. 어떻게보면 좋은거지만 관리자 입장에서는 아주 짜증나는 일이겠지요..  

그런데 알고보면 솔라리스도 취약점과 그에대한 패치가 자주 나옵니다. 그런데 솔라리스 유저는 리눅스 유저만큼 패치에 대해서 민감하지 않은것 같습니다. 뭐.. 리눅스는 워낙에 exploit이 많이 발표되는터라 패치 안하면 작살나지만.. 반면에 솔라리스는 좀 덜하죠.. 그래서 침해사고도 리눅스보다는 덜 발생하는것 같습니다. 하지만 솔라리스도 가끔 치명적인 결함이 발견되곤 합니다.  

그리고 패치를 할때 recommended patch를 만병통치약으로 생각하시는것 같습니다. 시스템 설치하고 recommended patch 설치하고.. 그 다음에 또 패치 하십니까? 네.. 하시는 분들 계시죠.. 빠르면 한달에 한번.. 길면 생각날때마다 한번씩..^^

그사이에 많은 취약점이 나올겁니다. 간혹 치명적인 결함도 거기에 끼어있을테구요.. 그래서 결론은 "취약점이 발생할때마다 바로바로 패치를 해주자!!" 입니다. 음.. 근데 사실 저도 그렇게 못하고 있습니다 -_-

말이 좀 길어졌는데 이만 줄이구요.. 이제 패치 관리에 대해서 알아보겠습니다.



1. Recommended Patch Cluster

서버 관리자에게 아주 유익한 놈입니다. 현재까지 발생한 문제에 대한 모든 패치를 포함하고 있습니다. 썬에서 패치가 새로 나올때마다 업데이트를 하고 있기 때문에 시스템 처음 설치후 받아서 설치를 해주면 그 순간까지 알려진 모든 문제에 대한 패치를 하게되는 겁니다.

패치 과정은 설치 스크립트에 의해서 진행이 되며 설치하려는 패치가 시스템에 필요없는 경우에는 설치하지 않고 넘어갑니다. 관리자가 일일이 해야할 일을 알아서 다 해주는거죠..


1-1. 패치 클러스터 다운로드

http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/patch-access  

여기서 본인의 시스템에 맞는 패치 클러스터를 다운 받으세요.. 이렇게 받아서 서버로 다시 올리는 무식한 행동을 하고 싶지 않은 분들은 서버에서 wget을 이용해서 직접 받으셔도 됩니다.

# cd /var/tmp
# wget "ftp://sunsolve.sun.com/pub/patches/8_Recommended.zip" (sparc 사용자)
# wget "ftp://sunsolve.sun.com/pub/patches/8_x86_Recommended.zip" (x86 사용자)


1-2. 패치 클러스터 인스톨

클러스터를 설치할때는 싱글유저 모드에서 하도록 권장하고 있습니다. 이유는 패치중에 시스템에 어떤 변화가 발생하는것이 패치에 부정적인 영향을 줄 수 있기 때문입니다.  

저는 IDC에 가기 귀찮아서 주로 원격으로 설치를 하는데요.. ssh하고 필수 프로세스만 남겨두고 나머지는 다 내립니다. 그리고 일반 사용자가 로그인하지 못하도록 /etc/nologin 파일을 만들어놓고 설치를 합니다.  

뭐.. 아직까지는 문제가 발생한적은 없는데.. 이왕이면 전문가들이 하라는데로 싱글모드에서 하시기 바랍니다.

# unzip /var/tmp/8_*zip
# init S
# /var/tmp/8_*d/install_cluster

몇가지 질문에 예스로 대답하면 설치가 진행됩니다. 시스템 상태에 따라 설치시간은 차이가 있습니다.
설치가 끝나면 리부팅을 하셔야 합니다.

# rm -rf /var/tmp/8_*
# init 6





2. Security Alerts

위에서 패치 클러스터를 설치하였습니다. 이제 한동안은 보안 취약점에 대한 신경을 덜써도 될겁니다. 하지만 그게 오래가지는 못하겠죠..

그렇다고 몇일에 한번꼴로 클러스터를 설치 할 수도 없습니다. 그럼 이제부터 썬에서 새롭게 나오는 패치에 관한 정보를 얻을 수 있는 방법을 알아 보겠습니다.

http://sunsolve.sun.com/pub-cgi/search.pl?mode=results&origin=advanced&range=20&so=date&coll=fsalert&zone_32=category:security

주소가 좀 길죠.. 즐겨찾기에 추가해 놓으세요.. 여기서 새로운 취약점에 대한 정보를 볼 수 있고 그와 관련된 패치를 다운로드 할 수 있습니다. 그리고 아직 패치가 발표되지 않은 취약점의 경우에는 임시방편으로 취약점을 막을 수 있는 방법을 알려줍니다.  

이 페이지에 자주 접속해서 본인의 서버에서 사용하는 서비스에 대한 취약점이 나올 경우에는 해당 패치를 받아서 설치를 하시면 됩니다. 취약점에 대해 설명하는 페이지의 맨 마지막에 보면 Resolution 부분에 패치가 링크되어 있습니다.
클릭하시면 해당 패치에 대한 설명이 쭉 나오는데 패치를 하기 전에 우선 해당 패치가 시스템에 설치가 되어있는지를 먼저 알아보세요.

# showrev -p | grep 12345-12

결과가 안나올 경우에는 해당 패치를 받아서 설치하세요.. 그리고 패치를 받을때 패치에 대한 설명에서 Install Requirement와 Special Note 부분을 찾아서 읽어보시기 바랍니다.  

이 부분에는 해당 패치 설치 전/후에 어떤것을 해야 하는지에 대해서 나와있습니다. 보통 커널과 관련된 패치의 경우에는 리부팅을 요구하게 됩니다. 그러니 꼭 읽어보시고 설치를 하세요.

# cd /var/tmp; unzip 12345-12.zip
# patchadd 12345-12





3. Newsletter

마지막으로 썬의 뉴스레터를 받아서 보시기 바랍니다. 취약점과 패치에 관한 정보를 주기적으로 받아 볼 수 있습니다.

Patch Club Report와 Sun Alert Weekly Summary Report 이 두개만 보시면 될겁니다.

http://www.sun.com/newsletter
2006/01/08 22:21 2006/01/08 22:21