수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1689865
  • Today | 327
  • Yesterday | 540

5 Articles, Search for 'Unix'

  1. 2008/05/03 Top 119 Cheat Sheets
  2. 2008/02/02 Cheat Sheet의 모든 것
  3. 2007/07/18 Linux / Unix Command: signal
  4. 2007/07/06 Unix/Linux 해킹 피해 시스템 분석 절차
  5. 2007/05/14 library 의 사용
Programming2008/05/03 13:07

Top 119 Cheat Sheets

Site : http://webdeveloper.econsultant.com/

ActionScript

  • ActionScript3.0 - Top Level Classes
  • ActionScript3.0 - Packages

Ajax

  • What’s Ajax? Cheat Sheet
  • Prototype Cheat Sheet
  • Scriptaculous Combination Effects Cheat Sheet

Apache

  • Apache Cheat Sheet
  • Apache 1.3 Quick Reference Card - PDF

ASCII Character Codes

  • ASCII Codes Cheat Sheet
  • Character Entity References in HTML 4 and XHTML 1.0
  • HTML Character Entities Cheat Sheet - PNG
  • HTML Character Entities Cheat Sheet - PDF
  • Reference Special Characters
  • Special ASCII HTML Character Codes
  • XHTML Character Entity Reference

ASP

  • ASP / VBScript Cheat Sheet - PNG

Blogging

  • Blogger Cheatsheet - PDF
  • WordPress Cheatsheet - PDF
  • TypePad Cheatsheet - PDF
  • Movable Type Cheatsheet - PDF
  • MovableType

CSS

  • CSS level 1 - Quick Reference Card - PDF
  • CSS level 2 - Quick Reference Card - PDF
  • CSS Cheat Sheet - PDF
  • CSS Cheat Sheet - PNG
  • CSS Property Index
  • Cascading Style Cheatsheet
  • CSS Shorthand Guide
  • Quick Reference Guide for CSS2 - PDF

CVS

  • CVS Cheat Sheet
  • Subversion Quick Reference Card. PDF
  • CVS Cheat-sheet

Firefox

  • Mozilla Firefox Cheat Sheet
  • Mozilla Firefox Cheat Sheet - PDF
  • Keyboard Shortcuts

Google

  • Google Advanced Operators (Cheat Sheet)
  • Google Help : Cheat Sheet
  • Google Cheat Sheet - auch als PDF
  • Google Cheat Sheets - PDF
  • Google Cheat Sheet - PDF

htaccess

  • htaccess Cheatsheet

HTML/XHTML

  • A Simple Guide To HTML - Cheat Sheet
  • HTML Cheat Sheet
  • HTML Cheatsheet
  • HTML Entities
  • HTML Codes Cheat Sheet
  • XHTML
  • HTML Cheat Sheet
  • XHTML Cheat Sheet v. 1.03 - PDF
  • HTML DOM - Quick Reference Card - PDF
  • XHTML 1.0 frameset - Quick Reference Card - PDF
  • XHTML 1.0 strict - Quick Reference Card - PDF
  • XHTML 1.0 transitional - Quick Reference Card - PDF
  • XHTML Basic Reference - PDF
  • XHTML Reference - PDF
  • XHTML Cheat Sheet - PDF : at CSSTidy

Java

  • Java 1.5 Cheat Sheet
  • Java Quick Reference - PDF

JavaScript

  • JavaScript Cheat Sheet - PNG
  • JavaScript Cheat Sheet - PDF
  • JavaScript Reference
  • JavaScript Reference
  • JavaScript and Browser Objects Quick Reference

JSP

  • JSP 2.0 XML Cheat Sheet

LaTeX

  • Latex Cheat Sheet

mod_rewrite Cheat Sheet

  • mod_rewrite Cheat Sheet - PNG
  • mod_rewrite Cheat Sheet - PDF

MySQL

  • MySQL Cheat Sheet - PDF
  • MySQL Cheat Sheet - PNG
  • MySQL Cheat Sheet
  • SQL Cheatsheet
  • MySQL Quick Reference Card

Oracle

  • Oracle PL/SQL Cheatsheet

Perl

  • Perl Regular Expression -Quick Reference - PDF
  • Perl Cheat Sheet
  • Perl Cheat Sheet
  • Perl 5 Cheat Sheet
  • Perl Regexp Quick Reference Card - PDF

Photoshop

  • Photoshop 7.0 Quick Reference Card for Windows - PDF
  • Photoshop CS2 Keyboard Shortcuts (Windows) - PDF
  • Photoshop CS2 Keyboard Shortcuts (Macintosh) - PDF

PHP

  • PHP Cheat Sheet - PDF
  • PHP Cheat Sheet - PNG
  • PHP Cheat Sheet with special php syntax

Python

  • Python Cheat Sheet
  • Python Cheat Sheet - PDF
  • Python 2.2 Quick Reference

Ruby

  • Ruby on Rails Cheat Sheet - PNG
  • Ruby quick reference
  • Ruby Cheatsheet
  • Threadeds Ruby Cheat Sheet
  • Ruby on Rails - ActiveRecord Relationships Cheat Sheet
  • Ruby on Rails - Form Helpers Cheat Sheet
  • Ruby on Rails - What Goes Where? Cheat Sheet

Unix/Linux

  • GNU screen: quick_reference
  • LINUX Administrator’s Quick Reference Card - PDF
  • Linux Shortcuts and Commands
  • Unix Cheat Sheet
  • Treebeard’s Unix Cheat Sheet
  • Unix Command cheat sheet - common commands for the unix command line

XML Technologies

  • Fusebox 4.1 XML Cheat Sheet
  • XML TopicMaps 1.0 - Quick Reference Card - PDF
  • XML Quick References - PDF
  • XML Schema - Structures Quick Reference - PDF
  • XML Schema - Data Types Quick Reference - PDF
  • XSL FO Reference - PDF
  • VoiceXML Reference - PDF
  • MathML Reference - PDF
  • XML Schema 2001 Reference - PDF
  • XML Schema 2000/10 - PDF
  • XSLT Quick References - PDF
  • XSLT Quick Reference Card - PDF
  • XSLT Reference

Misc Topics

  • Mozilla Thunderbird Cheat Sheet
  • Mozilla Thunderbird Cheat Sheet - PDF
  • QuickSilver Cheat Sheet - PDF
  • Regular Expression Cheat Sheet (.NET)
  • Schematron Reference - PDF
  • Smarty Cheat Sheet for template designers
  • Textile Reference


"Programming" 카테고리의 다른 글
  • Top 119 Cheat Sheets (0)2008/05/03
  • Cheat Sheet의 모든 것 (0)2008/02/02
  • Visual Studio 2005 Shortcut Keys (0)2007/08/17
  • WinDbg 간단 사용법 (0)2007/08/16
  • WinDbg 사용법 (0)2007/08/16
2008/05/03 13:07 2008/05/03 13:07
Posted by webdizen
Tags ActionScript, Ajax, Apache, ASCII Character Codes, CSS, CVS, Google, HTML, Java, Javascript, JSP, LaTeX, Linux, MySQL, Oracle, Perl, Photoshop, PHP, Python, Ruby, Unix, XHTML, XML
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/3229

Leave your greetings.

[로그인][오픈아이디란?]

Programming2008/02/02 21:33

Cheat Sheet의 모든 것

Actionscript
  • Quick reference/Cheatsheet for ActionScript 2.0
  • ActionScript 3.0 Cheatsheet - flash.display Package
  • ActionScript3.0 - Top Level Classes
  • ActionScript3.0 - Packages
  • Apollo Cheat Sheet (Apollo mx.controls & mx.core Cheatsheet, Apollo flash.display & flash.events Cheatsheet and Apollo flash.filesystem, flash.html & flash.system Cheatsheet)

Ajax

  • What’s Ajax? Cheat Sheet - PDF
  • Prototype Dissected - Cheat Sheet PNG
  • scriptaculous Combination Effects - Cheat Sheet - PDF

Apache

  • Apache Cheat Sheet
  • Apache 1.3 Quick Reference Card - free quick reference cards - PDF
  • htaccess Cheatsheet
  • mod_rewrite Cheat Sheet - PNG
  • mod_rewrite Cheat Sheet - PDF

ASCII Character Codes

  • ASCII Codes Cheat Sheet
  • Character Entity References in HTML 4 and XHTML 1.0
  • HTML Character Entities Cheat Sheet - PNG
  • HTML Character Entities Cheat Sheet - PDF
  • HTML special character reference
  • HTML - Special Entity Codes
  • Reference Special Characters
  • Special ASCII HTML Character Codes
  • XHTML Character Entity Reference

ASP

  • ASP / VBScript Cheat Sheet - PNG

C# and VB.NET

  • C# and VB.NET Comparison Cheat Sheet - PDF
  • Cheat Sheet - Casting in VB.NET and C#

CSS

  • CSS level 1 - Quick Reference Card - PDF
  • CSS level 2 - Quick Reference Card - PDF
  • CSS 2 - Quick Reference Guide - PDF
  • CSS Cheat Sheet - PDF
  • CSS Cheat Sheet - PNG
  • CSS Property Index
  • Cascading Style Cheatsheet
  • CSS Shorthand Guide

CVS

  • CVS Cheat Sheet
  • Subversion Quick Reference Card - PDF
  • CVS Cheat-sheet

C++

  • C++ Containers Cheat Sheet
  • C++ Quick Reference Sheet (Cheat Sheet) - PDF
  • How to Program in C++ - Language Summary

Django

  • Django Cheat Sheet
  • The Django Book

Firefox

  • Firefox Keyboard Shortcuts - PDF
  • Firefox Shortcuts Sheet
  • Mozilla Firefox Cheat Sheet
  • Mozilla Thunderbird Cheat Sheet
  • Keyboard Shortcuts

Google

  • Gmail Shortcuts (printable cheatsheet)
  • Google Advanced Operators (Cheat Sheet)
  • Google Cheat Sheet (Version 1.06) - PDF
  • Google Cheat Sheet - auch als PDF
  • Google Cheat Sheets - auch als PDF
  • Google Help : Cheat Sheet

HTML/XHTML

  • A Simple Guide To HTML - Cheat Sheet
  • HTML & XHTML Tag Quick Reference
  • HTML Cheat Sheet
  • HTML Cheatsheet
  • HTML Entities
  • HTML CODES CHEAT SHEET
  • XHTML
  • HTML Cheat Sheet
  • XHTML Cheat Sheet v. 1.03 - PDF
  • HTML DOM - Quick Reference Card - PDF
  • XHTML 1.0 frameset - Quick Reference Card - PDF
  • XHTML 1.0 strict - Quick Reference Card - PDF
  • XHTML 1.0 transitional - Quick Reference Card - PDF
  • XHTML Quick Reference Guide For XHTML 1.1

Java

  • Java 1.5 Cheat Sheet
  • Java Quick Reference - PDF
  • JSP Quick Reference Card
  • (JSPª) SYNTAX version 1.1
  • (JSP™) SYNTAX version 2.0

JavaScript

  • JavaScript Cheat Sheet - PNG
  • JavaScript Cheat Sheet - PDF
  • JavaScript Reference
  • JavaScript Reference
  • JavaScript and Browser Objects Quick Reference
  • Regular Expressions for JavaSript - free online quick reference

LaTeX

  • Latex cheat sheet
  • LATEX2″ Cheat Sheet
  • Latex 2e Cheat Sheet LaTeX 2e Brief Reference

Microformats

  • Microformats Cheat Sheet
  • Microformats Cheat Sheet

Misc

  • CHMOD Chart
  • Complete listing of common camera symbols.
  • The Unicode-Database
  • RGB Hex Colour Chart - PNG
  • Pretty Good PGP Reference Card
  • Search Engine Cheat Sheet
  • Quick Reference Cards
    Ada, C, C++, CSS, CVS, Delphi, DOC++, Html, Java, JSP, Perl, PHP, Linux, Unix, SQL, UML, XML

MySQL

  • MySQL Cheat Sheet
  • MySQL Cheat Sheet - PDF
  • MySQL Cheat Sheet - PNG
  • MySQL Cheat Sheet
  • SQL Cheatsheet
  • MySQL Quick Reference Card

Oracle

  • Oracle PL/SQL Cheatsheet
  • Oracle Cheat Sheet
  • Oracle Server 9i - Quick Reference Guide
  • Oracle SCM Installation Cheat Sheet

Perl

  • Perl Regular Expression -Quick Reference - PDF
  • Perl Cheat Sheet
  • Perl Cheat Sheet
  • Perl 5 Cheat Sheet
  • Perl Quick Reference - PDF
  • Perl Quick Reference Card - PDF
  • Perl Regexp Quick Reference Card - PDF

Photoshop/Gimp

  • Gimp Quick Reference Card v.1.0
  • Photoshop 7.0 Quick Reference Card for Windows - PDF
  • Photoshop CS2 Keyboard Shortcuts (Windows) - PDF
  • Photoshop CS2 Keyboard Shortcuts (Macintosh) - PDF

PHP

  • symfony PHP5 framework - Admin Generator cheat sheet - PDF
  • PHP Cheat Sheet - PDF
  • PHP Cheat Sheet - PNG
  • PHP Cheat Sheet with special php syntax
  • PHP PCRE Cheat Sheet
  • Regular Expressions Cheat Sheet - PNG
  • Smarty cheat sheet for template designers - PDF

Python

  • Python 101 cheat sheet
  • Python Cheat Sheet
  • Python Cheat Sheet - PDF
  • Python Quick Reference
  • Python 2.4 Quick Reference

Regular Expressions

  • Regular Expressions Cheat Sheet
  • Regular Expression Cheat Sheet (.NET)

Ruby

  • ActiveRecord Relationships - Ruby on Rails cheat sheet guide - PDF
  • Ruby Cheatsheet
  • RubyOnRails-Cheatsheet - PDF
  • Ruby on Rails Cheat Sheet - PNG
  • Ruby on Rails Cheat Sheet Collectors Edition
  • Ruby on Rails cheat sheet guide - PDF
  • Ruby quick reference
  • Ruby Cheatsheet
  • Threadeds Ruby Cheat Sheet
  • What Goes Where? - Ruby on Rails cheat sheet - PDF

Unix/Linux

  • LINUX Administrator’s Quick Reference Card - PDF
  • Linux Shortcuts and Commands
  • quick_reference [GNU screen]
  • Unix Cheat Sheet
  • The One Page Linux Manual - Version 3 - PDF
  • TCP Ports list (3498 ports in list)
  • Treebeard’s Unix Cheat Sheet
  • Unix command cheat sheet - common commands for the unix command line
  • Essential Vim keyboard shortcuts Cheat Sheet
  • VIM Quick Reference Card
  • VIM Quick Reference Card
  • Vim Commands Cheat Sheet

Weblog

  • Blogger Cheatsheet - PDF
  • Quick Reference Chart - ExpressionEngine Documentation - PDF
  • TypePad Cheatsheet - PDF
  • Movable Type Cheatsheet - PDF
  • MovableType
  • WordPress Cheatsheet - PDF
  • WP - WordPress Cheat Sheet für Theme Tags und Plugin-API - PDF

Windows

  • An A-Z Index of the Windows NT/XP command line
  • Graphical vi-vim Cheat Sheet and Tutorial
  • Power Point 2000 - Keyboard Shortcuts
  • POWERPOINT 2003 - Quick Reference Card
  • Quick Reference Card for Windows®
  • TCP Ports list (3498 ports in list)
  • Windows - Alt Key Numeric Codes
  • Windows XP Service Reference - PDF
  • XP Keyboard Shortcuts: version 2 - PDF

XML

  • Fusebox 4.1 XML Cheat Sheet
  • MathML Reference - PDF
  • VoiceXML Reference - PDF
  • XML TopicMaps 1.0 - Quick Reference Card - PDF
  • XML Quick References - PDF
  • XML Schema 2001: children - parents - PDF
  • XML Schema 2001: elements - attributes - PDF
  • XML Schema 2000/10 - PDF
  • XML Schema - Structures Quick Reference - PDF
  • XML Schema - Data Types Quick Reference - PDF
  • XSL FO Reference - PDF
  • XSLT Quick References - PDF
  • XSLT Quick Reference Card - PDF
  • XSLT Reference

출처 : http://www.smashingmagazine.com/2006/10 ··· -ruby%2F

"Programming" 카테고리의 다른 글
  • Top 119 Cheat Sheets (0)2008/05/03
  • Cheat Sheet의 모든 것 (0)2008/02/02
  • Visual Studio 2005 Shortcut Keys (0)2007/08/17
  • WinDbg 간단 사용법 (0)2007/08/16
  • WinDbg 사용법 (0)2007/08/16
2008/02/02 21:33 2008/02/02 21:33
Posted by webdizen
Tags ActionScript, Ajax, Apache, ASCII Character, ASPKeyword ASP, C#, C++Keyword C++, CSS, CVS, Django, Firefox, Gimp, Google, HTML, Java, Javascript, LaTeX, Linux, Microformats, Misc, MySQL, Oracle, Perl, Photoshop, PHP, Python, Regular Expressions, Ruby, Unix, VB.NET, Weblog, Windows, XHTML, XML
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/3175

Leave your greetings.

[로그인][오픈아이디란?]

Unix & Linux/System2007/07/18 21:58

Linux / Unix Command: signal

출처 :http://linux.about.com/od/commands/l/blcmdl7_signal.htm

NAME

signal - list of available signals

DESCRIPTION

Linux supports both POSIX reliable signals (hereinafter "standard signals") and POSIX real-time signals.

Standard Signals

Linux supports the standard signals listed below. Several signal numbers are architecture dependent, as indicated in the "Value" column. (Where three values are given, the first one is usually valid for alpha and sparc, the middle one for i386, ppc and sh, and the last one for mips. A - denotes that a signal is absent on the corresponding architecture.)

The entries in the "Action" column of the table specify the default action for the signal, as follows:

Term
Default action is to terminate the process.
Ign
Default action is to ignore the signal.
Core
Default action is to terminate the process and dump core.
Stop
Default action is to stop the process.

First the signals described in the original POSIX.1 standard.

SignalValueActionComment







or death of controlling process
SIGINT 2TermInterrupt from keyboard
SIGQUIT 3CoreQuit from keyboard
SIGILL 4CoreIllegal Instruction
SIGABRT 6CoreAbort signal from abort(3)
SIGFPE 8CoreFloating point exception
SIGKILL 9TermKill signal
SIGSEGV11CoreInvalid memory reference
SIGPIPE13TermBroken pipe: write to pipe with no readers
SIGALRM14TermTimer signal from alarm(2)
SIGTERM15TermTermination signal
SIGUSR130,10,16TermUser-defined signal 1
SIGUSR231,12,17TermUser-defined signal 2
SIGCHLD20,17,18IgnChild stopped or terminated
SIGCONT19,18,25
Continue if stopped
SIGSTOP17,19,23StopStop process
SIGTSTP18,20,24StopStop typed at tty
SIGTTIN21,21,26Stoptty input for background process
SIGTTOU22,22,27Stoptty output for background process

The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.

Next the signals not in the POSIX.1 standard but described in SUSv2 and SUSv3 / POSIX 1003.1-2001.

SignalValueActionComment




SIGPOLL
TermPollable event (Sys V). Synonym of SIGIO
SIGPROF27,27,29TermProfiling timer expired
SIGSYS12,-,12CoreBad argument to routine (SVID)
SIGTRAP5CoreTrace/breakpoint trap
SIGURG16,23,21IgnUrgent condition on socket (4.2 BSD)
SIGVTALRM26,26,28TermVirtual alarm clock (4.2 BSD)
SIGXCPU24,24,30CoreCPU time limit exceeded (4.2 BSD)
SIGXFSZ25,25,31CoreFile size limit exceeded (4.2 BSD)

Up to and including Linux 2.2, the default behaviour for SIGSYS, SIGXCPU, SIGXFSZ, and (on architectures other than SPARC and MIPS) SIGBUS was to terminate the process (without a core dump). (On some other Unices the default action for SIGXCPU and SIGXFSZ is to terminate the process without a core dump.) Linux 2.4 conforms to the POSIX 1003.1-2001 requirements for these signals, terminating the process with a core dump.

Next various other signals.

SignalValueActionComment




SIGEMT7,-,7Term
SIGSTKFLT-,16,-TermStack fault on coprocessor (unused)
SIGIO23,29,22TermI/O now possible (4.2 BSD)
SIGCLD-,-,18IgnA synonym for SIGCHLD
SIGPWR29,30,19TermPower failure (System V)
SIGINFO29,-,-
A synonym for SIGPWR
SIGLOST-,-,-TermFile lock lost
SIGWINCH28,28,20IgnWindow resize signal (4.3 BSD, Sun)
SIGUNUSED-,31,-TermUnused signal (will be SIGSYS)

(Signal 29 is SIGINFO / SIGPWR on an alpha but SIGLOST on a sparc.)

SIGEMT is not specified in POSIX 1003.1-2001, but neverthless appears on most other Unices, where its default action is typically to terminate the process with a core dump.

SIGPWR (which is not specified in POSIX 1003.1-2001) is typically ignored by default on those other Unices where it appears.

SIGIO (which is not specified in POSIX 1003.1-2001) is ignored by default on several other Unices.

Real-time Signals

Linux supports real-time signals as originally defined in the POSIX.4 real-time extensions (and now included in POSIX 1003.1-2001). Linux supports 32 real-time signals, numbered from 32 (SIGRTMIN) to 63 (SIGRTMAX). (Programs should always refer to real-time signals using notation SIGRTMIN+n, since the range of real-time signal numbers varies across Unices.)

Unlike standard signals, real-time signals have no predefined meanings: the entire set of real-time signals can be used for application-defined purposes. (Note, however, that the LinuxThreads implementation uses the first three real-time signals.)

The default action for an unhandled real-time signal is to terminate the receiving process.

Real-time signals are distinguished by the following:

1.
Multiple instances of real-time signals can be queued. By contrast, if multiple instances of a standard signal are delivered while that signal is currently blocked, then only one instance is queued.
2.
If the signal is sent using sigqueue(2), an accompanying value (either an integer or a pointer) can be sent with the signal. If the receiving process establishes a handler for this signal using the SA_SIGACTION flag to sigaction(2) then it can obtain this data via the si_value field of the siginfo_t structure passed as the second argument to the handler. Furthermore, the si_pid and si_uid fields of this structure can be used to obtain the PID and real user ID of the process sending the signal.
3.
Real-time signals are delivered in a guaranteed order. Multiple real-time signals of the same type are delivered in the order they were sent. If different real-time signals are sent to a process, they are delivered starting with the lowest-numbered signal. (I.e., low-numbered signals have highest priority.)

If both standard and real-time signals are pending for a process, POSIX leaves it unspecified which is delivered first. Linux, like many other implementations, gives priority to standard signals in this case.

According to POSIX, an implementation should permit at least _POSIX_SIGQUEUE_MAX (32) real-time signals to be queued to a process. However, rather than placing a per-process limit, Linux imposes a system-wide limit on the number of queued real-time signals for all processes. This limit can be viewed (and with privilege) changed via the /proc/sys/kernel/rtsig-max file. A related file, /proc/sys/kernel/rtsig-max, can be used to find out how many real-time signals are currently queued.

CONFORMING TO

POSIX.1

SEE ALSO

kill(1), kill(2), setitimer(2), sigaction(2), signal(2), sigprocmask(2), sigqueue(2)
"System" 카테고리의 다른 글
  • ASCII Code의 CRLF 제거 방법 (0)2009/09/04
  • Linux / Unix Command: signal (0)2007/07/18
  • 시스템 관리자를 위한 기초 명령어 활용법 (0)2007/06/22
  • 프로세스정보 얻어오기 (0)2007/05/14
  • 여러 가지 설정으로 공격으로부터 시스템을 안전하... (0)2007/05/10
2007/07/18 21:58 2007/07/18 21:58
Posted by webdizen
Tags Linux, Signal, Unix
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/3080

Leave your greetings.

[로그인][오픈아이디란?]

Security2007/07/06 17:50

Unix/Linux 해킹 피해 시스템 분석 절차

출처 : 시스템 로그 분석 (해킹 피해와 보안 추적의 결정적 파일) - 안성철
(안성철님께 허락을 구하지는 않았고, 삭제를 요청할 시 바로 삭제 조치 하겠습니다.)


1. 해킹 피해 시스템 분석 절차


1.1 시스템 침입 흔적 조사 방법
특별한 장소 또는 행위로부터의 접속에 대한 로그 파일을 조사한다.
  • last, syslog, 프로세스 로그와 그 밖에 다른 로그 파일을 조사한다.
  • access-log, xferlog 등 주요 서버의 로그 파일을 조사한다.
  • 방화벽 또는 라우터에 의한 로그 기록이 있을 경우 조사한다.
  • 유닉스에서 기본적으로 제공하는 로그 파일들을 조사한다.
    • /var/adm/messages 콘솔 상에 있는 정보
    • /var/adm/utmp(x) 현재 로그인 한 사용자 정보
    • /var/adm/wtmp(x) 사용자의 로그인, 로그아웃
  • 시스템의 shutdown, start up 정보를 조사한다.
    • /var/adm/lastlog 사용자의 최근 로그인 관련 정보
    • /var/adm/acct 사용자의 command 정보
예) 시스템 공격에 따른 각종 로그 예

imap/ipop 공격 로그 : message 로그 파일
Dec 5 11:57:50 www ipop3d[933]: connect from xxx.xxx.124.104
Dec 5 11:57:54 www ipop3d[934]: connect from xxx.xxx.124.104
======================================================================
Jun 22 10:03:07 ns imapd[447]: command stream end of file, while reading
line user=??? host=dialup187-2-45.xxx.xxx.xxx
Jun 15 15:10:40 ns imapd[14943]: Login failure
user=^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P
^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P
^P^P^P^P^P^P^P^P host=irv-ca48-32.xxx.xxx.xxx

mscan 공격 로그 : secure 로그 파일
Jun 27 20:49:29 ns in.telnetd[12918]: connect from xxx.xxx.50.76
Jun 15 03:39:28 ns imapd[14020]: connect from xxx.xxx.94.85
Jun 15 10:15:07 ns in.ftpd[14169]: connect from xxx.xxx.250.76
...

statd 공격 로그 : message 로그 파일
May 9 07:08:14 hosim statd[191]: attempt to create "/var/statmon/sm//../../../../
../../../../../..//../../../../../../../../../../../../../../../../../../../../..
/../../../../../tmp/.nfs09 D H $ $ $ $
O * * * # # P * c 6 )
# # ; # XbinXsh tirdwr "

WWW 관련 공격 로그 : access-log 로그 파일
xxx.xxx.ter.net - - [27/Mar/1998:06:12:08 +0900] "GET /cgi-bin/phf?Qalias=x%0a
/bin/cat%20/etc/passwd HTTP/1.0" 200 7360
xxx.xxx.xxx- - [04/May/1998:04:17:38 +0900] "GET /cgi-bin/phf?Qalias=x%0a
/bin/cat%20/etc/shadow HTTP/1.0" 200 92
xxx.xxx.xxx0- - [08/Jun/1998:09:17:14 +0900] "POST /cgi-bin/phf?Qname=x%0a
/bin/sh+-s%0a HTTP/1.0" 200 82

setuid, setgid 파일을 조사한다.
  • 침입자는 종종 추후에 루트 권한으로 접속하기 위해 /bin/sh 또는 /bin/time 과 같은 백도어 파일을 남겨둔다.
  • 다음의 방법으로 setuid, setgid 파일을 찾는다.
[Test: /]find / -user root -perm -4000 -print
[Test: /]find / -group kmem -perm -2000 -print

NFS/AFS 마운트 시스템에서는 다음과 같은 명령어를 이용한다.
[Test: /]find / -user root -perm -4000 -print -xdev
  • setuid 파일을 찾는 다른 방법으로 각각의 파티션에 대해 적용하는 ncheck가 있다.
[Test: /]ncheck -s /dev/rsd0g

시스템의 바이너리 파일 변경 여부를 조사한다.
  • 침입자는 /etc/inetd.conf가 참조하는 다음과 같은 파일들을 변경한다.
    login, su, telnet, netstat, ifconfig, ls, find, du, df, libc, sync 등
  • 백업된 초기 파일과 현재의 파일을 비교하기 위한 유닉스의 sum 명령어는 트로이 목마 프로그램에 의해 거짓 정보를 나타낼 수 있으므로 다음 프로그램을 사용한다. cmp, MD5, Tripwire 등 다른 암호화 검사 유틸리티들 인가받지 않은 프로그램 및 네트워크 모니터링 프로그램의 사용을 조사한다.
  • 침입자는 사용자의 계정과 패스워드 정보를 얻거나, 자신의 존재를 숨기거나, 또 다른 시스템을 공격 하기 위해 다양한 프로그램 피해 시스템을 설치하여 사용한다.
killinetd : 원격지 호스트의 inetd 데몬을 다운시켜서 네트워크 서비스 방해
imap, imap2 imap : 데몬 오버플로우 원격지 공격 프로그램
imapver imap : 데몬버전의 원격점검 프로그램
netcat : 범용 네트워크 해킹도구
brute.sh imap : 취약점 공격 시 사용되는 보조 프로그램
z0ne : 특정 도메인의 수많은 IP를 찾아내는 프로그램
sniffer : 스니퍼 프로그램
linux rootkit : 백도어 모음(chfn, chsh, inetd, login, ls, du, ifconfig, netstat, passwd, ps, top, rshd, syslogd, tcpd 등)
phfscan phf.cgi : 취약점 스캐너
nmap : 각종 기능을 추가한 포트 스캐너
chkexploit : linux의 각종 시스템 취약점을 찾아내는 스캐너
eipscan : network 레벨의 IP 스캐너
ADMfindall : network 레벨의 IP 스캐너
lsp : network 레벨의 포트 스캐너
imapvun : imap 취약점 스캐너
imapd_scan.sh : imap 취약점 스캐너
mscan : imapd, ipopd, statd 등 여러 취약점을 찾아내는 취약점 스캐너
기타 : sirc, ipw, ircbnc, login, icat, ts2, tt, mendax, phf, s, sirc4, bcast3, bips, boink, bonk, bonk2, ck, fear, frag, jolt, killwin, land, nestea, newteardrop, ns, smurf, ssping, tear2, teardrop 등

cron과 at.으로 수행되는 모든 파일을 검사한다.
  • 침입자는 보통 cron과 at 명령으로 수행되는 파일들에 백도어 프로그램을 남겨둔다. 그러므로 이러한 프로그램으로 수행되는 파일들을 쓰기금지로 설정한다.
인가받지 않은 서비스를 조사한다.
  • /etc/inetd.conf를 조사하여 인가받지 않은 추가되거나 변경된 서비스를 조사한다. 특히 쉘을 수행 할 수 있는 /bin/sh나 /bin/csh를 조사한다. /etc/passwd 파일을 조사하여 변경된 부분이 있는지 확인한다.
  • 추가된 계정, 패스워드의 생략, uid(0로의)의 변경여부를 확인한다.
시스템과 네트워크 설정 파일의 인가받지 않은 항목을 조사한다.
  • /etc/hosts.equiv, /etc/hosts.lpd와 모든 .rhosts 파일에 '+' 항목이 있는지 조사해서 제거한다.
    시스템에 숨겨지거나 '.' 으로 시작하는 특이한 파일이 있는지 조사한다.
  • ls 명령어로 보이지 않는 파일을 조사한다.
[Test: /]find / -name ".. " -print -xdev
[Test: /]find / -name ".*" -xdev | cat -v

일반적으로 '.xx' 파일이나 '.mail' 파일이 침입자에 의해 이용된다. 지역 네트워크의 모든 시스템을 조사한다.

1.2 침입자의 출발지 분석
침입자의 출발지는 어떻게 확인할 수 있을까? 정확하게 위치를 추적하기는 힘들더라도 개략적인 위치는 시스템에서 제공하는 명령어로도 확인할 수 있다. 이러한 정보를 확인하기 위해서는 다음과 같은 명령어를 이용하여 정보를 검색하면 된다.
  • who, w : 사용자 및 사용자의 컴퓨터 확인
  • last : 사용자들의 로그인/로그아웃 일시 기록 확인
  • lastcomm : 사용자들의 시스템 명령 및 프로세스 기록 확인
  • netstat : 네트워크 접속 현황 확인
  • snmpnetstat : 네트워크 관리 시스템에서의 현황
  • 라우터 정보 : 라우터의 라우팅 및 접속 등의 현황 확인
  • /var/adm/messages : 전자우편 송수신 현황 기록 확인(많은 침입자들이 자신의 시스템으로 전자 우편 송신)
  • syslog : 시스템 로그 확인(다른 시스템으로도 로그를 보낸다)
  • wrapper 로그 : 외부 시스템 접속 차단 프로그램의 연결
시스템의 모든 사용자에게  finger를 하여 어디서 왔는지 점검

who, w, last, lastcomm은 /var/pacct, /usr/adm/wtmp의 기록을 보여주는데 침입자들은 백도어 프로그램을 이용하여 이 로그들을 수정하여 자신의 흔적을 지울 수 있다. 그리고 침입자가 아직 이런 백도어가 없다하더라도 아주 쉽게 이 로그들을 수정하거나 지울 수 있다. 하지만 가끔 침입자들은 로그를 삭제하지 않을 수도 있으며, 특히 추가적인 유닉스 로깅 프로그램을 설치한 경우에 더욱 그렇다.

1.3 ethernet sniffer로 다른 시스템에 어떻게 침입하는지를 모니터링 하는 것이 좋다.
xinetd나 tcp_wrapper는 외부에서의 모든 접속에 대해 로그를 남길 수 있으며, 침입자가 로그를 수정하거나 지울 수 없도록 이 로그들을 다른 시스템에 옮겨두는 것이 바람직하다. 적절한 대책을 세우기 전에 침입자가 ethernet sniffer로 다른 시스템에 어떻게 침입하는지를 모니터링 하자.

1.4 외부로부터 접속하는 시스템들을 막고 특히, 침입자의 접근을 막기 위해 네트워크를 중지시킨다.
하지만 만약 침입자가 눈치 챈다면 당신의 시스템에서 "rm -rf /"를 실행하여 모든 정보를 지울 수 있다.

1.5 시스템 실행 파일의 변경 유무를 점검하는데, 특히 백도어 프로그램으로 잘 이용되는 다음 프로그램들을 중점 점검한다.
  • /bin/login
  • 모든 /usr/etc/in.* files (예 : in.telnetd)
  • /lib/libc.so.* (on Suns)
  • inetd에서 호출되는 모든 것
기타 잘 교체되는 것으로서는 다음과 같은 것이 있다.
  • netstat : 정보를 감추게 한다.
  • ps : 프로세스를 감추게 한다(예 : Crack).
  • ls :  디렉토리를 감춘다.
  • ifconfig : 이더넷에 대한 promiscuity mode를 감춘다.
  • sum : sum을 수정하지 않고도 실행 파일의 체크썸을 올바르게 위장 할 수 있으므로 더 이상 교체하지는 않는다.
따라서 sum 값을 믿어서는 안된다. 파일의 실제 수정 시간을 알기 위해서는 "ls -lac"를 사용한다. /etc/wtmp를 점검하여 시스템 시간을 알아내고 CD나 테이프의 원본과 비교하거나 MD5 체크썸이 이전의 체크썸과 다른지 비교하며, 흔히 오프라인으로 저장된 미리 만들어진 체크썸과 cmp 명령으로 비교한다. 아울러 흔히 사용되는 백도어로서 /bin/time 과 같은 setuid 프로그램인데, 이들은 일반 사용자가 root로 실행할 수 있게 해준다. 이런 프로그램을 찾기 위해서는 다음 명령을 이용하면 된다.

[Test: /]find / -type f -perm -4000 -ls

하다보면 OS 전체를 다시 설치해야 될지도 모른다. Tripwire 보안도구는 관리자 몰래 실행 파일을 수정하거나 inetd.conf와 같은 시스템 파일의 수정을 발견할 수 있도록 도와준다.

1.6 모든 사용자의 .rhosts, .forward등을 점검한다. 만약 .rhosts가 "+"를 가지고 있으면 어떠한 시스템에서도 패스워드 체크없이 접근할 수 있다. COPS는 다음과 같은 체킹 스크립트를 가지고 있다.

[Test: /]find / -name, rhosts -ls -o -name .forward -ls

의심스러운 모든 파일의 생성 및 수정 시간을 점검하는데 다음을 이용한다.

[Test: /]find / -ctime -2 -ctime +1 -ls

이것은 이틀 전에서 하루 이후에 수정된 파일을 찾아준다. 모든 .login, .logout, profile, .cshrc들도 적어도 수정일 및 시간 등을 점검하며, .rhosts 파일이 잠궈진 것은 없는지, news, sundiag, sync 등의 계정에 대한 쉘이 보다 안전을 위해 "/bin/false"로 되어 있어야 하며 "/bin/sh" 등으로 되어 있어서는 안된다.

또한 ".", ".." 등의 디렉토리가 없는지 점검하는데 대부분 /tmp, /var/tmp, /usr/spool/* 나 공개적으로 쓰기 할 수 있는 디렉토리에서 많이 발견된다.

1.7 NFS가 외부로 널리 공개된 것은 아닌지 점검한다.
NFSwatch는 NFS 트랜잭션에 대해 로그를 만들어 주며, "showmount -e"를 하여 올바른 NFS 구성을 점검할 수 있도록 한다. 256 바이트를 넘긴 경우에 nfsd는 버그를 가지고 있으며, 또한 여러분이 마운트하고 있는 시스템에 대한 점검도 중요하다. 가능한 "nosuid" 플래스를 사용한다.

1.8 시스템 취약점이 있는지 점검하는 리스트
원하지 않는 프로세스가 없는지, "rpcinfo -p"를 이용하여 점검한다. hosts.equiv 에 "+"가 없는지 점검한다. tftp를 사용하지 않는가, 사용하기를 원한다면 "-s" 플래그를 사용한다. 이 경우는 대부분 디스크 없는 워크스테이션을 위한 경우인데, 적절하게 NFS를 이용할 수 있다. 이것을 root로 실행하지 않도록 하며, /etc/inetd.conf에서 다음과 같이 바꾼다. tftp dgram udp wait nobody /usr/etc/in.tftpd in.ftpd -s /tftpboot 혹은 원치 않는 곳에서의 접근을 막기 위해 tcp_wrapper에서 tftpd에 한 부분을 고치고 모든 접속 상황을 로그로 남긴다.

tfp dgram udp wait nobody /usr/etc/tcpd in.tftpd -s /tftpboot 혹은 /etc/hosts.allow에서 정의된 곳에서만 접근할 수 있도록 조정한다. crontab과 at-vobs를 점검한다. 침입자가 남긴 모든 것을 정리했다고 생각한 후 이것이 어떤 작업을 할 수 있다. rc.boot, rc.local(SYSV : /etc/rc?.d/*)나 기타 시스템 시작 시 실행 파일들을 점검한다.

가장 좋은 방법은 오프라인으로 저장했다가 주기적으로 점검하는 것이며, sendmail.cf, hosts.allow, at.allow, at.deny, cron.allow, hosts, hosts.lpd 등의 시스템 구성 파일들을 점검한다. "aliases"는 메일 확장을 위한 것인데, "uudecode" 등과 같은 것을 가지고 있을 수 있다. inetd.conf 와 /etc/services 파일에서 침입자가 추가한 불법 프로그램 서비스가 있는 지 점검한다. 현재 가지고  있는 모든 로그 파일(pacct, wtmp, lastlog, sulog, syslog, authlog 등)들을 다른 안전한 곳으로 옮긴다. /tmp/* 파일들을 먼저 살펴 본 후 재시동(Reboot)한다.

/etc/passwd 파일의 여분 파일을 가능한 디스켓 등으로 저장한 후 su 및 passwd 프로그램이 백도어가 아님을 확인한 후 root 패스워드를 바꾼다. 만약 침입자가 su나 passwd 백도어를 설치하였다면 /etc/passwd 파일의 패스워드 부분을 모두 "*"로 바꾼다.

또한 침입자가 패스워드 파일을 가지고 있다면 모든 사용자들의 패스워드를 알아낼 가능성이 있으며, 장시간 사용하지 않는 사용자의 패스워드를 바꿀 수도 있다. NIS 서버에서는 단순히 /etc/passwd 뿐 아니라 NIS 맵에 해당하는 것들도 점검해야 한다. 익명 FTP나 다른 네트워크 서비스 시스템들이 적절하게 구성되어 있는지 점검한다. inetd를 다시 설치하고, 콘솔만이 "secure" 단말로 정의하여 다른 단말에서 root로 로그인할 수 없도록 한다. hosts.equiv, .rhosts, hosts.lpd에 "#"이 있는지 점검한다. 만약 침입자가 "#"을 기계이름으로 정의하였다면 누구나 신뢰하는 호스트로 정의된다. 마지막으로 침입자에 대한 경각심을 늦추지 않는다.

2. 침해사고 분석 방법

2.1 관리자 관점에서의 분석
위의 예와 같이 침입자는 다양한 방법을 이용하여 시스템에 침입하여 불법작업을 수행한다. 관리자는 이러한 침입자의 행동을 모니터링 하는 것은 쉽지 않지만 침해사고가 발생할 경우 시스템이 가지고 있는 여러 로그기록을 이용하여 침입자 확인, 침입 방법, 침입자의 출발 호스트 등의 정보를 얻을 수 있다.

그리고 침입자들이 이용하는 웹 서버, imapd 등 서비스 취약점을 이용한 공격도 서버들이 기록하는 로그 기록을 분석할 수 있는 것이다. 여기에서 유닉스 기반의 시스템에서 제공되는 로그 정보 점검에 대해 예를 들어 설명하겠다.

■ 시스템 로그 파일
유닉스 시스템에는 다양한 로그 정보를 가진 파일과 관련 명령어들이 있다. 먼저 시스템 내의 로그 파일은 주로 /var/adm 디렉토리에 존재하게 되는데 필요에 따라 파일의 위치를 변경할 수 있다. /var/adm/ 파일들은 /var/adm/messages, /var/adm/utmp(x), /var/adm/wtmp(x), /var/adm/lastlog, /var/adm /logining, /var/adm/acct 등이 제공된다.

로그 파일 보유 정보
/var/adm/messages 콘솔 상에 있는 정보
/var/adm/utmp(x) 현재 로그인 한 사용자 정보
/var/adm/wtmp(x) 사용자의 로그인, 로그아웃, 시스템의 shutdown, start up
/var/adm/lastlog 사용자의 최근 로그인 관련 정보
/var/adm/acct 사용자의 command 정보

유닉스의 기본 로그 파일들이 가지고 있는 정보를 살펴보면 다음과 같다. /var/adm/wtmp(x)는 시스템 사용자의 접속 정보를 알 수가 있는 파일이다. 이는 last 명령어를 이용하여 정보를 볼 수 있는데 그 예는 다음과 같다.

userone ftp dialup77.xxx.xxx.xxx Sat Jun 27 00:43 - 01:43 (01:00)
userone ttyp1 dialup77.xxx.xxx.xxx Sat Jun 27 00:36 - 00:42 (00:06)
userone ftp xxx.xxx.147.46 Fri Jun 26 14:13 - 14:14 (00:00)
userone ttyp4 xxx.xxx.147.46 Fri Jun 26 14:11 - 14:12 (00:00)
quest0 ttyp4 xxx.xxx.147.46 Fri Jun 26 12:15 - 12:45 (00:29)
userone ttyp0 xxx.xxx.147.46 Mon Jun 22 17:25 - 17:25 (00:00)
hykim ttyp2 xxx.xxx.203.234 Mon Jun 22 17:24 - 17:25 (00:00)

위의 경우 userone은 평소 xxx.xxx.147.46 네트워크에서 접근을 하는데 비해 비정상적인 시간대에 dialup77.xxx.xxx.xxx 호스트에서 접근한 사실을 알 수가 있다. 이는 userone의 비밀번호가 누출이 되어 이상한 호스트에서 접근한 것을 알 수가 있는 것이다.

syslog 데몬을 이용하여 시스템 접속 오류 등에 대한 로그를 설정하였을 경우 messages 파일을 점검함으로써 불법적인 접근 시도가 있었는지도 살펴볼 수 있다. 이 역시 시스템 사용사으이 오류를 포함한 외부로부터의 불법적인 접근 등을 검사할 수 있다.

Jun 22 00:51:39 ns named[253]: starting. named 4.9.6-REL Tue Mar 31 13:41:12 EST 1998^lewt@xxx.xxx.com:/usr/src/redhat/BUILD/bind-4.9.6/named
Jun 22 01:01:37 ns named[253]: starting. named 4.9.6-REL Tue Mar 31 13:41:12 EST
1998^lewt@xxx.xxx.com:/usr/src/redhat/BUILD/bind-4.9.6/named
Jun 23 14:20:54 ns named[5334]: starting. named 4.9.6-REL Tue Mar 31 13:41:12 EST 1998^lewt@xxx.xxx.com:/usr/src/redhat/BUILD/bind-4.9.6/named

위의 경우는 외부로부터 named 버그를 이용하여 시스템에 침입하기 위한 침입자에 의해 named 데몬이 재시동되는 것을 알 수 있다. 이와 같이 다양한 로그 정보들을 검토함으로써 외부로부터의 불법적인 접근 시도 또는 접근 사실을 알 수 있다.

■ 주요 서버의 로그 정보 분석

- 웹 서버의 로그 정보 분석
관리자는 웹 서버의 로그 파일인 Access log나 error log 파일을 점검함으로써 외부 침입 자가 시스템 내의 중요 파일을 가져갔는지 알아보아야 한다. 주로 access_log, error_log 등은 /var/adm/httpd/logs와 같은 디렉토리에 존재하며, 이는 httpd 설치 시 사용자에 따라 설정할 수 있다. 다음은 xxx.xxx.com 으로부터 http 서버 phf 버그를 이용하여 패스워드 파일을 가져간 예이다.

xxx.xxx.com - - [16/Jun/1998:10:38:02 +0900] "GET /cgi-bin/phf?Qname=root%0Acat%20/etc/passwd HTTP/1.1" 200 114873

- IMAPD, POPD 로그 정보 분석
다음은 최근 개인 전자우편 관련하여 많이 사용하고 있는 Imapd(Popd)를 이용하는 방법이다. 이 방법은 데몬에 많은 데이터를 보내 버퍼오버플로우를 발생시켜 새로운 쉘(Shell)을 실행하는 방법으로써 /var/adm/messages 파일에서 알 수 있다.

다음 사례는 xxx.xxx.198.78 호스트에서 시스템의 Imapd로 접근한 내용을 보여주고 있다.

Jun 9 09:10:47 ns imapd[2662]: command stream end of file, while reading line user=??? host=xxx.xxx.198.78
Jun 9 09:10:56 ns imapd[2664]: command stream end of file, while reading line user=??? host=xxx.xxx.198.78

아래 표에서는 위에서 언급한 해킹 방법들로 해커들이 공격했을 경우에 어떠한 시스템 로그나 서버 로그를 점검해야 하는지를 요약해 놓았다.

해킹 방법 utmp
wtmp
access_log messages news
log
su
log
secure
log
spooler
log
syslog 비고
SPAM relay






O

popd

O


O



imapd

O


O



named

O






innd


O


O


identd

O






phf/php 등 CGI
O







portscan







모니터링
mscan

O






su 시도

O

O




원격 login 시도
O

O


O



원격 ftp 시도
O

O


O



서비스 거부







모니터링

2.2 공격자 관점에서의 분석
시스템 관리자 관점에서 분석한 침해사고의 시스템 점검을 통해 얻어지는 결과물에 대해서도 얻을 것이 많지만 경험이 많은 침입자의 경우 일반적으로 로그들은 삭제하고 가는 일이 많기 때문에 해커의 관점에서 시스템 침입시 하는 행동들을 예측하고 그 흔적을 알아내어 시스템이 남기는 정상적인 로그 이외의 해킹 흔적들을 찾아야 한다.

■ 트로이 목마(trojan horse)와 백도어 프로그램 점검
백도어 프로그램이란 일명 뒷구멍이라고 해서 해커들이 임의의 시스템을 해킹한 후 해킹한 시스템에 흔적 없이 다시 들어오려할 때 주로 사용한다. 해커들이 설치하는 프로그램은 원격 접근을 위한 백도어 프로그램 뿐 아니라 내부 사용 흔적을 감추기 위해서, 또는 일반 사용자가 쉽게 관리자(root)가 되기 위해서 기존 프로그램과 이름은 동일하지만 프로그램 내부동작은 침입자의 의도를 만족하는 기능을 갖게 된다.

다음은 실제 해킹을 당한 피해 시스템을 점검하면서 발견된 사례를 보도록 하자.

- .rhosts, /etc/hosts.equiv 백도어 프로그램
[Test: /]ls -ld /etc/hosts/equiv
-rw-r--r-- 1 root 16 Jan 18 1995 /etc/hosts.equiv
==================================================
[Test: /]find / -name, .rhosts -print
/var/spool/uucppublic/.rhosts
/.rhosts


- 백도어로 이용된 서버데몬(inetd 이용)
</etc/service 파일>
................ 생략
ftp 21/tcp
open 22/tcp open
telnet 23/tcp
smtp 25/tcp mail
t................ 생략
</etc/inetd.conf 파일>
#pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d
pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
#imap stream tcp nowait root /usr/sbin/tcpd imapd
................ 생략
open streamtcp nowaitroot /usr/sbin/tcpd /bin/bash
#finger streamtcp nowait root /usr/sbin/tcpd in.fingerd

- 시스템 분석 시 발겨된 백도어 프로그램 구성 사례
해커들은 백도어 프로그램이 숨겨야 할 정보들을 다음과 같은 구성 파일을 만들어 저장하기도 한다. 물론 이 구성 파일은 관리자나 사용자가 찾기 어려운 위치에 만든다.

[Test: /]ls -l /dev/ttypq
total 136
drwxrwxr-x 2 500 500 512 Jun 25 04:23 ./
drwxrwxr-x 4 root other 512 Jul 7 20:18 ../
-rwxr-xr-x 1 500 500 7809 Jun 25 04:23 .linsniffer*
-rw-r--r-- 1 500 500 393 Jun 25 04:23 ls.
-rw-r--r-- 1 500 500 446 Jun 25 04:23 netstat.
-rw-r--r-- 1 500 500 116 Jun 25 04:23 ps.
-rw-r--r-- 1 500 500 33 Jun 25 04:23 syslog.
-rw-r--r-- 1 500 500 11544 Jun 25 04:23 tcp.log

- ps 명령에서 감추고 싶은 파일들을 등록
[Test: /]more ps.
2 .linsniffer
2 pepsi
2 smurf

- 발견된 트로이 목마 쉘(Trojaned Shell)백도어
rc 파일이나 .cshrc, .profile 파일에 백도어용 코드를 삽입하고, 쉘을 숨겨놓는다.

.............................. 생략
rm -f /dev/fb
ln -s $fbdev /dev/fb
fi
fi

#echo 'ellrewa:*:1000:1::/:/bin/sh' >> /etc/passwd
#echo 'ellrewa:::::: ' >> /etc/shadow

- /etc 디렉토리에 위치한 쉘
[Test: /]ls -ld /etc/csh
-r-xr-xr-x 1 root other 89564 5?y 16@O 23:04 csh
[Test: /]ls -ld /bin/sh
-r-xr-xr-x 3 bin root 89564 19963b 5?y 3@O /bin/sh

■ 백도어 디렉토리 점검
해커들은 자신이 공격한 시스템에 백도어를 유지하거나 새로운 공격을 시도하기 위하여 일반적인 방법으로는 보이지 않는 디렉토리를 생성한다. 숨겨져 있는 디렉토리를 찾이 위해서는 우선 해커들의 손이 닿지 않은 깨끗한 "ls" 프로그램이 필요하다. 숨겨져 있는 디렉토리는 스페이스 문자나 탭키, ... 등 특수키의 혼용으로 일반적인 "ls" 명령으로는 잘 보이지가 않는다.

전체 파일 시스템에 대하여 find 명령을 이용한 스크립트를 작성하여 백도어 디렉토리를 찾는다. 주로 파일 개수가 아주 많거나 사용자가 자주 이용하지 않는 위치에 백도어 디렉토리가 존재한다.
[Test: /]ls /var/spool/at/spool/.h/
exploits pen regs.h~ ts2
ipw.c reg.tgz screen ts2.c
ircbnc.c regq.h~ screen-3.7.4.tar.gz tt
login regr.h~ ssh-1.2.20 web

■ 각종 서버 원격 취약점 점검
호스트에 서버(데몬)로 인하여 해커들은 침입의 발판되므로 모든 서버들에 대하여 해커들의 원격 침입이 있었는지 알기 위해 관리자는 취약성 여부를 확인한 후 해킹 가능성을 추측할 수 있다. 시스템의 messages 로그는 주요 서버들의 접근 흔적을 따로 유지하고 있다.

Jun 27 20:49:29 ns in.telnetd[12918]: connect from xxx.xxx.50.76
Jun 15 03:39:28 ns imapd[14020]: connect from xxx.xxx.94.85
Jun 15 10:15:07 ns in.ftpd[14169]: connect from xxx.xxx.250.76

- <popd/imapd>
Dec 5 11:57:50 www ipop3d[933]: connect from xxx.xxx.124.104
Dev 5 11:57:54 www ipop3d[934]: connect from xxx.xxx.124.104
======================================================================
Jun 22 10:03:07 ns imapd[447]: command from end of file, while reading line user=??? host=dialup187-2-45.xxx.xxx.xxx
Jun 15 15:10:40 ns imapd[14943]: Login failure
user=^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P
^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^
P^P host=irv-ca48-32.xxx.xxx.xxx


- <statd>
May 9 07:08:14 hosim statd[191]: attempt to create "/var/statmon/sm//../../../../
./../../../../../../../../../..//../../../../../../../../../../../../../../../../../../../../../../../../../../tmp/.nfs09 D H $ $ $ $
O * * * * # # P * c 6 )
# # ; # XbinXsh firdwr "


- <httpd>
xxx.xxx.xxx.ter.net - - [27/Mar/1998:06:12:08 +0900] "GET /cgi-bin/phf?Qalias=x%0a /bin/cat%20/etc/passwd HTTP/1.0" 200 7360
ppp9.xxx.xxx.xxx - - [04/May/1998:04:17:38 +0900] "GET /cgi-bin/phf?Qalias=x%0a
/bin/cat%20/etc/shadow HTTP/1.0" 200 92
mahler.xxx.xxx.xxx - - [07/Jun/1998:21:55:11 +0900] "POST /cgi-bin/phf?Qname=x%0
/bin/sh+-s%0a HTTP/1.0" 200 175
m06-024.xxx.xxx.xxx - - [08?Jun/1998:09:18:14 +0900] "POST /cgi-bin/phf?Qname=x%0a
/bin/sh+-s%0a HTTP/1.0" 200 82

"Security" 카테고리의 다른 글
  • Foundstone Free Tools (0)2009/01/21
  • Unix/Linux 해킹 피해 시스템 분석 절차 (0)2007/07/06
  • 원격 네트워크 로그인의 중앙화와 보안 (0)2007/05/10
  • SQL Injection Attacks by Example (0)2007/04/30
  • 해킹 관련 용어 II (0)2007/01/12
2007/07/06 17:50 2007/07/06 17:50
Posted by webdizen
Tags hacking, Linux, log, Unix, 로그, 시스템 공격, 시스템 분석, 해킹
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/3064

Leave your greetings.

[로그인][오픈아이디란?]

Programming/UNIX/Linux C2007/05/14 17:07

library 의 사용

이번기사는 유닉스 시스템 상에서 라이브러리를 만들고 사용하는 방법에 대한 내용을 담고 있습니다. 솔라리스와 리눅스 상에서 테스트되었으며, 정적라이브러리, 공유라이브러리, 동적 라이브러리를 제작하고 이를 프로그래밍에 응용하는 방법도 제시하고 있습니다.


1절. 소개
2절. Library 이야기
2.1절. 라이브러리란 무엇인가
2.2절. 라이브러리의 종류
2.2.1절. 왜 정적라이브러리의 사용을 지양하는가
3절. 라이브러리 만들고 사용하기
3.1절. 라이브러리화 할 코드
3.2절. 정적라이브러리 제작
3.3절. 공유라이브러리 제작 / 사용
3.4절. 동적라이브러리의 사용
3.5절. 동적라이브러리를 사용하여 프로그램의 확장성과 유연성을 높이기
3.5.1절. 동적라이브러리를 이용한 예제
4절. 결론

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

1절. 소개
이 문서는 library 의 사용방법에 대한 내용을 담고 있다. 왜 라이브러리가 필요한지, 라이브러리는 어떤 종류가 있으며, 어떻게 작성할수 있는지, 그리고 어떻게 사용하는지에 대해서 얘기하도록 할것이다. 그리고 중간중간에 이해를 돕기 위한 실제 코딩역시 들어갈 것이다.

라이브러리에 대한 이러저러한 세부적인 내용까지 다루진 않을것이다. 좀더 이론적인 내용을 필요로 한다면 Program Library HOWTO 를 참고하기 바란다. 이 문서에서는 라이브러리를 만들고 활용하는 면에 중점을 둘것이다. 그러므로 위의 문서는 이문서를 읽기전에 대충이라도 한번 읽어보도록 한다.

정적 라이브러리와 공유라이브러리는 일반적인 내용임으로 간단한 설명과 일반적인 예제를 드는 정도로 넘어갈 것이다. 그러나 동적라이브러리에 대해서는 몇가지 다루어야할 이슈들이 있음으로 다른 것들에 비해서 좀더 비중있게 다루게 될것이다.


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

2절. Library 이야기
2.1절. 라이브러리란 무엇인가
라이브러리란 특정한 코드(함수 혹은 클래스)를 포함하고 있는 컴파일된 파일이다. 이러한 라이브러리를 만드는 이유는 자주 사용되는 특정한 기능을 main 함수에서 분리시켜 놓음으로써, 프로그램을 유지, 디버깅을 쉽게하고 컴파일 시간을 좀더 빠르게 할수 있기 때문이다.

만약 라이브러리를 만들지 않고 모든 함수를 main 에 집어 넣는다면, 수정할때 마다 main 코드를 수정해야 하고 다시 컴파일 해야 할것이다. 당연히 수정하기도 어렵고 컴파일에도 많은 시간이 걸린다.

반면 라이브러리화 해두면 우리는 해당 라이브러리만 다시 컴파일 시켜서 main 함수와 링크 시켜주면 된다. 시간도 아낄뿐더러 수정하기도 매우 쉽다.


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

2.2절. 라이브러리의 종류
라이브러리에도 그 쓰임새에 따라서 여러가지 종류가 있다(크게 3가지). 가장 흔하게 쓰일수 있는 "정적라이브러리"와 "공유라이브러리", "동적라이브러리" 가 있다.

이들 라이브러리가 서로 구분되어지는 특징은 적재 시간이 될것이다.


정적라이브러리
정적라이브러리는 object file(.o로 끝나는) 의 단순한 모음이다. 정적라이브러린느 보통 .a 의 확장자를 가진다. 간단히 사용할수 있다. 컴파일시 적재되므로 유연성이 떨어진다. 최근에는 정적라이브러리는 지양되고 있는 추세이다. 컴파일시 적재되므로 아무래도 바이너리크기가 약간 커지는 문제가 있을것이다.

공유라이브러리
공유라이브러리는 프로그램이 시작될때 적재된다. 만약 하나의 프로그램이 실행되어서 공유라이브러리를 사용했다면, 그뒤에 공유라이브러리를 사용하는 모든 프로그램은 자동적으로 만들어져 있는 공유라이브러리를 사용하게 된다. 그럼으로써 우리는 좀더 유연한 프로그램을 만들수 잇게 된다.

정적라이브러리와 달리 라이브러리가 컴파일시 적재되지 않으므로 프로그램의 사이즈 자체는 작아지지만 이론상으로 봤을때, 라이브러리를 적재하는 시간이 필요할것이므로 정적라이브러리를 사용한 프로그램보다는 1-5% 정도 느려질수 있다. 하지만 보통은 이러한 느림을 느낄수는 없을것이다.

동적라이브러리
공유라이브러리가 프로그램이 시작될때 적재되는 반면 이것은 프로그램시작중 특정한때에 적재되는 라이브러리이다. 플러그인 모듈등을 구현할때 적합하다. 설정파일등에 읽어들인 라이브러리를 등록시키고 원하는 라이브러리를 실행시키게 하는등의 매우 유연하게 작동하는 프로그램을 만들고자 할때 유용하다.




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

2.2.1절. 왜 정적라이브러리의 사용을 지양하는가
예전에 libz 라는 라이브러리에 보안 문제가 생겨서 한창 시끄러웠던적이 있다. libz 라이브러리는 각종 서버프로그램에 매우 널리 사용되는 라이브러리였는데, 실제 문제가 되었던 이유는 많은 libz 를 사용하는 프로그램들이 "정적라이브러리" 형식으로 라이브러리를 사용했기 때문에, 버그픽스(bug fix)를 위해서는 문제가 되는 libz 를 사용하는 프로그램들을 다시 컴파일 시켜야 했기 때문이다. 한마디로 버그픽스 자체가 어려웠던게 큰 문제였었다. 도대체 이 프로그램들이 libz 를 사용하고 있는지 그렇지 않은지를 완전하게 알기도 힘들뿐더러, 언제 그많은 프로그램을 다시 컴파일 한단 말인가.

만약 libz 를 정적으로 사용하지 않고 "공유라이브러리" 형태로 사용한다면 bug fix 가 훨씬 쉬웠을것이다. 왜냐면 libz 공유라이브러리는 하나만 있을 것이므로 이것만 업그레이드 시켜주면 되기 때문이다.

아뭏든 이렇게 유연성이 지나치게 떨어진다는 측면이 정적라이브러리를 사용하지 않는 가장 큰 이유가 될것이다. 프로그램들의 덩치가 커지는 문제는 유연성 문제에 비하면 그리큰문제가 되지는 않을것이다.


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

3절. 라이브러리 만들고 사용하기
이번장에서는 실제로 라이브러리를 만들고 사용하는 방법에 대해서 각 라이브러리 종류별로 알아볼 것이다.


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

3.1절. 라이브러리화 할 코드
라이브러리의 이름은 libmysum 이 될것이며, 여기에는 2개의 함수가 들어갈 것이다. 하나는 덧셈을 할 함수로 "ysum" 또 하나는 뺄셈을 위한 함수로 "ydiff" 으로 할것이다. 이 라이브러리를 만들기 위해서 mysum.h 와 mysum.c 2개의 파일이 만들어질것이다.





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

3.2절. 정적라이브러리 제작
정적라이브러리는 위에서 말했듯이 단순히 오브젝트(.o)들의 모임이다. 오브젝트를 만든다음에 ar 이라는 명령을 이용해서 라이브러리 아카이브를 만들면 된다.

[root@localhost test]# gcc -c mysum.c
[root@localhost test]# ar rc libmysum.a mysum.o
                       

아주아주 간단하다. 단지 ar 에 몇가지 옵션만을 이용해서 libmysum 이란 라이 브러리를 만들었다. 'r' 은 libmysum.a 라는 라이브러리 아카이브에 새로운 오브젝트를 추가할것이라는 옵션이다. 'c' 는 아카이브가 존재하지 않을경우 생성하라는 옵션이다.

이제 라이브러리가 실제로 사용가능한지 테스트해보도록 하자.

예제 : print_sum.c




위의 프로그램을 컴파일 하기 위해서는 라이브러리의 위치와 어떤 라이브러리를 사용할것인지를 알려줘야 한다. 라이브러리의 위치는 '-L' 옵션을 이용해서 알려줄수 있으며, '-l' 옵션을 이용해서 어떤 라이브러리를 사용할것인지를 알려줄수 있다. -l 뒤에 사용될 라이브러리 이름은 라이브러리의 이름에서 "lib"와 확장자 "a"를 제외한 나머지 이름이다. 즉 libmysum.a 를 사용할 것이라면 "-lmysum" 이 될것이다.
[root@localhost test]# gcc -o print_sum print_num.c -L./ -lmysum
                       

만약 우리가 사용할 라이브러리가 표준 라이브러리 디렉토리경로에 있다면 -L 을 사용하지 않아도 된다. 표준라이브러리 디렉토리 경로는 /etc/ld.so.conf 에 명시되어 있다.

정적라이브러리 상태로 컴파일한 프로그램의 경우 컴파일시에 라이브러리가 포함되므로 라이브러리를 함께 배포할 필요는 없다.


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

3.3절. 공유라이브러리 제작 / 사용
print_sum.c 가 컴파일되기 위해서 사용할 라이브러리 형태가 정적라이브러리에서 공유라이브러리로 바뀌였다고 해서 print_sum.c 의 코드가 변경되는건 아니다. 컴파일 방법역시 동일하며 단지 라이브러리 제작방법에 있어서만 차이가 날뿐이다.

이제 위의 mysum.c 를 공유라이브러리 형태로 만들어보자. 공유라이브러리는 보통 .so 의 확장자를 가진다. [root@localhost test]# gcc -fPIC -c mysum.c
[root@localhost test]# gcc -shared -W1,-soname,libmysutff.so.1 -o libmysum.so.1.0.1 mysum.o
[root@localhost test]# cp libmysum.so.1.0.1 /usr/local/lib
[root@localhost test]# ln -s /usr/local/lib/libmysum.so.1.0.1 /usr/local/lib/libmysum.so
                       

우선 mysum.c 를 -fPIC 옵션을 주어서 오브젝트 파일을 만들고, 다시 gcc 를 이용해서 공유라이브러리를 제작한다. 만들어진 라이브러리를 적당한 위치로 옮기고 나서 ln 을 이용해서 컴파일러에서 인식할수 있는 이름으로 심볼릭 링크를 걸어준다.

컴파일 방법은 정적라이브러리를 이용한 코드의 컴파일 방법과 동일하다.
[root@coco test]# gcc -o print_sum print_sum.c -L/usr/local/lib -lmysum
                       



공유라이브러리는 실행시에 라이브러리를 적재함으로 프로그램을 배포할때는 공유라이브러리도 함께 배포되어야 한다. 그렇지 않을경우 다음과 같이 공유라이브러리를 찾을수 없다는 메시지를 출력하면서 프로그램 실행이 중단될 것이다.
[root@coco library]# ./print_sum
./print_sum: error while loading shared libraries: libmysub.so: cannot open shared object file: No such file or directory
                       

위와 같은 오류메시지를 발견했다면 libmysub.so 가 시스템에 존재하는지 확인해 보자. 만약 존재하는데도 위와 같은 오류가 발생한다면 이는 LD_LIBRARY_PATH 나 /etc/ld.so.conf 에 라이브러리 패스가 지정되어 있지 않을 경우이다. 이럴때는 LD_LIBRARY_PATH 환경변수에 libmysub.so 가 있는 디렉토리를 명시해주거나, /etc/ld.so.conf 에 디렉토리를 추가시켜주면 된다.

만약 libmysub.so 가 /usr/my/lib 에 복사되어 있고 환경변수를 통해서 라이브러리의 위치를 알려주고자 할때는 아래와 같이 하면된다.
[root@localhost test]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/my/lib
                       

그렇지 않고 ld.so.conf 파일을 변경하길 원한다면(이럴경우 관리자 권한을 가지고 있어야 할것이다) ld.so.conf 에 라이브러리 디렉토리를 추가하고 ldconfig 를 한번 실행시켜주면 된다.
[root@localhost test]# cat /usr/my/lib >> /etc/ld.so.conf
[root@localhost test]# ldconfig
                       

ldconfig 를 실행시키게 되면 /etc/ld.so.conf 의 파일을 참조하여서 /etc/ld.so.cache 파일이 만들어지고, 프로그램은 ld.so.cache 의 디렉토리 경로에서 해당 라이브러리가 있는지 찾게 된다.


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

3.4절. 동적라이브러리의 사용
동적라이브러리라고 해서 동적라이브러리를 만들기 위한 어떤 특별한 방법이 있는것은 아니다. 일반 공유라이브러리를 그대로 쓰며, 단지 실행시간에 동적라이브러리를 호출하기 위한 방법상의 차이만 존재할 뿐이다.

정적/공유 라이브러리가 라이브러리의 생성방법과 컴파일방법에 약간의 차이만 있고 코드는 동일하게 사용되었던것과는 달리 동적라이브러리는 코드자체에 차이가 있다. 그럴수밖에 없는게, 동적라이브러리는 프로그램이 샐행되는 중에 특정한 시점에서 부르고 싶을때 라이브러리를 적재해야 하므로, 라이브러리를 적재하고, 사용하고 해제(free) 하기 위한 코드를 생성해야 하기 때문이다.

linux 에서는 이러한 라이브러리를 호출하기 위한 아래와 같은 함수들을 제공한다. 아래의 함수들은 solaris 에서 동일하게 사용될수 있다.


dlopen 은 동적라이브러리를 적재하기 위해서 사용된다. 첫번째 아규먼트인 filename 은 /usr/my/lib/libmysum.so 와 같이 적재하기 원하는 라이브러리의 이름이다. 만약 적재시킬 라이브러리의 이름이 절대경로로 지정되어 있지 않을경우에는 LD_LIBRARY_PATH 에 등록된 디렉토리에서 찾고, 여기에서도 찾지 못할경우 /etc/ld.so.cache 에 등록된 디렉토리 리스트에서 찾게 된다. dlopen 이 성공적으로 호출되면 해당 라이브러리에 대한 handle 값을 넘겨 준다. flag 는 RTLD_LAZY와 RTLD_NOW 중 하나를 정의할수 있다. RTLD_LAZY는 라이브러리의 코드가 실행시간에 정의되지 않은 심볼을 해결하며, RTLD_NOW 는 dlopen 의 실행이 끝나기전에(return 전에) 라이브러리에 정의되지 않은 심볼을 해결한다.

dlerror 는 dl 관련함수들이 제대로 작동을 수행하지 않았을경우 에러메시지를 되돌려준다. dleooro(), dlsym(), dlclose(), dlopen()중 마지막 호출된 함수의 에러메시지를 되돌려준다.

dlsym 은 dlopen 을 통해서 열린라이브러리를 사용할수 있도록 심볼값을 찾아준다. 심볼이라고 하면 좀 애매한데, 심볼값은 즉 열린라이브러리에서 여러분이 실제로 호출할 함수의이름이라고 생각하면 된다. handle 는 dlopen 에 의해서 반환된 값이다. symbol 은 열린라이브러리에서 여러분이 실제로 부르게될 함수의 이름이다. dlsym 의 리턴값은 dlopen 으로 열린 라이브러리의 호출함수를 가르키게 된다. 리턴값을 보면 void * 형으로 되어 있는데, void 형을 사용하지 말고 호출함수가 리턴하는 형을 직접명시하도록 하자. 이렇게 함으로써 나중에 프로그램을 유지보수가 좀더 수월해진다.


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

3.5절. 동적라이브러리를 사용하여 프로그램의 확장성과 유연성을 높이기
동적라이브러리는 실행시간에 필요한 라이브러리를 호출할수 있음으로 조금만(사실은 아주 많이겠지만 T.T) 신경쓴다면 매우 확장성높고 유연한 프로그램을 만들수 있다.

동적라이브러리의 가장 대표적인 예가 아마도 Plug-in 이 아닐까 싶다. 만약에 모질라 브라우저가 plug-in 을 지원하지 않는 다면 우리는 새로운 기능들 이 추가될때 마다 브라우저를 다시 코딩하고 컴파일하는 수고를 해야할것이다. 그러나 동적라이브러리를 사용하면 브라우저를 다시 코딩하고 컴파일 할필요 없이, 해당 기능을 지원하는 라이브러리 파일만 받아서 특정 디렉토리에 설치하기만 하면 될것이다. 물론 동적라이브러리를 사용하기만 한다고 해서 이러한 기능이 바로 구현되는 건 아니다. Plug-in 의 효율적인 구성을 위한 표준화된 API를 제공하고 여기에 맞게 Plug-in 용 라이브러리를 제작해야만 할것이다.

우리가 지금까지 얘로든 프로그램을 보면 현재 '+', '-' 연산을 지원하고 있는데, 만약 'x', '/' 연산을 지원하는 라이브러리가 만들어졌다면, 우리는 프로그램의 코딩을 다시해야만 할것이다. 이번에는 동적라이브러리를 이용해서 plug-in 방식의 확장이 가능하도록 프로그램을 다시 만들어 보도록 할것이다.


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

3.5.1절. 동적라이브러리를 이용한 예제
동적라이브러리를 이용해서 main 프로그램의 재코딩 없이 추가되는 새로운 기능을 추가시키기 위해서는 통일된 인터페이스를 지니는 특정한 형식을 가지도록 라이브러리가 작성되어야 하며, 설정파일을 통하여서 어떤 라이브러리가 불리어져야 하는지에 대한 정보를 읽어들일수 있어야 한다. 그래서 어떤 기능을 추가시키고자 한다면 특정 형식에 맞도록 라이브러리를 제작하고, 설정파일을 변경하는 정도로 만들어진 새로운 라이브러리의 기능을 이용할수 있어야 한다.

설정파일은 다음과 같은 형식으로 만들어진다. 설정파일의 이름은 plugin.cfg 라고 정했다. +,ysum,libmysum.so
-,ydiff,libmysum.so
                               

'-' 연산에대해서는 libmysum.so 라이브러리를 호출하며, ydiff 함수를 사용한다. '=' 연산에 대해서는 libmysum.so 라이브러리를 호출하고 ysum 함수를 사용한다는 뜻이다. 설정파일의 이름은 plugin.cfg 로 하기로 하겠다.

다음은 동적라이브러리로 만들어진 print_sum 의 새로운 버젼이다.

예제 : print_sum_dl.c

                               

위의 예제 프로그램은 다음과 같이 컴파일되어야 한다. 라이브러리 파일의 위치는 /usr/my/lib 아래에 있는것으로 하며, 라이브러리 찾기 경로에 등록되어 있다고 가정하겠다.
[root@localhost test]# gcc -o print_sum_dl print_sum_dl.c -ldl
                               

이 프로그램을 실행하면 사용자의 입력을 기다리는 "> "가 뜨게 되고, 여기에 계산하기 원하는 값을 입력하면 된다. 현재는 '+'와 '-' 연산만을 지원하며, 연산자와 피연산자들 간에 간격이 없어야 한다. 다음은 실행결과 화면이다.  
[root@localhost test]# ./print_sum_dl
> 99+99
my operator is      : +
my call function is : ysum
99 + 99 = 198
[root@localhost test]#
                               

사용자가 프로그램을 실행하면 프로그램은 사용자의 입력을 받아들이고 sscanf 를 이용해서 연산자와 피연산자를 구분하게 된다. 그리고 피연산자를 값으로 하여, 설정파일에 설정된 라이브러리를 불러들이고(dlopen) 해당 함수를 가져와서(dlsym) 실행시키게 된다.

자 이렇게 해서 우리는 '+', '-' 연산이 가능한 프로그램을 하나 만들게 되었다. 그런데 A 라는 개발자가 '*','/' 연산도 있으면 좋겠다고 생각해서 아래와 같은 코드를 가지는 '*', '/' 연산을 위한 라이브러리를 제작하였다.

예제 : mymulti.h

                               

예제 : mymulti.c



A 라는 개발자는 이것을 다음과 같이 공유라이브러리 형태로 만들어서 간단한 라이브러리의 설명과 함께 email 로 전송했다.
[root@localhost test]# gcc -c -fPIC mymulti.c
[root@localhost test]# gcc -shared -W1,-soname,libmymulti.so.1 -o libmymulti.so.1.0.1 mymulti.o
                               



라이브러리를 받았으므로 새로운 라이브러리가 제대로 작동을 하는지 확인을 해보도록 하자. 우선 libmymulti.so.1.0.1 을 /usr/my/lib 로 복사하도록 하자. 그다음 설정파일에 다음과 같은 내용을 가지도록 변경 시키도록 하자.  
+,ysum,libmystuff.so
-,ydiff,libmystuff.so
*,ymulti,libmymulti.so.1.0.1
/,ydiv,libmymulti.so.1.0.1
                               

이제 print_sum_dl 을 실행시켜보자.
[root@localhost test]# ./print_sum_dl
> 10*10
my operator is      : *
my call function is : ymulti
10 * 10 = 100

[root@localhost test]# ./print_sum_dl
> 10/10
my operator is      : /
my call function is : ydiv
10 / 10 = 1
                               

print_sum_dl.c 의 원본파일의 아무런 수정없이 단지 설정파일만 변경시켜 줌으로써 기존의 print_sum_dl 에 "곱하기"와 "나누기"의 새로운 기능이 추가 되었다.

위에서도 말했듯이 이러한 Plug-in 비슷한 기능을 구현하기 위해서는 통일된 함수 API가 제공될수 있어야 한다.


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

4절. 결론
여기에 있는 내용중 동적라이브러리에 대한 내용은 솔라리스와 리눅스에서만 동일하게 사용할수 있다. Hp-Ux 혹은 윈도우에서는 사용가능하지 않는 방법이다. 이에 대한 몇가지 해법이 존재하는데, 이 내용은 나중에 시간이 되면 다루도록 하겠다. 어쨋든 솔라리스와 리눅스 상에서 코딩되고 윈도우 혹은 다른 유닉스로 포팅될 프로그램이 아니라면 위의 방법을 사용하는데 있어서 문제가 없을것이다.




출처 : http://joinc.co.kr/modules.php?name=new ··· 3Dnested
"UNIX/Linux C" 카테고리의 다른 글
  • file 정보(stat) 와 종류 알아내기 (0)2007/05/14
  • utmp 를 이용한 사용자 로그인정보 관리 (0)2007/05/14
  • library 의 사용 (0)2007/05/14
  • PIPE 응용 (0)2007/05/14
  • 데이타와 포인터 (0)2007/05/14
2007/05/14 17:07 2007/05/14 17:07
Posted by webdizen
Tags Library, Linux, Solaris, Unix
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2943

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 삼성
  • 시스템 분석
  • 캐시
  • 다트
  • 설치
  • 하드웨어 안정성
  • Multi-Rank
  • 부론고등학교
  • RAISERROR
  • Optimizer
  • 시스템 테이블
  • BladeServer
  • vibebs
  • 파일 종류
  • 파리
  • Designing
  • 인간
  • Office
  • 버전 관리
  • 컨디션

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08
  • 재밌네요~ 첫번째꺼는 요즘....
    Hybrid 2009

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.