'Server Manager'에 해당되는 글 30건

  1. 2015.03.06 android-ndk-r10d glibc 버젼 문제로 인한 트러블 슈팅
  2. 2015.01.31 vim ctag, cscope, NERDTree 개 인 설정
  3. 2015.01.01 gdb 최신버젼 peda 설치 시 트러 블슈팅
  4. 2015.01.01 우분투 14 한글 키보드 사용및 한영키 사용
  5. 2014.06.25 하둡(Hadoop) 관련 설치부터 사용까지 메뉴얼
  6. 2014.06.16 apt-get update 오류중 1개
  7. 2014.05.20 [makefile] 매크로(Macro) 와 확장자(Suffix) 규칙
  8. 2014.04.28 간단한 makefile 작성 방법
  9. 2013.12.16 오드로이드 XU 설치 (Odroid XU installation) 2
  10. 2013.12.08 64bit CentOS 32bit 로 컴파일 하기
  11. 2013.11.24 특정 파일만 제외하고 삭제하기.
  12. 2013.11.17 crontab 사용 메뉴얼
  13. 2012.11.28 리눅스 계정 만료일 정하기
  14. 2012.11.14 [ 펌 ] CGI 환경 lighttpd 설치하기 및 셋팅하기. (To set about CGI enviroment)
  15. 2012.11.14 tcpdump 간단한 예시 (Example about simple tcpdump command)
  16. 2012.11.14 서버 보안 셋팅 sysctl.conf 설정. icmp 막기 DoS 막기 (Server Setting for network via setting sysctl.conf)
  17. 2012.11.12 우분투에서 DNS 서버 구축하기 (How to install DNS Server in Ubuntu)
  18. 2012.11.12 [ 펌 ] iptables 사용법 정리 (usage of iptables)
  19. 2012.11.11 리눅스에서 내용으로 검색하는 법(How to search via content)
  20. 2012.10.28 우분투에서 deb rpm 파일 까기.
  21. 2012.10.23 우분투 mysql 패스워드 분실 시 초기화 법
  22. 2012.10.23 우분투 아파치2 디렉토리 리스팅 막는 법 (Ubuntu apache2 Directory listing deny)
  23. 2012.09.06 [리눅스] 특정 포트를 사용하는 프로그램 알아내기 + 포트를 사용하는 프로그램 죽이기
  24. 2012.08.06 솔라리스 python 3.x 설치 시 encoding: 5601 에러 혹은 윈도우에서 cp56001 에러
  25. 2012.08.04 Sun OS (solaris) 에서 python 3.2 설치하기
  26. 2012.05.06 Xinetd 데몬으로 프로그램 돌리기 (To Run program via Xinetd deamon)
  27. 2012.03.21 SSH 로 서버에 접속시에 세션이 바뀌었을때 처리하는 명령어.
  28. 2012.03.21 센트 OS 에서 아이피 테이블즈 설정법(CentOS 5 에서 iptables 설정법) (펌)
  29. 2012.03.21 커널 3.2 버젼으로 컴파일 하기(Kenel Vr 3.2 complie .. )
  30. 2012.03.21 컴파일 시 다양 한 에러들 모음집
2015. 3. 6. 12:57

#echo 'deb http://ftp.us.debian.org/debian/ testing main contrib non-free' >> /etc/apt/sources.list && apt-get update && apt-get install -t testing libc6

#apt-get -f install 


를 통해 libc6 버젼으로 라이브러리를 버젼업 시킨뒤 android-ndk-r10d 를 설치하면됨.

Posted by k1rha
2015. 1. 31. 22:35



vim plugin 관련 좋은 블로그 펌! 



출처 : http://www.iamroot.org/xe/Kernel_10_ARM/104190




1. 커널 소스 받기

https://www.kernel.org/ 에 접속하여 커널 소스를 받습니다. 저는 3.9.2를 받았습니다.(https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.9.2.tar.xz)



2. 소스 압축 풀기

받은 소스 파일을 한글 경로가 안들어가있는 적절한 곳으로 옮깁니다. 저같은 경우는 ~/kernel_study/ 밑으로 옮겼습니다.

그리고 해당 파일의 압축을 풉니다. 압축 풀때는..


$ xz -d linux-3.9.2.tar.xz  

위와 같이 압축을 풀면 tar 파일이 나옵니다. tar 파일을 한번 더 풀어줍니다.

$ tar -xvf linux-3.9.2.tar

그러면 아카이빙이 풀리면서 폴더가 만들어집니다.



3. ctags로 소스 코드 태그 만들기

일단 ctags를 설치합니다.

$ sudo apt-get install ctags

기본적으로 태그를 생성하는 명령은 ctags -R인데 ctags -R은 모든 아키텍처에 대한 태그를 만들어 준다고 합니다. 

우리는 ARM아키텍쳐만 다루기 때문에 ARM으로 한정하여 생성해야 합니다.

이때 리눅스 커널 소스에 아키텍처별 ctags용 태그를 생성할 수 있는 스크립트가 제공된다고 합니다.

스크립트가 있나 없나 한번 확인해봅니다.

$ ls -al ./scripts/tags.sh

tags.sh가 있는 것이 확인되면 make 명령으로 ARM용 태그를 생성합니다.

$ make tags ARCH=arm
만드는데 시간이 좀 걸립니다. 


4. cscope 태그 데이터베이스 만들기
다음으로는 ctags를 보완해주기 위해 cscope를 설치해줍니다.
$ sudo apt-get install cscope
cscope DB를 생성하기 위해서는 분석할 파일들의 목록을 cscope.files 파일에 저장 한 후 생성해야되는데
리눅스 커널 소스에서는 이를 자동으로 구성해주는 스크립트를 내장하고 있습니다.
$ make cscope ARCH=arm


5. vim 플러그인설치
OB들의 책에서는 ctags와 cscope에 익숙하지 않다면 vim 플러그인을 추천합니다.
플러그인으로 Source Explorer, NERD Tree, Tag List를 추천하고 있습니다.
3개는 http://www.vim.org/ 에서 다운받을 수 있습니다.
vim사이트에서 좌측을 보시면 Download 밑에 Scripts라고 메뉴가 있습니다.
그것을 클릭 후 거기서 Browse all을 누릅니다.
그러면 하단부에 플러그인을 검색 할 수 있는 keywords와 type, sort by가 뜨는 것을 볼 수 있습니다.
keywords에서 검색하여 각각의 플러그인들을 다운받습니다.
각각의 주소는
입니다.

플러그인들을 설치하고 환경을 설정하기 위해 홈디렉토리로 가서 .vim 폴더를 만들어 줍니다.
그리고 다운받은 파일들을 홈디렉토리로 옮겨 줍니다.
그리고 .vim 폴더로 가서 하위폴더로 plugin폴더를 만들어 줍니다.
그 다음 각각의 파일들을 압축을 해제하여 줍니다.
압축을 풀면 각각의 플러그인마다 거시기.vim파일들이 나오는데
NERD_tree.vim  srcexpl.vim  taglist.vim
이 3개의 파일들을 ~/.vim/plugin/ 밑으로 복사 또는 이동합니다.
그러면 설치는 완료되고 환경설정이 남았습니다.

6. 환경설정
아까 설치한 ctag와 cscope를 연동하기 위해 vim 환경 파일인 .vimrc를 수정해야 합니다.
먼저 ctags와 cscope 데이터베이스 파일의 위치와 실행파일의 위치를 확인해봅니다.
$ whereis ctags
ctags: /usr/bin/ctags /usr/bin/X11/ctags /usr/share/man/man1/ctags.1.gz
$ whereis cscope
cscope: /usr/bin/cscope /usr/bin/X11/cscope /usr/share/man/man1/cscope.1.gz

그리고 vim 환경설정 파일을 엽니다.
$ vi ~/.vimrc
그리고 아래를 입력 해 줍니다.
 

  "vim환경설정
       set nu "line number
       set ai "auto indent
       set ts=4 "tab size
       set bg=dark "background color
   
   "ctags database path 설정
       set tags=~/kernel_study/linux-3.9.2/tags "각자 자신의 위치로..
   
  "cscope database path 설정
      set csprg=/usr/bin/cscope "whereis로 나온 cscope위치
      set csto=0 "cscope DB serch first
      set cst "cscope DB tag DB search
      set nocsverb "verbose off
  
      "cscope DB의 위치 설정
      cs add ~/kernel_study/linux-3.9.2/cscope.out ~/kernel_study/linux-3.9.2
      set csverb "verbose off
  
  "Tag List 환경설정
      filetype on "vim filetype on
      nmap <F7> :TlistToggle<CR> "F7 key = Tag List Toggling
      let Tlist_Ctags_Cmd = "/usr/bin/ctags"  "ctags 프로그램 위치
      let Tlist_Inc_Winwidth = 0 "window width change off
      let Tlist_Exit_OnlyWindow = 0 "tag/file 선택 완료 시 taglist
                      "window close =off
      let Tlist_Auto_Open = 0 "vim 시작 시 window open = off
      let Tlist_Use_Right_Window = 1 "vim 시작 시 window open = off
  
  "Source Explorer 환경설정
      nmap <F8> :SrcExplToggle<CR> "F8 key = SrcExpl Toggling
      nmap <C-H> <C-W>h "왼쪽 창으로 이동
      nmap <C-J> <C-W>j "하단(preview) 창으로 이동
      nmap <C-K> <C-W>k "상단 창으로 이동
      nmap <C-L> <C-W>l "오른쪽 창으로 이동
  
      let g:SrcExpl_winHeight = 8 "SrcExpl 윈도우 높이 지정
      let g:SrcExpl_refreshTime = 100 "refreshing time = 100ms
      let g:SrcExpl_jumpKey = "<ENTER>" "해당 definition으로 jump
      let g:SrcExpl_gobackKey = "<SPACE>" "back
      let g:SrcExpl_isUpdateTags = 0 "tag file update = off
  
  "NERD Tree
      let NERDTreeWinPos = "left" "NERD Tree위치 = 왼쪽
      nmap <F9> :NERDTreeToggle<CR> "F9 key = NERD Tree Toggling



CTAG 단축키 
ctag -R
1 :h [ 접두어 ] | [ 접미어 ] 해당명령어의 도움말 
2 Ctrl + Z  , fg  쉘로 빠져나가고 복귀
3 :ascii 현재 커서의 아스키값을 알아냄
4 yy + p 한줄 복사하여 붙여 넣기
5 "=G" 들여쓰기 재정렬 G는 재정렬을 적용할 범위를 나타냄
6 set autoindent  자동 들여쓰기
7 set smartindent 지능적인 들여쓰기?
8 set ruler 행 열번호,
9 set hlsearch 검색어 강조
10 vi -t < keyword > 태그 파일에서 keyword 와 일치하는 첫번째 위치로 이동
11 :ta < keyword > 실행중 특정태그를 검색
12 :tn , :tp 이전, 이후 태그로 이동
13 :tj 태그가 여러개일 경우 목록을 출력, 선택하면 이동가능
14 Ctrl + ] 커서가 위치한 keyword 의 정의부분으로 이동
15 Ctrl + t 이동후 이전 위치로 복귀 
CSCOPE 
# find . \( -name '*.c' -o -name '*.h' -o -name '*.s' -o -name '*.S' \) -print > cscope.files
cscope -i <filelist file>    : cscope.out 으로 데이터베이스 파일ㅇ ㅣ생성된다.
: cs add /usr/src/linux-3.0.4/cscope.out
cscope 사용 :cs find <검색유형> <검색어>
1 s 심볼을 검색
2 g global 변수를 검색
3 d 함수에 의해 호출되는 함수들을 검색
4 함수를 호출하는 함수들을 검색
5 t 텍스트 문자열을 검색
6 e 확장 정규식을 사용하여 검색
7 f 파일이름을 검색
8 i include 파일을 검색
9 :cn, :cp 다음 검색, 이전 검색


Posted by k1rha
2015. 1. 1. 23:34

[ 출 처: http://sangu1ne.tistory.com/98 ] 


아래와 같이 gdb소스를 받아서 파이썬 2.7을 사용한 gdb로 컴파일 하면 된다.


1.먼저 gdb-peda소스를 받는다.

https://github.com/longld/peda


2.다음을 입력한다.

echo "source ~/peda/peda.py" >> ~/.gdbinit


3.gdb 소스를 받는다.

http://ftp.gnu.org/gnu/gdb/


4.python2.7-dev 패키지를 받는다.  (이 패키지가 없으면 2.7버전을 사용해서 gdb를 컴파일 할 수 없음)

apt-get install python2.7-dev


5.libncurses5-dev 패키지를 받는다. (이 패키지가 없으면 termcap library found 에러가 난다)

apt-get install libncurses5-dev


http://www.embedded-it.de/en/bsp/eCross.php

6.gdb 소스가 있는 디렉토리로 가서, 다음을 입력한다.


./configure --with-python=python2

make

make install



Posted by k1rha
2015. 1. 1. 14:45




VM에 우분투 설치 후 한글 설정 삽질한 내용 정리

 - 문제점

   -->노트북의 한영키가 Alt키랑 같이 인식

 -해결 방법

   --> 1. compizconfig-settings-manager 설치(아래 명령어로 설치)

            $sudo apt-get install compizconfig-settings-manager

 

         2. compizconfig-settings-manager 실행 후에 알트키와 관련된 명령어 제거

             Ubuntu Unity Plugin 검색하여 아래 화면의 두 부분을 사용하지 않음으로 설정


Posted by k1rha
2014. 6. 25. 12:37

링크 : http://blog.acronym.co.kr/329?fb_action_ids=291874987652641&fb_action_types=og.comments


Posted by k1rha
2014. 6. 16. 11:08


W: 디지털 서명 확인에 오류가 발생했습니다. 저장고를 업데이트하지 않고

예전의 인덱스 파일을 사용합니다. GPG 오류: http://kr.archive.ubuntu.com precise-updates Release: 다음 서명이 올바르지 않습니다: BADSIG 40976EAF437D05B5 Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com>


W: http://kr.archive.ubuntu.com/ubuntu/dists/precise-updates/Release 파일을 받는데 실패했습니다  


W: Some index files failed to download. They have been ignored, or old ones used instead.

k1rha@k1rh4:/home/LLVM$ 




[출처 : http://bunhere.tistory.com/1 ]


빌드 스크립트를 만들어 패키지 업데이트 하고, 소스 컴파일을 하도록 하다보니, 왕왕 삽질하는 경우가 있었는데, 남이 만든 스크립트를 갖다 쓰다 왕창 삽질을 하고 말았다.

 

[문제]apt-get update시 아래 에러 메시지 발생(키가 다르지만 비슷)

W: GPG error: http://archive.ubuntu.com hoary Release: The following signatures
were invalid: BADSIG 40976EAF437D05B5 Ub
untu Archive Automatic Signing Key

삽질 1>

시냅틱 매니저를 띄워서 리로드를 해봐도 403 Unauthentication (맞나?)와 함께 갱신이 안됨

(서버를 변경해보면서 해봐도 안됨, http_proxy 체크해봄)

 

삽질 2>

GPG 키에 문제가 있나 싶어 gpg key를 새로 받아봄

(기존에 있는 것은 지워도 봄 - 지우면 NO_PUBKEY 에러가 발생)

gpg --keyserver wwwkeys.eu.pgp.net --recv-keys 010908312D230C5F

gpg --armor --export 010908312D230C5F| apt-key add -

키서버는 우분투에 있는걸 해도 관계 없을듯.

 

해결책>

https://bugs.launchpad.net/ubuntu/+source/update-manager/+bug/24061

apt-get clean
cd /var/lib/apt
mv lists lists.old
mkdir -p lists/partial
apt-get clean
apt-get update

그냥 패키지가 꼬였던 듯 -_-;


원본 위치 <http://bunhere.tistory.com/1

Posted by k1rha
2014. 5. 20. 19:39

[ 출처 : https://wiki.kldp.org/KoreanDoc/html/GNU-Make/GNU-Make-3.html ] 



3. 매크로(Macro) 와 확장자(Suffix) 규칙

3.1 매크로란 무엇인가? (What is Macro)

앞에서 매크로에 대해서 대충 언급을 했다. 프로그램을 짜본 사람이나 로터스, 한글, 엑셀 등의 모든 패키지에서 매크로라는 것을 사용하게 된다. 은연중에 매크로의 정의는 대충 짐작하고 있을 것이다. 이미 알고 있는바와 같이 매크로는 특정한 코드를 간단하게 표현한 것에 지나지 않는다. Makefile에서 사용되는 매크로는 비교적 그 사용법이 간단하기 때문에 금방 익혀서 사용할 정도가 된다.

매크로의 정의는 프로그램을 작성할 때 변수를 지정하는 것처럼 하면 된다. 그리고, 매크로를 사용하기 위해서는 $(..)을 이용하면 된다. 아래는 매크로의 간단한 예제이다.

=> 참고: 매크로의 사용에서 ${..}, $(..), $..를 모두 사용할 수 있습니다. 그러나 대부분의 책에서는 $(..) 을 사용하라고 권하는군요.

Makefile예제 4


OBJS = main.o read.o write.o

test : $(OBJS) <- (1)
gcc -o test $(OBJS)
                ..........

첫 번째 장에서 다루었던 예제와 거의 비슷하다. 매크로는 사실상 복잡한 것을 간단하게 표시한 것에 지나지 않는다. (1) 번을 매크로를 안 쓰고 표현한다면 아마 아래와 같이 될 것이다.

Makefile예제 5


test : main.o read.o write.o 
gcc -o test main.o read.o write.o

=> 참고: 예제 5가 더 쉽지 않느냐고 반문하는 사람은 매크로의 위력을 잘 모르는 사람입니다. 거의 모든 소프트웨어에서 매크로를 지원하는 이유를 한번 잘 생각해 봅시다.예제 4 의 (1)부분이 이해하기 난해하다고 하실 지는 모르겠지만, 대충 형식이 정해져 있기 때문에 조금만 익숙해지면 오히려 더 편할 겁니다.

make에 관해 설명한 책에 다음과 같은 명언(?) 이 나온다.

Macro makes Makefile happy. (매크로는 Makefile 을 기쁘게 만든다.)

이 말은 Makefile을 작성함에 있어 매크로를 잘만 이용하면 복잡한 작업도 아주 간단하게 작성할 수 있음을 말해 주는 말이 아닐까 생각한다. 매크로에 대해서는 더 이상 말할 것이 없다. (너무 간단하죠 ?) 이제 남은 것은 여러분들이 자신의 매크로를 어떻게 구성하느냐이다. 어떤 것을 매크로로 정의해야 할지는 여러분들의 자유이며, 나중에 전반적인 지침을 설명할 것이다.

3.2 미리 정해져 있는 매크로 (Pre-defined macro)

여러분들보다 머리가 약간 더 좋은 사람들이 make 라는 것을 만들면서 미리 정해 놓은 매크로들이 있다. 'make -p' 라고 입력해 보면 make에서 미리 세팅되어 있던 모든 값들(매크로, 환경 변수(environment) 등등)이 엄청 스크롤 된다. 이 값들을 보고 미리 주눅 들 필요는 없다. 어차피 대부분의 내용들은 우리가 재정의 해주어야 하기 때문에 결론적으로 말하면 우리가 모두 작성한다고 생각하는 것이 마음이 편하다.,.

아래에는 대부분이 UNIX 계열의 make에서 미리 정해져 있는 매크로들 중에 몇 가지만 나열해 본 것이다.

Predefined Macro 예제 6


ASFLAGS = <- as 명령어의 옵션 세팅
AS = as
CFLAGS = <- gcc 의 옵션 세팅
CC = cc (= gcc)
CPPFLAGS = <- g++ 의 옵션
CXX = g++
LDLFAGS = <- ld 의 옵션 세팅
LD = ld
LFLAGS = <- lex 의 옵션 세팅
LEX = lex
YFLAGS = <- yacc 의 옵션 세팅
YACC = yacc
MAKE_COMMAND = make

=> 참고: 직접 make -p를 해서 한번 확인해 보세요. 과연 make는 내부적으로 어떤 변수들을 사용하고 있는지 알아봅시다. 매크로는 관습적으로 대문자로 작성되니까 이점에 유의해서 보세요. make는 쉘상에서 정의한 환경 변수값들을 그대로 이용한다는 것을 알고 계시기 바랍니다.

위에 열거한 매크로는 make에서 정의된 매크로중 그야말로 일부에 지나지 않는다. 하지만 프로그램을 작성함에 있어 가장 많이 사용하게 될 매크로 들이다. 이들 매크로는 사용자에 의해 재정의 가능하다. 가령 gcc의 옵션 중에 디버그 정보를 표시하는 '-g' 옵션을 넣고 싶다면, 아래와 같이 재정의 한다.

CFLAGS = -g

예제 6 의 각종 FLAG 매크로들은 대부분 우리가 필요에 의해 세팅해 주어야 하는 값들이다. 왜 굳이 make에서 값도 정의되지 않은 매크로를 우리가 정의해서 써야 하는지 의문을 던질지도 모른다. 우리가 더 이쁜 이름으로 매크로를 정의할 수도 있다고 하면서...

여기서 한가지 사실을 생각해 봐야 할 것이다. make에서 위에 나온 것들을 왜 미리 정해 두었을까? (왜일까요?) make에서 이들 매크로를 제공하고 있는 이유는 내부적으로 이들 매크로를 사용하게 되기 때문이다. 어떻게 이용하는지는 확장자 규칙(Suffix rule)을 설명하면서 해답을 제공할 것이다. 이제 예제 4 의 Makefile을 매크로를 이용하여 깔끔하게(?) 작성해 보자.

Makefile예제 7


OBJECTS = main.o read.o write.o
SRCS = main.c read.c write.c <- 없어도 됨

CC = gcc <- gcc 로 세팅
CFLAGS = -g -c <- gcc 의 옵션에 -g 추가

TARGET = test <- 결과 파일을 test 라고 지정

$(TARGET) : $(OBJECTS)
$(CC) -o $(TARGET) $(OBJECTS)

clean : 
                rm -rf $(OBJECTS) $(TARGET) core 

main.o : io.h main.c <- (1)
read.o : io.h read.c
write.o: io.h write.c

위의 Makefile 을 동작시켜 보자.

% make 
gcc -g -c main.c -o main.o
gcc -g -c read.c -o read.o
gcc -g -c write.c -o write.o
gcc -o test main.o read.o write.o <- OK

% make clean
rm -rf main.o read.o write.o test core <- OK

그런데 여기서 한가지 이상한 점을 발견하게 될 것이다. .c 파일을 .o 파일로 바꾸는 부분이 없는데 어떻게 컴파일이 되었을까? 빼먹고 타이핑 못한 것은 아닐까 하고... 절대 아님!

앞에서 CFLAGS 같은 매크로는 make 파일의 내부에서 이용된다고 하였다. 그렇다면 make는 과연 어디에서 이용을 할까? 바로 컴파일하는 곳에서 이용을 하는 것이다. 따라서 우리는 CFLAGS를 셋팅해 주기만 하면 make가 알아서 컴파일을 수행하는 것이다. (얼마나 편리합니까!)

=> 참고: 확장자 규칙에서 다시 한번 자세히 설명을 하겠습니다.

(1) 에 해당하는 부분은 어떤 파일이 어디에 의존하고 있는지를 표시해 주기 위해서 꼭 필요하다. .c 파일을 컴파일하는 부분은 일괄적인 루틴으로 작성할 수 있기 때문에 이들 파일간의 의존 관계(dependency)를 따로 표시해 주어야 한다.

=> 참고: 파일간의 의존 관계를 자동으로 작성해 주는 유틸리티가 있습니다. 이것은 다음 장에서 다루기로 합니다.

3.3 확장자 규칙 (Suffix rule)

확장자 규칙이란 간단히 말해서 파일의 확장자를 보고, 그에 따라 적절한 연산을 수행시키는 규칙이라고 말할 수 있다. 가령 .c 파일은 일반적으로 C 소스 코드를 가리키며, .o 파일은 목적 파일(Object file)을 말하고 있다. 그리고 당연히 .c 파일은 컴파일되어서 .o 파일이 되어야 하는 것이다.

여기서 한가지 매크로가 등장하게 된다. .SUFFIXES 라고 하는 매크로인데 우리가 make 파일에게 주의 깊게 처리할 파일들의 확장자를 등록해 준다고 이해하면 될 것이다.

.SUFFIXES : .c .o

위의 표현은 '.c' 와 '.o' 확장자를 가진 파일들을 확장자 규칙에 의거해서 처리될 수 있도록 해준다. .SUFFIXES 매크로를 이용한 예제를 살펴보자.

Makefile예제 8


.SUFFIXES : .c .o 

OBJECTS = main.o read.o write.o
SRCS = main.c read.c write.c

CC = gcc 
CFLAGS = -g -c

TARGET = test

$(TARGET) : $(OBJECTS)
                $(CC) -o $(TARGET) $(OBJECTS)

clean : 
                rm -rf $(OBJECTS) $(TARGET) core 

main.o : io.h main.c 
read.o : io.h read.c
write.o: io.h write.c

위의 Makefile 을 동작시켜 보자.

% make
gcc -g -c main.c -o main.o
gcc -g -c read.c -o read.o
gcc -g -c write.c -o write.o
gcc -o test main.o read.o write.o <- OK

확장자 규칙에 의해서 make는 파일들간의 확장자를 자동으로 인식해서 필요한 작업을 수행한다. 즉 아래의 루틴이 자동적으로 동작하게 된다.

.c.o : 
$(CC) $(CFLAGS) -c $< -o $@

=> 참고: gmake에서는 약간 다르게 정의되어 있지만, 우선은 같다고 이해합시다. $< , $@ 에 대해서는 곧 설명합니다.

우리가 .SUFFIXES : .c .o 라고 했기 때문에 make 내부에서는 미리 정의된 .c (C 소스 파일)를 컴파일해서 .o (목적 파일)를 만들어 내는 루틴이 자동적으로 동작하게 되어 있다. CC와 CFLAGS 도 우리가 정의한 대로 치환될 것임은 의심할 여지가 없다.

make 내부에서 기본적으로 서비스를 제공해 주는 확장자들의 리스트를 열거해 보면 아래와 같다. 각 확장자에 따른 자세한 설명은 생략한다.

.out .a .ln .o .c .cc .C .p .f .F .r .y .l .s .S .mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo .w .ch .web .sh .elc .el

Makefile내부에서 .SUFFIXES 매크로의 값을 세팅해 주면 내부적으로 정의된 확장자의 연산이 동작을 하게 된다. 따라서 확장자 규칙은 make가 어느 확장자를 가진 파일들을 처리할 것인가를 정해 주는 것이라고 생각할 수 있다.

그러나 이것은 필자만의 생각일지 몰라도 make에서 자동적으로 확장자를 알아서 해주는 것이 좋긴 하지만, 필자는 일부러 위의 .c.o 에 해당되는 부분을 그냥 정의해서 쓰길 더 좋아한다. 이것은 지금까지의 습관상 그렇지만 왠지 우리가 정의하는 것이 더 자유롭게(flexible) 사용할 수 있을 것 같기 때문이다. 그리고 이런 기능은 우리가 작성을 해봐야 make의 메카니즘을 더 잘 이해할 수 있다고 생각한다.

예제 8 의 내용을 약간 바꾸어 보자.

Makefile예제 9


.SUFFIXES : .c .o 

OBJECTS = main.o read.o write.o
SRCS = main.c read.c write.c

CC = gcc 
CFLAGS = -g -c 
INC = -I/home/raxis/include <- include 패스 추가

TARGET = test

$(TARGET) : $(OBJECTS)
                $(CC) -o $(TARGET) $(OBJECTS)

.c.o : <- 우리가 확장자 규칙을 구현
                $(CC) $(INC) $(CFLAGS) $<-

clean : 
                rm -rf $(OBJECTS) $(TARGET) core 

main.o : io.h main.c
read.o : io.h read.c
write.o : io.h write.c

% make
gcc -I/home/raxis/include -g -c main.c
gcc -I/home/raxis/include -g -c read.c
gcc -I/home/raxis/include -g -c write.c
gcc -o test main.o read.o write.o <- OK

예제 8 과 예제 9 의 차이는 그저 .c .o 부분을 누가 처리하느냐이다. 그리고 예제 9에서는 INC 라는 매크로를 추가시켜서 컴파일할때 이용하도록 하였다.

3.4 내부 매크로 (Internal macro)

make에서는 내부 매크로라는 것이 있다. 이것은 우리가 맘대로 정할 수 있는 매크로는 절대 아니다. 대신 매크로를 연산, 처리하는데 쓰이는 매크로라고 하는 것이 더 적당할 것이다.

Internal Macro 예제 10


$* <- 확장자가 없는 현재의 목표 파일(Target)

$@ <- 현재의 목표 파일(Target)

$< <- 현재의 목표 파일(Target)보다 더 최근에 갱신된 파일 이름

$? <- 현재의 목표 파일(Target)보다 더 최근에 갱신된 파일이름

=> 참고: 책에서는 $< 와 $?를 약간 구분하고 있지만 거의 같다고 봐도 무방할 것입니다.

각 내부 매크로에 대한 예를 보기로 한다.

main.o : main.c io.h
gcc -c $*.c

$* 는 확장자가 없는 현재의 목표 파일이므로 $* 는 결국 main 에 해당한다.

test : $(OBJS)
gcc -o $@ $*.c

$@는 현재의 목표 파일이다. 즉 test에 해당된다.

.c.o :
gcc -c $< (또는 gcc -c $*.c)

$< 는 현재의 목표 파일보다 더 최근에 갱신된 파일 이름이라고 하였다. .o 파일보다 더 최근에 갱신된 .c 파일은 자동적으로 컴파일이 된다. 가령 main.o를 만들고 난 다음에 main.c를 갱신하게 되면 main.c는 $<의 작용에 의해 새롭게 컴파일이 된다.

=> 참고: 이제 예제 9 을 이해할 수 있겠습니까?

=> 참고: Makefile 파일을 작성해 놓고, 그냥 make만 치시면 make는 Makefile의 내용을 살펴보다가 첫 번째 목표 파일에 해당되는 것을 실행시키게 됩니다. 따라서 위의 예제에서는 make test 라고 해도 같은 결과를 내게 됩니다. 반면 clean에 해당하는 부분을 윗부분에 두게 되면 make는 항상 make clean을 수행하게 됩니다.

% make <- make clean 이 실행됨
rm -rf main.o read.o write.o test core

% make test <- 강제적으로 test 가 생성되게 한다.
gcc -I/home/raxis/include -g -c main.c
gcc -I/home/raxis/include -g -c read.c
gcc -I/home/raxis/include -g -c write.c
gcc -o test write.c main.o read.o write.o <- OK

Makefile의 이해를 돕기 위해서 Makefile을 하나 더 작성해 보기로 한다. make.tex 파일을 make.dvi로 만든 다음 이것을 다시 make.ps로 만드는 것이다. 보통의 순서라면 아래와 같다.

% latex make.tex <- make.dvi 가 만들어진다.
% dvips make.dvi -o <- make.ps 가 만들어진다.

보통의 가장 간단한 Makefile을 작성해 보면 아래와 같다.

Makefile예제 11


make.ps : make.dvi
                dvips make.dvi -o

make.dvi : make.tex
                latex make.tex 

위와 같은 일을 하는 Makefile을 다르게 한번 작성해 보자. 매크로를 어느정도 사용해 보기로 하며, 확장자 규칙을 한번 적용해 보기로 한다.

Makefile예제 12


.SUFFIXES : .tex .dvi 

TEX = latex <- TEX 매크로를 재정의

PSFILE = make.ps 
DVIFILE = make.dvi

$(PSFILE) : $(DVIFILE)
                dvips $(DVIFILE) -o

make.ps : make.dvi 
make.dvi : make.tex

예제 12 에서는 .tex 와 .dvi 를 처리하는 루틴이 자동적으로 동작을 하게 된다. Makefile 을 한번 동작시켜 보자.

% make
latex make.tex
....
dvips make.dvi -o <- OK

예제 11 과 예제 12 는 하는 일은 같다. 하지만 예제 12는 매크로를 사용함으로써 나중에 내용을 바꿀 때 예제 11보다 편하다는 것을 이해하였으므로...

다음장 예고

무엇인가를 글로 설명한다는 것이 참 힘드네요...

사실 오늘 한 것만 가지고도 Makefile에 대한 어느 정도의 지식을 갖추었다고 말할 수가 있습니다. 자신만의 Makefile을 한번 작성해 보시죠. 프로그램도 괜찮고, .tex 파일을 .ps 파일로 만드는 과정을 Makefile로 만들어 보는 것도 좋은 연습이 될 것입니다.

다음 편에서 여러분에게 소개해 드릴 것은 make 옵션, makefile 작성 지침(guideline), make 사용 시에 나타나는 에러의 원인과 그 대처 방법이 될 것 같군요. (아직 확정된 것은 아니지만...) Makefile에 관한 입문 과정은 다음 장으로 끝내고, 4장부터는 약간 고급스러운 기능을 강좌하도록 하겠습니다. 많이 읽어 주세요. 댕스 였습니다.


이전페이지 다음페이지 차례

Posted by k1rha
2014. 4. 28. 13:16

[ 직업 작업 했을때의 컴파일 옵션 ]


#gcc -fPIC -c libstrcpy2.c -m32


#gcc -m32 -shared -Wl,-soname,libstrcpy2.so -o libstrcpy2.so libstrcpy2.o


#gcc -o vulnDeadmon vulnDeadmon.c -m32 -fno-stack-protector -z execstack -fno-builtin -mpreferred-stack-boundary=4 -L ./ -lstrcpy2




[ makefile 만들기 ]


[ 설명 ]


위와같은 옵션을 가지고 컴파일을 매번 다시 해줘야하는 것을 makefile 파일로 만들어두면 편함.

변수명 설정은 C 표준과 같고, 호출은 $(변수명) 으로 호출이 가능함. (shell 명령어와도 같은기능을함)


18번째 줄부터 보면 make 명령어를 하면 all 을 default 로 하여금 make 가 됨. 

all : $(TARGET) 은 all을 실행하는데 $(TARGET)이 잘 구성되어 있지 않으면 ALL 을 실행하지 않음


[ 20번째줄 ] 

$(TARGET) : $(LIB_NAME)  : TARGET을 구성하는데 LIB_NAME 이 제대로 구성되어 있지 않으면 LIB_NAME부터 다시 실행함


[ 23번째줄 ]

$(LIB_NAME) : $(OBJS) : LIB_NAME 을 구성하는데 OBJS가 제대로 구성되어 있지 않으면 OBJS 부터 수행함


[ 26번째줄 ]

$(OBJS) : 

OBJS 를 수행함. $(CC) = gcc $(OBJ_OPTION)= -fPIC -m32 -c  $(LIB_SOURCE_FILE)   = libstrcpy2.c


[ 29번째줄 ]

clean : 

#make clean 이란 옵션으로 실행 될수 있는 부분. 재빌드를 할때 이미 파일이 존재하고 있는 경우를 없애기 위함.


Posted by k1rha
2013. 12. 16. 22:24

검색 키워드 : 오드로이드 XU 설치 (Odroid XU installation , ubuntu, kali linux, ARM linuxx)


오드로이드 XU를 설치함에 있어서 고생했던 부분 정리 

XU 버젼이 나온지가 얼마 안되어서, 괜히 XU라서 안되는건가 의심을 많이하게 됨..


[ odroid XU 의 모습 ]



1. emmc 와 micro sd 카드의 역할 (파란색 네모 모양)

   : emmc == micro sd card 

      emmc 가 micro sd 보다 속도면에서 2~3배 정도 빠르기에 emmc 사용을 권장함.

      허나, emmc 가 오드로이드를 동작시키는데 반드시 필요한 것은 아니.

     


2. emmc에 우분투 설치 하는법

  : 젠더를 통해 일반 sd 카드처럼 똑같이 사용한다. 설치하는 법이 다르진 않다.

    win32-diskmager-v0.7-binary 파일을 이용하여 설치하였고, 그외에 어떠한 것이든 상관없다.

    emmc 나 micro sd 카드에 iso를 퓨징하면 된다. 

    다운로드 사이트 : http://www.odroid.in/Ubuntu_XU/20131125/ 


3. 전원 키고 끄기

  : 오드로이드 XU에 별도의 스위치는 없다. 

  : 전력선을 뽑으면 OFF, 꼽으면 ON 이다. 

  : 리눅스를 설치한 뒤에는 물론 power off 같은 명령어를 써줄 수 있다.


3. HDMI 포트 연결시 부팅 오류 

  : HDMI를 꼽고 모니터를 연결한 상태로 부팅을 할 경우

   모니터를 연결한 상태로 부팅을 할경우 알수 없는 이유(전력문제라 생각됨)로 부팅이 되지 않을때가 있다.

   그럴 경우 부팅후에 HDMI를 꼽아서 모니터를 연결하면된다.


4. HDMI가 아닌 RGB PORT 혹은 DVI 포트를 사용할 경우? 

  : 처음 Convertor 를 이용하여 HDMI 단자를 RGB나 DVI로 바꾸어 모니터를 연결하였지만, 모니터는 나오지 않았다.

    오로지 순수 HDMI 단자만 연결해야 모니터가 들어오는 것을 확인 할 수 있었다.


5. 부팅 모드 변경 

  : emmc로 부팅할지 sd card로 부팅할지, 부팅모드를 변경해 준다.

    일반 PC의 BIOS 모드의 priority booting mode 라 생각하면된다.

    위 사진의 노란색 부분에 아주 작은 스위 치가 있다. 잘읽어보면 sw-1 와 on 이라고 쓰여진 글씨가 있다.

    이걸 토대로 스위치를 변경 할 수 있다.


  SW1-1,2    1st Boot media 

       ON ON    eMMC5.0

       ON OFF    eMMC4.4

       OFF ON    MicroSD card

       OFF OFF    Reserved


6. 관련 사이트

  - http://forum.odroid.com/  <- 오드로이드 보드 포럼

  - http://forum.odroid.com/viewforum.php?f=61 <- 그 안에 XU 우분투 포럼

  - 오드로이드 위키 (http://odroid.us/mediawiki/index.php)

  - 오드로이드 포럼 (http://forum.odroid.com/viewforum.php?f=4)

  - U2에 우분투 및 NAS 설치 : http://primrose.tistory.com/67


 

7. 향후 사용 분야 

     - 패킷 릴레이 서버 제작 

     - kali linux ARM 용 포팅, 취약점 분석및 안드로이드 분석, ARM 시스템환경 분석 등에 활용

 



Posted by k1rha
2013. 12. 8. 01:50

X86_64 Linux에서 32bit로 컴파일하기

redhat계열의 CentOS에서의 설치는 yum 이라는 명령을 통해 가볍게 처리가 가능하다

 

yum명령어가 안들을 경우는 /etc/resolv.conf에 DNS에 대한 설정을 넣어주면 잘 될 것이다.

 [hostname:/etc] cat resolv.conf
nameserver xxx.xxx.xxx.xxx
[hostname:/etc]


gcc와 관련된 것들을 설치하고 이때 glibc-devel이 설치되나

한번더 설치를 요청하면 i386으로 찾아줘서 해당 모듈을 설치하면 컴파일이 된다.

yum install gcc
yum install glibc-devel

 

그리고 gcc 컴파일시에 옵션에 -m32를 넣으면 32bit로 컴파일을 할 수 있다.



[ 실행만을 월할때 ] 

# yum install glibc.i686

# ldd something
        linux-gate.so.1 =>  (0xffffe000)

        libpthread.so.0 => /home/xxx/lib/libpthread.so.0 (0x00cbf000)
        libc.so.6 => /home/xxx/lib/libc.so.6 (0x00b77000)
        /lib/ld-linux.so.2 (0xf77e0000)

 

[출처] 64bit CentOS 리눅스 32bit로 컴파일 하기|작성자 무릉무릉


Posted by k1rha
2013. 11. 24. 22:24

-exec 를 활용하여 사용.


find . ! -name a -and ! -name b | xargs rm -rf 


Posted by k1rha
2013. 11. 17. 12:06

[출처 : http://blog.naver.com/wiznux?Redirect=Log&logNo=60202504815 ]

crontab은 스케줄링을 관리하는 프로그램으로 시스템 관리자에게 중요한 유틸 중 하나이다. 특정 시간대에 사용자가 작성한 스트립트나 명령을 실행 할 수 있다. 이는 rsync 같은 툴을 같이 사용하여 굉장히 편리한 백업 시스템을 만들 수도 있고 데이터 베이스관리나 기타 반복적인 업무를 간편하게 등록하여 사용 할 수 있다.

MIN HOUR DOM MON DOW CMD
필드명세허용 값
MIN0~59
HOUR시간0~23
DOM날짜1-31
MON1-12
DOW0-6
CMD명령어실행 가능 한 모든 명령어

1. 다음 시간 6월 10일 오전 8시 30분 을 cron 명령어에 맞게 작성해보자.

30 08 10 06 * /home/script/backup


Posted by k1rha
2012. 11. 28. 05:24

리눅스 계정 만료는 

/etc/shadow 에서 관리해준다.

여기에 암호화된 암호정보와, : : : 구분자로 만료일을 결정해 주게 되는데, 이 만료일이 다 되게 되면

암호를 바꿔달라고 요청이 뜨면서 재부팅 현상이 일어나게 된다. 

QEMU에서 passwd 명령어를 통해 암호를 바꿀 시 이 만료일이 다 되었다고

your password has expired 라는 문구가 뜨는 바람에 검색을 좀 오래 했다. 


아래는 개인 리눅스 서버의 shadow 파일정보이다. 

iptime2:$6$.uvg2DgO$ZLHPlEusVDJTWup/fl0YtsHUZGi8oYauPs97wc8P.opRnJVZPhuh5r8ba3vOrwrTwe895PoDqszJbbsL.T/v70:15641:0:99999:7

vde2-net:*:15646:0:99999:7:::

bind:*:15655:0:99999:7:::

QEMU:!:15656:0:99999:7:::

Posted by k1rha
2012. 11. 14. 20:36

[출처 : http://kuniz37.tistory.com/38 ]


1. lighttpd의 설치
  > sudo apt-get install lighttpd

2. 포트 변경
  > sudo vi /etc/lighttpd/lighttpd.conf

# 아래 문장 추가
server.port = 8081   


3. 디렉토리 view disable하기
 > sudo vi /etc/lighttpd/lighttpd.conf

server.dir-listing = "disable"


 
4. lighttpd cgi 사용 
 > sudo vi /etc/lighttpd/lighttpd.conf

server.modules = (
       ...
      "mod_cgi",                          # 추가


cgi.assign = (".cgi" => "")            # 추가   //이게 없으면 실행이안됨

 # ".cgi" => ""  (자체 실행을 의미) ,  
 # ".pl" => "/usr/bin/perl"  (.pl일 경우 perl 프로그램을 실행)

5. 개인화 폴더 설정 ( http://redmine.lighttpd.net/wiki/1/Docs:ModUserDir )
 > sudo vi /etc/lighttpd/lighttpd.conf

server.modules = (

...
"mod_userdir", 

)

userdir.path = "public_html"    # ~ 아래의 폴더를 웹 페이지의 메인으로 선택
userdir.exclude-user = ("root", "postmaster")  # 사용하지 않을 유저 설정 


6. ssl 설정 ( http://redmine.lighttpd.net/wiki/1/Docs:SSL )
 > sudo vi /etc/lighttpd/lighttpd.conf

$SERVER["socket"] == ":8082" {

ssl.engine = "enable"
ssl.pemfile = "/var/www/ssl/myserv.pem" 

 인증서 파일은 보안 설정을 400으로 할 것!

7. 서버 재시작
 > sudo /etc/init.d/lighttpd restart

Posted by k1rha
2012. 11. 14. 20:18

tcpdump -s 1000 (1000 개만 출력)

tcpdump -s -X (char 형으로 출력하는 것을 포함함)

tcpdump -s 1000 src 222.222.222.222 -X (출발지 아이피가 222.222.222.222  인것만 출력)

tcpdump -s 1000 src 222.222.222.222 and dst port 80 -X  (port 가 80 번 인것만 출력)



Posted by k1rha
2012. 11. 14. 00:52

# icmp redirects를 보내지 않는다.

net.ipv4.conf.eth0.accept_redirects=0

net.ipv4.conf.lo.accept_redirects=0

net.ipv4.conf.default.accept_redirects=0

net.ipv4.conf.all.accept_redirects=0

net.ipv4.conf.eth0.send_redirects = 0

net.ipv4.conf.lo.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.all.send_redirects = 0

 

# proxy arp를 설정하지 않는다.

net.ipv4.conf.eth0.proxy_arp=0

net.ipv4.conf.lo.proxy_arp=0

net.ipv4.conf.default.proxy_arp=0

net.ipv4.conf.all.proxy_arp=0

 

# 게이트웨이로부터의 redirect를 허용하지 않음으로써 스푸핑을 막기 위해 설정한다.

net.ipv4.conf.eth0.secure_redirects=0

net.ipv4.conf.lo.secure_redirects=0

net.ipv4.conf.default.secure_redirects=0

net.ipv4.conf.all.secure_redirects=0

 

# 스푸핑을 막기 위해 source route 패킷을 허용하지 않는다.

# 소스 라우팅을 허용할 경우 악의적인 공격자가 IP 소스 라우팅을 사용해서 목적지의

# 경로를 지정할 수도 있고, 원래 위치로 돌아오는 경로도 지정할 수 있다. 이러한 소스 라우팅이

# 가능한 것을 이용해 공격자가 마치 신뢰받는 호스트나 클라이언트인 것처럼 위장할 수 있는 것이다.

net.ipv4.conf.eth0.accept_source_route=0

net.ipv4.conf.lo.accept_source_route=0

net.ipv4.conf.default.accept_source_route=0

net.ipv4.conf.all.accept_source_route=0

 

# Broadcast로부터 오는 핑을 차단함(Smurt 공격을 차단함).

net.ipv4.icmp_echo_ignore_broadcasts=1

 

# IP 나 TCP 헤더가 깨진 bad icmp packet을 무시한다.

net.ipv4.icmp_ignore_bogus_error_responses = 1

 

# 자신의 네트워크가 스푸핑된 공격지의 소스로 쓰이는 것을 차단한다.

# 모든 인터페이스에서 들어오는 패킷에 대해 reply를 하여 들어오는 인터페이스로 나가지 못하는 패킷을 거부한다.

net.ipv4.conf.eth0.rp_filter=2

net.ipv4.conf.lo.rp_filter=2

net.ipv4.conf.default.rp_filter=2

net.ipv4.conf.all.rp_filter=2

 

# bootp 패킷을 허용하지 않는다.

net.ipv4.conf.eth0.bootp_relay=0

net.ipv4.conf.lo.bootp_relay=0

net.ipv4.conf.default.bootp_relay=0

net.ipv4.conf.all.bootp_relay=0

 

# 스푸핑된 패킷이나 소스라우팅, Redirect 패킷에 대해 로그파일에 정보를 남긴다.

net.ipv4.conf.eth0.log_martians=1

net.ipv4.conf.lo.log_martians=1

net.ipv4.conf.default.log_martians=1

net.ipv4.conf.all.log_martians=1

 

# 1/100초에 받아들이는 igmp "memberships"의 수

net.ipv4.igmp_max_memberships=1

 

# 매우 복잡한 사이트에서는 이 값을 늘리는 것도 가능하지만 64로 두는 것이 적당하며

# 더 늘렸을 경우에는 큰 문제가 발생할 수도 있다.

net.ipv4.ip_default_ttl=64

 

# 게이트웨이 서버가 아닌 이상 패킷을 포워딩 할 필요는 없다.

net.ipv4.ip_forward=0

 

# fragmented packet이 메모리에 존재하는 시간을 15초로 설정한다.

net.ipv4.ipfrag_time=15

 

# SYN_Flooding 공격에 대한 대비로 백로그큐(Backlog Queue)가 가득차면 다른 접속 요구를 받아들이지 못한다.

net.ipv4.tcp_max_syn_backlog = 1024

 

# TCP 연결에서 Three-way Handshake가 성공적으로 이루어지지 않으면 더 이상 소스 경로를 거슬러 올라가지 않도록한다.

# 따라서 적절한 연결 요청에 대해서만 연결을 맺는다.

# syncookies가 작동할 때 SYN Flooding 공격이 있으면 messages 파일에 아래와 같은 내용이 출력된다.

# possible SYN flooding on port 80. Sending cookies.

net.ipv4.tcp_syncookies = 1

 

# 일정한 시간과 IP별로 보내고 받는 SYN 재시도 횟수를 3회로 제한한다.

# 이 옵션은 스푸핑된(위조된) 주소로 오는 SYN 연결의 양을 줄여준다.

# 기본 값은 5(180 초에 대응)이며 255를 넘지 않아야 한다.

net.ipv4.tcp_syn_retries = 3

 

# passive TCP 접속시도가 재접속을 하기 위한 SYNACKs의 값을 정한다. 255 보다 높

# 게 지정할 수 없다. 기본값은 5이며, 180초에 대응이 된다.

net.ipv4.tcp_synack_retries = 3

 

# 무언가 문제가 있을 때 연결을 위해 재시도 할 횟수, 최소 값과 기본 값은 3이다.

net.ipv4.tcp_retries1=3

 

# TCP 연결을 끊기 전에 재시도할 횟수.

net.ipv4.tcp_retries2=7

 

# 연결을 종료시 소요되는 시간을 줄여준다(기본 설정값: 60).

net.ipv4.tcp_fin_timeout=20

 

# 동시에 유지 가능한 timewait 소켓의 수이다.

# 만약 지정된 숫자를 초과하였을 경우에는 timewait 소켓이 없어지며 경고 메시지가 출력된다.

# 이 제한은 단순한 DoS 공격을 차단하기 위해 존재하는데, 임의로 이 값을 줄여서는 안되며

# 메모리가 충분하다면 적절하게 늘려주는 것이 좋은데, 64M 마다 180000으로 설정하면 된다.

# 따라서 256M일 경우에는 256/4=4 4*180000=720000

# 64M -> 180000

# 128M -> 360000

# 256M -> 720000

# 512M -> 1440000

# 1G -> 2880000

# 2G -> 5760000

#net.ipv4.tcp_max_tw_buckets = 180000

 

# 연결이 끊어졌다고 판단할 때까지, 얼마나 keepalive probe 를 보낼지 결정. 기본값 9회

# 간단한 DoS 공격을 막아준다.

net.ipv4.tcp_keepalive_probes=2

 

# keepalive 가 활성되 되어 있을 경우, 얼마나 자주 TCP 가 keepalive 메세지를 보

# 내게 할 것인지를 설정.

net.ipv4.tcp_keepalive_time=30

 

# keepalive_probes 를 보낼 간격을 정함. probe 를 보낸 후, probes * intvl 의 시

# 간이 지나도록 응답이 없으면 연결이 해제된 것으로 간주하게 됨. 기본 값의 사용

# 시 11분 15초 동안 재시도를 하고 연결을 취소함. 값은 초단위

net.ipv4.tcp_keepalive_intvl = 10

 

# 서버 쪽에서 닫은 TCP 연결을 끊기 전에 확인하는 횟수를 정한다. 기본 값은 7 로

# RTO 50 초에서 16 분 사이에 해당한다. 웹 서버가 운영 중 이라면 이 값을 줄여서

# 소켓 등이 귀한 리소스를 소비하지 않도록 할 수도 있다.

net.ipv4.tcp_orphan_retries = 2

 

# SYN 패킷을 전송한 후에 로스가 발생을 하여 ACK 를 일부 받지 못했을 경우, 선택

# 적으로 (selected) 받지못한 ACK 만 받도록 요청하는 것을 허락한다. 로스가 많은

# 네트워크에서는 상당히 중요한 역할을 한다.

net.ipv4.tcp_sack = 1

 

#tcp_window_scaling을 사용하지 않는다

net.ipv4.tcp_window_scaling = 0

Posted by k1rha
2012. 11. 12. 05:35


===================================================

DNS 서버 구축하기

===================================================

#sudo apt-get install bind9    //바인드를 시키기 위한 프로그램

#sudo apt-get install dnsutils  //dns 유틸리티



#cat  /etc/bind/named.conf  //네임서버 설정파일이 들어가 있다.

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

include "/etc/bind/named.conf.options";

include "/etc/bind/named.conf.local";

include "/etc/bind/named.conf.default-zones";

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


# cat /etc/bind/named.conf.options

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

options {

directory "/var/cache/bind";


// If there is a firewall between you and nameservers you want

// to talk to, you may need to fix the firewall to allow multiple

// ports to talk.  See http://www.kb.cert.org/vuls/id/800113


// If your ISP provided one or more IP addresses for stable 

// nameservers, you probably want to use them as forwarders.  

// Uncomment the following block, and insert the addresses replacing 

// the all-0's placeholder.


forwarders {

168.126.63.1;

0.0.0.0;

};


auth-nxdomain no;    # conform to RFC1035

listen-on-v6 { any; };

};


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

forwarders 는 최후에 어떤 도메인을 검색할지 정해준다. 


# cat /etc/bind/named.conf.local

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

//

// Do any local configuration here

//


// Consider adding the 1918 zones here, if they are not used in your

// organization

//include "/etc/bind/zones.rfc1918";

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

필자의 경우엔 전부 주석처리 되어 있었다.


#vi /etc/bind/named.conf.default-zones


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

// be authoritative for the localhost forward and reverse zones, and for

// broadcast zones as per RFC 1912


zone "aaa" {

        type master;

        file "/etc/bind/db.1";

};


zone "localhost" {

        type master;

        file "/etc/bind/db.local";

};


zone "127.in-addr.arpa" {

        type master;

        file "/etc/bind/db.127";

};


zone "0.in-addr.arpa" {

        type master;

        file "/etc/bind/db.0";

};


zone "255.in-addr.arpa" {

        type master;

        file "/etc/bind/db.255";

};

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

위에서 처음부분으 필자가 만들어준 부분이다.

aaa 라는 도메인을 추가하여, /etc/bind/db.1 파일을 참조 하도록 하였다.



하고나서는 반드시 재시작!


#/etc/init.d/bind9 restart

Posted by k1rha
2012. 11. 12. 04:34


잘정리된 iptables 사용법


[출처 : http://seeaster.tistory.com/18 ]


오늘은 Iptables 에 대해 간단히 포스팅 하겠습니다. 그전에 몇가지 팁을 적어볼게요 ^^

옵션 보고 익히는 것보다 아래에 적은 팁이 실무에선 더 중요할 것 같네요.!!

 

Tip 7가지

1.     Iptables 하면서 팁은 위에서부터 아래로 적용 됨

2.     명렁어 치기전엔 3번 생각하자

-쳐놓고 서비스 장애 등 가용성에 문제가 온다면 GG입니다

3.     신뢰 IP Any Any open 해놓고 작업하기

-ssh 등 원격 접속 해 있을 때 실수로 차단되면 콘솔로 붙어서 작업해야함.

-inbound 와 outbound 해야함(ssh 같은경우 inbound open만 해놓을경우 통신 불가)

4.     생각나는데로 룰 만드는 것이 아닌 먼저 정책 분석, 트래픽 분석하고 다 정리한다음 테스트 장비에 테스트 후 적용할 것.

-초기 셋팅이 아닌 서비스 중에 변경할 땐 더욱 신중해야함.

5.     #]man iptables 를 이용할 것

-man 명령어로 명령어 옵션 보는 습관을 들이는 것이 좋습니다. 모든 명령어들어 옵션을 외울 수는 없지요. 물론 자주 쓰는 것은 외워두는 것이 좋습니다.

6.     일괄 적업하지 말 것.

-일괄작업 하면 빠르지만 하나하나씩 넣으면서 확인하는 습관을 길러야 합니다. 모든 보안 시스템은 일괄처리 기능이 제거되어있는데요 기계는 실수를 안하지만 사람은 항상 실수 하기 때문 입니다.

7.     Vi 편집기로 /etc/sysconfig/iptables 편집하는 것이 더 편하다.

-저장하기전에 확인하고 확인할것!!또한 vi 편집기로 작업후 서비스 재시작 해줄 것!(service iptables restart)

*처음 룰 생성해서 저장 하기 전까지는 /etc/sysconfig/iptables 파일이 없습니다.

 

 

 

# iptables 명령어(옵션) 간단한 설명

~]#vi /etc/sysconfig/iptables

~]#iptables -L :리스트보기

~]#iptables -P INPUT DROP : -P 기본정책, INPUT의 기본정책을 DROP으로 하겠다.

 

현재 FORWARD 기본정책은 ACCEPT

 

~]#iptables -A : -A 는 추가할떄

~]#iptables -I INPUT 3 : -I 는 원하는 라인에 추가, 3번쨰 라인에 추가한다는말임.

~]#iptables -A INPUT -p tcp : -p 는 프로토콜 정하기

~]#iptables -A INPUT -p tcp -s : -s 는 src ip

~]#iptables -A INPUT -p tcp -s 192.168.81.63 --dport 80: --dport 는 dst port

~]#iptables -A INPUT -p tcp -d 192.168.81.62: -d 는 dst ip

~]#iptabels -A INPUT -p tcp --sport 80: --sport 는 src port

~]#iptables -A INPUT -p tcp -dport 80 -j ACCEPT : -j 는 대응 방법(ACCEPT, DROP, REJECT 등),

*REJECT는 DOS 공격시 부하가 걸리므로 권장하지 않음

~]#iptables -A INPUT –m : -m은 man 페이지를 참조 하길..옵션이 너무 많아요..

 

#서비스 시작/정지/재시작/저장

*iptables 는 save 명령어를 쳐주지 않으면 시스템 재부팅 후 정책이 초기화 됩니다.

~]#service iptables start

~]#service iptables stop

~]#service iptables restart

~]#service iptables save

 

예제 참조는

http://team.boanin.com/

 

0. 기본정책을 ACCEPT로 설정

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

 

1. 현재 자신의 방화벽 규칙을 볼 수 있는 명령

iptables -L

iptables --list

 

2. 21.23.25.80 포트를 차단하는 정책(각각 하나씩 규칙을 만들것)

iptables -A INPUT -p tcp --dport 21 -j DROP

iptables -A INPUT -p tcp --dport 23 -j DROP

iptables -A INPUT -p tcp --dport 25 -j DROP

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

 

iptables -A INPUT -p tcp -m multiport --destination-port 21,23,25,80 -j DROP

 

3.첫번쨰 정책을 삭제

iptabels -D INPUT 1

 

4. 세번째 정책의 출발지 IP를 192.168.1.0/24로 수정

iptables -R INPUT 3 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP

 

5. 출발지 IP가 A클래스 사설 IP 일 경우 차단하는 정책

iptables -A INPUT -s 10.0.0.0./8 -j DROP

 

6. 출발지 IP 192.168.10.1 부터 192.168.10.100, 그리고 192.168.150.0/24이고 목적지IP 는 192.168.10.170이고 목적지 포트는 3306일 경우 차단하는 정책

 

iptables -A INPUT -p tcp -s 192.168.150.0/24 -d 192.168.10.170 --dport 3306 -j DROP

iptables -A INPUT -p tcp -m iprange --src-range 192.168.10.1-192.168.10.100 -d 192.168.10.170 --dport 3306 -j DROP

 

7. tcp 패킷이 초당 10개가 올경우 차단하는 정책(limit match 이용)

iptables -A INPUT -p tcp -m limit --limit 10/s -j DROP

 

8. 하나의 세션에서 10개의 패킷이 매치된 후 tcp 패킷이 분당 100개가 올 경우 차단하는 정책

iptables -A INPUT -p tcp -m limit --limit 100/m --limit-burst 10 -j DROP

 

9. 옆사람의 윈도우와 리눅스에서 SSH 접속을 차단하도록 설정, 윈도우에서 연결은DROP, 리눅스는 REJECT

iptables -A INPUT -p tcp -s 172.17.24.140 --dport 22 -j DROP

iptables -A INPUT -p tcp -s 172.17.24.170 --dport 22 -j REJECT --reject-with tcp-reset

 

10. ICMP 라는 체인을 생성

 -icmp 패킷이 들어올 경우 ICM 체인으로 전달

 -icmp 체인에 ping에 대한 응답하지 않는 정책 추가

 

iptables -N ICMP

iptables -A INPUT -p icmp -j ICMP

iptables -A ICMP -p icmp --icmp-type 8 -j DROP

 

11. 기본정책을 DROP으로 설정

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

 본인의 윈도우에서 ssh연결이 되도록 설정하고 이미 연결된 상태나 연광성이 있는 연결은 별도의 정책 대신 state 매치를 이용하여 계쏙 사용할수 있도록 설정

iptables -I INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT

iptables -A INPUT -p tcp -s 172.17.24.130 --dport 22 -j ACCEPT

 

12. TCP FLAG 중 전체를 보고 그 중 SYN 과 FIN이 있을 경우 차단하는 정책

iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP

 

13. TCP FLAG 중 전체를 보고 그 중 PSH 과 FIN이 있을 경우 차단하는 정책

iptables -A INPUT -p tcp --tcp-flags ALL FIN,FIN -j DROP

Posted by k1rha
2012. 11. 11. 23:56

find ./ * | xargs grep -in 'RestoreConfig()'



Posted by k1rha
2012. 10. 28. 13:16

아래가 설치법이다.

sudo dpkg -i 파일명.deb

rpm파일은 아래의 방법으로 deb파일로 변환할 수 있다.
sudo alien -k --script 변환할파일명.rpm 

위에서 사용한 alien package가 없다면, 아래를 실행한다.
sudo apt-get update
또는
sudo apt-get install alien 
 
bin파일은 아래와 같이 실행한다.

Posted by k1rha
2012. 10. 23. 00:57

mysql root 암호 분실 되어때 복구 하는 방법.

 

1. 먼저 mysql데모를 멈춘다.

# /etc/init.d/mysqld stop  또는 아래 방법

# service mysqld stop


2. mysql 강제 접속 하는 방법.

# /usr/bin/mysqld_safe --skip-grant &

# mysql -u root -p

# 엔터 하면 접속 됨.

mysql > use mysql

mysql > update user set password=password('패스워드') where user='root';

mysql > flush privileges;

Posted by k1rha
2012. 10. 23. 00:42

APM을 오랜만에 신버젼으로 사용하려니 conf 파일이 모듈화가 되어서 이곳저곳 흐터져 있음에 놀랐다.

에전엔 httpd.conf 하나만 건들면 됐는데... ㅠㅠ 


디렉토리 리스팅을 해결하는법을 찾는데 30분넘는 검색이 걸렸다.

아래 두가지 방법을 적용시 키면 잘될 것이다. 


etc/apache2/mods-available/userdir.conf 파일에 존재하는 


<Directory /home/*/public_html>

                AllowOverride FileInfo AuthConfig Limit Indexes

#               Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec

                Options MultiViews SymLinksIfOwnerMatch IncludesNoExec


                <Limit GET POST OPTIONS>

                       Order allow,deny

                        Allow from all

                </Limit>

                <LimitExcept GET POST OPTIONS>

                        Order deny,allow

                        Deny from all

                </LimitExcept>

        </Directory>


위와 같이 Indexes 를 없애주면 된다. 위 방법으로 안될 시 아래 방법으로 필자는 해결을 보았다.

Ubuntu server 를 설치하고, apache2를 설치하니..

기본적으로 directory listing이 열려 있었다. 이 리스팅이 열려 있으면..

보안상 문제의 소지가 있기 때문에.. 되도록이면 막는것이 좋다.

이것을 막기 위해서는 아래와 같은 작업이 필요하다.

 

/etc/apache2/sites-available 폴더의 default 파일을 에디터로 연다.

 

Directory 태그의 Option 항목에서 Indexes가 포함된 모든 부분에서

"Indexes"를 "-Indexes"로 고쳐준다.

예)

Options Indexes FollowSymLinks

Options -Indexes FollowSymLinks

 

관리자 권한으로

/etc/init.d/apache2 restart

를 실행시켜준다.

[출처] Apache2 directory listing(폴더 항목 리스팅) 막기|작성자 에오메르

Posted by k1rha
2012. 9. 6. 18:24

[출처 네이버 지식인]


서버 관리를 하다보면 특정 포트가 이미 사용중이여서 다른것을 사용 못하는 경우가 있다.

이대 특정 포트를 사용하는 프로그램을 알아보고 포트를 죽이는 방법은 아래와 같다.


포트를 사용하는 프로그램을 확인하는 방법은
lsof -i TCP:port 번호 하시면(ex: lsof -i TCP:22)
그 포트를 사용하는 프로그램명이 나옵니다.

간단히 프로그램을 죽이는 방법은
fuser -k -n tcp port번호 하시면 됩니다.(ex: fuser -k -n tcp 22)



Posted by k1rha
2012. 8. 6. 02:53

python 을 패키지 설치후 실행을하면 아래와 같은 에러를 뱉어 냈다.


Fatal Python error: Py_Initialize: can't initialize sys standard streams

LookupError: unknown encoding: 5601


젠장.. 이 오류로 거의 20시간 이상 서핑만 했다. 인코딩 문제인데, 이걸 해결하는데 정말 많은 시간을 버린것같다.

게다가 솔라리스 환경인지라 에러 코드가 정확히 맡는 사람이 하나도 없었고, 윈도우 환경에서 비슷한 에러를 출력한 사람을 찾게 되었다. 해결방법은 아래와 같다.


http://bugs.python.org/file14014/alias_cp65001.diff  <--참조


필자의 경우

[********:/usr/local/lib/python3.1/encodings]# pwd

/usr/local/lib/python3.1/encodings


위의 경로에서 필요한 언어셋 아래에 에러가된 인코딩 방식을 지정해줌으로써 해결되었다.


미친듯이 고생한 에러의 결과가 위와 같이 해결되었다.



Posted by k1rha
2012. 8. 4. 17:54

기다 여다른 LINUX 시스템에서는 바이썬 공식홈페이지에서 제공해주는 소스코드를 가지고 

./configure ./make ./make install 순서로 차근차근 진행해주면 별다른 어려움 없이 설치가 가능하다.


하지만 유닉스인 솔라리스인경우는 유독 make 에러를 많이 뱉어 낸다.


signalModule.o 가 컴파일 에러를 띄우는 오류부터 시작하여 (이는 컴파일 ANSI 설정문제로 gcc 옵션에 -E -traditional 을 추가함으로해결되긴한다 ) 다른 오류들이 많이 격게된다.



한참을 찾던중 솔라리스는 패키지 파일로 설치할수 있다는 것을 찾았다.


http://www.sunfreeware.com/


위 공식사이트에서 spac 인지 x86인지 잘 구분하여 python 패키지 파일을 다운받은뒤


pkgadd -d [python] 으로 설치해준다.



가끔씩 패키지 설치 오류로 더이상 설치할수 없다는 답이 있는데

이러한 문제는 아래와 같은 글로 해결되었다.

====================================================================

Hi Alex, 

That means that you have that package (from same vendor) already installed. 
Check with 
pkginfo | grep zlib 
or 
find /var/sadm/pkg -type f -name pkginfo | grep zlib 

I think that you can ignore it, since that package (from some reasons) 
have set 'MAXINST="1"'

==============================================================

Posted by k1rha
2012. 5. 6. 11:28


@ 네트워크 프로그래램을 구현하는 두가지 방법은 하나는 독립적인 소켓프로그램을 짜는 방법이있고 두번째는 Xinetd 데몬을 이용하여 네트워크에 연결시키는 방법이 있다.


필자는 전자의 경우만을 구축하여 사용해봤으나 Xinetd를 이용하면 훨씬 편리한 구축 방법이 이뤄지는 것 같다.

예를들어 다음과 같은 코드가 있다고 가정하자.



 
int main(){

   char buffer[100]="aaaaaaaa";

   printf("%s\n",buffer);

}


위와같으 간단한 코드는 로컬에서 동작하는 프로그램으로 보인다.

하지만 이 프로그램을 Xinetd 로 등록하게 된다면 상황은 다르다. 




#gcc -o test test.c

#cd /etc/xinetd.d

#cat > test


service test{

    flags = REUSE

    socket_type = stream

    wait = no

    user = guest

    server = /root/

    disable = no

}

#


위에서 service 오른쪽의 단어는 포트를 의미하는데 test 라는 포트는 존재하지 않으므로 /etc/services 파일에 설정을 해주어야한다. 



 
#vi /etc/services

test 22222/tcp

:wq!

#




위에는 22222의 tcp 포트로 만들어주었다. 그리고 xinetd를 재시작한다.




#/etc/rc.d/init.d/xinetd restart

 


접속을 테스트해보자


 #telnet localhost 222222

aaaaaaaa



정상적으로 출력 된다. 

Posted by k1rha
2012. 3. 21. 00:09

SSH 로 서버에 접속시에 세션이 바뀌었을때 처리하는 명령어.
 

ssh-keygen -R [ IP or DomainName]

ex) ssh-keygen -R 123.123.123.123

이렇게 되면 key 값이 조기화 된다.  
Posted by k1rha
2012. 3. 21. 00:08
CentOS 5 에서 iptables 설정법 프로그래밍

2008/03/15 12:19

복사http://blog.naver.com/cocos2006/50029136645

요즘 CentOS 5.1을 가지고 서버를 구성하고 있는데 특히나 걸리는 부분이 방화벽 설정이었다.

CentOS에서는 iptables로 방화벽을 설정하는데, CentOS 5 부터 iptables의 설정에서 약간의 변경사항들이 있어서

예전부터 CentOS를 사용하지 않았던 사람들이 헷갈리는 경우가 있다. (본인을 포함해서...)

iptables의 설정과 적용에 관해서는 인터넷을 검색해보면 아주 잘 나와있다. 따라서 여기서 설명하는 것은

CentOS 5.1에서 iptables의 설정파일이 어디에 있으며, 설정내용들이 무엇인지, iptables를 적용하는 방법에 관해서

예를 들어 설명하고자 한다.

먼저, iptables의 설정파일이 위치한 곳은 '/etc/sysconfig/iptables'라는 파일이다.

내용은 대충 아래와 같다.

# Generated by iptables-save v1.3.5 on Fri Mar 14 10:42:34 2008
*filter
:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [448:53618]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT

-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -j ACCEPT

-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Fri Mar 14 10:42:34 2008

각각의 세부설정 옵션에 관해서는 인터넷을 검색하면되고, 가장 위쪽에 위치한

':INPUT ACCEPT [0:0]' 의 뜻은 서버로 들어오는 기본정책으로 '모두 받아들인다'이다. 그 아래 세줄도 모두 비슷한 뜻이다.

':RH-Firewall-1-INPUT - [0:0]' 부분은 이곳에서 설정하고자 하는 정책들을 적용하겠다는 문구이다.

'-A INPUT -j RH-Firewall-1-INPUT' 이 부분이 INPUT에 관한 처리를 RH-Firewall-1-INPUT에 설정된 것을 사용한다는 것이다.

'-A FORWARD -j RH-Firewall-1-INPUT' 이 부분도 위와 비슷하게 FORWARD되는 정책의 설정을 나타낸다.

그 다음에 나오는 두줄이 설정에서 주의할 부분으로 인터페이스로 들어오는 부분에 대한 설정 사항이다.

-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -j ACCEPT

처음줄이 의미하는 것은 localhost에서 생성되는 포트들에 관한 설정 사항으로 모두 ACCEPT하게 설정되어 있다.

만일 이 부분이 없다면 localhost내에서 포트를 생성하여 내부에서 메시지가 교환되는 형태의 프로그램에서 이상이

발생할 수도 있다. 설정을 ACCEPT가 아니라 DROP으로 설정한다면 메시지의 교환이 이루어지지 않게 된다. 이런 상태에서는

데이터베이스서버와 응용프로그램과의 연결이 포트로 이루어 진다면 서로간의 메시지교환은 이루어지지 않게 된다.

두번째줄이 외부와 서버와의 연결을 의미하는데 'eth0'를 통하여 들어오는 연결에 관한 설정으로 여기서는 모두 받아 들여지게된다.

따라서 이 설정대로라면 외부와 서버와는 아무런 방화벽이 작동하지 않는 것과 같은 상태가 된다. 왜냐하면 서버와 클라이언트의 모든 연

결이 네트워크카드를 통해 이루어지기 때문이다. 하지만 이 설정을 DROP으로 만들면 않된다. DROP으로 만들어 적용을 하게되면 적용됨

과 동시에 서버와의 모든 연결은 끊어지게 되고, 원격에서(ssh를 포함해서)의 연결도 종료되고, 서버와 직접연결된 터미널에서만

서버를 제어할 수 있기때문이다.

나머지 아래의 부분들은 http, ftp등등에 관한 연결설정을 나타낸다. 인터넷에서 찾아보면 내용을 알 수 있다.

다른 것은 아마도 iptables라는 명령어가 앞에 생략된 것 뿐일 것이다.

-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT

위 설정 아래의 부분은 생략하지 않고 남겨 둔다.

" -A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT " 이 부분은 현재 연결이 되어 있는 포트에 관해서는

연결을 유지한다는 뜻이다. 따라서 원격으로 접속하고 있었다 하더라도 연결이 끊어지는 것을 막을 수 있다.

그럼 위와 같이 기본설정으로 된 것을 바꾸어 보도록 하자.

정책은 다음과 같다.

" INPUT과 FORWARD에 관해서는 기본적으로 사용하지 않는 포트들은 모두 막는다. 내가 만든 채팅서버에서 사용하는 3333번포트는 열어

둔다."

사항들을 적용해 보면 아래와 같다.

# Generated by iptables-save v1.3.5 on Fri Mar 14 10:42:34 2008
*filter
:INPUT DROP [0:0] <- 이 부분을 DROP으로 바꾼다.
:FORWARD DROP [0:0] <- 이 부분을 DROP으로 바꾼다.
:OUTPUT ACCEPT [448:53618]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT

-A RH-Firewall-1-INPUT -i lo -j ACCEPT
# -A RH-Firewall-1-INPUT -i eth0 -j ACCEPT <- 이 부분을 주석처리한다.
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT <- ssh용

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT <- http용
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT <-ftp용
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 3333 -j ACCEPT <- 채팅서버가 사용하는 포트
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Fri Mar 14 10:42:34 2008

위와 같이 설정을 하고 "/etc/init.d/iptables restart" 스크립트명령을 실행하면 적용이 된다.

위에서 " # -A RH-Firewall-1-INPUT -i eth0 -j ACCEPT " 부분을 주석처리하는 것을 주의하기 바란다.

이 부분을 그냥 놔두면 이 부분의 아래에 설정된 사항들은 모두 무시되고 모든연결이 이루어 진다.

그리고 적용을 하기 전에 서버에서 서비스할 데몬들이 어떤 것들이 있는지 확인하고, 서비스되어야 할 포트들은 모두 열어주는 설정을 포

함 시켜야 한다. 위에서는 20번포트가 빠져있지만 필요하다면 설정해야 하고, 만일 DNS서버를 운영중이라면 tcp, udp의 53번포트를 열어

주는 설정도 추가되어야 할 것이다.

Posted by k1rha
2012. 3. 21. 00:07

커널 3.2 버젼을 컴파일하기 위해서는 GCC 버젼이 우선 4.6 이상으로 선행 되어야 한다. 



#===================================================================
GCC 4.6 이상 버젼으로 업데이트 하기 
GCC를 재컴파일 하기위해서는 gmp, mpfr, mpc 3박자가 다 잘 맞아 떨어져야한다.
실제로 GCC를 그냥 make make install 를 하다보면 호환성 문제로 에러가 나게된다. 즉 이 3가지 버젼을 맞춰준뒤 컴파일 해야 한다.
===================================================================
4.6.0.tar.gz
# tar zxvf gcc-4.6.0.tar.gz
# cd gcc-4.6.0
==================================================================
# wget ftp://ftp.gmplib.org/pub/gmp-5.0.2/gmp-5.0.2.tar.gz
# tar zxvf gmp-5.0.2.tar.gz
# cd gmp-5.0.2
# ./configure
# make
# make install
==================================================================
# wget http://www.mpfr.org/mpfr-current/mpfr-3.1.0.tar.bz2
# tar zxvf mpfr-3.0.1.tar.gz
# cd mpfr-3.0.1
# ./configure
# make
# make install
==================================================================
# wget http://www.multiprecision.org/mpc/download/mpc-0.9.tar.gz
# tar zxvf mpc-0.9.tar.gz
# cd mpc-0.9
# ./configure
# make
# make install
==================================================================
# echo $LD_LIBRARY_PATH
# export LD_LIBRARY_PATH=/usr/local/lib
gcc-4.6.0をコンパイル
# cd gcc-4.6.0
# ./configure --prefix=/usr/local/gcc-4.6.0 --disable-multilib

#yum provides *-stubs-32.h
#yum install kernel-devel
#yum install kernel-headers
#yum install dkms
#yum install gcc
#yum install gcc-c++
#yum install glibc-devel.i686
#yum install zip
 
# make
# make install
# cd /usr/local/gcc-4.6.0/bin
# ./gcc -v
=======================================================
혹시나 fatal error 를 띄워질경우
stubs-32.h 로 인한 오류일경우 
이경우는 64비트 체계에서 32비트 체계와 크로스 컴파일 하기위해 시도하는 것이다  
The problem should be resolved after you will install glibc-devel:
sudo yum -y install glibc-devel
and adding
?disable-multilib
to configure, so that you configure command line will look like this:
./configure  … ?disable-multilib
라는 답변도 사용용 해 볼수 있다.
오류 1-1 참조 
=======================================================
=====1-1 errror=======================
설치확인 : kernel-devel kernel-headers dkms gcc gcc-c++ 를 설치
#yum provides *-stubs-32.h
#yum install kernel-devel
#yum install kernel-headers
#yum install dkms
#yum install gcc
#yum install gcc-c++
#yum install glibc-devel.i686
When compile HTK on 64bit machines, by default it will still try to compile the tools to 32bit. Then there will be an error after issue the command "make all":
/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory
To solve this problem, what we need is to install the multilib package for the gcc and g++. On Ubuntu, install following packages:
g++-multilib
gcc-multilib
and redo "make all".
=======================================================================
 


=========================================================================
커널 3.2 버젼으로 올리기  (GCC 4.6 을 설치 완료)
=========================================================================
#yum install gcc
#yum install ncurses-devel
#yum install rpm-build
#yum install bison
#yum install depmod
#yum install mkinitrd

#cd /usr/local/src
#wget ftp://www.kernel.org/pub/linux/kernel/v3.x/linux-3.2.tar.bz2
#tar xvf linux-3.2.tar.bz2
#ln -s linux-3.2.tar.bz2 linux
#cd linux
#make clean
#make mrproper
#cd /boot/config-[현재커널 버젼] ./.config   //구동중인 커널의 환경정보를 그대로 가져다가 컴파일 하기 위함.
#make menuconfig
==================================================================
= 1.환경 모드로 들어와서 하단의 Load an AL ternate Configuration FIle 을 선택
= 2..config 파일이 입력되어 있는데 이를 선택하여 현재 커널 환경을 불러들임 
= 3.맨위에 탭인 Gerneral setup 을 선택
= 4.enable deprecated sysfs features which may confuse old userspace tools 를 체크함.
= 5.exit 로 나가되 저장하고 나가기할것
= 혹은 .config 파일에서 CONFIG_SYSFS_DEPRECATED_V2=y로 체크 할것
==================================================================
#make && make modules && make modules_install && make install
#cat /boot/grub/grub.conf  //새로운 커널이 부팅할수 있게 설정 되어있나 확인하고
구버젼이 설정되어있으면 주석처리
#reboot 
#uname -a 

Posted by k1rha
2012. 3. 21. 00:05

make: warning: Clock skew detected. Your build may be incomplete.
시간을 동기화 시킨다.

checking for termcap functions library... configure: error: No curses/termcap library found
해결책 : # yum -y install ncurses-devel

configure: error: C++ preprocessor "/lib/cpp" fails sanity check
해결책 : # yum -y install gcc-c++

/usr/lib/libdb-4.3.so: could not read symbols: File in wrong format
/usr/lib/libexpat.so: could not read symbols: File in wrong format

해결책 : # mv /usr/lib/libexpat.so /usr/lib/libexpat.so.bak
# ln -s /lib64/libexpat.so.0.5.0 /usr/lib/libexpat.so
# mv /usr/lib/libdb-4.3.so /usr/lib/libdb-4.3.so.bak
# ln -s /lib64/libdb-4.3.so /usr/lib/libdb-4.3.so
에러의 원인은 64비트 환경에서 32비트용 소스를 가져다가 설치하기 때문이다. 컴파일 도구와 관련된 심볼릭 링크 파일을 찾지 못한다고 나오고 있다.

configure: error: Unable to locate gmp.h
해결책 : # yum -y install gmp*

configure: error: not found. Please reinstall the expat distribution.
해결책 : # yum -y install expat*

configure: error: Please reinstall the libcurl distribution - easy.h should be in /include/curl/
해결책 : # yum -y install curl* 또는 yum -y install curl & yum -y install curl-devel

configure: error: Please reinstall libmcrypt - I cannot find mcrypt.h <br>
configure: error: Please reinstall libmhash - I cannot find mhash.h
해결책 : # yum install libmcrypt libmcrypt-devel libmhash libmhash-devel

Configure: error: xml2-config not found. Please check your libxml2 installation
해결책 : #yum install libxml2-devel

Checking for pkg-config... /usr/bin/pkg-config
configure: error: Cannot find OpenSSL's <evp.h>
해결책 : #yum install openssl-devel

Configure: error: Please reinstall the BZip2 distribution
해결책 : # yum install bzip2-devel

Configure: error: libjpeg.(also) not found.
해결책 : # yum install libjpeg-devel

Configure: error: libpng.(also) not found.
해결책 : yum install libpng-devel

Configure: error: freetype.h not found.
해결책 : #yum install freetype-devel

Configure: error: Cannot find MySQL header files under /usr.
Note that the MySQL client library is not bundled anymore!
해결책 : # yum install mysql-devel

Configure: error: Please reinstall the ncurses distribution
해결책 : # yum install ncurses-devel

Checking for unixODBC support... configure: error: ODBC header file '/usr/include/sqlext.h' not found!
해결책 : # yum install unixODBC-devel

Configure: error: Cannot find pspell
해결책 : # yum install pspell-devel

Configure: error: snmp.h not found. Check your SNMP installation.
# yum install net-snmp-devel

configure: error: ZLIB extension requires zlib >= 1.0.9

ln -sf /usr/lib64/libgssapi_krb5.so.2.2 /usr/lib/libgssapi_krb5.so
ln -sf /usr/lib64/libkrb5.so.3.3 /usr/lib/libkrb5.so
ln -sf /usr/lib64/libk5crypto.so.3.1 /usr/lib/libk5crypto.so
ln -sf /lib64/libcom_err.so.2 /usr/lib/libcom_err.so
ln -sf /usr/lib64/libgcrypt.so.11 /usr/lib/libgcrypt.so
ln -sf /usr/lib64/libgpg-error.so.0 /usr/lib/libgpg-error.so
ln -sf /usr/lib64/libexpat.so /usr/lib/libexpat.so
ln -sf /usr/lib64/libm.so /usr/lib/libm.so
ln -sf /usr/lib64/libssl.so /usr/lib/libssl.so

Posted by k1rha