1. 참고 문서


2. Subversion 패키지 설치


$ yum install subversion

물론 이미 설치 되어 있다면 설치할 필요없다.


3. 저장소 생성


/home/svn 디렉토리를 SVN 서버의 홈으로 사용한다.

$ mkdir /home/svn
$ chown -R root:root /home/svn

4. 프로젝트 디렉토리 추가 - 프로젝트를 추가 할 때 마다 매번 작업


/home/svn/project_name 디렉토리를 프로젝트의 홈으로 사용한다.

project_name 부분은 프로젝트에 맞게 적절히 정하면 된다.

$ svnadmin create --fs-type fsfs /home/svn/project_name

프로젝트에 대한 권한 설정

/home/svn/project_name/conf/svnserve.conf 파일을 불러와서 아래와 같이 설정한다.

realm 은 repository 도메인 (외부에서 볼 때의 이름)이다.

[general]
anon-access = none
auth-access = write
# password-db = passwd
# authz-db = authz
realm = repositryname[sasl]
use-sasl = true
#min-encryption = 0
#max-encryption = 256

개인이 사용 할 때는 password-db 를 사용하고 use-sasl 을 막고 아이디와 비밀번호 설정을

/home/svn/project_name/conf/passwd 파일을 열어서

아이디 = 비밀번호 형식으로 관리하면 쉽다. 하지만 비밀번호가 노출되기 때문에 찝찝하면 sasl을 사용한다.



5. sasl 인증 추가 (아이디 비밀번호 추가)


saslpasswd2 명령 후에 비밀번호 및 확인 입력이 뜬다 그 때 아이디의 비밀번호를 입력한다.

sasldblistusers2 는 등록된 아이디의 목록을 볼 수 있다. 물론 비밀번호는 볼 수 없다.

$ saslpasswd2 -c -u 그룹명 아이디
$ sasldblistusers2

6. init 스크립트 만들기


부팅시 마다 subversion 서버를 실행하려면 service 스크립트를 만들어야 한다.

/etc/sysconfig/subversion 파일을 새로 생성하여 아래와 같이 입력한다.

OPTIONS="--threads --root /home/svn"

그리고 /etc/init.d/subversion 을 만들고 아래와 같이 입력한다.

#!/bin/bash
#
#   /etc/rc.d/init.d/subversion
#
# Starts the Subversion Daemon
#
# chkconfig: 2345 90 10
# description: Subversion Daemon
# processname: svnserve
source /etc/rc.d/init.d/functions
[ -x /usr/bin/svnserve ] || exit 1
### Default variables
SYSCONFIG="/etc/sysconfig/subversion"
### Read configuration
[ -r "$SYSCONFIG" ] && source "$SYSCONFIG"
RETVAL=0
prog="svnserve"
desc="Subversion Daemon"
start() {
        echo -n $"Starting $desc ($prog): "
   daemon $prog -d $OPTIONS
   RETVAL=$?
   [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
   echo
}
stop() {
   echo -n $"Shutting down $desc ($prog): "
   killproc $prog
   RETVAL=$?
   [ $RETVAL -eq 0 ] && success || failure
   echo
   [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
   return $RETVAL
}
case "$1" in
  start)
   start
   ;;
  stop)
   stop
   ;;
  restart)
   stop
   start
   RETVAL=$?
   ;;
  condrestart)
        [ -e /var/lock/subsys/$prog ] && restart
   RETVAL=$?
   ;;
  *)
   echo $"Usage: $0 {start|stop|restart|condrestart}"
   RETVAL=1
esac
exit $RETVAL

그 다음 실행 권한을 주고 서비스로 등록한다.

$ chmod +x /etc/init.d/subversion
$ cd /etc/init.d
$ chkconfig --add subversion && chkconfig subversion on

7. 서버 시작


서비스 모드

$ service subversion start

데몬 모드

$ svnserve -d -r /svn

8. 클라이언트 프로그램으로 접속 테스트 한다.


추천 클라이언트

이클립스용 : subversive

윈도우용 : tortoiseSVN


9. 기타 


서버 포트 : 3690

리눅스 삼바 smb.conf 파일 설정하기
 
# 이 파일은 삼바의 주요 설정 파일입니다.  앞으로 나오는 옵션들을 이해하기 위해
# 서는 smb.conf(5) 맨 페이지를 꼼꼼히 읽어 보시기 바랍니다. 삼바에는 방대한 양
# 의 설정 옵션이 있지만(어떻게 보면 너무 많다고 생각하실 수 있습니다), 다음 예
# 에서는 보여지지 않는 것들이 많습니다.
#
# ; (세미 콜론) 또는 # (해쉬) 로 시작하는 줄은 모두 주석이며 무시합니다.  다음
# 예에서는 주석에 대하여 # 를 사용하며 여러분이 작동시기킬 원할 지 모르는 옵션
# 에 대해서는 ; 문자로 구별하여 처리하였습니다.
#
# 주의: 설정 파일을 수정하고 나서는 기본적인 문법 오류 여부를 검사하기 위해
# "testparm" 명령을 실행해보십시오.
#
# 작성 : 김 정 균 <http://www.oops.org>
#
# 오역을 발견하시거나 추천할 사항이 있으시면 위의 주소로 연락을 주십시오.
# 그 이외의 일반적인 질문에 대해서는 답변하지 않습니다.

# 내부변수
# - %u : Samba에 접속한 사용자의 이름
# - %U : Samba에 접근할 때 사용한 사용자 이름
# - %g : %u 이름을 가진 사용자의 그룹
# - %G : %U 이름을 가진 사용자의 그룹
# - %h : Samba가 실행되는 호스트 이름
# - %H : %U 이름을 가진 사용자의 홈 디렉토리
# - %L : Samba 서버의 NetBIOS 이름
# - %m : 클라이언트 컴퓨터의 NetBIOS 이름
# - %M : 클라이언트 컴퓨터의 호스트 이름
# - %v : Samba 버전 번호
#
#============================    전체 설정    ============================
[global]
# workgroup = NT 도메인 이름 또는 워크그룹 이름
   workgroup = WORKGROUP
# 나의 정의
   hide dot files = yes
   veto files = /.?*/
   netbios name = netbios
;  netbios aliases = nemesis
   dont descend = /proc,/dev
;  time server = true
;  sync always = yes
# server string은 NT 설명 필드와 같은 것입니다.
   server string = Linux Samba Server
# 언어 설정 :
# dos charset 은 Windows Machine 의 언어셋을 설정합니다. 보통 NT SP4 이상의 윈
# 도우즈는 UTF-8 로 지정하시면 됩니다. unix charset 은 삼바 머쉰의 언어셋을 지
# 정합니다. RH 9 부터는 UTF-8 을 사용하며, 이 이전은 보통 EUC-KR 을 사용합니다.
   dos charset = UTF-8
   unix charset = EUC-KR
# 이 옵션은 보안과 관련하여 중요한 것입니다. 이 옵션을 통해 여러분의 근거리 네
# 트웍에 있는 호스트에게만 접근을 허용할 수 있습니다.  다음 예는 2 개의 C 클래
# 스 네트웍과 "loopback" 인터페이스에 대해서만 접근을 허용하고 있습니다.  문법
# 예 # 는 smb.conf 맨페이지를 참고하시기 바랍니다.
  hosts allow = 210.224.127. 127.
# 프린터 설정을 개별적으로 하지않고 자동으로 프린터 목록을 포함시키길 원한다면
# 다음 옵션을 사용합니다.
# printcap 에서 정의한 프린터목록이 자동으로 등록됩니다. load printers = no 이
# 면 하나하나 정해주셔야 합니다.
   load printers = no
# printcap 파일의 위치를 새롭게 지정하고 싶을 때 사용하십시오.
   printcap name = /etc/printcap
# SystemV 시스템에서는 printcap name 을 lpstat 으로 해주면 SystemV 스풀 시스템
# 으로부터 프린터 목록을 자동으로 얻게 해줍니다.
;  printcap name = lpstat
# 여러분의 프린팅 시스템이 표준에서 벗어난 것이 아니라면 다음 옵션의 주석을 풀
# 필요가 없습니다.  현재 지원하고 있는 프린트 시스템은  bsd, sysv, plp, lprng,
# aix, hpux, qnx 등입니다.
;  printing = cups
# This option tells cups that the data has already been rasterized
;  cups options = raw
# 손님 사용자를 허가하고 싶을 때는 다음 행의 주석을 풀어줍니다. nobody 가 아닌
# 경우에는 /etc/passwd 항목에 설정한 손님 사용자 계정을 추가 해야 합니다.
# useradd 명령으로 사용자를 만드십시오.
;  guest account = nobody
# 다음은 삼바로 하여금 자신에 접속하는 호스트 별로 개별적인 기록 파일을 만들도
# 록 지시합니다. "/var/log/samba/접근호스트이름.log"과 같은 파일명을 가집니다.
# %m 은 삼바 설정에서 사용되는 특수한 변수입니다.
   log file = /var/log/samba/%m.log
# 한라인으로 모든 정보를 로깅 하려면 아래와 같이 설정 합니다.
;  log file = /var/log/samba/smbd.log
# 로그 파일 크기의 상한선을 Kb 단위로 설정합니다.
   max log size = 50
# 보안 모드입니다. 대부분의 사람들에겐 user 레벨의 보안이 맞습니다.  자세한 내
# 용은 security_level.txt 문서를 참고하십시오.
#
# 참고로 user 는 유닉스 계정이름/패스워드 방식의 보안 등급이며 share 는 워크그
# 룹 포 윈도우즈(WfW)와 윈도95의 기본 모드입니다. server 의 경우에는 인증을 위
# 해 NT 서버가 필요합니다.
# 삼바의 보안모델
# - share : 인증절차 필요 없음
# - user : 리눅스 삼바서버에서 인증이 필요
# - server : NT서버
# - domain : PDC(Primary Domain Controller) 
   security = user
# security = server 또는, security = domain 인 경우에만 패스워드 서버를 설정합
# 니다.
;  password server = <NT-Server-Name>
# 패스워드 레벨에서는 대/소문자 모든 조합에 대하여 _n_ 개의 문자로 이뤄진 패스
# 워드를 사용하도록 합니다.
;  password level = 8
;  username level = 8
#
# !!!!!!!! 윈도우즈 98/윈도우즈 NT 4 (SP3) 클라이언트 !!!!!!!!!
#
# 패스워드 암호화를 사용하고 싶을 때가 있습니다.  삼바 문서 중 ENCRYPTION.txt,
# Win95.txt, WinNT.txt 를 꼭 읽어보시기 바랍니다. 이 문서를 착실히 읽지않은 상
# 태에서 다음 옵션을 설정하지 마십시오.  윈도우즈 NT 4.0 서비스 팩 3 번 이상인
# 시스템에서는 패스워드 암호화가 필요합니다.  그렇지 않으면 삼바 서버에 접속조
# 차 할 수 없습니다.
#
# smbpaswd 의 사용법이 samba 3 에서 변경이 되었습니다. 기존의 smbpasswd 나, 새
# 로 smbpasswd 를 작성 하셨다면, "smbpasswd -e 유저명" 으로 해당 유저를 활성화
# 해 주셔야 접속이 가능합니다.
   encrypt passwords = yes
   smb passwd file = /etc/samba/smbpasswd
# 관련 명령으로는 smbadduser, smbpasswd가 있습니다.
# 다음 설정은 윈도우즈에서 패스워드를 바꿀 때, 리눅스 시스템의 패스워드도 자동
# 으로 갱신되도록 하고 싶을 때 사용한다.
# 주의 사항 : 위에 있는 'encrypt passwords', 'smb passwd file'과 같이 사용해야
#             한다!!!
# 주의 사항2: 워크스테이션으로부터 암호화된 SMB 패스워드만 변경할 수 있도록 할
#             때에는 필요없는 사항이다.  유닉스 패스워드와 SMB 패스워드가 항상
#             동일한 상태를 유지하도록 할 때에만 필요하다!
;  unix password sync = Yes
;  passwd program = /usr/bin/passwd %u
;  passwd chat = *New*UNIX*password* %nn *ReType*new*UNIX*password* %nn *passwd:*all*authentication*tokens*updated*successfully*
# 유닉스 사용자 이름과 SMB 사용자 이름이 달라, 둘 간의 연관 테이블을 필요할 때
# 사용합니다.
  username map = /etc/samba/smbusers
# 다음 옵션은 접속하는 각 머신마다 서로 다른 설정을 원할 때 사용합니다. 여기서
# %m 은 접속하는 호스트의 NetBIOS 이름으로 대체됩니다.
;  include = /etc/samba/smb.conf.%m
# 대부분의 경우 다음 옵션을 주면 성능 향상 효과를 볼 수 있습니다.  자세한 사항
# 은 speed.txt 와 맨 페이지를 참고하십시오.
   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
# 삼바가 여러 개의 인터페이스를 사용하도록 설정합니다. 여러 개의 네트웍 인터페
# 이스를 가지고 있다면 그 인터페이스들을 모두 나열 하십시오.  자세한 사항은 맨
# 페이지를 참고하십시오.
# 다음 예는 삼바 서버가 192.168.12.2, 192.168.13.2 이렇게 두개의 주소를 가지고
# 있고 24비트 즉 넷매스크 255.255.255.0 를 사용하여 192.168.12.0, 192.168.13.0
# 네트웍의 호스트에 대해서 받아들입니다.
;  interfaces = 192.168.12.2/24 192.168.13.2/24
# 원격 브라우즈 목록과의 동기화에 관한 설정입니다.
#  공표 요청을 하거나 또는 브라우즈 목록 동기화해 줄 대상:
#       특정 호스트 또는 전체 서브넷을 지정할 수 있습니다. (아래 참고)
;  remote browse sync = 192.168.3.25 192.168.5.255
# 지역적인 서브넷에 자기 자신을 공표하도록 설정합니다.  윈도우즈 네트워크 환경
# 에서 삼바 서버가 잘 보이도록 할 때 유용합니다.
  remote announce = 210.125.115.
# 브라우져 제어 옵션:
# 삼바가 네트웍에 대한 매스터가 되길 바라지 않으면 local master 설정을 no로 하
# 십시오. 그렇지 않은 경우에는 일반적인 선거 규칙을 따릅니다.
;  local master = no
# OS 레벨은 매스터 브라우져 선거 과정에서 서버의 우선권을 결정합니다. 기본값이
# 적절합니다.  따라서 특별히 바꿀 이유가 없습니다.
;  os level = 33
# domain master 는 삼바로 하요금 도메인 매스터 브라우져가 되도록 해줍니다.  삼
# 바는 서브넷들로부터 브라우즈 목록을 모으는 작업을 하게됩니다. 이미 이 기능을
# 담당하고 있는 윈도우즈 NT 도메인 컨트롤러가 존재한다면, 이것을 사용해서는 안
# 됩니다.
;  domain master = yes
# preferred master 옵션을 켜두면 시동할 때, 지역 브라우져 선거를 하도록 만들고
# 선거에서 이길 수 있는 좀 더 높은 기회를 부여받습니다.
;  preferred master = yes
# 설치할 때 주 도메인 컨트롤러로 설정된 NT 서버가 존재할 때만 사용합니다.
;  domain controller = <NT 도메인 컨트롤러 SMB 이름>
# 삼바가 윈도우즈 95 워크스테이션에 대한 도메인 로그온 서버 역할을 하길 원하는
# 경우 켜둡니다.
;  domain logons = yes
# 도메인 로그온을 선택했고, 각 머신 별로 또는 각 사용자 별로 로그온 스크립트를
# 구분하여 특정 배치 파일을 작동시키길 원하는 경우 사용합니다.
;  logon script-x = %m.bat
# 사용자 이름에 의거하여 서로 다른 로그온 배치 파일을 실행시킬 때
;  logon script-x = %U.bat
# 로우빙 프로파일(roving profile)을 어디에 저장할 것인가?
#        (Win95와 WinNT에만 해당됩니다.)
#        %L 은 서버의 NetBIOS 이름으로, %U 는 사용자 이름으로 대체됩니다. 뒤에
#        나오는 [Profiles] 공유에 있는 주석을 풀어주는 것을 잊지 않도록 하십시
#        오.
;  logon path = \%LProfiles%U
# 모든 NetBIOS 이름은 IP 주소로 변환이 되어져야 한다.
# 'Nmae Resove Order' 는 "host lmhosts wins bcast" 를  기본 순서로 가지는 이름
# 변환 매커니즘을 설정할 수 있도록 한다. "host" 는 /etc/hosts 또는
# /etc/hosts.config, /etc/nsswitch.conf 또는, /etc/resolv.conf 파일에 설정되어
# 있는 것을 기본으로 사용하는 DNS 또는, NIS 의 의존하는 gethostbyname() 함수를
# 호출하는 것을 의미한다. 그 결과 "host" 는 시스템 설정에 종속적이게 된다.  이
# 파라미터는 보통, NetBIOS 이름을 IP 주소로 변환하기 위하여 DNS lookup 을 하는
# 것을 방지 하기 위하여 사용을 하며, 사용시 주의해야 한다.
;  name resolve order = wins lmhosts bcast
# 윈도우즈 인터넷 네임 서비스 WINS 지원 섹션:
# 주의: /etc/samba/lmhosts를 만들어 마치 /etc/hosts와 같이 적습니다.
# 예)
# 192.168.0.1   hamster
;  wins support = yes
# WINS 서버 - 삼바의 NMBD 로 하여금 WINS 클라이언트가 되도록 합니다.
# 주의 : 삼바는 WINS 서버 또는 클라이언트 중 하나만 될 수 있다.
;  wins server = w.x.y.z
# WINS 프록시 - 삼바로 하여금 WINS 기능을 갖추지 못한 클라이언트를 대신하여 이
# 름에 해당하는 주소 찾기 질문을 대신 답하도록 합니다. 이를 위해서는 네트웍 상
# 에 적어 한 개 이상의 WINS 서버가 있어야 합니다. 기본값은 NO
;  wins proxy = yes
# DNS 프록시 - 삼바로 하여금 DNS nslookup 을 사용하여 NetBIOS 이름을 찾을 것인
# 지 아닌지 지시합니다. 1.9.17 버전에서는 내부 기본값이 yes 였으나 1.9.18 버전
# 에서는 no 로 변경되었습니다.
   dns proxy = no
# 대소문자 보존이 필요할 때가 있습니다. 시스템 기본값은 NO 입니다.
# 주의: 각 공유별로 설정할 수 있습니다. 한글을 보기 위해서는 구별해야 합니다.
   preserve case = yes
   short preserve case = yes
# 도스 파일에 대한 기본 문자는 대문자입니다.
;  default case = lower
# 대소문자 구별은 주의를 요합니다. - 문제를 일으킬 수도 있습니다!
;  case sensitive = no
#
# 기타 설정
#
# LEVEL2 OPLOCKS
# --------------
#
# 레벨2 OPLOCK 은 SHARE 별로 설정 가능합니다. 주로 읽기만 하는 공유 디렉토리에
# 적용하면 읽기 속도를 크게 증진할 수 있습니다. 예를 들어 실행 파일 .EXE 만 잔
# 뜩 들어 있는 디렉토리를 공유시키는 경우에 좋습니다.
#
;  level2 oplocks = true
#==========================     공유  정의    ============================
# 섹션 정의
# - [global] : 다른 세션에 적용되는 파라미터를 정의
# - [homes] : 리눅스 홈 디렉토리 접근 설정
# - [printers] : 프린터 접근 설정

[homes]
   comment = 홈 디렉토리
   browseable = no
   writable = yes
;  create mode = 0750
;  invalid users = root
# 도메인 로그온을 위한 netlogin 디렉토리를 만들고 주석 해제합니다. 물론 도메인
# 로그온 기능을 지원할 때만 필요합니다.
; [netlogon]
;  comment = 네트워크 로그온 서비스
;  path = /home/netlogon
;  guest ok = yes
;  writable = no
;  share modes = no

# 특정한 로우빙 프로파일(roving profile) 공유를 제공하고자 한다면, 다음의 주석
# 을 풀어주십시오. 기본값은 사용자의 홈 디렉토리입니다.
;[Profiles]
;  path = /home/profiles
;  browseable = no
;  guest ok = yes

# 주의: BSD 스타일의 프린트 시스템 (현재 대부분의 리눅스 시스템이 그러함) 이라
# 면 각각의 프린터를 정의해 줄 필요 없이 자동으로 이뤄집니다.
[printers]
   comment = 모든 프린터
   path = /var/spool/samba
   browseable = no
# guest ok = yes 라고 하면 'guest account' 로 지정한 사용자들이 프린팅을 할 수
# 있습니다.  public = yes 도 같은 표현입니다.
   guest ok = yes
   writable = no
   printable = yes
# 다음은 사람들이 파일을 공유할 수 있도록 할 때 유용합니다.
# 주의: /tmp 는 시스템의 임시 작업 공간이므로, /var/tmp 와 같은 곳에 커다란 파
#       티션을 마운트하고 그곳을 사용하도록 하는 것이 좋습니다.
# 지금부터는 임의로 정의 가능한 공유 설정의 예입니다.  다음 설정들을 보면서 여
# 러분이 원하는 공유를 정의해보시기 바랍니다.
;[tmp]
;  comment = 임시 파일 공간
;  path = /tmp
;  read only = no
;  public = yes
# 공개적으로 접근 가능한 디렉토리이지만 읽기만 가능하고 "staff" 그룹에 속한 사
# 용자들만이 쓰기를 할 수 있는 설정의 예입니다.
;[public]
;  comment = Public Stuff
;  path = /home/samba
;  public = yes
;  read only = yes
;  write list = @staff

# 기타 다른 예.
# 조금은 특정 용도에 맞는 상세한 설정 예입니다.
#
# fred 라는 사용자만 이용할 수 있는 개인적인 프린터 설정.  스풀 자료는 fred 의
# 홈 디렉토리에 씌여집니다.  fred 는 지정한 스풀 디렉토리에 쓰기 권한을 가지고
# 있는 상태여야 합니다.
;[fredsprn]
;  comment = Fred 전용 프린터
;  valid users = fred
;  path = /homes/fred
;  printer = freds_printer
;  public = no
;  writable = no
;  printable = yes
# fread 만이 이용할 수 있는 개인적인 디렉토리 설정입니다.
# 디렉토리에 대하여 fred 의 쓰기 권한이 있는 상태여야 합니다.
;[fredsdir]
;  comment = Fred 개인 서비스
;  path = /usr/somewhere/private
;  valid users = fred
;  public = no
;  writable = yes
;  printable = no
# 접속하는 머신에 따라 서로다른 디렉토리를 제공하는 서비스의 좋은 예입니다. 이
# 렇게 함으로써 접속 머신에 따라 실제 설정 내용이 달라지는 효과를 얻을 수 있습
# 니다.  사용자 이름으로 구별하려면 %u 옵션을 대신 사용하면 됩니다. %m 은 접속
# 하는 머신의 이름으로 치환됩니다.
;[pchome]
;  comment = PC 디렉토리
;  path = /usr/pc/%m
;  public = no
;  writable = yes
# 모든 사용자가 읽고 쓸수 있는 공개 접근 디렉토리의 예입니다. 생성되는 모든 파
# 일은 기본 사용자의 소유가 되므로, 다른 사용자가 여러분이 만든 파일을 지울 수
# 있습니다. 당연히 주어진 디렉토리에 대하여 기본 사용자가 쓰기권한을 가지고 있
# 어야 합니다. 다른 사용자를 명시하면 기본 사용자가 아닌 그 사용자의 소유가 됩
# 니다.
;[public]
;  path = /usr/somewhere/else/public
;  public = yes
;  only guest = yes
;  writable = yes
;  printable = no
# 다음 항목은  두 사용자가 어떻게 한 디렉토리를 공유하여 사용하게 할 수 있는지
# 예시하고 있습니다. 이 설정이 제대로 작동하려면,  디렉토리는 두 사용자에 의해
# 쓰기 가능해야 하며 스틱키 (sticky) 비트를 설정하여 서로의 파일에 대하여 악의
# 적인 행동을 취할 수 없도록 해줘야 합니다.  이런 방법으로 여러 사용자가 한 디
# 렉토리를 안전하게 공유하도록 확장할 수 있습니다.
;[myshare]
;  comment =  Mary와 Fred의 것
;  path = /usr/somewhere/shared
;  valid users = mary fred
;  public = no
;  writable = yes
;  printable = no
;  create mask = 0765
;[www]
;  comment = 웹 페이지 디렉토리
;  path = /home/httpd/html
;  read only = no
ftp 계정, DB 계정, 가상호스트 추가 스크립트

apache, mysql 등의 버전차이에 따라 정상적으로 동작하지 않을 수도 있음.. ^^

- 출처 호스트웨이

----------------------------------------------------------------------------

#!/bin/sh

sleep 1
# 사용자 계정 추가
echo "ftp 계정을 추가하시겠습니까?(y/n)"

read answer1

while [[ "$answer1" != "y" && "$answer1" != "n" && "$answer1" != "Y" && "$answer1" != "N" ]]
do
echo "잘못 입력하셨습니다. y 나 n 으로 입력해 주세요."
read answer1
done

if [ "$answer1" = y -o "$answer1" = Y ]
then
        echo "추가할 계정이름을 입력해 주세요."
        read username
        echo " "
        echo "$username 에서 사용할 패스워드를 입력해 주세요."
        if /usr/sbin/useradd $username; then
                /usr/bin/passwd $username
                chmod 701 /home/$username
                echo "$username 계정이 생성되었습니다."
        else
                echo " "
                echo "계정 생성에 실패 하였습니다. ERROR 라인을 확인 하시고 다시 시도하세요."
                echo " "
        fi
else [ "$answer1" = n -o "$answer1" = N ]
        echo "ftp 계정을 생성하지 않습니다."
fi

sleep 1
echo " "

# Database 추가
echo "DB 계정을 추가 하시겠습니까?(y/n)"

read answer2

while [[ "$answer2" != "y" && "$answer2" != "n" && "$answer2" != "Y" && "$answer2" != "N" ]]
do
echo "잘못 입력하셨습니다. y 나 n 으로 입력해 주세요."
read answer2
done

if [ "$answer2" = y -o "$answer2" = Y ]
then

        if netstat -nat | grep LISTEN | grep 3306 1>/dev/null
        then
                echo "추가할 DB명을 입력하고 엔터를 치세요."
                read db
                echo " "
                echo "사용할 DB user명을 입력하고 엔터를 치세요."
                read db_user
                echo " "
                echo "$db_user가 사용할 패스워드를 입력하고 엔터를 치세요."
                read passwd
                echo " "
                echo "create database $db;" >> query
                echo "use mysql;" >> query
                echo "insert into user (host,user,password) values('localhost','$db_user',password('$passwd'));" >> query
                echo "insert into db values('localhost','$db','$db_user','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y');" >> query
                echo "flush privileges" >> query
                echo "mysql root계정의 패스워드를 입력 하세요."
                echo "mysql root계정의 패스워드가 설정되어 있지 않다면, 그냥 엔터를 치세요."
                if /usr/local/mysql/bin/mysql -u root -p < query; then
                        echo " "
                        echo "mysql db 및 계정이 추가 완료되었습니다. 아래와 같이 접속을 하세요."
                        echo " "
                        echo "/usr/local/mysql/bin/mysql -u $db_user -p $db"
                        echo " "
                else
                        echo " "
                        echo "DB 생성에 실패 하였습니다. ERROR 라인을 확인 하시고 다시 시도하세요."
                        echo " "
                fi
                rm -rf query
        else
                echo "mysql 데몬이 실행되어 있지 않습니다."
                echo "mysql 데몬을 실행합니다."
                echo " "
                /usr/local/mysql/share/mysql/mysql.server start
                echo " "
                echo "추가할 DB명을 입력하고 엔터를 치세요."
                read db
                echo " "
                echo "사용할 DB user명을 입력하고 엔터를 치세요"
                read db_user
                echo " "
                echo "$db_user가 사용할 패스워드를 입력하고 엔터를 치세요."
                read passwd
                echo " "
                echo "create database $db;" >> query
                echo "use mysql;" >> query
                echo "insert into user (host,user,password) values('localhost','$db_user',password('$passwd'));" >> query
                echo "insert into db values('localhost','$db','$db_user','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y');" >> query
                echo "flush privileges" >> query
                echo "mysql root계정의 패스워드를 입력 하세요."
                echo "mysql root계정의 패스워드가 설정되어 있지 않다면, 그냥 엔터를 치세요."
                if /usr/local/mysql/bin/mysql -u root -p < query; then
                        echo " "
                        echo "mysql db 및 계정이 추가 완료되었습니다. 아래와 같이 접속을 하세요."
                        echo " "
                        echo "/usr/local/mysql/bin/mysql -u $db_user -p $db"
                        echo " "
                else
                        echo " "
                        echo "DB 생성에 실패 하였습니다. ERROR 라인을 확인 하시고 다시 시도하세요."
                        echo " "
                fi
                rm -rf query
        fi
else [ "$answer2" = n -o "$answer2" = N ]
        echo "DB 계정을 생성하지 않습니다."
fi

sleep 1
echo " "

# 가상호스트 추가
echo "가상호스트 추가를 하시겠습니까?(y/n)"

read answer3

while [[ "$answer3" != "y" && "$answer3" != "n" && "$answer3" != "Y" && "$answer3" != "N" ]]
do
echo "잘못 입력하셨습니다. y 나 n 으로 입력해 주세요."
read answer3
done

if [ "$answer3" = y -o "$answer3" = Y ]
then

        today=$(date +%y-%m-%d)
        ip=$(ifconfig | grep Bcast | awk '{print $2}'|cut -d: -f2)

        echo "추가할 도메인을 입력 하세요. ex) hostway.co.kr"
        read domain

        echo "DocumentRoot 디렉토리를 입력하세요. ex) /home/hostway/public_html"
        read Documentroot

        echo "관리자 e-mail 주소를 입력하세요. ex) admin@hostway.co.kr"
        read "email"

        if cat /usr/local/apache2/conf/httpd.conf | grep vhost | grep "#" 1>/dev/null
        then
        perl -pi -e 's/\#Include conf\/extra\/httpd-vhosts.conf/Include conf\/extra\/httpd-vhosts.conf/g'  /usr/local/apache2/conf/httpd.conf
        mv /usr/local/apache2/conf/extra/httpd-vhosts.conf /usr/local/apache2/conf/extra/httpd-vhosts.conf-$today
        echo "NameVirtualHost $ip" > /usr/local/apache2/conf/extra/httpd-vhosts.conf
        echo " " >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
        echo "<VirtualHost $ip>" >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
        echo "  ServerAdmin $email" >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
        echo "  DocumentRoot $Documentroot" >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
        echo "  ServerName $domain" >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
        echo "  ServerAlias www.$domain" >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
        echo "  ErrorLog logs/$domain-error_log" >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
        echo "  CustomLog logs/$domain-access_log common" >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
        echo "</VirtualHost>" >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
        sleep 1
        echo "가상호스트 추가 작업이 완료되었습니다."
        echo "ftp 접속을 하셔서 $Documentroot 디렉토리에 홈페이지 자료를 업로드 하시기 바랍니다."
        /usr/local/apache2/bin/apachectl restart
        else
        cp /usr/local/apache2/conf/extra/httpd-vhosts.conf /usr/local/apache2/conf/extra/httpd-vhosts.conf-$today
        echo " " >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
        echo "<VirtualHost $ip>" >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
                echo "  ServerAdmin $email" >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
                echo "  DocumentRoot $Documentroot" >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
                echo "  ServerName $domain" >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
                echo "  ServerAlias www.$domain" >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
                echo "  ErrorLog logs/$domain-error_log" >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
                echo "  CustomLog logs/$domain-access_log common" >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
                echo "</VirtualHost>" >> /usr/local/apache2/conf/extra/httpd-vhosts.conf
        sleep 1
        echo "가상호스트 추가 작업이 완료되었습니다."
        echo "ftp 접속을 하셔서 $Documentroot 디렉토리에 홈페이지 자료를 업로드 하시기 바랍니다."
        /usr/local/apache2/bin/apachectl restart
        fi
else [ "$answer3" = n -o "$answer3" = N ]
        echo "가상호스트를 추가하지 않습니다."

fi 

[리눅스/LINUX/LPIC] 사용자 계정 추가 쉘 스크립트




사용자 계정 추가 쉘 스크립트입니다.
아래 내용으로 newuser 라는 파일을 만들고
실행가능하도록 퍼미션 바꿔주고 실행하면 됩니다.


# chmod 777 newuser
# ./newuser


---------------------------------------------------------------------------------------------------------------
#!/bin/bash



clear



echo ==================================================================
echo "                     UserAdd Process Start                      "
echo ==================================================================



echo -n "User Name : "
read username

useradd $username

echo ------------------------

echo PassWord Setting

echo ------------------------
passwd $username



echo ==================================================================
echo "                     www root directory making                      "
echo ==================================================================

echo

echo -n "www root Directory path : "

echo /home/$username/public_html

mkdir -p /home/$username/public_html



echo ==================================================================
echo "             root directory setting & test index.php making     "
echo ==================================================================

chmod 775 /home/$username
chmod 775 /home/$username/public_html
chown $username.$username /home/$username/public_html

echo " " >>/home/$username/public_html/index.php
echo "<? phpinfo(); ?>" >> /home/$username/public_html/index.php

chown $username.$username /home/$username/public_html/index.php
chmod 775 /home/$username/public_html/index.php



echo checking -----------------------------------------------------------

ls -al /home/$username

echo checking -----------------------------------------------------------

ls -al /home/$username/public_html




echo ==================================================================
echo "                        MySQL useradd"
echo ==================================================================

echo "Username : $username"

echo "dbname : $username"

echo -n "User p/w : "
read userpw

echo " " >> mysql_useradd.sql

echo "use mysql" >> mysql_useradd.sql

echo "create database $username;" >> mysql_useradd.sql

echo "insert into user (host, user, password) values ('localhost', '$username', password('$userpw'));" >> mysql_useradd.sql

echo "insert into db values ('localhost', '$username', '$username', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');" >> mysql_useradd.sql

echo "FLUSH PRIVILEGES;" >> mysql_useradd.sql

/usr/local/mysql/bin/mysql -uroot -p97081056 < ./mysql_useradd.sql

cat ./mysql_useradd.sql
rm -rf ./mysql_useradd.sql


---------------------------------------------------------------------------------------------------------

 

 

1. http://www.oracle.com 에 접속

   -> Oracle Database 10g Express Edition for Linux x86 클릭

   -> oracle-xe-10.2.0.1-1.0.i386.rpm 다운로드


2. 설치 필요 라이브러리 설치

   -> yum install glibc

   -> yum install libaio


3. 오라클 rpm 설치

   -> rpm -ivh oracle-xe-10.2.0.1-1.0.i386.rpm


4. 오라클 설정

   -> /etc/init.d/oracle-xe configure

   # Specify a port that will be used for the database listener [1521]: 오라클포트번호   

   # This can be done after initial configuration: Confirm the password: SYS 또는 SYSTEM 암호

   # Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]: 부팅후 자동 오라클을 실행할지 여부

 

5. 오라클 환경변수 설정

   -> cd /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin

   -> ./oracle_env.sh        (실행)


6. 부팅후 자동 환경변수 실행

   -> vim /root/.bash_profile

   # /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/./oracle_env.sh   (삽입)

   # export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server  (삽입)

   # export ORACLE_SID=XE

 

7. 웹브라우저 접속

   -> http://서버아이피:8080/apex

   -> 아이디 : sys  패스워드 : 위 4번 오라클설정에서 넣었던 sys 암호

7.1 oci 라이브러리 추가

    -> yum install php-pear

    -> pecl install oci8

    # php.ini 에서

    -> extension=oci8.so

7.2 아파치 설치후 다음작업

    -> /usr/local/apache/bin/./apachectl stop

8. php 설치

   -> export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server 

   # php 소스 컴파일 디렉토리에서

   -> ./configure --prefix=~~~~ --enable-pdo --with-pdo-oci=$ORACLE_HOME --with-oci8=$ORACLE_HOME --with-oracle=$ORACLE_HOME

   # 나머진 기존 php 설치법대로 진행

 

8.1 아파치 시작

   -> /usr/local/apache/bin/./apachectl start

 

9. 테스트 (PHP)

   $conn=oci_connect("아이디","패스워드","localhost/XE");
   if($conn) echo "success";

 

 

참고)

  # 오라클 시작

  -> /etc/init.d/oracle-xe start

  # 오라클 정지

  -> /etc/init.d/oracle-xe stop

  # 외부네트워크망에서 http://서버아이피:8080/apex 접속하게 하려면

  -> ./sqlplus sys/패스워드

  -> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

웹 호스팅 서비스를 이용해서 블로그를 운영중이신 분들의 경우에만 사용할 수 있는 방법입니다.
.htaccess라는 파일이 있습니다. 이 파일은 웹을 통해 파일을 접근하려고 할때 그 규칙을 정의해줄 수 있는 파일입니다. 이 파일은 이용자가 접근하려는 파일보다 먼저 실행되며, .htaccess 파일이 존재하면 그 하부 디렉토리에도 전부 같은 규칙이 적용되는 특징이 있습니다. 테터툴즈나 텍스트큐브도 이 .htaccess 파일을 이용해서 php 실행파일을 숨기고 퍼머링크나 각종 처리를 하도록 되어 있지요.

이런 특징을 이용해서 제 블로그에 있는 이미지를 남이 긁어가서 트래픽을 낭비하는 일을 예방할 수 있습니다. 예를 들어


RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?skystory.kr [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]


라는 코드를 .htaccess 라는 이름의 텍스트파일로 만들어서 attach 디렉토리에 업로드하면 skystory.kr이 리퍼러에 있는 경우에만 이미지가 접근됩니다. 그외의 주소에서는 접근이 안되서 깨진 그림이 나오지요. (리눅스등의 계정에서 앞에 점이 있는 파일은 숨겨져 있는 파일을 의미합니다. 따라서 파일을 업로드 하실때는 FTP프로그램에서 숨김파일 표시 옵션을 주셔야 합니다.)


이것을 응용해서 마지막 줄을 고치면 접근이 안되는 경우 깨진 그림이 아니라 아래와 같은 경고 이미지가 나오게 할 수도 있습니다.

사용자 삽입 이미지


RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?skystory.kr [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ http://skystory.kr/attach/1/1186470511.jpg [NC,R,L]


다만 이 방법을 사용할 경우 문제점은, 퍼간 사람들이 이미지를 못보는것은 좋은데, 네이버나 올블로그 등 다른 서비스들에서 이미지를 못가져간다는 것입니다. 사람들이 이상하게 생각할 수도 있겠죠. 그래서 방문자들이 자주 이용하는 검색엔진, RSS리더, 블로그 메타나 자신의 보조 도메인들은 전부 허용하도록 주소를 넣어줘야 합니다. 예를 들면 이런식으로요.


RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?skystory.kr [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?skystory.co.kr [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?allblog.net [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?hanrss.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?blog4u.kr[NC]
RewriteCond %{HTTP_REFERER} !search\.naver\.com [NC]
RewriteCond %{HTTP_REFERER} !feedburner\. [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !metalooks\. [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ http://skystory.kr/attach/1/1186470511.jpg [NC,R,L]


이런 코딩이 어렵다면  http://www.htaccesstools.com/hotlink-protection/ 이 웹서비스에 가셔서 해당 빈칸을 채워넣으며 원하는 기능의 코드를 얻을 수 있습니다.


.htaccess 파일을 attach 디렉토리에 업로드 하신 후 http://www.htaccesstools.com/test-hotlink-protection/ 에서 자신의 첨부 이미지 주소를 테스트 삼아 넣어보면 차단이 잘 되었는지 확인할 수 있습니다.


※ 주의 : .htaccess 는 ANSI 문자셋으로 작업되야 합니다. UTF-8로 작업할경우 500 서버 에러를 일으킬수 있습니다.

최근에는 리퍼러를 이용한 광고가 일반화되어 있습니다.

이런 불필요한 리퍼러들을 제거하기 위한 .htaccess 팁입니다.


사용자 삽입 이미지


디렉토리에는 .htaccess 가 이미 설정되어 있을것입니다.
그 파일을 열어서 다음과 같이 두줄을 추가해줍니다.

SetEnvIfNoCase Referer "sex|casino|porno|adult|mature|xxx|fuck|lesbian|nude|gambling|LIVSOP|poker|goodslim|betting|buy|n95bD0l34bS2z3|slots|renter|<iframe|viagra|fillbest" hacker
Deny from env=hacker

차단이 필요한 단어는 단어1|단어2 이런식으로 계속 추가해주면 됩니다.
해당 단어가 리퍼러 주소에 포함되어 있으면 블로그에 접근 자체가 불가능합니다.


파일묶기
파일묶기    tar cvf 파일명.tar 파일(디렉토리)
묶은파일보기   tar tvf 파일명.tar 파일(디렉토리)
묶은파일풀기   tar xvf 파일명.tar 파일(디렉토리)



gzip(gunzip) 사용해서 압축

묶고압축    tar cvfz 파일명.tar.gz 파일(디렉토리)
묶고압축된 파일 보기  tar tvfz 파일명.tar.gz 파일(디렉토리)
묶고압축된파일 풀기   tar xvfz 파일명.tar.gz 파일(디렉토리)



gzip(gunzip) 사용 및 퍼미션유지해서 압축
묶고압축    tar cvfpz 파일명.tar.gz 파일(디렉토리) -> 가장좋음

묶고압축된 파일 보기  tar tvfpz 파일명.tar.gz 파일(디렉토리)
묶고압축된파일 풀기   tar xvfpz 파일명.tar.gz 파일(디렉토리) -> 가장좋음



bzip2(bunzip2) 사용해 압축

퍼미션유지해서 압축
묶고압축    tar cvfpj 파일명.tar.bz2 파일(디렉토리)
묶고압축된 파일 보기  tar tvfpj 파일명.tar.bz2 파일(디렉토리)
묶고압축된파일 풀기   tar xvfpj 파일명.tar.bz2 파일(디렉토리)



tar옵션

-c : tar파일 생성할 때 사용 (기본사용)  -> 풀때는 -x 옵션 사용
-t : tar파일의 내용을 확인할 때 사용
-f : tar파일을 사용할 때 사용 (기본사용)
-p : tar파일을 생성or풀때 원본 파일속성(퍼미션) 유지
-v : 묶거나 풀 때 과정 보기 (거의기본사용)
-z : gzip(gunzip) 사용 옵션
-j : bzip(bunzip2) 사용 옵션

리눅스에서 IDE 하드 디스크 튜닝법

요즘은 대부분 SATA 하드 디스크를 많이 쓰니 필요없는 정보 일지도 모르지만 자료 정리 차원에서 올린다.

1. single mode로 부팅해야한다. !!!

2. hdparm -Tt /dev/hda
    : 디스크 I/O 성능 확인
    : T(Cash) t(test)

3. hdparm /dev/hda
    : 드라이브의 주소 지정을 알아본다.

4. option 정보
    multcount : 다중 섹터 카운트 단일 I/O 인터럽트를 통해 디스크에서 가져오는 섹터의 양을 조절 (5~50%까지 성능 향상)
    I/O support : 매우중요
    unmaskirq : 디스크 인터럽트시 다른 인터럽트를 처리 하게 한다. network 인터럽트를 처리할 수 있다. 성능 향상 좋아지지
    using_dma : dma 사용 주위해야한다. 시스템이 뻗을 수 있다.

5. ex)
    hdparm -c3 -m16 /dev/hda
    -> multcount : 16, I/O support : 3 (32-bit w/sync)

    hdparm -X66 -d1 -u1 -m16 -c3 /dev/hda
    -> multcount : 16, I/O support : 3 (32-bit w/sync)
    -> unmaskirq : 1, using_dma : 1, xfermode : 66

6. 리부팅 하면 설정을 다시 해줘야한다.
    -> rc#.d 스크립트에 추가해야한다
    -> fsck 후 설정 해야함

Linux 파일 시스템 관리

리눅스 부팅 과정

전원 -> BIOS(POST작업) -> 부팅매체의 0번 섹터(MBR) -> Boot Loader(LILO or GRUB) -> Kernel booting -> init.d(PID 1) 실행 -> 실행레벨에 따른 부팅 -> 로그인

Partition
  1. 하나의 물리적 디스크를 여러 개의 논리적 디스크로 분할하는 기술
  2. 한 파티션이 손실되더라도 다른 파티션 영역은 손실로부터 보호할 수 있는 확률을 높이기 위한 수단
장치 번호와 장치 이름
  1. 리눅스는 4개의 Primary 파티션(Logical 파티션을 쓰고 있다면 3개)을 가질 수 있고, 디스크 하나 당 SCSI의 경우 최대 15개, IDE는 최대 63개의 파티션을 가질 수 있다.
  2. 리눅스에서는 디바이스 파일이 파티션을 나타낸다. 디바이스 파일은 c(버퍼 캐쉬를 쓰지 않는 "character" 디바이스)나 b(버퍼 캐쉬를 사용하는 "block"디바이스) 형식을 갖는 파일이다. 리눅스에서는 모든 디스크가 block 디바이스로만 표시된다.
     
[root@localhost ~]$ ls -al /dev/hda
brw-rw---- 1 root disk 3, 0 1월 4 23:07 /dev/hda
[
root@localhost ~]$ ls -al /dev/hda1
brw-rw---- 1 root disk 3, 1 1월 4 23:07 /dev/hda1
-> disk 다음에 나오는 숫자 3은 주번호, 0, 1은 부번호
File System
  1. 운영체제가 파일을 시스템의 디스크상에 구성하는 방식
  2. 운영체제는 시스템의 디스크 파티션상에 파일들을 연속적이고
    일정한 규칙을 가지고 저장하는데 파일 시스템은 이러한 규칙들의 방식을 제시
File System 구조
  1. Super Block : Super Block은 파일 시스템에 의존하는 정보를 가지며 파일 시스템의 크기 등과 같은 파일 시스템의 전체적인 정보를 가진다.
  2. inode : inode는 파일의 이름을 제외한 해당 파일의 모든 정보를 가지고 있다. 파일 이름은 inode 번호와 함께 디렉토리 안에 저장된다.
  3. Data Block : Data Block은 inode에 포함된다. inode는 여러 개의 XXXX
  4. Directory Block : 파일 이름과 inode번호를 저장하기 위해 사용된다.

 

관련 명령어
df
1) 현재 마운트되어 있는 파일 시스템의 사용 정보 출력
2) 공간 정보의 기본 표현단위는 1KB

-a : 파일 시스템의 크기가 0인 것도 모두 출력
-h : 공간 정보의 단위를 Giga Byte, Mega Byte, 또는 Kilo Byte 단위로 표현
-i : 블럭 사용 정보 대신에 inode 사용 정보를 출력

ex) # df /dev/hda1 -> 마운트 되어 있는 hda1의 정보 출력

 

du
1) Disk Usage를 의미하며, 지정된 디렉토리의 디스크 사용량 출력
2) 사용 공간 정보의 기본 표현단위는 1KB

-a : 디렉토리가 아닌 모든 파일에 대한 정보를 출력
-k : 결과 값을 KB 단위로 출력(기본값)
-m : 결과 값을 MB 단위로 출력
-h : 사용자가 이해하기 쉬운 용량의 단위를 표시((ex) KB,MB,GB)
-s : 사용량의 총 합계만 출력한다.

ex) # du -hs /home -> /home 디렉토리 내의 사용량의 총합 출력

 

fdisk
1) 파티션 관리자 명령
2) 새로운 파티션의 생성, 기존 파티션의 삭제, 파티션의 타입 결정 등의 작업 수행
3) 파티션 테이블이 출력될 때마다, 파티션 테이블에 오류가 없는지 항상 확인
4) fdisk는 독자적인 명령어를 가지고 있다. m이나 help를 치면 관련 명령어를 볼 수 있다.

a : 부트 가능한 플래그로 변경
b : bsd 디스크 레이블을 편집
c : 도스 호환 플 c : 도스 호환 플래그로 변경
d : 파티션 삭제
l : 알려진 파티션 형태의 목록
m : 이 메뉴를 출력
n : 새로운 파티션 추가
o : 새로운 도스 파티션 테이블을 생성
p : 파티션 테이블을 출력
q : 변경을 저장하지 않고 종료
s : 새로운 Sun 디스크 레이블을 생성
t : 파티션의 시스템 id를 변경
u : 표시/엔트리 단위를 변경
v : 파티션 테이블을 점검
w : 디스크에 테이블을 기록하고 빠져나감

ex) # fdisk -l -> 현재 시스템의 파티션 테이블을 나열

 

mke2fs
1) 확장 파일시스템(ext2, ext3) 생성
2) 파티션 이후 파일시스템 설정시 필요, 포맷기능

ex) # mke2fs -j /dev/hdb1 -> slave 디스크 파티션1을 ext3로 포맷

 

mount
1) 파일 시스템 마운트 명령, 장치를 사용할 때 필요한 명령
2) 유닉스 계열 시스템의 모든 파일들은 거대한 트리 구조로 나누어져 있고 그 뿌리는 '/'(root directory)이다.
3) mount 명령은 각 장치에 구성된 파일 시스템을 전체 파일 트리 구조에 붙이는 명령이다.(기본 사용법 : #mount -t type device directory)
4) umount 명령은 트리 구조로부터 떼어내는 명령이다. (기본 사용법 : # umount -t type)
5) 현재 마운트 되어 있는 파일시스템 정보는 '/etc/mtab'에 저장된다.
6) 시스템 부팅 시에 로컬 또는 원격 파일시스템으로부터 마운트 할 정보는 '/etc/fstab'에 저장된다. 그러므로 부팅할 때 항상 마운트 해야 하는 파 일시스템들은 이 파일에 등록해주면 자동으로 마운트가 이루어지게 된다.

 

lsattr
확장 파일시스템 상의 파일 속성을 출력한다.

ex) # lsattr -a -> 현재 디렉토리 내의 '.'의 파일까지 속성을 출력
ex) # lsattr -R -> 디렉토리와 그 안의 내용에 대해 회귀적으로 속성값을 출력

 

chattr
1) 확장 파일시스템 상의 파일 속성을 변경한다.
2) 보안 관련 설정 시 주로 사용된다.(백도어 파일 삭제시 등)
3) '+'연산자는 주어진 속성을 파일 속성에 추가한다.
4) '-'연산자는 주어진 속성을 제거한다.
5) '='연산자는 파일이 갖는 속성을 주어진 속성만 가지게 한다.

* 속성
a 파일을 쓸 때(write) 추가만 가능
c 커널에 의해 디스크 상에 압축 상태로 저장
i 파일의 수정 불가능(삭제, 이름변경, 수정, 링크) - 슈퍼유저만 가능
u 파일이 삭제되면 그 내용이 저장됨, 사용자는 다시 복구할 수 있음

* 옵션
-R 디렉토리와 이하 모든 내용의 속성을 회귀적으로 변환
-V 변화된 속성에 대하여 자세히 출력

ex) # chattr +i file -> 파일의 소유자도 'read-only'만 가능하고 root도 chattr로 설정한 것을 해제(-i)하지 않으면 절대 삭제가 불가능

 

#!/bin/sh

#iptables Path
iptables=/sbin/iptables

# SERVER IP 받아오기.
HOST_IP="`/sbin/ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`"
NETMASK="`/sbin/ifconfig eth0 | grep 'inet addr' | awk '{print $4}' | cut -d : -f 2`"

# rule delete
# 모두 지우고 다시 재설정합니다.
$iptables -F

######### 비정상적 패킷은 드롭시킨다. 로그에 남긴다. ###############
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A FORWARD -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

#iptables -A FORWARD -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/minute -j LOG --log-level notice --log-prefix "NMAP-XMAS:"
#iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/minute -j LOG --log-level notice --log-prefix "SYN/FIN:"
#iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/minute -j LOG --log-level notice --log-prefix "SYN/RST:"


#Drop RST/ACKs to limit OS detection through pinging
iptables -A FORWARD -p tcp --tcp-flags RST RST,ACK -j DROP
#iptables -A FORWARD -p tcp --tcp-flags RST RST,ACK -m limit --limit 5/minute -j LOG --log-level notice --log-prefix "RST/ACK:"

# INPUT Rules 설정
$iptables -Z INPUT
$iptables -P INPUT ACCEPT

# local 과 자기자신의 IP 는 허용.
$iptables -A INPUT -i lo -j ACCEPT
$iptables -A INPUT -s 도메인 -j ACCEPT

#  알 수 없는 패킷 즉,  NETWORK 상태가 INVALID 인 패킷들을 막아 버린다.
#  정상적인 접근에서는 나올 수 없는 상태.
$iptables -A INPUT -m state --state INVALID -j DROP

# ssh service
# ssh 접속 지역 지정.
$iptables -A INPUT -s 아이피.0.0/16 -p tcp --dport 22 -j ACCEPT
$iptables -A INPUT -s 아이피.0/24 -p tcp --dport 22 -j ACCEPT

# etc service
# 25(메일), 80(웹)은 모든 곳에서 ACCEPT 입니다. 반드시...
$iptables -A INPUT -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

# AUTH 는 서비스를 하지 않더라도 열어야 합니다. 클라이언트에서 요청합니다.
$iptables -A INPUT -p tcp --dport 113 -m state --state NEW,ESTABLISHED -j ACCEPT

# mysql
# 기본적으로 mysql 은 local에서만 접속하면 됩니다. DB 공유를 할 경우 대역 지정.
$iptables -A INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT

# mysql DB공유 대역설정
$iptables -A INPUT -s 아이피.0/24 -p tcp --dport 3306 -j ACCEPT

# ICMP service
# ping은 별 의미가 없지만...
$iptables -A INPUT -s 아이피.0.0/16 -p icmp --icmp-type echo-request -j ACCEPT

# 서버로 들어오는 SYN packet 을 모두 거절한다.
$iptables -A INPUT -p tcp --syn -j REJECT

# Drop All packet
# 원활한 서비스를 위해 65535 포트까지만 DROP 을 합니다. 물론 다 막아도 상관 없습니다.
$iptables -A INPUT -p tcp --dport 0:65535 -j DROP
$iptables -A INPUT -p udp --dport 0:65535 -j DROP
$iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT

# 각종 서비스들에 대해 최대의 성능을 발휘할 수 있도록 TOS 설정을 한다.
$iptables -t mangle -A OUTPUT -p tcp -s 0/0 --sport 80 -j TOS --set-tos 0x10
$iptables -t mangle -A OUTPUT -p tcp -d 0/0 --dport 22 -j TOS --set-tos 0x10
$iptables -t mangle -A OUTPUT -p tcp -d 0/0 --dport 21 -j TOS --set-tos 0x10
$iptables -t mangle -A OUTPUT -p tcp -d 0/0 --dport 20 -j TOS --set-tos 0x08
$iptables -t mangle -A OUTPUT -p tcp -s 0/0 --sport 23 -j TOS --set-tos 0x10

# 외부 서비스를 위한 설정. / udp service
# dns 상호 쿼리를 위해서...
#$iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT

# TCP service
# ftp-data, 서버자체가 클라이언트가 될 경우...
$iptables -A INPUT -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
$iptables -A INPUT -i eth0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT

# ftp service
# ftp 를 이용할 수 있는 대역을 지정하였습니다. 좀더 세밀해 질 수 있겠죠.
#$iptables -A INPUT -s 아이피.0.0.0/8 -p tcp --dport 21 -j ACCEPT
#$iptables -A INPUT -s 아이피.0.0/16-p tcp --dport 21 -j ACCEPT
$iptables -A INPUT -s 아이피.0/24 -p tcp --dport 21 -j ACCEPT

# telnet
# telnet은 현재 서비스 하지 않습니다.
$iptables -A INPUT -s 아이피.0.0/16 -p tcp --dport 23 -j ACCEPT

# pop3s 를 이용하는 관계로 995번을 열고 있습니다.
#$iptables -A INPUT -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT

# ip 대역 예제.
# ip 대역뿐만 아니라 아래와 같이 상태접속을 지정할 수도 있습니다.
$iptables -A INPUT -s 아이피.0.0/16 -p tcp --dport 23 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -s 아이피.0.0/16 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -s 아이피.0/24 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -s 아이피.0.0/16 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

# UDP service
# udp 서비스는 하나뿐이죠?
#$iptables -A INPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT

echo -e "\nDone.\n"

exit;

1. 사이트 방문후 최신버전 다운로드
  http://webdav.todo.gr.jp/download/

# wget http://webdav.todo.gr.jp/download/experimental/mod_encoding.c.apache2.20040616


2. 파일 이름 변경 (편의상 변경합니다.)
# mv mod_encoding.c.apache2.20040616 mod_encoding.c


3. 소스 수정
  80번째 라인
#include <iconv_hook/iconv.h>
===>
#include <iconv.h>

(설명)
  SULinux 를 비롯한 대부분의 리눅스는 iconv 라이브러리를 glibc에서 가지고 있습니다.
glibc-headers,glibc-devel 패키지만 설치되어 있다면, 가능합니다.


4. 아파치 모듈로 설치
# /usr/local/apache/bin/apxs -iac mod_encoding.c


5. 환경설정
  (환경설정 예제는 소스파일(mod_encoding.c)의 68번째 라인에 있습니다.)

<IfModule mod_encoding.c>
  EncodingEngine on
  SetServerEncoding EUC-KR
  AddClientEncoding SJIS   "Microsoft .* DAV"
  AddClientEncoding SJIS   "xdwin9x/"
  AddClientEncoding EUC-JP "cadaver/"
</IfModule>

  위와같이 진행하면 됩니다.

6. 테스트
환경 : SULinux 1.5
기타 버전 : Apache 2.0.59, PHP 4.4.4, Mysql 4.1.27
테스트 내용 : 환경설정 및 아파치 정지, 시작. 일본어파일 테스트 다운로드 테스트

환경2 : SULinux 1.0
기타 버전 : Apache 2.0.55, PHP 4.4.2, Mysql 4.1.18
테스트 내용 : 환경설정 및 아파치 정지, 시작. 일본어파일 테스트 다운로드 테스트

[로그 파일 관리하기]
시스템 관리자들은 정기적으로 로그 파일을 체크하고 관리해야 합니다.
리눅스에는 보안과 시스템 등에 관련된 다양한 로그 파일들이 존재하며, 주로 /var/log 디렉토리에 싸이게 됩니다.

dmesg
Linux가 시작될 때 나타나는 메시지들을 기록한 파일로 터미널에서 dmesg 명령을 입력하면 보여지는 내용과 동일합니다.
주로 시스템의 구동과 종료시에 문제점이 발생하는 경우 그 원인을 체크해 볼 수 있는 중요한 파일입니다.

messages
다양한 서버의 데몬이나 xinetd와 관련된 서비스를 사용할 때 기록되는 로그파일로 데몬에 문제가 발생할 경우 체크합니다.

secure
시스템에 로그인하거나 인증을 요하는 작업을 한 경우 기록되는 파일로 보안상 매우 중요한 로그입니다.

lastlog
각 사용자가 마지막으로 로그인한 날짜를 기록하고 있습니다. lastlog 명령어를 사용하여 확인할 수 있습니다.

wtmp
시스템에 접속한 모든 사용자의 로그를 기록하는 파일로 last, 명령어로 확인 할 수 있습니다.

xferlog
FTP 서비스의 엑세스를 기록하는 로그입니다.

로그 파일의 관리에 소홀하면, 로그 파일이 계속 커져 시스템 FULL 과 같은 장애가 발생하고
디스크에도 심각한 문제를 일으킬 수 있으므로, logrotate와 같은 프로그램으로 자동으로 로그파일을 순환시켜야 합니다. 

유닉스 및 리눅스 명령어

  유닉스 및 리눅스 명령어 팁

1. 서브 디렉토리까지 파일안의 문자열 모두 검색
find ./ -name "*" -exec grep 'abc' {} ; -print
find . -name -print -exec grep abc {} ;
grep -r abc *

2. haha와 huhu가 동시에 들어있는 행 뽑기
grep haha foo.txt | grep huhu

3. 찾아서 지우기
find / -name "*.eml" -exec rm -f {} ;

4. 공사중에 로그인 막기
/etc/nologin 이라는 파일을 만들어,공사중 또는 Under Construction이라는 공지를 넣으면 됨

5. 크기가 가장 큰 파일, 디렉토리 찾기
du -S | sort -n

6. 가장 큰 파일을 찾으려면
ls -lR | sort +4n

7. 현재 디렉토리의 크기만을 파악할때
# du -c -h --max-depth=0 *

8. 시스템 정보 감추기
/etc/inetd.conf 파일을 열어서,
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h

9. 어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기
ps -aux | sort +4n 또는 ps -aux | sort +5n

10. FTP로 들어온 사용자 확인하기
ftpwho,ftpcount

11. 원하지 않는 사용자 죽이기
skill -KILL sunny
위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다.
그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠? 그럴때는 skill -KILL -v pts/14 이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다.

12. less 결과를 vi로 보기
less상태에서 v를 누르면 바로 vi로 감

13. vi에서 블럭 설정하기
alt+v 하면, 라인 단위로 블럭 설정을 할 수 있으며, 해제 하시려면 Esc를 누르면 됩니다.
또한 ctl+v를 하시면, 블럭 단위로 블럭을 설정하실 수 있습니다. 블럭을 설정 하신 뒤, 삭제를 하려면 x 복사를 하려면 y 붙여넣기는 p

14. man 페이지 프린트하기
man -t vi 0.0.0.15 ping 무시하기
echo 1 0.0.0.16 LILO 다시 살리기
boot : vmlinuz root=/dev/hda6

17. 특정 사용자 ftp 접근 막기
/etc/ftpusers 파일에 로그인 네임을 추가하면 됩니다.

18. X 윈도우에서 TV보기
리눅스에서 TV보기 위해서는 드라이버 파일과 TV를 보는 프로그램이 필요합니다.
이 글에서는 미지 리눅스 OS에 탑재된 bttv 칩셋을 사용하는 TV 카드를 기준으로 설명합니다.
만일 커널을 새로 컴파일 하실 분은 반드시 Character devices -alias char-major-81 bttv
# 필립스 튜너의 경우 pre-install bttv modprobe -k tuner # 알프스 튜너의 경우 pre-install bttv modprobe -k tuner type=9 이제 kwintv나 xawtv 등의 TV 시청 프로그램으로 TV를 볼 수 있습니다. 만약 TV 장치를 찾지 못하는 오류가 있다면 bttv driver 디렉토리에 포함된 MAKEDEV 를 실행하십시오.

19. ls라는 파일이 포함된 rpm패키지 찾기
일단 ls의 절대경로를 알아야 한다. which lswhich로 알아낸 ls의 절대경로로 rpm질의를 한다.

rpm -qf /bin/ls
[root@piruks /etc]# which ls
/bin/ls
[root@piruks /etc]# rpm -qf /bin/ls
fileutils-4.0i-2mz

20. 현재 rpm패키지의 의존패키지
rpm -qR 패키지명

21. 현재 디렉토리크기
du -h --max-depth=1 .

22. 바로 이전 디렉토리로 가기
cd -

23. 프로세스명으로 프로세스 죽이기
killall 프로세스명
kill -9 `pidof 프로세스명

24. 하드웨어 시계맞추기
배포본을 설치하고 나면 시간이 맞지 않는 경우가 많다. 간단히 어느정도 정확한 시간을 설정하는 방법이다.

[root@dev /down]# rdate -s time.kriss.re.kr
[root@dev /down]# clock -w

25. 원격에서 리모트서버의 X application실행시
X윈도 app를 실행할때 다음과 같은 에러가 나면 조치

[kang@dev /home/kang] xclock
Xlib: connection to "211.222.186.170:0.0" refused by server
Xlib: Client is not authorized to connect to Server
Error: Can't open display: 211.222.186.170:0.0
export DISPLAY=211.222.186.170:0
xhost +211.222.186.170


26. 링크 파일
ln -sf 링크할디렉토리 링크로 만들어질 디렉토리 참고로 링크를 걸기만 한다고 접근가능한것은 아니고,링크가 걸린 디렉토리의 퍼미션도 허용으로 바꿔야 한다. 링크로 만들어질 디렉토리는 저절로 생성되고 퍼미션 777로 잡혔음.

ln -sf /www/dir_1/r_photo /www/dir_2/r_photo


27. ^M 문자 없애기
a = 1^M
def vartest(a):^M
a = a + 1^M
return a^M
a = vartest(a)^M
print a^M
Unix
류 기계에서는 그냥 ^J 하나만을 개행문자로 사용하는데 PC에서는 MJ 이렇게 두 제어문자가 연속으로 사용되어야 개행문자로 받아들이죠. (그래서 PC쪽에서 만들어진 txt문서를 유닉스 기계로 불러와 vi 등을 실행하면 줄 끝마다 보기싫은 ^M이 붙습니다. 뭐 vi에서 요거 지우는건 간단하지만요.)

PC에서 Unix에서 작성한 텍스트 문서를 보통 ftp로 받아오거나 하면 워드패드 등에서 봤을 때 전혀 개행이 되어있지 않지요. 하지만 MS Word 등 좀더 강력한 편집기에선 대개 잘 처리해서 잘 보여줍니다.

위 는 간단한 Python 소스입니다. 위의 경우 처럼 ^M문자가 있을때, dos2unix라는 유틸리티를 많이 사용하기도 하죠. 하지만 vi에서 간단하게 모두 삭제할수도 있습니다. dos2unix가 없거나 빠져나가서 지우는게 귀찮을때 좋겠죠.

명령은 :%s/(ctrl+v)M//g 입니다. (ctrl+v)M 이거는 ctrl과 v를 눌러준후, ctrl키를 떼지 말고 바로
m을 눌러주시믄 됩니다. 위는 정규표현식을 이용한것이고, 형식은 %s/이것을/요걸로/g 입니다 그럼 문서안의 모든 "이것을" "요걸로" 바꾸게 되죠. 단, M의 경우 ctrl+M의 뜻인데 단순히 문자로 M을 바꾸라도 해도 인식을 못하기 때문에, 위처럼 (ctrl+v)M 으로 해주셔야 합니다.

28. 비어있는 행을 찾기
#grep -n '^$' filename
정규표현 의미 ^ 행의 처음 $ 행의 끝 . 임의의 한 문자 [...] ... 안의 임의의 한 문자. a-z,0-9 같은 범위도
사용 [^..] .. 안에 없는 임의의 한 문자. 범위 사용가능 r* 0회 이상 r 반복 r+ 1회 이상 r 반복 r? 0 혹은
1회의 r r{n,m} n회 이상 m회 이하 r 반복 r1|r2 r1 혹은 r2 (egrep 만) (r) r 의
정규표현(egrep 만)

29. =====>  맨아래..

30. 각자가 사용하는 컴퓨터의 정보를 알고 싶을때
[root ...]#more /proc/cpuinfo
위와 같이 치면 사용자의 컴퓨터 정보를 볼수 있으며,

[root ...]#more /proc/meminfo
라고 치면 사용자의 메모리 정보를 볼수 있습니다.

31. 전체 메일
먼저 보낼 내용을 텍스트로 파일로 만들어야 합니다.어디에서든지 가능하지요! [root@aromi /root]# vi nea
안녕하세요! 저희 서버에서는 웹서버를 오늘부터 시작합니다. 사용자 여러분의 많은 관심과 이용을 부탁드립니다.

:wq [root@aromi /root]#

만약, 한글을 사용하지 못하면 윈도우95에서 먼저 쓴다음에 ftp를 이용해서 올리면 됩니다. [root@aromi /root]# mail -s "[공지]" `cat /etc/passwd|gawk ?F :'{print$1}'`

[공지]-

32. 디렉토리만 빠르게 검색
ls -al | grep "^d"

33. 호스트 네임 바꾸기
/etc/HOSTNAME
file은 부팅시 /etc/sysconfig/network file 의 HOSTNAME 부분을 참조하여 저장합니다. 호스트
네임을 바꾸고자 한다면 /etc/sysconfig/network file 의 HOSTNAME 부분을 바꿔주면 됩니다.

[root@linux /root]# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME="linux"
GATEWAY=""
GATEWAYDEV=""
FORWARD_IPV4="yes"
바꾸신후 시스템을 재부팅 하신거나, #/etc/rc.d/init.d/network restart 명령을 내리시면 됩니다.

34. 틀린명령 틀린글자만 바꿔서 실행
#./configure --prefax=/usr/local/apache 앗, 틀렸습니다. prefax가 아니라
prefix인데... 고쳐야지요...간단하게 화살표키로 왔다갔다 하면서 지워지고 바꿔주면 되겠지만 다른 방법이 있습니다. #^fax^fix^ 라고 하면... -

35. 유닉스의 현재 버젼과 종류 그리고 라이센스등을 알려주는 명령어
[root@aromi /root]# uname -a

36. 열려있는 포트 알아내기
netstat -anp | grep LISTEN

37. 텔넷 모든 접속자에게 메세지 보내기
wall 내용... Ctrl-D

38. lsof는 열려있는 파일을 나타내 주는 옵션
여기에 보안 점검을 위하여, -i 옵션을 사용하면, 현재 열려 있는 포트와 링크되어 있는 서비스 또는 프로그램이 모두 나타나죠. 자신이 열어 놓지 않은 포트가 열려있다던지하면 한번쯤 의심해 봐도 되겠죠?

39. 사용자가 어디에서 무엇을 하는지 알아내기
w라는 명령어를 사용하시면 된답니다. 이 때, w [-s] 를 붙여주시면 -s 옵션이 긴 정보 대신에 필요한 짧은 정보만 알려 준답니다.

40. 텔넷 화면 수정
로그인화면: /etc/issue.net 로그인후화면: /etc/motd

41. 하위 디렉토리 한꺼번에 만들기
mkdir -p music/koreanmusic/ost

42. 특정디렉토리의 모든 파일 안의 특정 문자열 치환
for i in $*; do
sed "s//opt/arm//opt/arm-linux/g" < $i > $i.new
mv -f $i.new $i
done (chihwan.sh를 포함하지 않는 디렉토리면)
find ./ -type f -exec 'chihwan.sh' {} ; s

43. killall 명령 시뮬레이션 (프로세스명으로 죽이기)
ps
aux | grep 프로세스명 | grep -v grep | awk '{ print $w }' | xargs kill -9 모든
프로세스 나열 지정한 프로세스만 뽑아냄 grep 명령이 포함된 라인 제거 awk로 두번째 필드만 뽑아냄 xargs에 의해 걸러진
아이디로 죽임

44. find와 grep
find . -name "H20021115.*" -exec grep -l '...;........;110100' {} ;

45. vi 검색, 치환
구호스트 서비스 오늘 날짜에서 분류코드가 110100인 파일 찾기 :%s/./U&/g 모든문자-

46. 파일내의 중복되는 행을 제거 : uniq
입력 파일에서 연속되는 행을 비교하여, 두 번째 이상의 동일한 행들을 제거하고 나머지는 출력파일로 출력 연속되어 표시되지 않으면 동일한 행이 존재할 수 있음. sort 명령을 사용하여 정렬한 후 사용하는 것이 타당 사용법uniq [-cdu] [+|숫자] [입력파일 [출력파일]] -c : 각 행이 연속적으로 나타난 횟수를 행의 시작부분에 표시 -d : 연속적으로 반복되는 행만 출력 -u : 연속적으로 반복되지 않는 행만 출력 +숫자 : 행의 처음 '숫자' 만큼의 문자는 무시 -숫자 : 행의 처음 '숫자' 만큼의 필드는 무시

47. 파일의 결합
여러 개의 텍스트 파일을 하나의 파일로 순차적으로 묶는데 사용 cat [파일명1] [파일명2] ...
% cat

행단위 결합 : paste 여러 파일에 대해여 행간 결합을 수행하거나 하나의 파일에 대해 연속되는 행들을 결합 둘이상의 파일에 대해서 테이블상의 하나의 열과 같이 취급하여 동일한 행번호 끼리 결합 paste [파일명1] [파일명2].. paste -d리스트 [파일명1] [파일명2] ... paste -s [-d리스트] [파일명] d : 행간 결합시 행간 구분문자들의 리스트 s : 한파일의 연속되는 행을 결합 % cat 두 파일을 동일한 필드 값에 따라 행 단위 결합 : join

관계형 데이터 베이스에서의 join 연산과 동일 키로 사용할 필드에 대해 정렬된 두 파일의 각 행에 대해 동일한 키 값을 갖는 행들을 결합 입력으로 사용될 두 파일은 키 값에 대해 오름 차순으로 정렬되어 있어야 함 출력 결과는 기본적으로 키 값이 먼저 표시되고, 첫번째 파일에서 키를 제외한 나머지 필드, 두번테 파일에서 키를 제외한 나머지 필드가 표시 필드 구분은 공백, 탭, 개행문자가 기본, 연속적으로 나타날 경우 하나로 취급
% cat

48. 파일의 암호화 : crypt
파일을 암호화 하여 키를 알지 못하는 사람은 내용을 볼 수 없도록 함 표준 입출력 사용

% cat < crypt.data1
Enter key:hello
test test
안녕하십니까?
%

49. 개행을 제외한 화면내의 보이지 않는 문자 출력
cat -v http://comp-cse.sch.ac.kr/~pl/lecture/linux/file2.html

50. 화일내의 포함된 특정문자열로 찾아서 내용만 출력하기
grep -h '20030305......01' ./R00*

51. 특정 파일의 화일명을 비슷하게 여러개 한꺼번에 바꾸기
ls *.* | awk '{print "mv",$1, $1 }' | sed "s/ ([a-zA-Z0-9]*).([a-zA-Z0-9]*)$/1._2/g"
현재디렉토리의 모든 *.* 파일을 *._* 형식으로 바꾼다. 더 간단하게
ls *.* | sed "s/([a-zA-Z0-9]*).([a-zA-Z0-9]*)/mv 1.2 1._2/g"
--------------------------------------------------------------------------------

52. 어제 날짜 구하기
$ date -v-1d "+%Y-%m-%d" [컴퓨터분류]

53. 원하지 않는 사용자 죽이기
[root@dream /root]# skill -KILL sunny
위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다. 그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠? 그럴때는

[root@dream /root]# skill -KILL -v pts/14
이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다.

54. UNIX상에서 한글출력이 깨져 나올경우
유닉스상에서 한글을 stdout출력할 경우 가끔 출력되는 문자들이 몽땅 깨져서 나오는 경우가 있다. 이때부터는 프로그램이 종료된 이후에도 쉘 프람프트를 비롯, 쉘에서 입력하는 모든 커맨드가 깨져서 나온다. 이는 ascii code 로 ^n 에 해당하는 문자가 출력될 때 나오는 현상으로 그 이후로는 MSB가 모두 켜지기 때문이다. 문자가 깨져나오는 이후부터 ascii code 로 ^o 에 해당하는 문자를 출력하면 반대로 된다. 쉘 커맨드 상에서라면, # echo ^v^o 라고 해야겠지만 커맨드가 깨져나오므로 shell이 해석을 못한다. 따라서, command line에서 ^v^o를 치고 enter 하면 된다

55. 현재 디렉토리의 대량의 파일을 각자의 파일명가운데에 특정문자
추가하여 바꾸기

29. 기타 명령어 떼
alias(명령어 간소화하기)
apropos(관련된 명령어 찾기)
arch(컴퓨터 종류 알기)
arp(같은 서브넷의 IP 보여주기)
at(작업 시간 정하기)
atd(계획성 있는 작업 실행하기)
awk(특정 패턴 문자 처리하기)
a2p(펄 파일로 바꾸기)
badblocks(배드 블럭 검사하기)
bc(계산기)
biff(메일 수신 소리로 확인하기)
bg(후면작업; 배경화면 설정)
bind(키나 함수 순서 결합하기)
break(루프 빠져나가기)
cal(달력보기)
builtin(내부 명령어 알아보기)
case(조건 처리하기)
cat(화면상에서 파일 보기)
cd(디렉토리 변경하기)
cfdisk(디스크 설정하기)
chattr(파일 속성 변경하기)
chfn(사용자 정보 변경하기)
chgrp(파일, 디렉토리가 속했던 그룹 바꾸기)
chmod(파일 권한 바꾸기)
chown(파일 주인 바꾸기)
chsh(지정된 셸 바꾸기)
cksum(CRC값을 점검한다)
clear(화면 청소하기)
clock(CMOS 시각을 조정하기)
cmp(파일 비교하기)
colcrt(문자 변환 필터)
colrm(열 삭제하기)
column(가로 정렬하기)
comm(파일 비교 출력하기)
command(명령어 알아보기)
continue(루프 계속돌기)
cp(파일 복사하기)
cpio(복사본 만들기)
crontab(cron을 관리한다)
csplit(파일에 서식, 규칙 정하기)
cut(필요한 필드만 출력하기)
date(날짜 보기)
dd(블럭장치 읽고 쓰기)
debugfs(ext2 파일 시스템 디버깅하기)
declare(변수 선언하기)
df(파일 시스템의 사용량 보기)
dirs(디렉토리 목록 표시하기)
dmesg(부팅 메시지 보기)
dnsdomainname(DNS 이름 출력)
domainname(NIS 이름 출력&설정)
du(디렉토리와 파일의 용량 파악하기)
dumpe2fs(파일 시스템 정보 보기)
echo(표준 출력하기)
eject(장치 해제하기)
elm(메일 관련)
enable(내부 명령어 지정)
env(환경변수 출력하기)
eval(인수 읽기)
exec(셸 명령어 실행하기)
exit(종료하기)
expand(탭을 공백으로 변환하기)
export(변수 지정하기)
e2fsck(파일 시스템 복구하기)
fc(지정된 편집기 받기)
fdformat(플로피 디스크 포맷하기)
fdisk(파티션 나누기)
fg(지정된 작업을 전면 프로세스로 시작하기)
file(파일 종류 보기)
find(파일 찾기)
finger(사용자 정보 알기)
fold(정형화하기)
fmt(정형화하기)
for(반복 실행하기)
free(메모리 사용량 알아보기)
fsck(파일 시스템 검사하기)
fstab(파일 시스템에 대한 고정적인 정보 저장하기)
ftp(파일 전송 프로그램)
fuser(프로세스 ID 출력)
getkeycodes(매핑 테이블 출력하기)
grep(특정 문자(열) 검색하기)
gzexe(실행 파일 압축하기)
gzip(압축하기)
halt(시스템 종료하기)
hash(기억해 두기; index 역할)
head(파일의 앞부분 출력하기)
help(도움말 보여주기)
host(호스트 정보 보기)
history(사용 명령어 목록보기)
hostname(서버 이름 알기)
id(계정 정보 알기)
if(조건문 실행하기)
ifconfig(랜카드에 주소 할당하기)
imolamod(모듈 설치하기)
inetd(인터넷 서비스의 최상위 데몬)
init(실행 단계 정하기)
ispell(철자법 검사하기)
jobs(수행중인 프로세스 알기)
kbd_mode(키보드 모드 출력하기)
kill(프로세스 죽이기)
klogd(커널 로그 데몬)
ldd(공유 라이브러리의 의존성 알기)
less(페이지 단위로 출력하기)
let(정규식 표현하기)
lilo(부팅하기)
ln(링크하기)
locate(패턴에 맞는 파일 찾기)
login(로그인하기)
logger(시스템 로그 기록하기)
logname(사용자 로그인명 보여주기)
logout(로그인 셸 종료하기)
look(특정 단어 검색하기)
losetup(중복 장치 확인하기)
lpd(프린트 데몬)
lpq(현재 프린트 작업 상태 출력하기)
lpr(출력하기)
lprm(대기열에 있는 문서 삭제하기)
ls(디렉토리 내용보기)
lsattr(파일 시스템의 속성 보여주기)
lsdev(하드웨어 장치 출력하기)
lsmod(모듈 정보 출력하기)
mail(메일 관련)
make(컴파일하기)
man(매뉴얼 보기)
mattrib
mbadblocks
mcd
mcopy
mdel
mdeltree
mdir
mesg(메시지를 받을 수 있는지 확인하기)
mformat
minfo
mkdir (디렉토리 만들기)
mke2fs(파일 시스템 생성하기)
mkfs(파일 시스템 만들기)
mknod(특수 파일 만들기)
mkswap(스왑 영역 지정하기)
mlabel
mmd
mmount
mmove
mpartition
mount(장치 연결하기)
more(화면 단위로 출력하기)
mrd
mren
mtoolstest
mtype
mutt(메일 관련)
mv(파일 옮기기)
mzip
netstat(현재 네트웍 상황 보기)
nice(프로세스 우선 순위 변경하기)
od(8진수로 파일 보기)
passwd(암호 입력하기)
pidof(실행중인 프로그램의 프로세스 ID 찾기)
pine(메일 관련)
ping(네트웍 확인하기)
popd(pushd 취소)
ps(프로세스 纘?알기)
pstree(프로세스 상관관계 알기)
pwd(절대경로 보여주기)
quota(디스크 한계량 알기)
rarp(rarp 테이블 관리하기)
rcp(원격 호스트에 파일 복사하기)
rdev(루트, 스왑장치, 램 크기, 비디오 모드를 조사하고 설정하기)
rdate(네트웍으로 시간 설정하기)
reboot(재부팅하기)
rmmod(모듈 지우기)
readonly(읽기 전용으로 표시하기)
renice(프로세스 우선 순위 바꾸기)
reset(터미널 초기화하기)
restore(다시 저장하기)
rlogin(바로 접속하기)
rm(파일 지우기)
rmdir (디렉토리 지우기)
route(라우팅 테이블 추가/삭제하기)
rpm(프로그램 추가/삭제)
rpm2cpio(rpm을 cpio로 변환하기)
rsh(원격으로 명령어 실행하기)
rup(호스트 상태 출력하기)
rusers(호스트에 로그인한 사용자 출력하기)
rwall(호스트 사용자에게 메시지 뿌리기)
script(기록하기)
set(변수값 설정하기)
setup(시스템 관련 설정하기)
showmount(호스트의 마운트 정보 보여주기)
shutdown(전원 끄기)
sleep(잠시 쉬기)
source(스크립트 번역하기)
split(파일 나누기)
ssh(암호화된 원격 로그인하기)
stty(터미널라인 설정 보여주기)
su(계정 바꾸기)
suspend(셸 중단하기)
swapoff (스왑 해제하기)
swapon(스왑 활성화하기)
sync(버퍼 재설정하기)
syslogd(로그인 과정 설정하기)
tac(거꾸로 보기)
tail(문서 끝부분 출력하기)
talk(이야기하기)
tar(파일 묶기)
tcpdchk(tcp wrapper 설정하기)
tcpmatch(네트웍 요청에 대해 예측하기)
tee(표준 입력으로부터 표준 출력 만들기)
telnet(원격접속하기)
test(테스트하기)
times(셸에서의 사용자와 시스템 시간 출력하기)
top(cpu 프로세스 상황 보여주기)
tr(문자열 바꿔주기)
true(종료 코드 리턴하기)
type(유형 보기)
ul(밑줄 처리해서 보여주기)
ulimit(제한하기)
umask(매스크 모드 설정하기)
umount(장치 해제하기)
unalias(별명 제거하기)
uname(시스템 정보 보기)
unexpand(공백 문자를 탭으로 변환하기)
uniq(중복된 문장 찾기)
useradd(사용자 계정 만들기)
userdel(계정 삭제하기)
usermod(사용자 계정정보 수정하기)
unset(설정 변수 해제)
uptime(시스템 부하 평균 보여주기)
users(로그인된 사용자 보여주기)
w(시스템에 접속한 사용자 상황 알아보기)
wait(프로세스 기다리기)
wall(모든 사용자에게 메시지 보내기)
wc(문자, 단어, 라인수 세기)
whatis(명령어의 간단한 설명보기)
while(루프 명령어)
who(사용자 알기)
write(콘솔 상에서 간단한 메시지 보내기)
xcopy(반복적으로 복사하기)
XFree86
ypchfn(NIS에서 사용하는 chfn 명령어)
ypchsh(NIS에서 사용하는 chsh 명령어)
yppasswd(NIS에서 사용하는 passwd 명령어)
zcat(압축 파일 보기)
zcmp(압축 파일 비교하기)
zforce(강제로 gz 만들기)
zgrep(압축 상태에서 grep 실행하기)
zmore(압축 상태에서 more 실행하기)
znew(.Z 파일을 .gz로 다시 압축하기)

iptables은 강력한 패킷필터링 툴입니다.
기존의 iptables에 관한 자세한 문서들이 많이 나와있지만
이 문서는 리눅스 환경을 전제로 하며 iptables의 초심자들을 위해 설명을 하고자 합니다.
오타나 틀린 내용이 있으면 홈페이지에 관련부분을 기제해주기바랍니다.


작성일 2002.10.13

작성자 : 김창현 [CTCquatre] http://www.eyetolife.com




[ 패킷필터링 지식 ]


패킷필터링이란?

패킷필터링은 지나가는 패킷의 해더를 보고 그 전체 패킷의 운명을 결정하는 것을 말한다.
(iptables의 경우 많은 개발중인 기능에서 헤더에 그치지 않고 data의 내용을 검토하기도 한다. 가장 대표적인것이 string match기능이다.)

*:(일반적으로 패킷은 헤더와 데이타를 가진다. 헤더에 필터링할 정보인 출발지IP:PORT,도착지 IP:PORT, checksum,프로토콜 옵셋등을 가지며 데이터는 각각의 전송데이터가 들어간다.)



리눅스 박스의 패킷필터링의 역사

리눅스는 커널 1.1버젼 부터 패킷필터링을 포함하기 시작했다.
제 1세대는 BSD의 ipfw을 기본으로 하였고
2.0버젼에서 ipfwadm이 사용되었으며
1998년에 2.2기반 패킷필터링툴인 ipchains를 내놓았다.
그리고 이글에서 논의하고자 하는 제 4세대 필터링툴인 iptables이 2.4커널을 위해
만들어졌다.



netfilter?

일반 iptables사용자들이 가장간과하기 쉬운부분중 한 부분이다.
iptables이 패킷을 필터링 하는것이 아니다.
패킷필터링은 커널에 탑제된 netfilter기능으로 하며
iptables은 단지 netfilter의 룰을 세워줄 뿐이다.
즉 다시 말하자면 iptables은 룰셋구축 툴이라는 말이다.







[ 패킷필터링 ]


iptables에 대해

iptable에 기본 Chain은 아래와 같다.

INPUT chain
FORWARD chain
OUTPUT chain

위의 3가지가 기본 체인이다. 체인들의 모식도는 아래와 같다.


------>INPUT------> Linux Box ------>OUTPUT--------->
---------↕----------------------------↕
---------└--------- FORWARD ----------┘


여러분의 Linux box를 도착지로 삼는 모든패킷은 INPUT Chain을 통과하게 되며
여러분의 Linux box에서 생성되 외부로 보내지는 모든패킷은 OUTPUT Chain을
통과하게 된다.

Forward chain은 *엄밀히 말하자면 도착지가 여러분의 Linux box가 아닌 패킷이 통과하게 되는 체인이다.

*:(다음문서에 다루게 될 Masqurading시에 패킷의 destnationIP정보는 여러분의 Linux box이지만 패킷의 최종도착지는 내부네트워크의 어떠한 컴퓨터일것이다)



지금 커맨드라인에 아래와 같이 쳐보기 바란다.

# iptables -A INPUT -j DROP

엔터키를 누르는 즉시 여러분의 Linux box로 오는 패킷은 모두 거부당할것이다. 즉 모든 통신이 끊어진다.

위의 룰을 굳이 말로 옮기자면

-A:룰을 추가한다
INPUT: 패킷이 들어오는 체인에
-j:패킷의 운명을 결정한다.
DROP: 패킷을 버려라.

즉, INPUT체인으로 들어오는 패킷을 모두 버리는 룰을 추가하는 명령이다.

적용시킨 룰을 보고 싶다면

# iptables -L

이라는 명령을 치면된다.

-A와 같은 위치에 있는 옵션은 아래와 같다.

체인에 새로운 규칙을 추가하기 (-A)
체인의 어떤 지점에 규칙을 삽입하기 (-I)
체인의 어떤 지점의 규칙을 교환하기 (-R)
체인의 어떤 지점의 규칙을 제거하기 (-D)
체인에서 일치하는 첫번째 규칙을 제거하기 (-D)

이제 위에서 내린 룰을 지워 통신이 되게 하자.
아래와 같이 명령을 내리면 된다.
# iptables -D INPUT 1
또는
# iptables -D INPUT -j DROP 하면 될것이다.

첫번째 방법은 index(룰의 순서)를 지정해서 지우는 방법이고, 두번째는 룰의 내용으로 지우는것이다.

-I,-R은 첫번째 방법과 유사하게 쓸수있다.





룰을 다시 세우고 목록을 보자.

# iptables -A INPUT -j DROP
# iptables -L

살펴보면

Chanin INPUT (policy ACCEPT)

위와 같은 줄을 볼수있을것이다.
저 줄 밑에는 여러분들이 세운 룰의 정보를 볼수있을것이다.

(policy ACCEPT)를 설명하자면 여러분들이 세운룰에 해당되지 않을때
마지막으로 기본정책을 따라 패킷의 운명을 결정하게 된다. 여기서는 ACCEPT이므로
패킷은 받아드려질것이다. 아지만 이것을 DROP으로하면 패킷은 버려질것이다.

그리고 패킷필터링을 알아가면서 여러룰들을 세울것이다.
기본적으로 룰은 세워진 순서대로 패킷을 검사한다.

이제 기본정책을 바꾸어 보자.

# iptables -P INPUT DROP

위의 명령을 내리고 다시 iptables -L을 하면

Chanin INPUT (policy DROP)으로 된걸 볼수있다.


-P와 동등 위치의 옵션은 아래와 같다.

새로운 체인 만들기 (-N).
비어있는 체인을 제거하기 (-X).
※ 이 두옵션은 직접체인을 만들었을경우와 제어할경우에 해당된다. 기본체인(INPUT,OUTPUT,FORWARD) 에는 해당되지 않는다.

미리 만들어진 체인의 정책을 바꾸기 (-P)
어떤 체인의 규칙들을 나열하기 (-L)
체인으로부터 규칙들을 지우기 (-F)
체인내의 모든 규칙들의 패킷과 바이트의 카운드를 0 으로 만들기 (-Z)




[ 패킷의 목적지또는 출처 제어 ]


패킷출처 제어옵션 -s

# iptables -A INPUT -s 192.168.10.10 -j DROP

위에 같은 명령을 내렸다면 192.168.10.10으로 부터 온 패킷은 모두 버려지게 된다.

-s(--source,--src와 같은 옵션이다.) : 패킷의 출처 IP 지정




목적지 제어옵션 -d

# iptables -A INPUt -d 192.168.10.12 -j DROP

위와 같은 명령을 내렸다면 192.168.10.12의 IP를 도착지로 가지고있는 패킷은 모두 버려지게된다.

-d(--destination,--dst와 같은 옵션이다.): 패킷의 도착지 IP지정


※ IP지정 이외에 몇 가지 방법이 더 존재한다.
-s www.xxxx.com : 도메인으로 제어
-s 192.168.10.0/24 : 네트워크 또는 집단으로 제어
-s 192.168.10.0/255.255.255.0 :위와 동일

※ 보통 프로그래밍 약속기호처럼 !는 역('not')이라는 것을 표시한다.
ex) -s ! 192.168.10.10 이라고 하면 "출발지가 192.168.10.10이 아닌" 이라는 뜻이된다.





[ 프로토콜 제어 ]

프로토콜제어 옵션은 -p이다

-p옵션의 인자는 TCP,UDP,ICMP가 될수있다.

# iptables -A INPUT -p TCP -j ACCEPT

라는 명령을 내렸다면 tcp프로토콜을 쓰는 모든 패킷은 ACCEPT에 의해 허락될것이다.

※ -p의 인자로 TCP,UDP,ICMP의 프로토콜번호를 알고있다면 번호를 써도 상관없다.

포트 제어

포트제어 옵션은 --sport와 --dport이다

--sport는 패킷의 출발지 포트이다.( --source-port와 같은 옵션이다.)

--dport는 패킷의 도착지 포트이다.( --destination-port와 같은 옵션이다.)


# iptables -A INPUT -p tcp --dport 80 -j DROP

위와 같은 명령은 tcp프로토콜의 80(www:웹서버포트)번 포트를 목적지로 하는 패킷을
버리는 것이다.

※ --dport나 --sport의 인자로 서비스이름을 적어도 된다.
ex) --dport www

※ 여러 포트를 지정해야 된다면 --dport 1024:65535 와 같이 지정할수있다.
뜻은 1024 부터 65535번까지라는 뜻이다.






[ 인터페이스 지정 ]

인터페이스는 -i (input interface), -o (output interface)로 지정할수있다.

# iptables -A INPUT -i eth0 -p tcp --dport 80 -j DROP

위의 명령은 -i eth0옵션을 빼고는 port지정 예와 같다.

-i eth0는 eth0로 들오는 모든 패킷을 뜻한다.

보통 리눅스 박스처럼 인터넷과 연결된 디바이스가 1개라면 필요없는 옵션이 되겠지만
만약 eth0, eth1등 2개이상의 인터페이스가 인터넷과 연결되어있다면 위의 옵션은 유용하게 쓰일것이다.

※ INPUT 체인은 -i 옵션만 쓸수 있고, OUTPUT 체인에는 -o옵션만 쓸쑤있다.
반면에 FORWARD 체인은 -i,-o 옵션 두가지 다 쓸쑤있다. 이유는 다음문서에서 다루겠다.



총괄적인 예:

# iptables -A INPUT -i eth0 -d 192.168.10.10 -p tcp --dport 80 -j DROP

해설: INPUT 체인에 - 입력인터페이스가 eth0이고 도착지가 192.168.10.10이고
프로토콜은 tcp이며 도착 포트는 80(www)인 패킷은 DROP시켜라.





이제까지는 별 다른 지식이 없이도 이해할수있는 부분이었다.
하지만 지금부터 나오게될 내용은 tcp/ip의 기반적인 지식을 가지고있어야
이해하기 쉬울것이다.
tcp/ip지식이 필요한 옵션에 대해서는 그에따른 자세한 설명을 하겠지만
이해가 되지 않는 부분은 다른 문서나 책을 찾아보길 바란다.





[ 패킷의 행동 유형에 따른 필터링(--tcp-flags,m state --state) ]


! 주의 : 밑에 나오는 모든옵션은 TCP프로토콜옵션(-p TCP)가 먼저
선행되어 있어야 적용되는 옵션이다.



1)
--tcp-flags 옵션은 상태에 따라 유용하게 설정할수있다.
이 옵션을 설정하는 가장 큰 예는 한방향으로만 통신이 되게끔설정하기 위해
많이 사용한다.
tcp/ip는 3핸드쉐이크의 접속방식이다.
즉. 접속요청패킷,접속허가 패킷,확인패킷

접속 단계를 좀더 자세하게 보면

C: Client S:Server

1) C --------- syn -------▷ S
2) C ◁------- syn ack ----- S
3) C --------- ack -------▷ S

이런식으로 접속절차가 이루어진다.

syn패킷은 접속요청 플래그(syn)가 설정된 패킷이므로 syn패킷만 막으면 상대편에서 접속을 할수 없다는 것이다.

※ Dos공격의 일종인 Syn Flooding이 서버에 위에서 말한 syn형패킷을 무수히 많이
보내는 것이다.


이제 본격적으로 --tcp-flags옵션으로 syn 접속형 패킷을 막는것을 하겠다.

# iptables -A INPUT -p TCP --tcp-flags SYN,RST,ACK SYN -j DROP

--tcp-flags에 첫번째 인자는 검사할 리스트 마스크이다.
두번째 인자는 설정되어있어야할 플래그다.
즉 syn,rst,ack플래그중 syn이 set이 1로 되어있으면 위의 --tcp-flags설정에
해당이 되므로 패킷은 DROP된다.


위의 옵션과 같은 뜻을 가진것이 있는데 그것은 --syn이다.
--syn은 '--tcp-flags SYN,RST,ACK SYN'의 뜻을 가지고 있다.





2)
--tcp-flags보다 더 간단하게 설정하는 방법이 있다.
바로 tcp의 상태천이 다이아그램을 축소시켜 놓은듯한 느낌을 받는 상태에 따른 패킷분류를 iptables은 지원한다.

이것은 확장기능이므로 -m 플래그로 설정은 한다.

사용옵선은 -m state --state 이다.

인자값으로 들어가야할 상태에따른 리스트는 아래와 같다.



NEW : 새로운 접속을 만드는 패킷

ESTABLISHED :존재하는 접속에 속하는 패킷 (즉, 응답 패킷을 가졌던 것)
즉 접속이 허가되고 통신하면서 발생되는 패킷이다.

RELATED :기존의 접속의 부분은 아니지만 연관성을 가진 패킷으로 .
ICMP 에러 나 (FTP 모듈이 삽입 되어있으면) ftp 데이터
접속을 형성하는 패킷.

INVALID :어떤 이유로 확인할 수 없는 패킷. 알려진 접속과 부합하지 않는 ICMP 에러와
'out of memory' 등을 포함한다. 보통 이런 패킷은 DROP 된다.



이제 이 state 옵션을 사용해보자

위의 --tcp-flags옵션에서 예제와 같은 작용을 하는 룰을 만들어보겠다.

# iptables -A INPUT -p TCP -m state --state NEW -j DROP

왜 룰이 이렇게 되는지 차근차근 읽어보았다면 쉽게 이해가 될것이다.

일반적으로 서버는

# iptables -A INPUT -p TCP --dport 특정포트 -m state --state NEW,ESTABLISHED -j ACCEPT

이렇게 룰을 많이 세운다.
뜻은 tcp 특정 포트에 new:접속패킷과,established:통신패킷(정확히 쉽게 설명할
단어가 생각나지 않아 부적절하지만 통신패킷이라 부른다)을 허용하라.


그리고 클라이언트 측에서는 위의 state상태에서 NEW를 빼고 사용한다.

# iptables -A INPUT -p TCP --sport 특정포트 -m state --state ESTABLISHED -j ACCEPT

왜 NEW를 뺄까? 그 이유는
그 이유는 클라이언트입장에서 보면 접속을 허가해달라는 패킷이 필요없다는것이다.
더 쉽게 말하자면 클라이언트는 접속허가를 요청하는 위치이지 요청받는
위치가 아니라는 말이다.
그러므로 ESTABLISHED만 있으면 일반적으로 통신하는데 아무런 문제가 없다

그리고 주의깊게 본 사람이라면 위에 --sport가 쓰여진것을 볼수있을것이다.

왜 서버에서는 --dport로 제어를 하면서 클라이언트는 --sport로 제어를 할까?

지금 리눅스 박스라면 wget을 쓰던지 x-windows에서 브라우져를 쓰던지 아무런 웹사이트에 접속을 하고 바로 콘솔에서 'netstat -nat'라는 명령을 내려보자.

무슨말인지 알겠는가?

서비스를 한번이라도 해본적있는 사람이면 알겠지만 서버는 특정PORT를 열어놓고 접속을 기다린다.
클라이언트는 특정 서버에 접속을 하기 위해 별도로 포트를 생성하고 접속을 시도한다.
이때 클라이언트가 생성하는 포트번호는 1024이후의 랜덤값이다. 이런이유로 클라이언트입장에서는
--dport로 제어를 하지않는게 보통이다. 제어를 하더라도 상관없다. 하지만 그것은
상당한 비효율적인 룰이 될것이다.



[ftp를 위한 상태천이를 이용해 룰 설정]


ftp는 참 유별난 프로토콜이다. 특히 마스커레이드때 쓰이는 nat과 잘 맞지도 않을뿐더러.
ftp서버에서 passive모드로 운영을 할시 iptables로 제어하고 싶다면 따로 모듈이 필요하다.


passive로 1025:65535까지 임이의 데이타 전송포트를 쓸때
상태천이로 제어를 하자면,보안상 NEW를 사용하지 않는다.
즉,새로운 접속을 허가하지 않고
RELATED로 기존접속에 관련된것만 접속을 허용한다.

즉 실제 룰을 보면 아래와 같다

# iptables -A INPUT -p tcp --dport 1024:65535
-m state --state ESTABLISHED,RELATED -j ACCEPT

※ 만약 NEW를 사용한다면 방화벽 구실을 못할것이다.
왜그런지는 직접 생각해보라 위에서 이미 충분히 설명하였다.


ftp에서 위처럼 RELATED로 방화벽룰을 설정했다면
ip_conntrack_ftp라는 모듈없이 연결이 제대로 되지 않을것이다.

ip_conntrack_ftp는 ftp서버의 ftp접속 추적 모듈이다.





[ 조각(Fragments) 처리하기 ]


때때로 하나의 패킷이 한 번에 한 회선을 통과하기에는 너무 큰 경우가 발생한다.
이 때는 패킷이 `조각'으로 나뉘어 여러 개의 패킷으로 전송된다.
받는 쪽에서는 이 조각을 모아 하나의 패킷으로 재구성한다.


패킷 필터링 HOWTO에서는 nat이나 접속추적을 할때에는 분절패킷이 하나의 패킷으로

재구성되어 필터링되기때문에 해당되지 않는다고 명시되어 있다.

하지만 위와 같은 상황이 아니라면 조각을 처리해야하나 안전성을 이유로 처리하지
않는 것을 권장하고 있다. 그 이유는 아래에 설명할것이다.

일반적으로 패킷이 분절(토막)될때 필터링을 할 정보인 특히 발신지 포트,
목적지 포트, ICMP 유형, ICMP 코드 또는 TCP SYN 플래그등은 첫번쩨 패킷의
헤더에 밖에 포함되지 않는다. 즉 두번째 분절패킷부터는 그 정보가 없다는 말이다.
이를 위해서 우리는 분절된 패킷을 처리하기 위해 -f 옵션을 사용한다.

하지만 -f옵션을 권장하지 않는다. 왜냐하면 첫번째 필터링정보가 담긴 헤더를 보고
필터링을 할때 그 패킷이 거부하는 룰에 적용되어 거부되면 분절된 패킷이 거부되지
않고 오더라도 그것은 하나의 패킷으로 재구성 되지 않고 버려지기 때문이다.


사용법은

# iptables -A OUTPUT -f -d 192.168.1.1 -j DROP

처럼 사용한다.
위의 뜻은 192.168.1.1을 항해 나가는 분절된 패킷은 모두 버린다 이다.

다시 한번 말하지만 꼭 필요한경우를 제외하고 이 옵션은 권정하지 않는다.






이정도로 iptables의 기본 사용법에 대해 마치고자 한다.
이문서에서는 방화벽설정에서 자주 사용하게 되는 옵션에 대해서만 언급했다.
아니 이정도 옵션들이면 어느정도 방화벽은 구성할수 있을것이다.
나머지 옵션들은 man패이지나 패킷필터링 HOWTO에서 찾아보기 바란다.
여기서 다루지 않은 forward체인과 nat구성,mangle테이블사용은
다음문서에서 다룰것이다.

'공부 해 Boa요. > Linux Server' 카테고리의 다른 글

리눅스 로그파일 관리하기  (0) 2008.03.25
유닉스 및 리눅스 명령어  (0) 2008.03.25
Apache Tunning  (0) 2008.03.10
리눅스 가상 IP 설정Ⅱ  (0) 2007.11.23
리눅스 가상 IP 설정Ⅰ  (0) 2007.11.23
1. 웹 페이지 로딩시간 확인
#time -pa lynx -source http://www.gwise.com > /dev/null
real 0.74
user 0.16
sys 0.09
-------------
실제 접속시간 : 0.74-(0.16+0.09)=0.49초

2. 아파치 벤치 마킹
#man ab 사용법 보기
-n requests 요청을 수행할 개수
-c concurrency 요청을 만들 개수로 동시 사용자 개념으로 이해하면 되겠다.
-v verbosity 얼마나 자세한 정보를 화면에 출력해 줄 것인지 결정
-w HTML 문서형식으로 테이블로 만들어 결과를 화면에 출력
-k HTTP 프로토콜의 지속연결 (KeepAlive) 기능을 사용

#./ab -n 100 -c 10 http://www.gwise.com:80/
10 명의 유저가 동시에 http://www.gwise.com/index.html 을 요청하는 것을 모
의 실험.
각각의 시뮬레이트 유저는 요청을 10 번씩 하게 됩니다

# ab -n 1500 -c 50 http://www.apache.kr.net:80/
요청을 30 x 50 (50 명의 사용자가, 각각 30 번의 요청)

Requests per second: 80.48
초당 80.48개를 요청 했음.

'MaxRequestsPerChild’ 는 메모리 누수현상(?) 등이 발생하지 않는다면 가능
한 이 값을 높게 설정하시고요(파라미터의 값을 0 으로 설정해 무한대로 하실
수도 있습니다) StartServers’ 는 프로세스가 active 되어 있는 경우가 적을
경우 값을 낮게 설정하시고, 접속량이 아주 많을 경우는 MaxClients 에 가깝
게 조절하시기 바라며, MaxSpareServers 를 MaxClients 와 같게 설정합니다.
MaxClients 는 너무 낮게 설정하지 않도록 주의하시기 바라며, 그렇다고 또 너
무 크게 잡으셔도 안됩니다


3. 웹 서버 삽질 막기
BrowserMatch "WebZip" go_out
BrowserMatch "Teleport" go_out
BrowserMatch "GetRight" go_out

[CODE]<Directory "/home/gwise/public_html"> .... Deny from env=go_out </Directoy>[/CODE]

4. 아파치 튜닝
일반 서버에서는 다른것은 그냥 Default 값으로 둔다.
(대형 서버의 경우 말고는 특히 쓸 일어 없을 것이다.)

증가 시킬 경우 배수로 한다. 꼭 이렇게 해야 한다가 아니라
이렇게 하면 좋다.

Timeout 300
클라이언트의 요청에 의해서 Server와 연결 되었을때
클라이언트와 서버간의 아무런 메시지가 발생하지 않았을때
오류로 처리하는 시간
네트워크 속도가 나쁠수록 수치값을 높게 한다.

KeepAlive on
지속적인 접속, 즉 서버 연결에 대하여 한번 이상의 요청을 허용 여부.

MaxKeepAliveRequests 100
클라이언트가 접속된 시간동안 아파치 서버에 요청할 수 있는 처리 process 개


StartServers 5 X ? =20 -> 초반에 뜰 process 그 이상 그이하의 의미도 없
다.
MinSpareServers 5 X ? =20 -> Spare 프로세스가 이것 이하 일때 끌어 올려
준다.
MaxSpareServers 10 X ? =40 -> Spare 프로세스가 이것 이상 일때 진정(?)시
켜 준다.
말 그대로 Spare.... 언제 있을지 모를 요청에 대해서 컴퓨터 스스로가
조절해 준다.

MaxClients 150
클라이언트들이 동시에 최대로 접속했을때 가능한 최대 서버이 수를 지정.
Ulimit -a ~~~ max process...이 수치 이상 증가 못함.
httpd.h
HARD_SERVER_LIMIT=250 조정해서 다시 컴파일 가능

MaxClient 150 -> 동시에 떠 있을수 있는 최대 process
더 많은 수를 원할시 httpd.h 소스 파일의
HARD_SERVER_LIMIT 값을 수정 한 다음 다시 컴파일 해야 한다.

#ulimit -a
core file size (blocks) 0
data seg size (kbytes) unlimited
file size (blocks) unlimited
max memory size (kbytes) unlimited
stack size (kbytes) 8192
cpu time (seconds) unlimited
max user processes 2048
pipe size (512 bytes) 8
open files 1024
virtual memory (kbytes) 2105343
-----------------------
위의 max user processes 의 수를 초과 할 수 없다.

MaxRequestPerChild 100
한 프로세스가 몇 번의 서비스를 하고 소멸될 것인지 정한다.
M$계열에서는 별 의미가 없으므로 0을 한다.
하지만 Unix 계열은 0을 사용하지 않는 것이 좋다.

가장 중요한 것은Timeout 설정입니다. 위에서 keep-alive 를 설정해 놓은
경우, 하나의 connection에서 계속해서 다음 request를 처리할 수 있기 때문
에 효율적
이라고 하지만, 실제로는 그렇지 않습니다. keep-alive 를 허용하고 그
timeout을
5초로만 설정해도, 하나의 request를 처리한 후 적어도 5초동안은 그 httpd가
다른
작업을 하지 못하고 다음 request를 기다리게 됩니다.

보통 웹브라우저들은 서버로 동시에 4개의 connection을 만들게 됩니다. 한 페
이지를
보는데 이미지 등등 해서 보통 4개의 connection을 만드는 것은 기본이죠. 이
렇게 되면
httpd가 100개 떠 있다고 해도, 실제로는 동시에 25명의 방문자밖에 처리하지
못합니다.

그리고 keep-alive timeout이 5초인 경우, 한 명의 방문자를 처리한 후 적어
도 5초동안은
계속해서 기다리면서 httpd가 놀게 됩니다.(그렇다고 해서 httpd의 수를 늘여
주면 앞의
문제 때문에 load가 몰릴 때 순간적으로 부하가 지나치게 많이 걸리게 됩니
다. 어떤
request는 수초가 지난 후 답을 받는 등 quality of service가 많이 떨어지
죠.)

결국 한 명의 방문자를 처리하는데 4개의 httpd가 5초동안 작업한다는 뜻이
고, 100개의
httpd를 띄워봐야 1초에 5명의 방문자밖에 처리하지 못하는 셈입니다. ( 1
명 / 5 sec /
4 httpd = 5 / 1 sec / 100 httpd )

그래서 검색엔진 서비스 등 traffic이 많은 사이트에서는 keep-alive 옵션을
반드시 꺼
놓게 됩니다. 그리고 connection timeout도 상당히 짧게 설정해 놓죠. 4~5초
이내로 말입니다


5. 아피치 튜닝-2(로그기록 로테이트로)
/home/apache/conf/httpd.conf
CustomLog /home/apache/logs/access_log common
TransferLog "|/home/apache/bin/rotatelogs /home/apache/logs/access_log
86400"
TransferLog "|/home/apache/bin/rotatelogs /home/apache/logs/error_log
86400"
--------------
24시간 마다 로그 화일을 갱신해 준다.
24X60X60=86400초

6. 아파치 에러 메시지 바꾸기
httpd.conf
Customizable error response (Apache style)
2) local redirects
ErrorDocument 404 /cgi-bin/missing404.pl

missing404.pl
---------------
[CODE]#!/usr/bin/perl print<<"(END_HTML)"; Content-type: text/html\n\n <head><title> 요청한 URL 이 없습니다. </title> <meta http-equiv="content-type" content="text/html;charset=EUC-KR"> </head> <body> <br/><br/><center> <b><h2>요청하신 http://www.gwise.com$ENV{'REQUEST_URI'} 이 <br/> 존재 하지 않습니다.<br/></h2></b> <br/><br/><h4> <a href="mailto:gwise\@orgio.net"> 서버관리자 </a> 에게 문의 바랍니다.</h4><br/> (END_HTML) exit;[/CODE]
---------------

7. 아파치 에러 코드
HTTP 1.1 status codes [TOP]

100 : Continue
101 : Switching protocols
200 : OK, 에러없이 전송 성공
201 : Created, POST 명령 실행 및 성공
202 : Accepted, 서버가 클라이언트 명령을 받음
203 : Non-authoritative information, 서버가 클라이언트 요구 중 일부만 전

204 : No content, 클라언트 요구을 처리했으나 전송할 데이터가 없음
205 : Reset content
206 : Partial content
300 : Multiple choices, 최근에 옮겨진 데이터를 요청
301 : Moved permanently, 요구한 데이터를 변경된 임시 URL에서 찾았음
302 : Moved temporarily, 요구한 데이터가 변경된 URL에 있음을 명시
303 : See other, 요구한 데이터를 변경하지 않았기 때문에 문제가 있음
304 : Not modified
305 : Use proxy
400 : Bad request, 클라이언트의 잘못된 요청으로 처리할 수 없음
401 : Unauthorized, 클라이언트의 인증 실패
402 : Payment required, 예약됨
403 : Forbidden, 접근이 거부된 문서를 요청함
404 : Not found, 문서를 찾을 수 없음
405 : Method not allowed, 리소스를 허용안함
406 : Not acceptable, 허용할 수 없음
407 : Proxy authentication required, 프록시 인증 필요
408 : Request timeout, 요청시간이 지남
409 : Conflict
410 : Gone, 영구적으로 사용할 수 없음
411 : Length required
412 : Precondition failed, 전체조건 실패
413 : Request entity too large,
414 : Request-URI too long, URL이 너무 김
415 : Unsupported media type
500 : Internal server error, 내부서버 오류(잘못된 스크립트 실행시)
501 : Not implemented, 클라이언트에서 서버가 수행할 수 없는 행동을 요구

502 : Bad gateway, 서버의 과부하 상태
503 : Service unavailable, 외부 서비스가 죽었거나 현재 멈춤 상태
504 : Gateway timeout
505 : HTTP version not supported

'공부 해 Boa요. > Linux Server' 카테고리의 다른 글

유닉스 및 리눅스 명령어  (0) 2008.03.25
IPTABLE 기본 사용법  (0) 2008.03.10
리눅스 가상 IP 설정Ⅱ  (0) 2007.11.23
리눅스 가상 IP 설정Ⅰ  (0) 2007.11.23
리눅스시스템 정보 보는 방법  (0) 2007.11.10

가상 아이피를 설정하는 또다른 방법은

직접 가상장치에 대한 네트웍 설정 파일을 만드는것이다.


eth0 장치에 대한 설정을 하고 가상아이피를 설정을 하고자 하면


# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.123.250
GATEWAY=192.168.123.254
NETMASK=255.255.255.0



# vi /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.123.251
GATEWAY=192.168.123.254
NETMASK=255.255.255.0


위와같이 두개의 파일을 만들고 서비스를 다시 시작해야 하는데


# service network restart  혹은  # /etc/init.d/network restart

이렇게 해주면 된다.


####### 그외의 옵션들 #######

DEVICE="eth0"
ONBOOT="yes"
BOOTPROTO="none"
IPADDR="61.1.2.3"
NETMASK="255.255.255.0"
#GATEWAY=210.221.183.1
IPXNETNUM_802_2=""
IPXPRIMARY_802_2="no"
IPXACTIVE_802_2="no"
IPXNETNUM_802_3=""
IPXPRIMARY_802_3="no"
IPXACTIVE_802_3="no"
IPXNETNUM_ETHERII=""
IPXPRIMARY_ETHERII="no"
IPXACTIVE_ETHERII="no"
IPXNETNUM_SNAP=""
IPXPRIMARY_SNAP="no"
IPXACTIVE_SNAP="no"


####### 네트웍 관련된 다른 설정 파일들 #######

/etc/hosts 호스트이름과 IP주소를 적는파일.
/etc/resolv DNS 서버주소를 적는 파일
/etc/sysconfig/network 호스트이름,게이트웨이가 들어 있는 파일
/etc/sysconfig/static-routes Static 경로가 있는 경우 적는 파일
/etc/sysconfig/ipchain ipchain 이라고 Masquerading(NAT) 또는 Firewall관련 설정
/etc/sysconfig/firewall firewall 관련 설정
/etc/sysconfig/network-scripts/ifcfg-eth0 eth0에 대한 설정. IP주소, 넷마스크 등이 들어감
/etc/sysconfig/network-scripts/ifcfg-eth1 eth1에 대한 설정.

'공부 해 Boa요. > Linux Server' 카테고리의 다른 글

IPTABLE 기본 사용법  (0) 2008.03.10
Apache Tunning  (0) 2008.03.10
리눅스 가상 IP 설정Ⅰ  (0) 2007.11.23
리눅스시스템 정보 보는 방법  (0) 2007.11.10
리눅스명령어 - 시스템 정보  (0) 2007.11.10

가상 IP를 설정하는건 의외로 아주 간단하다.

# ifconfig <장치명> <가상의 IP>


먼저 기본적인 네트웍 설정상태를 먼저 확인해 보면

# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:07:E9:40:7D:E6
          inet addr:192.168.123.250  Bcast:192.168.123.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:397962 errors:0 dropped:0 overruns:0 frame:0
          TX packets:405098 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:49081880 (46.8 Mb)  TX bytes:416655013 (397.3 Mb)
          Interrupt:20 Base address:0x1400 Memory:fe7e0000-fe7e0038

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1332 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1332 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:95987 (93.7 Kb)  TX bytes:95987 (93.7 Kb)


만약 이더넷 카드가 두개라면

eth1 이라는 정보가 하나 더 표시될것이다.


장치 이름은 기본 장치명에 콜론(:)을 붙이고 가상 장치에 순번을 붙이면 된다.

예) eth0:0, eth0:1, eth0:2 ....


# ifconfig eth0:0 192.168.123.251


이렇게 입력하고 다시 확인해 보면 eth0:0 라고 확장된 장치를 볼 수 있다.


eth0      Link encap:Ethernet  HWaddr 00:07:E9:40:7D:E6
          inet addr:192.168.123.250  Bcast:192.168.123.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:397962 errors:0 dropped:0 overruns:0 frame:0
          TX packets:405098 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:49081880 (46.8 Mb)  TX bytes:416655013 (397.3 Mb)
          Interrupt:20 Base address:0x1400 Memory:fe7e0000-fe7e0038

eth0:0    Link encap:Ethernet  HWaddr 00:07:E9:40:7D:E6
          inet addr:192.168.123.251  Bcast:192.168.123.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Interrupt:20 Base address:0x1400 Memory:fe7e0000-fe7e0038

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1332 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1332 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:95987 (93.7 Kb)  TX bytes:95987 (93.7 Kb)


이런 방법으로 가상아이피는 제한된 갯수까지 늘릴수가 있지만

이러한 경우 서버를 재부팅할 경우 다시 설정해 주어야 하는 단점 때문에

장치에 대한 설정을 파일로 저장하고 부팅시 자동으로 실행 시키는 것이 좋다.

'공부 해 Boa요. > Linux Server' 카테고리의 다른 글

IPTABLE 기본 사용법  (0) 2008.03.10
Apache Tunning  (0) 2008.03.10
리눅스 가상 IP 설정Ⅱ  (0) 2007.11.23
리눅스시스템 정보 보는 방법  (0) 2007.11.10
리눅스명령어 - 시스템 정보  (0) 2007.11.10

[배포버전이름]

#cat /etc/redhat-release

[리눅스버전]

#cat /proc/version

[cpu]

#cat /proc/cpuinfo

[memory]

#cat /proc/meminfo

'공부 해 Boa요. > Linux Server' 카테고리의 다른 글

IPTABLE 기본 사용법  (0) 2008.03.10
Apache Tunning  (0) 2008.03.10
리눅스 가상 IP 설정Ⅱ  (0) 2007.11.23
리눅스 가상 IP 설정Ⅰ  (0) 2007.11.23
리눅스명령어 - 시스템 정보  (0) 2007.11.10
1. ps ( process )
- 현재 진행중인 프로세스의 정보를 출력합니다.

2. pstree ( process tree)
- ps 에 의해 출력되는 프로세스 정보를 트리 형태로 나타냅니다.

3. top
- cpu와 메모리를 사용하는 작업들에 대한 시스템 정보를 출력합니다.

4. arch (architecture)
- 현재 사용하고 있는 cpu의 모델을 출력합니다.

5. cal (calendar)
- 현재의 달을 출력합니다. (ex : 원하는 월 ,연도)
* -j :율리우스달력

6. clock
- CMOS 설정 시간의 출력, 변경을 합니다.

7. date
- 현재 시간과 날짜를 출력합니다.

8. df (disk free)
- 하드의 전체 용량, 남은 용량을 알기위해 사용합니다.
* -h(human) 바이트 단위 출력

9. du (disk usage)
- 각각의 디렉토리, 파일들의 디스크 용량을 출력합니다.

10. free (free memory)
- 현재 사용중인 시스템 메모리 상태를 출력합니다.
* -m(Megabyte) 메가 바이트 단위 출력
* -k (Kilobyte) 킬로 바이트 단위 출력

11. hostname
- 자신의 컴퓨터에 부여된 이름을 출력합니다.

12. lsdev (list devices)
- 현재 시스템에 연결되어 있는 하드웨어에 관한 입출력 정보, IRQ 값 등을 출력합니다.

13. quota
- 각각의 사용자들이 사용할 수 있는 디스크의 용량을 나타냅니다.

14. rdev (root device)
- 내부에 ramsize, swapdev, vidmode, rootflag의 프로그램이 구성되어 있습니다.

15. uname (unix name)
- 사용중인 운영체제에 대한 정보를 출력합니다.
* - a(all) 현재 사용중인 운영체제, 커널의 컴파일 정보 등을 출력

16. su
- 다른 사용자로 login합니다.


17. shutdown
- 시스템을 종료 합니다.
* - t n 옵션 t 뒤에 n 초 후에 경고 메시지와 kill 신호 보냄
* - h (halt) 완전히 닫음
* - r (reboot) 종료후 재부팅
* - f (fast) 빠른 리부팅(파일 시스템 검사 생략 )
* - c (cancel) 예약 되어 있는 종료 취소
* - k (kidding) 정상상태에서 종료 시간시 프로그램 정지

18. reboot
- 재부팅을 합니다.
* - q 현재의 실행프로그램을 종료하지 않고 재부팅

19. kill
- 프로세스 종료, 현재 실행중인 프로세스를 강제 종료시 사용합니다.
* -2 : 실행 중인 프로세스에게 인터럽트 키 신호 보냄
* -9 : 가장 확실하게 실행 중인 프로세스를 종료

20. tty
- 현재 사용하고 있는 단말기 장치의 경로명, 파일명을 알려줍니다.

21. whereis
- 실제 프로그램이 어떤 디렉토리에 존재하는지 모든 경로명을 보여줍니다.

22. fsck (file system check)
- 파일 시스템의 상태 검사하고 잘못된 것을 수정 합니다.
* - a : 검사도중 발견된 에러를 자동 복구
* - r : 검사도중 에러가 발견되면 복구 여부 확인
* - s : 순차적인 방법으로 검색
* - V : 검색 중 각종 정보 보여줌
* - N : 실제로 검사 작업 미 실시

'공부 해 Boa요. > Linux Server' 카테고리의 다른 글

IPTABLE 기본 사용법  (0) 2008.03.10
Apache Tunning  (0) 2008.03.10
리눅스 가상 IP 설정Ⅱ  (0) 2007.11.23
리눅스 가상 IP 설정Ⅰ  (0) 2007.11.23
리눅스시스템 정보 보는 방법  (0) 2007.11.10

+ Recent posts