videolan-server rpm package

Projects/Server 2007.04.01 22:12 Posted by soulfree >동네청년<
http://rpmforge.net/user/packages/videolan-server/

'Projects > Server' 카테고리의 다른 글

java 애플릿을 이용한 스트리밍서버  (0) 2007.04.02
Streaming Server under OpenSource  (0) 2007.04.02
videolan-server rpm package  (0) 2007.04.01
Streaming Server VLS user guide  (0) 2007.04.01
proftpd 로그파일  (0) 2007.03.25
TNC는 이거 없으면 안굴러가요...  (0) 2007.03.18

Streaming Server VLS user guide

Projects/Server 2007.04.01 16:46 Posted by soulfree >동네청년<
http://www.videolan.org/doc/vls-user-guide/en/vls-user-guide-en.html

'Projects > Server' 카테고리의 다른 글

Streaming Server under OpenSource  (0) 2007.04.02
videolan-server rpm package  (0) 2007.04.01
Streaming Server VLS user guide  (0) 2007.04.01
proftpd 로그파일  (0) 2007.03.25
TNC는 이거 없으면 안굴러가요...  (0) 2007.03.18
Apache 가상호스트 설정  (0) 2007.03.17

proftpd 로그파일

Projects/Server 2007.03.25 00:24 Posted by soulfree >동네청년<
var/log/xferlog 파일을 참조...

'Projects > Server' 카테고리의 다른 글

videolan-server rpm package  (0) 2007.04.01
Streaming Server VLS user guide  (0) 2007.04.01
proftpd 로그파일  (0) 2007.03.25
TNC는 이거 없으면 안굴러가요...  (0) 2007.03.18
Apache 가상호스트 설정  (0) 2007.03.17
[팁]아파치 가상 유저 호스트 설정하기  (1) 2007.03.16

TNC는 이거 없으면 안굴러가요...

Projects/Server 2007.03.18 01:39 Posted by soulfree >동네청년<

테터툴즈 블로그에 뜬 글...
트랙백이 뭐하는 건지 아직 감이 잘안오지만 트랙백을 걸고 퍼왔긴 한데...
분산 협업 프로그래밍을 연구하는 우리 연구실에서 생각해볼 아이템이 아닐까...

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

TNC는 초창기 부터 trac이라는 시스템을 사용했습니다. 처음에 너무나 생소해서(참고로 저는 개발자가 아니라 디자이너입니닷!) 정이 안가더니 사람이 하나 둘 늘어나고, 조직이 복잡해지면서 trac 의 ticket 시스템이 없었으면 어떻게 일을 했을까... 싶습니다.

trac의 티켓시스템은 어떤 업무가 발생하면 누구나 티켓을 발행할 수 있습니다. 발행된 티켓은 각 부서의 팀장에게로 가고, 팀장들은 해당 업무를 각 팀원들에게 적당히 분배합니다. 티켓을 받은 팀원은 티켓을 수행하겠다고 수락을 하거나 자신의 업무가 아니라고 판단되면 comment를 남기고 다시 팀장에게로 보냅니다. 티켓은 Subversion과 연동이 되어 해당 코드의 division 번호와 티켓번호의 연관성을 지어 줄수 있습니다. 관리하기가 한층 편하지요...

디자이너인 제가 trac과 subversion 시스템을 이해하기까지는 상당히 많은 시간이 걸렸습니다. 개발자도 아닌데 굳이 그런 시스템을 이해할 필요가 있을까 고민도 많았지만... 다른 개발자 분들과 협업을 하는 과정에서 정말 없으면 안되는 존재가 되어 버렸습니다. 협업뿐만 아니라 자신의 스케쥴관리에서도 너무나 효율적입니다. 거기다가 티켓이 하나씩 클로징 되어 빨간 줄이 그어지는것을 보는 재미가 쏠쏠합니다. ^^

사용자 삽입 이미지

최근에 제 티켓입니다.. 므핫핫... 티켓을 모두 처리해 버려 리스트가 없습니다. 이런 화면을 보는 것이 그리 쉽지많은 안다는것을 말씀드립니다. ㅋㅋ

.
.
.


 

사용자 삽입 이미지

티켓이 발행되거나 변화가 생기면 티켓과 관련된 사람들에게 이런내용으로 메일이 옵니다.

.
.
.

사용자 삽입 이미지

이렇게 많은 과정을 거쳐 하나의 티켓이 완료됩니다. 물론 간단하게 끝나는 티켓도 있습니다. ^^


 

'Projects > Server' 카테고리의 다른 글

Streaming Server VLS user guide  (0) 2007.04.01
proftpd 로그파일  (0) 2007.03.25
TNC는 이거 없으면 안굴러가요...  (0) 2007.03.18
Apache 가상호스트 설정  (0) 2007.03.17
[팁]아파치 가상 유저 호스트 설정하기  (1) 2007.03.16
제로보드 DB 설정 실패  (0) 2007.03.13
TAG Ticket, Trac

Apache 가상호스트 설정

Projects/Server 2007.03.17 14:17 Posted by soulfree >동네청년<

Apache 가상호스트 설정


kenu
2002-03-19 12:27오전

이 문서는 apache 서버에서 가상호스트를 사용해서 여러개의 도메인을 사용하도록 하는 방법을 설명합니다. 파일은 apache 의 conf 디렉토리에 있는 httpd.conf 파일만을 변경합니다. apache의 기본적인 설치는 잘 되어 있다고 가정하고 다른 도메인을 붙이는 법을 설명합니다. 또한 DNS 서버 설정에 관해서는 이 문서에서 설명하지 않겠습니다. 확장강좌는 tomcat 4.0.x 와 연동하는 강좌입니다.
강좌환경
OS:Solaris 2.8
Apache: 1.3.20
설치디렉토리: /usr/local/apache
 


주의할 점은 비단 아파치만 해당되는 것이 아닙니다만, 버전마다 환경설정하는 것이 차이가 있을 경우가 많기 때문에 가능하면 패키지에 포함된 Installation 문서를 표준으로 설치하시기 바랍니다.
 

Tomcat 과 연동하기 위해서는 DSO 모듈을 사용하는 mode 로 설치가 되어야 합니다. 1.3.22 버전부터는 이 모드로 설치가 되지만 1.3.21 이전 버전은 아래처럼 소스파일을 이용해서 설치를 해야됩니다. 가능하면 1.3.23 이후 버전을 다운받아서 설치하십시오. 아래 명령어를 skip 할 수 있으니까요. 아래 명령어는 unix 계열에서만 사용하는 명령어입니다. windows 의 경우 패키지에 포함된 문서를 보세요. \ 는 줄이 길어질 때 엔터를 쳐도 실행이 안되도록 하는 이음 문자입니다.
apache 컴파일 명령줄
./configure --prefix=/usr/local/apache \
            --enable-shared=max \
            --enable-rule=SHARED_CORE \
            --enable-module=so
 


conf 디렉토리에 있는 httpd.conf 파일을 열어서 아래 부분에 추가할 도메인과 그에 따른 부가적인 정보를 입력합니다.
설치경로
...
### Section 3: Virtual Hosts
#
# VirtualHost: If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at <URL:http://www.apache.org/docs/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.

#
# Use name-based virtual hosting.
#
NameVirtualHost *

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot /www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
    <VirtualHost *>
    ServerName kpanet.or.kr
    DocumentRoot /home/jakarta/kpanet402/webapps/ROOT
    ServerAlias kpanet.or.kr *.kpanet.or.kr
    </VirtualHost>

    <VirtualHost *>
    ServerName ycpa.or.kr
    DocumentRoot /home/vhost/ycpahome/ROOT
    ServerAlias ycpa.or.kr *.ycpa.or.kr
    </VirtualHost>

    <VirtualHost *>
    ServerName pharmsnet.com
    DocumentRoot /home/jakarta/pmstemp
    ServerAlias pharmsnet.com *.pharmsnet.com
    </VirtualHost>

Include /home/jakarta/kpanet402/conf/jk/mod_jk.conf
       


제가 사용하는 httpd.conf 파일의 일부입니다. httpd.conf 의 마지막 부분에 가상호스트 섹션이 있고, 이 부분에 여러개의 도메인을 세팅하면 됩니다. 위의 예에서는 kpanet.or.kr, ycpa.or.kr, pharmsnet.com 이렇게 3개의 도메인이 설정되어있습니다. 각각의 도메인마다 ROOT 디렉토리가 다르게 설정되어있습니다. 각각의 태그 안에 있는 DocumentRoot 의 값이 다름을 확인하실 수 있을 겁니다. 그리고 ServerAlias 는 2차 도메인을 포함합니다. 대표적인 것이 www.kpanet.or.kr 에서의 www 가 되겠죠. 모든 것을 통틀어 wildcard 문자인 * 으로 처리하도록 합니다. 2차 도메인마다 다르게 디렉토리를 지정하는 법은 설명하지 않겠습니다. 이에 관한 문서는 아래 링크에서 소개한 사이트를 찾아보시는 것이 더 나을 것이라 생각됩니다.
 

마지막줄의 Include 는 tomcat과 연동하는 모듈인 mod_jk.conf 파일의 경로를 적어놓은 것입니다. apache만으로 서비스할 경우에는 필요없습니다. 일단 이렇게 가상호스트 설정을 마쳤으면 /usr/local/apache/bin/apachectl restart 로 재시동합니다.
 

브라우저를 열어서 설정을 확인해보시기 바랍니다. 아래의 링크에서 더 자세한 정보를 찾아보시기 바랍니다.
 

관련 사이트
http://www.apache.org/docs/vhosts 
아파치 가상호스트 설정에 대한 공식문서
http://www.apache.kr.net/documents/vhost-story.html 
정관진님의 아파치 가상호스트 설정에 대한 한글문서
http://www.superuser.co.kr/apache/virtualhost/page01.htm
아파치를 활용한 가상호스트 설정법
http://www.0u4u.com/linux/apache8.htm
공유포유의 가상호스트 설정법
http://www.apache.kr.net
한국 아파치 유저 그룹
http://okjsp.pe.kr/lecture/lec01/vhost02.xml
Tomcat4의 가상호스트 설정

[팁]아파치 가상 유저 호스트 설정하기

Projects/Server 2007.03.16 22:30 Posted by soulfree >동네청년<
제목 : [팁]아파치 가상 유저 호스트 설정하기

작성자 : 김칠봉[닉: 산이] san2(at)linuxchannel.net
2000.04.11 : 1차 완료
2000.07.10 : 2차 보완
2000.09.28 : 3차 보완
대상자 : 리눅스/아파치 초급자(?)

*주)
에고~~~
여러차례에 걸쳐 내용을 수정했기 때문에,
이하 문서의 문맥상 간혹(?) "존칭어"를 생략했습니다.
양해해 주시길 바랍니다.
------------------------------------------------------------------

[목차]

1. 참고내용 및 관련 문서
2. 아파치 가상 유저 호스트란?(이게 뭡니까?)
3. 네임서버(BIND8)의 설정
4. 아파치에서 "가상 유저 호스트"를 지원하게 하려면?
  4-1. 확인 과정
  4-2. modr_rewrite 모듈 추가
5. 아파치 가상 호스트 설정(httpd.conf)
6. 조그마한 팁
7. 마치며



1. 참고내용 및 관련 문서(다 읽어보질 못했음)

- 아파치 제공 문서 - Module mod_rewrite URL Rewriting Engine :
  http://www.apache.org/docs/mod/mod_rewrite.html

- 아파치 제공 문서 - Rewriting Guide :
  http://www.apache.org/docs/misc/rewriteguide.html

- 아파치 제공 문서 - Dynamically configured mass virtual hosting :
  http://www.apache.org/docs/vhosts/mass.html

- 아파치 제공 문서 - Apache Server Frequently Asked Questions :
  http://www.apache.org/docs/misc/FAQ.html

- A Users Guide to URL Rewriting with the Apache Webserver :
  Ralf S. Engelschall <rse@apache.org>
  http://www.engelschall.com/pw/apache/rewriteguide/

- URL manipulation with Apache Forwarded :
  Ralf S. Engelschall, Christian Reiber
  http://www.heise.de/ix/artikel/E/9612149/



2. 아파치 가상 유저 호스트란?(이게 뭡니까?)

예를 들어, 리눅스 계정 ID가 "san2"이고 도메인이 "linux.ac.kr"이면
http://san2.linux.ac.kr 이 되도록 설정하는 것입니다.

즉,
리눅스 계정($USER)을 추가하면 자동적으로 그 계정이 호스트로 설정되어
아파치의 가상 호스트로 운영하는 것을 의미한다.

물론 수동으로 하나하나씩 막노동(?)으로 네임서버에 각각의 계정을 모두
등록하고 아파치 가상 호스트 섹션에 추가할 수 있지만
조금 비능률적이다.

때문에 네임서버를 조금 건드려 줘야하며(한번 만), 주로 웹호스팅 업체나
이런 서비스를 전문으로하는 업체에서 유용하게 쓰이는 방법이기도 하다.

*주)---------------------------------------------------------------
몇 개의 호스트만 관리하고 있고 각 계정을 굳지 호스트로 지정할 필요가
없다면 이 방법은 무용지물입니다.
--------------------------------------------------------------------


3. 네임서버(BIND8)의 설정

부트파일(named.conf)에서 정의한 Public Domain의 zone 파일이
"zone-linux.ac.kr"로 명시되어 있다면,(일반적으로 /var/named 디렉토리)
다음과 같이 편집합니다.

/var/named/zone-linux.ac.kr -----------------------------------------
@       IN      SOA     ns.linux.ac.kr. san2.linux.ac.kr.  (
                                      2000041005 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN      NS      ns.linux.ac.kr.
IN NS ns2.linux.ac.kr.
IN A 192.168.10.3
@       IN      HINFO   "x86 Pentium" "XXX Linux"
;
ns2 IN A 192.168.10.4
; 중간생략
;
; 제일 마지막 줄에 추가
*       IN      A       192.168.10.3
------------------------------------------------------------------------

이름기반 가상 호스트로 운영할 계획이라면,
더이상 www, mail, ns, 등등의 호스틀 추가할 필요는 없다.
반면,
각각의 서비스기능을 하는 호스트를 다른 IP 주소를 사용하면
A 레코드로 각각 다르게 설정해 줄 필요는 분명이 있다.
이점에서 각자 사용 목적에 맞게 네임서버를 설정하길 바랍니다.

앞의 설정에서 눈여겨 볼 설정은 와일드카드 문자(*)를 사용해서
모든(*) 호스트에 대해서 A 레코들로 192.168.10.3의 IP 주소를 지정해
주었다는 점이다.

@ IN A 192.168.10.3
;또는
* IN A 192.168.10.3
*.linux.ac.kr. IN A 192.168.10.3


그럼 어떤 현상(?)이 일어나는지 잠시 네임서버에 질의해 봅시다.
우선, 설정내용을 바꾸었으므로 2차 네임서버를 운영하고 있다면
Serial을 바꾸어줘야함을 잊어서는 안된다.

# ndc reload
#
# nslookup
Default Server:  linux.ac.kr
Address:  192.168.10.3

> linux.ac.kr

Name:    linux.ac.kr
Address:  192.168.10.3

> www.linux.ac.kr

Name:    www.linux.ac.kr
Address:  192.168.10.3

> mail.linux.ac.kr

Name:    mail.linux.ac.kr
Address:  192.168.10.3

이 번에는 무작위 아무 호스트(aabbcc)를 질의해 보자.

> aabbcc.linux.ac.kr

Name:    aabbcc.linux.ac.kr
Address:  192.168.10.3

> exit
#

즉, 네임서버에 와일드카드 문자(*)를 사용해서 모든 호스트를
192.168.10.3의 IP 주소로 지정해 버렸기 때문이다.

이 기능(?)을 이용해서 아파치에서 가상호스트로 지정하는 방법이다.
대충 짐작이 되었으리만 믿습니다.


4. 아파치에서 "가상 유저 호스트"를 지원하게 하려면?

아파치에서 가상 유저 호스트를 지원하게 하려면 아파치 모듈중에서
"mod_rewrite.c"가 필요하다.

4-1. 확인 과정

[경우1] 아파치를 RPM으로 설치했을 경우

아파치 설정 파일(httpd.conf)에
...
LoadModule rewrite_module     modules/mod_rewrite.so
...
AddModule mod_rewrite.c
...

부분이 있는지 확인하다.
일반적으로 rpm 패키지를 제작할 경우 이 모듈을 DSO 기반 모듈로 로딩
하도록 설정되어 있을 것입니다.


[경우2] 아파치를 소스로 직접 컴파일했을 경우

이 경우에는 손수 직접 확인해 줘야한다.
아파치 설치자가 DSO 기반 모듈로 설치했는지 아니면
"Compiled-in modules"으로 설치했는지 이미 알고 있을 것이다.
전자의 경우는 앞의 RPM으로 설치했을 경우와 같이 직접 설정파일을
확인해 본다.
후자의 경우는 다음과 같이 "httpd -l"과 같이 옵션으로 확인하다.

# httpd -l (또는 # /usr/local/apache/bin/httpd -l)
Compiled-in modules:
  http_core.c
  mod_env.c
  mod_log_config.c
  mod_mime.c
  mod_negotiation.c
  mod_status.c
  mod_include.c
  mod_autoindex.c
  mod_dir.c
  mod_cgi.c
  mod_asis.c
  mod_imap.c
  mod_actions.c
  mod_userdir.c
  mod_alias.c
  mod_rewrite.c <---------------확인사항
  mod_access.c
  mod_auth.c
  mod_setenvif.c
  mod_php3.c
#

*주)----------------------------------------------------------------
일반적으로 아파치를 소스로 직접 컴파일하여 설치했을 경우에는
특별한 옵션이 없는한 mod_rewrite 모듈은 추가되어 있지 않다.
--------------------------------------------------------------------

필자역시 기존의 소스디렉토리에서 다시 컴파일하여 추가해 줘야하는
단점이 있었다.

4-2. mod_rewrite 모듈 추가 방법

다음의 작업 과정은 현재 이 mod_rewrite.c이 추가되어 있지 않았다는
가정이다.

우선 현재의 아파치 서버를 종료한다.

# killall httpd
#

아파치 서버를 /usr/local/apache에 설치했다면
잠시 다른 이름으로 바꾸어 놓는다.

# cd /usr/local
# mv apache apache_old

전에 아파치를 컴파일 했던 소스 디렉토리가 /usr/local/src/apache_1.3.12
이라면 그곳으로 이동한다.
만약 새로 컴파일할 계획이라면 이하 같은 방법대로 한다.

필자는 전에 PHP를 서드파티 모듈을 추가했으므로 이번에도 똑 같이 해줘야
하는 또 하나의 숙제(?)가 남아 있다.
그러나 그 숙제는 숙제가 아니다.
소스 디렉토리에 config.status 파일을 이용하면 그만이다.

# pwd
/usr/local/apache_1.3.12
#
# cat config.status
------config.status ---------------------------------------------------
#!/bin/sh
##
##  config.status -- APACI auto-generated configuration restore script
##
##  Use this shell script to re-run the APACI configure script for
##  restoring your configuration. Additional parameters can be supplied.
##

./configure \
"--with-layout=Apache" \
"--prefix=/usr/local/apache" \
"--activate-module=src/modules/php4/libphp4.a" \
"$@"
-----------------------------------------------------------------------

전에 작업했던 내용이 이 파일(config.status)에 기록되어 있으므로 이 파일을
이용해서 PHP4 모듈도 함께 추가해 보자.

# make clean
#
# ./config.status --enable-module=rewrite
#

이때 주의해야 할점은 "--enable-module=mod_rewrite"가 아니라는 점이다.
"mod_"를 뺀 나머지 모듈이 그 모듈이름이다.

만약 처음으로 아파치를 컴파일할 계획이라면 다음과 같이
중간 단계에서 컴파일 옵션이 필요할 것이다.(PHP4 추가시 포함)

# ./configure \
--prefix=/usr/local/apache \
--activate-module=src/modules/php4/libphp4.a \
--enable-module=rewrite

"\" 문자는 적접 입력하는 문자가 아니고 즉 한줄에 계속 이어서 쓴다는 의미입니다.

앞의 예는 Compiled-in modules 형식이다.
만약 DSO 기반 모듈로 사용할 계획이라면, 최소한 다음과 같은 옵션이 필요하다.
(mod_rewrite 모듈만 DSO 방식으로 사용)

# ./configure \
--prefix=/usr/local/apache \
--activate-module=src/modules/php4/libphp4.a \
--enable-module=rewrite <--- 주의 꼭
--enable-shared=rewrite \

*주)----------------------------------------------------------------
--enable-shared=rewrite 옵션은 --enable-shared=so를 포함함.
--------------------------------------------------------------------

*주)----------------------------------------------------------------
DSO 기반 모듈은 Compiled-in modules 모듈보다 아파치 서버 시작시 20%,
실행속도가 5% 정도 느려진다고 아파치 관련 문서에 나와 있다.
--------------------------------------------------------------------

*참고)--------------------------------------------------------------
mod_rewrite 모듈을 DSO 방식으로 추가하는 기타 방법

기본적으로 mod_rewrite 모듈은 disable 되어 있다는 점에서
다음과 같은 방법이 가능하다.

1. APXS 유틸리티 사용
# apxs -i -a -c /any/path/to/src/modules/standard/mod_rewrite.c

2. --enable-module=all --enable-shared=rewrite
모든 모듈을 enable 시키고 mod_rewrite만 DSO 방식으로 추가

3. --enable-module=all --enable-shared=max
모든 모듈을 enable 시키고 httpd_core와 mod_so를 제외한 나머지
모듈(mod_rewrite가 포함됨)을 DSO 방식으로 추가

4. --enable-module=rewrite --enable-shared=max
mod_rewrite를 enable 시키고 나머지 enable된 모듈과 함께 DSO 방식으로 추가

5. --enable-shared=remain
아직 enable되어 있지 않은 mod_rewrite 모듈을 포함한 나머지 기본 enable
모듈을 enable시키고 httpd_core와 mod_so를 제외한 나머지 모듈(mod_rewrite
가 포함됨) 을 DSO 방식으로 추가

[--enabl/disable-shared=max 옵션]
바로 이전 옵션에서 enable 되어 있는 모듈에 대해서만 DSO 방식으로
enable/disable.

[--enable-shared=remain 옵션]
바로 이전 옵션에서 enable 되어 있지 않은 모듈을 enable 시키고 이 모듈에
대해서만 DSO 방식으로 enable.

[특별한 옵션이 없는 경우 기본 enable 모듈]
  http_core.c
  mod_env.c
  mod_log_config.c
  mod_mime.c
  mod_negotiation.c
  mod_status.c
  mod_include.c
  mod_autoindex.c
  mod_dir.c
  mod_cgi.c
  mod_asis.c
  mod_imap.c
  mod_actions.c
  mod_userdir.c
  mod_alias.c
  mod_access.c
  mod_auth.c
  mod_setenvif.c
*참고 끝) --------------------------------------------------------------

컴파일 옵션 설정이 끝났으면
컴파일과 설치를 다름과 같이 진행한다.

# make
#
# make install

/usr/local/apache 디렉토리에 새로 아파치가 설치되어 있을 것이다.
원하는 모듈이 추가되어 있는지 직접확인해 보자.

# cd /usr/local/apache/bin
# ./httpd -l
...
  mod_rewrite.c
...
#
원하는 모듈이 추가되어 있군요...

이번에는 전에 설정해 놓았던 설정파일(httpd.conf)을
다시 복사해 놓자.(같은 버전일 경우)

# cd /usr/local/apache/conf
#
# cp /usr/local/apache_old/conf/httpd.conf .
#

httpd.conf 파일이 덮어쓰기가 될것입니다.

*주)-----------------------------------------------------------------
아파치 버전 1.3.11과 1.3.12의 설정파일은
그 설정 내용이 조금씩 다르므로 절대로 덮어쓰는 일이 없도록 주의하기
바랍니다.
---------------------------------------------------------------------

만약 rewrite 모듈을 DSO 기반 모듈로 설치했다면
httpd.conf 파일에서

...
LoadModule rewrite_module ......
...
AddModule mod_rewrite.c
...

부분을 확인 및 빼먹지 않도록 주의한다.


5. 아파치 가상 호스트 설정(httpd.conf)

드디어 아파치 가상 호스트 설정 차례입니다.

필자의 경우(예제의 가상의 도메인: linux.ac.kr)는 다음과 같다.
주석으로 설명되어 있습니다.

-----httpd.conf -------------------------------------------------------
...
ServerName www.linux.ac.kr
DocumentRoot /home/httpd/html
...
UserDir public_html
...
...
# 가상 호스트 설정
NameVirtualHost 192.168.10.3

# 기본이 되는 호스트
<VirtualHost 192.168.10.3>
ServerName www.linux.ac.kr
#
# 다음의 설정은 일반적인 각각의 사용자 URL(~ID)을 ID.domain.com의
# 형태로  Redirect하는 설정이다.
# 꼭 필요하지는 않지만 그럭저럭 괜찮은 서비스 일것 같다.(필자의 생각)
#
RewriteEngine on
RewriteRule    ^/~(([a-zA-Z])[a-z0-9]+) http://$1.linux.ac.kr [R,L]
#
# 다음의 2줄에 대해서 주석을 제거하면 요청한 문서와 DocumentRoot 상에
# 존재하는 문서와 서로 일치하지 않을 경우
# http://www.linux.ac.kr/index.html 파일을 보여주도록 되어 있다.
# 따라서 "ErrorDocument 404"의 의미는 없어지며,
# 이 방법 외에, 원한다면 404 에러코드에 대한 문서를 상위의
# 기본 문서(index.html)로 URL 포워딩할 수 있는 방법도 있다.
#
#RewriteCond   /home/httpd/html/%{REQUEST_FILENAME} !-f
#RewriteRule   ^(.+)    http://www.linu.ac.kr/index.html

</VirtualHost>

# mail 호스트 설정
# "mail"이라는 계정은 /etc/passwd 파일에 존재하지만
# 실제로는 /home/mail로 홈디렉토리를 가지고 있지 않다.
# 때문에 필자의 경우는 mail.linux.ac.kr 호스트에 대해서
# 웹 메일서버스를 위해서 다음과 같이 설정했을 뿐이다.
# 물론 8080 포트로 설정하는 경우도 많다.
# 이 예는 필자의 경우이다.(하나의 리눅스 박스에서)
#
<VirtualHost 192.168.10.3>
ServerName mail.linux.ac.kr
ServerAdmin admin@linux.ac.kr
DocumentRoot /home/httpd/mail
ErrorLog logs/mail.linux.ac.kr-error_log
CustomLog logs/mail.linux.ac.kr-access_log common
#ErrorDocument 401 /401.php
</VirtualHost>

# redhat 호스트 설정
# redhat 계정은 시스템 계정에 포함되어 있지 않은 계정이다.
# 따라서 따로 분류해서 하나의 가상 호스트로 설정할
# 필요가 있는 경우이다.
# 이 예제와 같이 /home/ID 처럼 존재하지 않은 가상 호스트에 대해서
# 중요하다고 생각되는 호스트(예: www, kernel, tip, study)를 별도로
# 가상 호스트로 추가 설정한다.
#
<VirtualHost 192.168.10.3>
ServerName redhat.linux.ac.kr
ServerAdmin admin@linux.ac.kr
DocumentRoot /home/httpd/redhat
ErrorLog logs/redhat.linux.ac.kr-error_log
CustomLog logs/redhat.linux.ac.kr-access_log common
ErrorDocument 401 /401.php
ErrorDocument 404 /404.php
</VirtualHost>

# linux 호스트 설정
# linux 계정은 시스템 계정에 포함되어 있지 계정이다.
# 또한 리눅스 계정에 포함되어 있다하더로도
# 필자의 소견으로는
# http://linux.linux.ac.kr 이라는 이름은 왠지
# 어색할 따름이다.
# 따라서 이 가상 호스트에 대해서 www.linux.ac.kr
# 호스트로 Redirect 지시자로 포워딩하는 예제이다.
# 주의 Redirect / http://www.linux.ac.kr 이 되지 않도록!!!
#
<VirtualHost 192.168.10.3>
ServerName linux.linux.ac.kr
Redirect /index.html http://www.linux.ac.kr/
</VirtualHost>

# 가상 유저 호스트 설정 ##########################################
# 이 글의 가장 핵심적인 내용이며 필자가 말하려는 부분이기도 하다.
#
<VirtualHost 192.168.10.3>
ServerName linux.ac.kr
#
# ServerAlias 지시자를 이용해서 나머지 모든 호스트에 대해서
# 설정한 경우이다.
ServerAlias *.linux.ac.kr
ServerAdmin admin@linux.ac.kr
#
# 다음의 설정은 http://linux.ac.kr을 요청했을 경우에
# http://www.linux.ac.kr 호스트로 URL 포워딩한 예이다.
# 이 설정은 필자의 습관이다.
# 굳지 Redirect 지시지를 사용하지 않고 /home/httpd/html/index.html
# 파일을 보이도록 할 수는 있다.
#DocumentRoot /home/httpd/html
#
Redirect /index.html http://www.linux.ac.kr/
#
#
# 가장 핵심적인 설정 부분이다. 그러나 .........T.T
# 불행히도 필자는 이부분에 대해서 자세하게 설명할 실력이 못된다.
# 다만 아파치 제공문서와 [임대호]님 홈페이지를 참고로 했을 뿐입니다.
# 자신의 환경에 맞게 수정하면 무리가 없을듯 합니다.
#
# Virtual User Hosts
RewriteEngine on
RewriteCond   %{HTTP_HOST}         ^[^.]+\.linux\.ac\.kr$
RewriteRule   ^(.+)                %{HTTP_HOST}$1     [C]
RewriteRule   ^([^.]+)\.linux\.ac\.kr(.*) /home/$1/public_html$2
#
ErrorLog logs/users.linux.ac.kr-error_log
CustomLog logs/users.linux.ac.kr-access_log common
# 아래의 두개의 설정은 가상 유저 호스트를 위한 설정이다.
# 즉, 각 가상 유저 호스트의 DocumentRoot에 에러코드문서를
# 모두 만들 필요없이(사용자 몫) 기본 호스트의 에러코드로
# 모두 설정해 주었다.
ErrorDocument 401 http://www.linux.ac.kr/401.php
ErrorDocument 404 http://www.linux.ac.kr/404.php
</VirtualHost>
...
------------------------------------------------------------------------------

설정이 끝났으면 아파치 서버를 가동한다.
서버를 가동하지 전에 설정 구문이 제대로 맞는지 확인 점검해 보는 습관도 좋다.
#
# httpd -t (또는 /usr/sbin/httpd -t)
또는
# /usr/local/apache/bin/httpd -t
Syntax OK
#

현재 서버가 가동 중이 아니므로...

RPM으로 설치했을 경우,
#
# /etc/rc.d/init.d/httpd start

소스로 컴파일하여 설치했을 경우
#
# /usr/local/apache/bin/apachectl start
#

서버가 정상적으로 시작되면
웹 브라우저로 테스트해 본다.
또한,
새로운 계정을 추가하여 제대로 작동하는지 확인해 보시길 바랍니다.

예 :
http://san2.linux.ac.kr/

6. 조그마한 팁

필자는 RedHat 리눅스 외에 다룰 줄 아는 리눅스 배포본은 없다.
따라서 다음에 나오는 팁은 당연히 레드햇 기준입니다.

*팁1)
사용자 추가시 기본 웹 디렉토리(public_html)와 index.html 파일

사용자 "기본 웹 디렉토리"라 함은 아파치 설정 파일에서
UserDir 지시자에 의해서 명시한 디렉토리를 말한다.
일반적으로 public_html 이나 Public_html, wwwhome, html .... 등등으로
아파치 서버 관리자가 설정하기 나름이다.

필자의 경우는 Public_html으로 바꾸어 사용한다.(대문자 P, 필자의 습관)
#
# cat httpd.conf | grep UserDir
  UserDir Public_html
#
따라서 다음과 같이 이름을 미리 바꾸어 놓음으로써 다음 계정 추가시 자동적으로
UserDir과 맞도록 설정한다.


#
# cd /etc/skel
# ls -hl
total 12k
drwxr-xr-x   5 root     root         4.0k Feb 24 03:34 Desktop/
drwx------   2 root     root         4.0k Jun  8  1999 Mail/
drwx------   2 root     root         4.0k Feb 25 01:54 public_html/
#
# mv public_html Public_html
#
# chmod 701 Public_html
#
# ls -hl
total 12k
drwxr-xr-x   5 root     root         4.0k Feb 24 03:34 Desktop/
drwx------   2 root     root         4.0k Jun  8  1999 Mail/
drwx-----x   2 root     root         4.0k Feb 25 01:54 Public_html/
#

그 다음 index.html 파일은 아파치 설정파일에서 DirectoryIndex 지시자에 의해서
명시된 우선적인 파일을 의미한다.
즉,(리눅스 초보자에 해당되는 설명) 웹에서 특정 디렉토리에 접근할 경우 자동으로
보여주는 문서를 말합니다.

DirectoryIndex index.html index.htm index.php3 index.cgi index.phtml index.shtml

따라서 필자는 다음과 같이 미리 index.html 파일을 생성해 주었다.
#
# pwd
/etc/skel
# cd P* (또는 cd Public_html)
# pico index.html (또는 index.php)

# cat index.html --------------------------------------------------------------
<?
//$server_name = "$SERVER_NAME";
//$http_host = "$HTTP_HOST";
//$user = eregi_replace(".$server_name", "", $http_host);
$user = eregi_replace(".$SERVER_NAME", "", $HTTP_HOST);

?>

<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC-KR">
<title>welcome to <? echo $user ?> HomePage !!!</title>
</head>

<body bgcolor=white>

<p>
&nbsp;
<p>
<center> <font color=blue size=3> 환영합니다.</font>
<br>
여기는
<a href=mailto:<? echo $user ?>@<? echo $SERVER_NAME ?>>
<? echo $user ?></a>
의 홈페이지 입니다.
<p>http://<? echo $HTTP_HOST ?>

</body>
</html>
----------------------------------------------------------------------------------

물론, DB를 사용하여 사용자 이름을 깔끔하게 표시하면 금상첨화이겠지요...
필자가 웹 프로그램에 대해서 거의 맹~~ 수준이라서 고작 USER(사용자)를 표시한다는 것이
이 정도 수준밖에...........T.T(죄송)


*팁2)
사용자 홈디렉토리 퍼미션

레드햇 리눅스는 사용자를 새로 추가할 경우 기본 퍼미션은 700 이다.
즉 사용자(소유자)만 읽기/쓰기/실행하도록 디렉토리 퍼미션이 주어진다.
따라서 당연히,
웹디렉토리(Public_html) 퍼미션이 701, 755이다하더라도 사용자 홈디렉토리 퍼미션이
700이므로 웹에서는 접근할 수 없다.

그렇기 때문에 사용자 추가시 자동적으로 701 정도의 퍼미션이 되도록 설정해 주는것
한가지 방법인듯 하다.
방법은 다음과 같다.

# ls /etc/login*
/etc/login.defs
#
# pico /etc/login.defs

-----/etc/login.defs -------------------------------------------------------------
...
...
# 제일 마지막줄이나 적당한 위치에 다음 한줄을 추가한다.
UMASK 076
-----------------------------------------------------------------------------------

이제 새로 추가할 사용자 디렉토리 퍼미션은 701이 될것이다.
참고로 퍼미션이 755가 되게하려면 "UMASK 022"으로 수정한다.


7. 마치며

매번(?) 글을 쓸때마다 느낌점이 있다면, 역시 글을 쓴다는 것은 한편으로 즐겁기도
하면서 한편으로는 제 자신을 애석하게 만들더군요.
(지식의 한계로 인한 "끙끙거림 = 키보드 위에 쌓인 머리카락)

급하게(?) 테스트하고 올린 내용이라서 오타 및 잘못된 설정이 있으리라 생각됩니다.
잘못된 점이 있으면 지적해 주셨으면 감사하겠습니다.

...

이 문서는 어느 누구도 전체 또는 부분을 복제 및 수정해서 재배포할 수 있으며
자신의 홈페이지에 링크 또는 자신의 홈페이지에 올려놓아도 상관없습니다.
또한 상업적으로 이용할 계획이라도 본 필자에게 문의 메일없이 사용할 수
있습니다
즉,
이 문서에 대해서는 사용상 어떠한 제한이 없음을 알려드립니다.
원작성자를 표기하지 않아도 상관없으며, 필요하다고 생각되면 원작성자를
표기해도 상관없습니다.

단,
사용상의 문제점등으로 피해를 있었을 경우, 본인에게 어떠한 법률적인 책임이
없음을 미리 공지하는 바입니다.

..

본 문서의 보완이나 잘못된 점이 있으면
아래의 본인의 홈페이지 질문과 답변란 게시판을 이용해 주셨으면 고맙겠습니다.

http://www.linuxchannel.net/

끝까지 읽어 주셔서 감사합니다.
--------end------------------------------------------------------------------------

제로보드 DB 설정 실패

Projects/Server 2007.03.13 23:50 Posted by soulfree >동네청년<

** 제로보드(ZB) 5 베타 버전 설치는 http://cafe.naver.com/autoset/77 를 참고바랍니다. **



제로보드 배포 홈페이지 - http://www.nzeo.com 에 접속하시어 최신 버전의 제로보드를 다운로드 합니다.

본 글에서는 제로보드 4.1 의 패치8을 다운로드 받았습니다.




다운로드 받은 파일의 압축을 푸시고, bbs 폴더를 public_html 으로 옮겨주세요.




그리고 웹 브라우저를 여시고, http://localhost/bbs/install.php 로 접속합니다.

localhost 대신에 컴퓨터의 IP주소를 입력해주셔도 됩니다.

(예) http://200.1.2.3/bbs/install.php



라이센스에 동의 체크하시고, [설치 시작] 을 클릭합니다.


  라이센스에 동의 체크하시고, [설치 시작] 을 클릭합니다.



설치를 하기 위한 DB 정보를 입력해줍니다.

HostName 은 localhost 를 입력해주시고,

SQL UserID 에는 root 를 Password 에는 초기 설정값(autoset)을 입력하였습니다.

DB Name 에는 mydb 를 입력합니다.

** 주의 : 외부에서 접근이 가능한 컴퓨터의 경우,
혹은 서비스를 하는 사이트는 반드시 MySQL 비밀번호를 변경하세요.


위와 같이 입력하고, [설정 완료]를 누르면 아래와 같이 오류가 발생합니다.



위와 같은 오류가 발생하는 이유는 DB 생성 쿼리에 문제가 있기 때문입니다.

오토셋은 MySQL 4.1 버전을 사용하기 때문에, 4.0 버전을 기준으로 하는 쿼리와 약간의 차이가 있습니다.

따라서, 설치를 위해 번거롭지만 아래와 같이 bbs 폴더 안의 schema.sql 파일을 수정해주셔야 합니다.

수정을 위해 Editplus 나 메모장으로 파일을 열어주시면됩니다.




파일을 여시고, 139 번째 줄로 이동하세요.




위와 같이 default 0 라고 된 것을 삭제하시고, 저장해주신 다음에

다시 웹 브라우저로 돌아와 설치를 계속해주시면 됩니다.




사용하실 제로보드 관리자 ID 와 비밀번호, 그리고 관리자 이름을 입력하시고

[정보 입력 완료] 를 클릭하시면 제로보드 설치가 완료됩니다.



셋팅한 관리자 ID 와 비밀번호로 접속하면,

아래와 같이 관리자 페이지가 나오게 됩니다.



제로보드 사용법은 제로보드 홈페이지(http://www.nzeo.com) 를 참고하세요.
 

STOPPING server from pid file /var/run/mysqld/mysqld.pid 에러

Projects/Server 2007.03.12 11:04 Posted by soulfree >동네청년<

음... 전혀 의도치 않았네요;;;;;;;;

얼마전에 서버의 ip 가 바뀌었는데, 다른데는 다 바꾸어서 (리부팅없이) 잘 서비스하고있다가, 서버를 리부팅한 후 안되는거 였습니다.

/etc/mysql/my.cnf 파일에 bind-address 에 제대로 된 ip 를 넣어주니 되는군요.

문제는... ip 가 바뀌었는데 몇몇 설정 파일만 ip 바꿔주고 mysql 의 ip 는 안바꿔주었던거였습니다. 리부팅후 문제가 발생했는데.... 원인이 된 시각(ip 바뀐 시각)이 먼일이라 ^^;;

답변 드린 분들께 감사드립니다.

TAG MySQL

proftpd 접속 유지시간 설정

Projects/Server 2007.03.11 23:37 Posted by soulfree >동네청년<
ProFTPd 설정 지시자 중에서 Timeout에 관한 지시자는 다음의
4가지의 지시자가 있습니다.

  - TimeoutLogin : 인증(Login)에 걸리는 시간 설정.
  - TimeoutNoTransfer : 파일 전수송(Transfer)이 없을 경우의 Timeout.
  - TimeoutIdle : 휴(休:Idle) Timeout.
  - TimeoutStalled : 서버와 클라이언트의 지체(지연) 시간에 관련된 시간 설정

이 지시자에 관한 자세한 설명은

http://www.proftpd.org/docs/configuration.html

에 있습니다.

상당히 4개의 지시자가 비슷비슷하군요..
먼저, 간단하게 이 4개의 지시자에 대한 설정법은 다음과 같습니다.


[TimeoutLogin]
  - 구문 : TimeoutLogin seconds
  - 기본값 : 300
  - 범위 : server config
  - 모듈 : mod_core
  - 사용버전 : 0.99.0 이후
  - 설명 :
  Login에 관련된 지시자로써 클라이언트가 한번 인증에 필요한 최대 시간을 설정한다.
  기본값은 300초(5분)로 이 지시자에 의한 설정값이 없다면 300초로 기본 설정된다.
  즉 이 시간 안에 인증이 성공하지 못하면 Logout 된다.
  비교적 원거리의 FTP 클라이언트에서 접속이 자주 들어오면 이 값을 올려주는 것이
  좋다.
  Login time은 자료가 전송 중에는 다시 환원(초기화:reset:0)되지 않으며, 오직
  USER/PASS 명령에 대한 인증을 재전송하는 경우에 초기화(0)된다.
  관련 지시자 : TimeoutNoTransfer, TimeoutIdle


[TimeoutNoTransfer]
  - 구문 : TimeoutNoTransfer seconds
  - 기본값 : 300
  - 범위 : server config
  - 모듈 : mod_core
  - 사용버전 : 0.99.0 이후
  - 설명 :
  이 지시자는 클라이언트가 인증 후, 아무런 파일 전수송(명령어 포함)이 없을 경우 최대
  접속을 유지할 수 있는 시간을 설정한다.
  기본값은 300초로 클라이언트에서 아무런 작업이 없다면 300초(5분) 후에 접속이 종료됨.
  관련 지시자 : TimeoutLogin, TimeoutIdle

[TimeoutIdle]
  - 구문 : TimeoutIdle seconds
  - 기본값 : 600
  - 범위 : server config
  - 모듈 : mod_core
  - 사용버전 : 0.99.0 이후
  - 설명 :
  이 지시자는 ProFTPd가 클라이언트에서 아무런 작업(자료 전수신/자료접속/등등) 없을 경우
  접속을 계속 유지할 수 있는 최대시간을 설정한다.
  이 시간안에 다시 클라이언트에서 작업이 이루어지면 TimeoutIdle은 초기화(0)된다.
  이 점이 TimeoutLogin 지시자와 다르다.
  설정값으로 0으로 설정이 가능한데, 이는 계속적인 접속을 유지하라는 의미이지만,
  별로 좋은 생각이 아니다. 즉, 클라이언트가 접속을 확실히 끊었음에도 불구하고, 수동으로
  child server를 죽이지(kill)이 않은 이상 계속 살아있기 때문이다.

  이 시간(IDLE)을 명령라인에서도 알아볼 수 도 있는데,

  # ftpwho
  1290 1m20s  proftpd: user1 - xxx.xxx.xxx.xxx: IDLE

  여기에서는, user1이 현재 1분 20초 동안 IDEL되는 시간으로 이시간이 600s(10m)이 되면 자동
  접속이 종료됨.
  관련 지시자 : TimeoutLogin, TimeoutNoTransfer


[TimeoutStalled]
  - 구문 : TimeoutStalled seconds
  - 기본값 : 600
  - 범위 : server config
  - 모듈 : mod_core
  - 사용버전 : 0.99.0 이후
  - 설명 :
  이 지시자는 ProFTPd 서버와 FTP 클라이언트 사이에 접속은 되어 있으나 아무런 데이터 이동이
  없을(no actual) 경우(지연, 지체)에 데이터 접속을 유지할 수 있는 최대 시간을 초 단위로
  설정한다.
  또한 0으로도 설정이 가능한데 이는 계속적인 접속 지연을 유지하라는 의미이다.

---

상당히 4개의 지시자가 차이가 없을 정도로 비슷비슷하군요..

간략하게 각각의 지사자의 핵심(용도?)을 요약하자면,

  - TimeoutLogin : 한번 인증에 걸리는 시간 설정.
  - TimeoutNoTransfer : 아무런 반응(전송,명령어 등등)이 없을 경우에 지속적인 접속 유지 설정
  - TimeoutIdle : TimeoutNoTransfer와 거의 동일하나, 무한정(0) 지속적인 접속 유지 설정이 가능
  - TimeoutStalled : 데이터 접속 지연, 지체에 관한 시간 접속 유지 설정

따라서 지속적인 접속을 유지하기 위해서는 TimeoutLogin 지시자를 제외하고, 나머지 3개의 지시자
에 대해서 그 조합(?) 결과가 바로 최종적인 Timeout 시간이다.
그런데 TimeoutStalled 지시자는 데이터 접속의 지연, 지체(네트워크 장애 등등의 원인) 등에 관한
설정이므로, 이 지시자는 클라이언트에서 뭔가 작업이 현재 이루어 지고 있는 것으로 해석되며(뭔가
반응이 있고 시도하고 있음)결국 위의 질문과 대한 답변에 속하지 않은 지시자이다.
따라서 나머지 2개의 지시자 중 설정한 값 중 작은 값이 결국 최종적인 Timeout 시간이다.

참고로, TimeoutLogin 지시자는 Login에 관련된 지시자이므로 지속적인 접속과 관련 없는 지시자임.

##### 중요 #########################################################################
##
## 아마 대부분 사용자가 헷갈리는 부분이 바로 이 부분이다.
## 일례로, 아무리 TimeoutStalled이나 TimeoutIdle 지사자에 대해서 최대 접속시간을 원하는 시간
## 으로 정했다고 하더라도, 사용자가 TimeoutNoTransfer을 설정하지 않으면 이 시지자에 의한 기본값
## 이 300초 이므로 결국 제일 작은 값이 300초가 되고, 클라이언트에서 아무런 작업(반응)이 없다면
## 자동적으로 300초 후에 접속이 끊어지게 된다. 잘못된 설정으로 원하는 시간이 나오지 않음.
##
####################################################################################

그럼 예제를 통해서 몇가지 않아보죠.

예제1. 기본값으로 설정되어 있을 경우

TimeoutLogin 300
TimeoutNoTransfer 300
TimeoutIdle 600
TimeoutStalled 600

기본값 들에 대한 설정값이며, 이 들 내용은 지시자 설정이 없을 경우와 똑 같다(기본값 이므로)
제일 작은 값이 300초(TimeoutNoTransfer) 이므로 클라이언트에서 아무런 작업이 없다면 300초 후에
접속이 끊긴다. TimeoutStalled 지시자는 데이터 접속시 지체 지연시 600초가 넘으면 접속을 끊어라는
의미가 된다.


예제2. TimeoutNoTransfer > TimeoutIdle 인 경우

TimeoutLogin 300
TimeoutNoTransfer 900
TimeoutIdle 600
TimeoutStalled 3600

클라이언트에서 아무런 반응이 없으면 600초(TimeoutIdle) 후에 접속이 종료된다.
즉 ProFTPd 서버측에서 child server를 먼저(600초) 죽이기 때문에 TimeoutNoTransfer이 900초라도
접속이 종료된다.


예제3. TimeoutNoTransfer < TimeoutIdle 인 경우

TimeoutLogin 300
TimeoutNoTransfer 600
TimeoutIdle 900
TimeoutStalled 3600

예제2와 반대의 경우로 IDLE 시간(900-600=300초)이 남아 있더라도 TimeoutNoTransfer에 의해서
먼저(600초) 클라이언트의 접속을 끊어버리기 때문에 접속이 종료된다.


[질문] TimeoutNoTransfer와 TimeoutIdle 지시자 쓰임새가 비슷한데 어떻게 다른가요?

[답변]
메뉴얼에 의하면, T.T

TimeoutNoTransfer :
  - 인증 후 활성화(접속된 상태) 되어 있음.
  - 데이터 접속을 유지(생성)하는 어떤 명령어(ls,?,help,...)가 없을 경우.
  - 데이터 접속(파일 받기/보내기)이 없을 경우.
  - FTP 클라이언트 측면.

TimeoutIdle :
  - 인증 후 활성화(접속된 상태) 되어 있음.
  - 제어(control)나 데이터 접속에 대해서 어떠한 데이터를 받지 않은 경우
  - ProFTPd 서버 측면.


[최종 답변]
만약 접속 후 Logoff 하지 않고 접속을 계속 유지시키는 시간을 30분으로 정하려면,

TimeoutNoTransfer 1800
TimeoutIdle 1800

두개의 지시자를 모두 사용해야 하며, 최소한 이 이상으로 설정해야함.

mysql 문자셋 인코딩 관련

Projects/Server 2007.03.07 14:01 Posted by soulfree >동네청년<
기존 버전에서는 "euc-kr"로 표기되는 문자셋이 "euckr"로 바뀌었다.

/etc/my.cnf

[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
[mysqldump]
default-character-set=utf8

JDBC Driver URL

jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=UTF8

현제 문자셋 정보 보기

show variables like 'c%';
- 결과
character_set_client : utf8
character_set_connection : utf8
character_set_database : utf8
character_set_results : utf8
character_set_server : utf8
character_set_system : utf8
character_sets_dir : /usr/share/mysql/charsets/
collation_connection : utf8_general_ci
collation_database : utf8_general_ci
collation_server : utf8_general_ci

이미 생성된 DATABASE의 문자셋 바꾸기

mysql> SET character_set_client = utf8;
mysql> SET character_set_results = utf8;
mysql> SET character_set_connection = utf8;
mysql> ALTER DATABASE [DB명] DEFAULT CHARACTER SET utf8;

이미 데이터가 들어간 테이블의 문자셋 변환

create table test (merong varchar(20) collate latin1_general_ci);

이렇게 만들어진 테이블에 한글 데이터를 넣은 후 필드를 euckr 로 변경하려면
다음처럼 해야 합니다.

alter table test modify merong binary(100);
alter table test modify merong varchar(20) collate euckr_korean_ci;

binary 로 바꾸면 문자셋 특성이 사라지기 때문에 이런 변환과정을 거쳐야
합니다(메뉴얼에 의하면). 그냥 바꾸면 문자들이 손상됩니다.
참조 : Database.sarang.net에 올라온 글

mysql 데이터 백업 및 복구

Projects/Server 2007.03.07 11:40 Posted by soulfree >동네청년<

=============백업===============

테이블을 텍스트 파일로 저장하기
파일복사 외에 MySQL에 기본 설치된 mysqldump 툴을 사용하는 방법도 있다. 이툴은 테이블과 데이터베이스는 물론 데이터베이스 전체를 텍스트 파일로 변환해 저장한다. 사용법도 매우 단순해, 내보낼 데이터베이스 이름을 인자로 다음과 같이 실행하면 된다.


$ mysqldump -u root -p secret stocksdb



mysqldump 툴은 MySQL 서버와 접속해 주어진 암호정보로 로그인한 후, 일련의 SQL 명령어를 이용해 테이블 구조와 데이터를 다음과 같은 형태로 출력한다.


--
-- Dumping data for table 'portfolio'
--

INSERT INTO portfolio VALUES (1,'DHDU',2589,77.56); INSERT INTO portfolio VALUES (2,'YHOO',3200,45.65); INSERT INTO portfolio VALUES (3,'WMT',100,53.29);

물론 이를 콘솔에 출력하는 것은 그리 유용하지 못하다. 여러분이 원하는 것은 이를 파일로 저장해 백업하고나 복구하는데 이용할 수 있어야 한다. 이를 위해서는 출력 형태를 파일로 다시 정해주기만 하면 된다.


$ mysqldump -u root -p secret stocksdb > stocksdb.sql [/code]



만약 특정 테이블만 백업하려면 데이터베이스 이름 뒤에 테이블 이름을 붙이면 된다. 다음은 stocksdb 데이터베이스에서 users 테이블에 저장된 구조와 데이터만을 추출하는 구문이다.


$ mysqldump -u root -p secret stocksdb users > users.sql



또한 시스템 내의 모든 데이터베이스를 저장하려면 다음과 같이 --all-databases 옵션을 이용한다. --all-databases 옵션을 사용하면, mysqldump 명령 결과에 각 데이터베이스를 초기화하는 CREATE DATABASE문이 포함된다. 이렇게 하면 데이터베이스 전체를 한 번에 복구하기가 더 쉬워진다.


$ mysqldump -u root -p secret --all-databases > backup.sql



테이블 구조만 백업하고자 하면 다음과 같이 --no-data 옵션을 사용하면 된다. 이 옵션은 애플리케이션을 처음 설치해서, 레코드가 없는 테이블의 복사본을 만들어야 하는 경우 대단히 유용하다.


$ mysqldump -u root -p secret --no-data stocksdb > stocksdb.sql



물론 테이블 구조는 제외하고 데이터만 백업하는 경우는 다음과 같은 구문을 이용하면 된다.


$ mysqldump -u root -p secret --no-create-info stocksdb > stocksdb.sql


==============복구===============

텍스트 백업 파일로 MySQL 테이블 복구하기
지금까지 데이터베이스와 테이블 백업 방법을 살펴 봤다. 그러나 이것은 문제 해결의 절반에 불과하다. 나머지 절반은 실제 문제가 발생했을 때 이를 복구하는 방법을 아는 것이다. 다행스럽게도 MySQL은 복구과정도 손쉽다. mysqldump 명령의 결과물은 일련의 SQL 명령어로 구성돼 있기 때문에, MySQL 클라이언트가 간단하게 기존 데이터베이스 구조와 컨텐트를 재구축할 수 있다.

모든 데이터베이스를 mysqldump--all-databases 명령을 이용해 backup.sql 파일에 복사했다고 가정하면 다음과 같은 구문으로 이를 복구할 수 있다.


$ mysql -u root -p secret < backup.sql



--all-databases 옵션을 사용하지 않고 일부 테이블이나 데이터베이스를 선택적으로 백업한 경우는 MySQL 명령 실행시 데이터베이스의 위치를 알려주는 -D 옵션을 추가한다. 예를 들어 stock2 데이터베이스의 stocksdb.sql 파일에 저장된 테이블을 복구하는 구문이라면 다음과 같다.


$ mysql -u root -p secret -D stocks2 < stocksdb.sql

 

 

다른 포맷으로 내보내고 읽어들이기
MySQL 데이터베이스는 SQL 포맷 외에도 다양한 형식으로 저장할 수 있다. mysqldump 툴은 CSV나 사용자가 원하는 구분문자(delimiter)를 이용해 다양한 포맷으로 레코드를 저장할 수 있는데, 이를 위해서는 mysqldump 명령어에 --fields-terminated-by 인자만 추가하면 된다.


$ mysqldump -u root -p secret --no-create-info --tab=/tmp --fields-terminated-by=',' stocksdb



이와 같이 실행하면 mysqldump는 stocksdb 테이블에 있는 레코드의 각 필드를 쉼표로 분리해 /tmp 디렉토리에 저장한다. 별도의 라인 터미네이터를 사용하려면 --lines-terminated-by 인자를 사용해 특정 구분문자로 라인을 표시할 수 있다.

다른 데이터 포맷을 불러들이는 것도 가능하다. 예를 들어 다음과 같이 탭으로 분리한 테이블 레코드가 있다고 가정하자.


1 DHDU 2589 77.56
2 YHOO 3200 45.65
3 WMT 100 53.29

이 때 mysqlimport 툴을 이용하면 MySQL 데이터베이스 파일로 읽어들일 수 있다. 단 소스 파일의 베이스 이름이 데이터가 삽입될 위치를 결정한다는 점에 유의하자.


$ mysqlimport -u root -p secret --fields-terminated-by='\t' test /tmp/portfolio.txt



백업을 할때 항상 두 카피 이상을 유지하도록 한다(하나는 다른 위치에). 또한 MySQL 매뉴얼 내용 가운데 다양한 데이터를 내보내고 불러들이는 방법을 참고해 여러분의 환경에 응용할 수 있는 가장 좋은 방법을 찾길 바란다.

무엇보다 필자는 여러분이 문제가 발생한 데이터베이스를 복구해야 하는 상황에 놓이지 않기를 진심으로 바란다. 그러나 효율적으로 복구할 수 있는 툴이 있고, 이를 이용하면 최악의 경우에도 사용자의 불편을 최소화할 수 있다는 사실만으로도 여러분은 좀더 쉽게 잠을 청할 수 있을 것이다.  

'Projects > Server' 카테고리의 다른 글

proftpd 접속 유지시간 설정  (0) 2007.03.11
mysql 문자셋 인코딩 관련  (0) 2007.03.07
mysql 데이터 백업 및 복구  (0) 2007.03.07
Linux Shadow Password HOWTO  (0) 2007.03.07
Where it came from, where it's going - Tim Waugh  (0) 2007.02.28
리눅스 swap memory  (0) 2007.02.23

Linux Shadow Password HOWTO

Projects/Server 2007.03.07 11:12 Posted by soulfree >동네청년<

Michael H. Jackson, mhjack@tscnet.com.
v1.3, 3 April 1996
번역: 조용일, mailto:tolkien@nownuri.nowcom.co.kr
번역일: 1997년 2월 1일


--------------------------------------------------------------------------------
이 문서는 Linux Passwd Shadow Suite를 어떻게 얻고, 설치하고, 초기화하는 방법을 설명하고 있다. 또한 user password를 필요로 하는 network daemon이나 software를 얻고, 재설치하는 것도 다루고 있다. 그런 software는 Shadow Suite의 일부가 아니지만, Shadow Suite를 지원하도록 재 compile할 필요가 있다. 글중에는 program에 shadow를 지원하는 programming example도 있다. 자주 묻는 질문들에 대한 답이 글 말미에 있다.
--------------------------------------------------------------------------------

1. 들어가면서.
이것은 Linux Shadow-Password-HOWTO이다. 이 글은 Linux system에서 shadow password가 왜 지원됐고, 어떤 식으로 지원하는지 기술하고 있다. Shadow Suite의 몇몇 기능을 어떻게 쓰는가에 대한 예제들도 포함하고 있다.

Shadow Suite를 설치하고, 많은 utility들을 사용할 때, 반드시 root로 login해야 한다. Shadow Suite를 설치할 때, system software에 변화를 주어야 할 것이다. 그리고, 지시하는 대로 program의 backup 복사본을 만들어 놓기를 강력히 권고한다. 또한, 시작하기 전에 안내서를 읽고 이해하기를 권한다.


1.1 이전 글과 다른 것들.

덧 붙여진 것들:
        shadow를 왜 설치하지 원하지 않는 이유에 대한 sub-section
        xdm을 update하는 것에 대한 sub-section
        작업에 Shadow Suite의 기능을 추가하는 방법에 대한 section
        자주 묻는 질문에 대한 section

수정 및 update된 것들:
        Sunsite의 html 참조를 정정
        Makefile에 -lshadow를 덧붙이도록 wu-ftp에 대한 section의 정정
        철자와 수다스러움을 정정
        ELF를 지원하도록 wu-ftpd에 대한 section 변경
        여러가지 login program의 보안 문제를 반영하도록 update
        Marek Michalkiewicz의 Linux Shadow Suite를 권하도록 update


1.2 이 문서의 최근 것은...
이 문서의 최근판은 anonymous FTP인

sunsite.unc.edu

/pub/Linux/docs/HOWTO/Shadow-Password-HOWTO

또는:
/pub/Linux/docs/HOWTO/other-formats/Shadow-Password-HOWTO{-html.tar,ps,dvi}.gz

에 있으며, 또는 Linux Documentation Project Web Server를 통해서, Shadow-Password-HOWTO, 또는 나(<mhjack@tscnet.com>)에게 직접 얻을 수 있다. 이 것은 newsgroup: comp.os.linux.answers에 항상 게시된다.


이 문서는 Shadow-YYDDMM package에 포함된다.


1.3 Feedback.
나( Michael H. Jackson <mhjack@tscnet.com>)에게 어떤 의견, 새로운 것, 제안을 보내주기 바란다. 내가 빨리 그러한 것들을 받을수록, 이 문서를 빨리 최신 정보를 담고, 잘못을 바로 잡을 수 있다. 어떤 문제가 있을 경우에는 나에게 직접 전해주기 바란다. 왜냐하면 내가 newsgroup에 매일 올라가지 않기 때문이다.


2. 왜 passwd file을 숨겨야 하는가?
기본적으로, 대부분의 Linux 배포본들은 준비된 Shadow Suite를 포함하지 않는다. Slackware 2.3, Slackware 3.0, 다른 잘 알려진 배포본들이 그러하다. 이렇게 하는 이유중 하나는 원래의 Shadow Suite가 돈을 받고 재배포할 경우에 대한 저작권이 명확하지 않기 때문이다. Linux는 사용하기 편하게 포장(CD-ROM 배포처럼)한 뒤, 그에 대한 댓가로 돈을 받는 것을 허용하는 GNU의 저작권(Copyleft라고 불리우기도 한다)를 사용한다.

지금 Shadow Suite를 관리하는 Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl>씨는 재배포를 허용하는 BSD의 저작권을 따르는 저자로부터 source code를 받았다. 따라서, 지금은 저작권 문제는 해결되어서, 이후에 나오는 배포본에는 password에 shadow가 기본으로 사용될 수 있을 것이다. 그때까지는 당신 스스로 설치해야 된다.

CD-ROM으로부터 배포본을 설치했다면, 비록 배포본이 Shadow Suite를 설치하지 않았더라도, CD-ROM에서 Shadow Suite를 원하는 몇몇 file들이 있을 것이다.

어쨌든, Shadow Suite 3.3.1, 3.3.1-2, shadow-mk는 login program과 suid root를 쓰는 program에 보안 허점이 있고, 더 이상 쓰지 말아야 한다.

모든 필요한 file들은 anonymous FTP나 WWW을 통해서 얻을 수 있다.

Shadow Suite를 깔지 않은 Linux system에서는, password를 포함한 사용자 정보는 /etc/passwd에 보관되어 있다. password는 암호화되어서 (encrypted) 저장된다. 만일 암호학의 전문가에게 묻는다면, 그는 password는 encrypt된 형식이라기 보다는 encode된 형식으로 되어 있다. 이유는 crypt(3)을 적용할 때, text는 null로 하고 password를 key로 사용하기 때문이라고 한다. 따라서 이 문서에서는 encode된이라는 말을 쓸 것이다. (역자주 : 사전에는 encode와 encrypt를 같은 뜻으로 사용하고 있읍니다. - 암호로 바꿔쓰다 - 라는 뜻입니다만, 암호학을 전공하신 분들에게는 뉘앙스가 다를 것같습니다. 이에 대한 보충 바랍니다.)

password를 encode하는 데 사용되는 algorithm은 기술적으로는 단방향 hash function과 같은 방법으로 간주되고 있다. 이 것은 순방향으로는 계산하기 편하게 되어 있지만 역방향은 연산이 매우 힘들게 되어 있다. 사용된 algorithm에 대한 자세한 설명은 section 2.4나 crypt(3) manual page에 있다.

사용자가 password를 선택하거나 할당받을 때, password는 salt(소금?)라고 불리는 무작위로 생성된 값과 같이 encode된다. 이것은 어떤 password든지 4096가지의 다른 방법으로 저장될 수 있다라는 얘기다. salt 값은 encode된 password와 같이 저장된다.

사용자가 login하고 password를 사용하면, salt는 encode되어 저장된 password에서 뽑혀져 나온다. 그다음 입력된 password와 salt가 같이 encode된다. 그리고, encode되어 저장된 password와 비교한다. 그 결과, 서로 같다면 사용자는 인증된다.

무질서하게 encode된 password를 획득해서 원래의 password로 되돌리는 것은 계산상으로는 힘들다(그러나 불가능하지는 않다). 그러나, 적지 않은 사용자가 사용하는 system이라면, 적어도 몇몇 password는 일상단어로 이루어져 있다 (또는 간단한 변종이다).

system cracker들는 이런 것을 알고, 자주 쓰이는 password들과 단어의 사전과 가능한 4096가지 salt 값을 사용해서 encrypt을 행할 것이다. 그다음에 그들은 그들의 database에 있는 당신의 /etc/passwd file의 encode된 password와 비교할 것이다. 일단 하나라도 일치한다면 그들은 또다른 계정의 password를 가지게 되는 셈이다. 이는 dictionary attack(사전 공격?)이라 고 불리우고, system에 허가되지 않은 접속을 얻을 때 쓰는 가장 보편적인 방법중 하나이다.

생각해보라, 8문자된 password가 4096 * 13문자열로 encode된다. 그리고, 400,000개의 일반 단어, 이름, password, 약간의 변형들로 이루어진 사전은 4G Byte hard를 쉽게 채울 것이다. 공격자들은 이런 종류의 것이 필요하고, 맞는 지 검사해 볼 필요가 있다. 만일 10000 달러이하로 이런 4G byte짜리 hard를 가질 수 있다면, 대부분의 system cracker들에게는 충분하다.

또한, cracker가 당신의 /etc/passwd file을 이미 가지고 있다면, 그들은 /etc/passwd file에 포함되어 있는 salt 값만 가지고 사전을 encode하면 된다. 이 방법은 200 Megabyte의 공간과 486급 computer를 가지고 있는 보통 청소년이면 이용할 수 있다.

심지어 많은 공간없이, crack(1)과 같은 utility들은 최소한 충분히 많은 사용자를 확보하고 있는 system의 password를 2개정도는 깰 수 있다 (user가 자기 자신의 password를 고를 수 있는 system이라고 한다면).

/etc/passwd file은 user ID와 group ID와 같은 대부분의 system program에서 쓰는 정보를 가지고 있다. 게다가 /etc/passwd file은 "모두 읽기 가능"으로 남아 있어야 한다. /etc/passwd file을 아무도 보지 못하게 하면, 제일 먼저 ls -l 명령이 이제 user 이름대신 user ID를 출력하는 것을 보게 될 것이다!

Shadow Suite는 password를 다른 file(대개 /etc/shadow)에 위치시킴으로써 이 문제를 해결한다. /etc/shadow file은 어느 누구도 볼 수 없도록 되어 있다. root만이 /etc/shadow를 볼 수 있고, 쓸 수 있다. 어떤 program (xlock 같은)은 password를 바꿀 수 있는 권리를 원하지 않는다. password를 확인할 수 있으면 된다. 이런 program들은 suid root로 실행되거나, /etc/shadow를 읽기만 할 수 있는 shadow로 group을 바꾸어 주면 된다. 그러면 program은 sgid shadow로 실행시킬 수 있다.

password를 /etc/shadow file로 옮겨 줌으로써, dictionary attack를 하기 위해서 encode된 password들에 접근하는 공격자들은 효과적으로 방해할 수 있다.

추가적으로 Shadow Suite는 몇가지 괜찮은 기능을 더 가지고 있다:

login 기본사항(/etc/login.defs)들이 준비된 configuration file
user 계정 및 group을 추가, 수정, 삭제하는 utility들
password의 유효기간 설정과 경과후 취소
계정 무효와 동결
group password들의 shadow (선택사항)
2배 길이를 가지는 passwrd (16문자 password) (권하지 않음)
user가 password를 고를 때, 적절한 통제
전화접속용 password
보조 인증 program (권하지 않음)
Shadow Suite를 설치하는 것은 좀 더 보안이 강화된 system으로 만들어 준다. 그러나, Linux system의 보안을 강화시켜주는 다른 많은 것들이 있고, 따라서 궁극적으로 다른 보안 도구나 관련된 사안을 다루는 Linux Security HOWTO series가 생길 것이다.

알려진 취약점을 포함한 Linux 보안 문제에 대한 정보를 얻으려면 Linux Security home page를 방문하기 바란다.


2.1 passwd file을 은폐하기를 주저합니까?
다음과 같은 환경들에서는, Shadow Suite가 좋은 대안이 될 수 없다:

system이 사용자 계정을 가지고 있지 않다.
당신의 system이 LAN위에서 운영되고 있고, network상의 다른 기계에 사용자 이름과 password를 얻기 위해서 NIS(Network Information Services)를 사용한다. (이 것만으로 잘 운영되고 있고, - 그 이상은 이 문서의 범위를 넘는다 - 보안을 그다지 많이 강화시키기를 원하지 않는다.)
당신의 기계가 NFS(Network File System), NIS 또는 다른 방법을 통해 사용자를 확인하기 위한 terminal server로 사용되고 있다.
사용자를 확인하는 다른 software를 사용하고 있고, 쓸 수 있는 shadow version이 없다. 그리고, source code도 갖고 있지 않다.

2.2 /etc/passwd file의 형식
shadow의 세례를 받지 않은 /etc/passwd file은 다음과 같이 구성되어 있다.

username:passwd:UID:GID:full_name:directory:shell

각요소는:
username
사용자 (login) 이름

passwd
encode된 password

UID
숫자로 된 user ID

GID
숫자로 된 기본 group ID

full_name
user의 실제 이름 - 실지로 이 field는 GECOS (General Electric Comprehensive Operating System: 일반 전자적 종합 운영 체계?) field라고 불리우며, 단지 실제 이름보다는 다른 정보를 가질 수 있다. Shadow 명령들과 manual page는 이 field를 comment로 다룬다.

directory
사용자의 home directory (Full pathname)

shell
사용자의 login shell (Full pathname)

예를 들면:

username:Npge08pfz4wuk:503:100:Full Name:/home/username:/bin/sh

Np는 salt이며, ge08pfz4wuk는 encode된 password이다. encode된 salt/password는 kbeMVnZM0oL7I가 될 수도 있고, 둘은 같은 password를 가리킨다. 같은 password에 대해서 4096개의 다른 encoding이 존재할 수 있다. (예를 든 password는 'password'이며, 상당히 나쁜 password이다).
shadow suite가 설치되면, /etc/passwd file은 다음처럼 바뀐다:

username:x:503:100:Full Name:/home/username:/bin/sh

두번째 field의 x는 아무 것도 아니다. (공간만 차지하고 있을 뿐이다.) /etc/passwd file의 형식은 전혀 바뀌지 않았다. 단지 encode된 password를 포함하지 않을 뿐이다. 이는 /etc/passwd file을 읽기만 할 뿐 password를 검사하지 않은 program은 아무 이상없이 돌아간다는 것을 의미한다.
이제 password가 shadow file(대부분 /etc/shadow file)로 재배치된다.


2.3 shadow file의 형식
/etc/shadow file은 다음과 같은 정보를 갖고 있다:

username:passwd:last:may:must:warn:expire:disable:reserved

각 요소는:
username
사용자 이름

passwd
encode된 password

last
최근의 password를 바꾼 날 (1970, 1, 1일부터 계산한 날수)

may
password를 바꾼 다음, 또 바꾸기 위해 기다리는 날수 (다음 password로의 변경 유예기간)

must
다음 password로 바꿀어야 할 때까지의 기간 (현 password 유효기간)

warn
password가 만료되기 전에 user에게 바꿀 것을 경고하는 기간

expire
password가 만료된 뒤, user 계정 사용이 불가능하기까지 기간

disable
계정이 사용 불가능하게 된 날(1970, 1, 1일부터 계산한 날수)

reserved
남겨둠

전의 예제 경우 다음과 같다:
username:Npge08pfz4wuk:9479:0:10000::::


2.4 crypt(3)에 대해서.
crypt(3) manual 페이지에 의하면:

"crypt는 password를 encrypt하는 함수이다. 이는 Data Encryption Standard algorithm를 기반으로, (무엇보다) key를 찾는 기계적인 방법이 이용되기 힘들도록 약간의 변형이 가해져 있다.

key는 사용자가 입력한 password이다. [encode되는 string을 전부 NULL이다.]

salt은 [a-zA-Z0-9./]로 이루어진 집합으로부터 고른 두문자로 이루어진 문자열이다. 이 문자열은 4096개 경우중의 하나로 algorithm이 혼란스럽게 보이려는 목적으로 쓰인다.

key의 각 문자의 하위 7 bit을 취함으로써, 56-bit key가 주어진다. 이 56-bit key는 일정한 문자열을, 반복해서 encrypt하는 데 쓰인다. 결과는 13개 ASCII 문자열로, encrypt된 password를 가리킨다 (처음 두개 문자는 salt 그 자신이다). 결과값은 매번 호출될 때마다 다시 쓰이는 고정된 data를 가리킨다.

경고: key space는 2**56, 즉 7.2e16 가능한 값으로 이루어져 있다. key space를 샅샅이 뒤지는 것은 거대한 병렬 computer를 사용하면 가능할 것이다. crack(1)와 같은, 대부분의 사람들이 password로 삼는 key space의 특정 부분을 찾는 software가 있다. 따라서, 최소한 password를 선택할 때, 자주 쓰이는 단어나 이름은 피하기 바란다. passwd program을 사용하여, 찾기 쉬운 password를 선택하는 지 검사하기를 바란다.

DES algorithm, 그 자체는 가끔 crypt(3) interface를 사용하는 것이 다른 password 인증을 위한 어떤 것보다 더 나쁜 선택으로 만들어 버리는 경향이 있다. 보안 강화를 위해서 crypt(3)를 사용하려고 한다면, DES만 사용하지 마라: encryption에 대한 좋은 책과 널리 쓰이는 DES library들을 구하라."

(역자주 : 원문은 The DES algorithm itself has a few quirks which make the use of the crypt(3) interface a very poor choice for anything other than password authentication. If you are planning on using the crypt(3) interface for a cryptography project, don't do it: get a good book on encryption and one of the widely available DES libraries." 입니다. 그중에서 don't do it: get ...부분이 매우 애매합니다. it이 무얼 가리키는 건지 명확하지 않습니다. 일단, get ...을 권유하는 것으로 추측하고 번역을 했는 데...)

대부분 Shadow Suite들은 password의 길이를 16문자로 늘이는 code를 포함한다. des의 전문가들은 이를 권하지는 않는다. 왜냐하면 전반부를 encoding한 뒤, 긴 password의 후반부를 encoding하는 단순한 방법이기 때문이다. crypt의 방식대로라면, 긴 password를 사용하지 않는 것보다 더 취약한 password를 만들 수 있다. 더우기, 사용자가 16문자나 되는 password를 기억하기 힘들다는 측면도 있다.

crypt 방법과 호환성을 지니면서, 긴 password를 지원하고 더 강화된 인증(특히, MD5 algorithm)을 할 수 있는 방법이 연구중이다.

encryption에 대한 책으로 다음을 권한다:

        "Applied Cryptography: Protocols, Algorithms, and Source Code in C"
        by Bruce Schneier <schneier@chinet.com>
        ISBN: 0-471-59756-2


3. Shadow Suite 얻기.
3.1 Linux용 Shadow Suite의 역사
이 SECTION에서 소개하는 PACKAGE를 사용하지 말라. 문제점이 발견되었다

최초로 Shadow Suite를 만든 사람은 John F. Haugh II이다.

Linux system에서 사용되는 것으로는 다음과 같은 것들이 있다.

shadow-3.3.1가 원본이다.
shadow-3.3.1-2는 Florian La Roche <flla@stud.uni-sb.de>씨에 의해서 Linux에 맞게 고쳐졌고, 좀 더 나아진 것이 있다.
shadow-mk는 Linux에 맞추어 구성되어 있다.
shadow-mk package는 shadow-3.3.1-2 patch가 적용된, John F. Haugh II씨에 의해 배포된 shadow-3.3.1 package를 포함하고 있다. 거기에 좀 더 설치가 쉽게 Mohan Kokal <magnus@texas.net>씨께서 조금 고치고, Joseph R.M. Zbiciak씨께서 /bin/login의 -f, -h 보안 구멍을 제거한 login1.c (login.secure)가 덧 붙여지고, 몇몇 다른 잡다한 patch가 적용되어 있다.

shadow.mk package는 현재 login program에 보안상 허점가 있어 조만간 대체될 것이다.

Shadow 3.3.1, 3.3.1-2, shadow-mk는 login program에 보안상 허점이 있다. 이 login bug는 login name의 길이를 검사하지 않는 것을 포함하고 있다. 이 것은 충돌 또는 더 나쁜 것을 유발시키는 buffer overflow를 발생시킨다. 이 buffer overflow가, 이 bug와 함께 shared library를 사용하는 system에서 어떤 사용자에게 root 권한을 준다는 소문이 있어 왔다. 나는 어떻게 이런 일이 가능한지 구체적으로 거론하지 않겠다. 그 이유는 이런 (bug가 있는) Shadow Suite를 설치해서 피해를 입을 수 있는 Linux system이 많고, Shadow Suite이 없는 ELF-이전 배포판에게도 위험하기 때문이다.

이 문제와 다른 Linux 보안관련 문제에 대해 더 자세히 알고 싶다면, Linux Security home page (Shared Libraries and login Program Vulnerability)를 참조하라.


3.2 어디서 Shadow Suite를 얻습니까?
권할만한 Shadow Suite은 아직 BETA testing중이다. 어쨌든 최근 version이 안전하며, 취약한 login program을 포함하지 않는다.

package는 다음과 같은 명명규칙을 갖는다:

shadow-YYMMDD.tar.gz

YYMMDD는 Suite가 발표된 날짜이다.
이 version은 Beta testing이 끝나면, 결국 Version 3.3.3이 될것이고, Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl>에 의해서 유지보수 되고 있다. shadow-current.tar.gz에서 얻을 수 있다.


또한, 다음에 나오는 mirror site들에서 얻을 수 있다:

ftp://ftp.icm.edu.pl/pub/Linux/shadow/shadow-current.tar.gz
ftp://iguana.hut.fi/pub/linux/shadow/shadow-current.tar.gz
ftp://ftp.cin.net/usr/ggallag/shadow/shadow-current.tar.gz
ftp://ftp.netural.com/pub/linux/shadow/shadow-current.tar.gz
현재 나와있는 version을 사용하기 바란다.

shadow-960129보다 이전에 나온 version을 쓰지 말기 바란다: 앞에서 논의한 login 보안 허점이 있다.

이 문서에서 Shadow Suite라고 말하는 것은 이 version을 가리킨다. 또한, 당신이 사용하고 있는 package라고 가정한다.

참고적으로, 설치 안내서를 작성하는 데, shadow-960129를 사용했다.

이전에 shadow-mk를 사용했다면, 이 version으로 upgrade를 하고, 이전에 compile했던 것을 다시 하기 바란다.


3.3 Shadow Suite에는 뭔가 있는 것같은 데...
Shadow Suite는 다음 program의 대체품을 가지고 있다:

su, login, passwd, newgrp, chfn, chsh, id

또한, 새로운 program들도 있다:

chage, newusers, dpasswd, gpasswd, useradd, userdel, usermod, groupadd, groupdel, groupmod, groups, pwck, grpck, lastlog, pwconv, pwunconv

덧붙여, library: libshadow.a가 사용자 password에 접근하는 program을 작성하거나 compile하기 위해 포함되어 있다.

또한, program들을 위한 manual page도 있다.

/etc/login.defs로 설치되는 login program의 설정 file도 있다.


4. program들 만들기.
4.1 압축풀기.
package를 받을 뒤 처음 할 일은 풀어 제치는 것이다. package는 gzip으로 앞축된 tar (tape archive) 형식으로 되어 있으므로, /usr/src로 옮긴 뒤:

tar -xzvf shadow-current.tar.gz

그러면, /usr/src/shadown-YYMMDD라는 directory에 풀릴 것이다.


4.2 config.h file을 가지고 설정합니다.
첫째, Makefile과 config.h를 복사한다:

cd /usr/src/shadow-YYMMDD
cp Makefile.linux Makefile
cp config.h.linux config.h

그리고 config.h를 보라. 이 file은 몇몇 설정 사항에 대한 정의를 담고 있다. 만일 권고한 package를 가지고 있다면, 일단 group shadow 지원을 사용하지 않도록 하기를 권한다.

기본으로, shadow된 group password들을 사용할 수 있다. 이를 바꾸기 위해서 config.h의 #define SHADOWGRP를 #undef SHADOWGRP로 바꾼다. 나는 그들을 사용하지 않고 시작할 것을 원한다. 나중에 절실히 group password와 group 관리자를 원한다면, 다시 사용가능하도록 한 뒤 재compile하면 된다. 만일 사용가능으로 남겨둔다면, 반드시 /etc/gshadow file을 만들어야 한다.

긴 password 사용을 하는 것은 앞에서 얘기한대로 권하지 않는다.

#undef AUTOSHADOW라고 한 것을 바꾸지 말라.

AUTOSHADOW 선택사항은 shadow를 무시하는 program들이 계속 작동하도록 하려는 목적으로 준비된 것이었다. 이 이야기는 이론상으로는 괜찮지만, 제대로 기능하지 않는다. 이 option을 허용하고 root로써 program을 실행시키면, 그 놈은 getpwnam()를 root권한으로 부르고, 후에 /etc/passwd file에 수정된 내용을 다시 쓰게 된다 (더이상 shadow되지 않은 채로). 그런 program에는 chfn과 chsh가 있다. (getpwnam()를 호출하기 전에, 실제 uid와 유효 uid를 바꾼다해도 이를 회피할 수 없다. 왜냐하면 root도 chfn과 chsh를 사용할 것이기때문이다. (역자주: 모호하네요. system programming에 관한 내용같는 데... 아시는 분의 설명 바랍니다.))

libc를 만들 때도 같은 경우가 있다. SHADOW_COMPAT option이 그 것이다. 그 것은 쓰면 안 된다! /etc/passwd로부터 encode된 password를 얻기 시작한다는 것이 문제다.

지금 사용하고 있는 libc version이 4.6.27이전이라면, config.h와 Makefile을 고칠 것이 더 있다. config.h에서 바꿀 것은:

#define HAVE_BASENAME


#undef HAVE_BASENAME

으로. 그리고 Makefile에서는:
SOBJS = smain.o env.o entry.o susetup.o shell.o \
        sub.o mail.o motd.o sulog.o age.o tz.o hushed.o

SSRCS = smain.c env.c entry.c setup.c shell.c \
        pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
        tz.c hushed.c


SOBJS = smain.o env.o entry.o susetup.o shell.o \
        sub.o mail.o motd.o sulog.o age.o tz.o hushed.o basename.o

SSRCS = smain.c env.c entry.c setup.c shell.c \
        pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
        tz.c hushed.c basename.c

으로. 이 고침은 libc 4.6.27이나 그 이후에 포함된 basename.c에 있는 code를 덧붙인다.

4.3 원 program의 backup copy들을 만든다.
shadow suite가 대체시킬 program들을 추적해서 backup을 만드는 것도 좋은 생각이다. Slackware 3.0에는 다음과 같다:

/bin/su
/bin/login
/usr/bin/passwd
/usr/bin/newgrp
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/id
BETA package는 Makefile에 backup을 만들 목록이 있지만, 다른 배포판에서 다른 위치에 놓여 있을 수 있기에 설명으로 처리되어 있다.

또한 /etc/passwd file을 backup받기를 바란다. 그러나, 같은 directory에 만들 때, passwd 명령으로 덮어 쓰지 못하도록, 이름을 정할 때 조심해라.


4.4 make를 실행
거의 대부분의 설치과정에서 당신이 root 권한을 지닐 필요가 있다.

package를 compile하기 위해 make을 실행시킨다:

make all

다음과 같은 경고문가 나오는 경우가 있다: rcsid defined but not used (rcsid가 정의되어 있지만 사용되지 않습니다). 괜찮다, 이 건 저자가 version control package를 사용하기에 나오는 것이다.


5. 설치
5.1 일이 잘못돼어 갈 경우를 대비해서 boot disk를 준비합시다.
뭔가 잘못되어 간다면, boot disk를 준비해야 될 것이다. 설치시 boot/root disk를 사용했다면, 그 걸로 충분하다. 그렇지 않다면, Bootdisk-HOWTO에 booting가능한 disk를 만드는 법이 적혀있으니 참조하라.


5.2 중복된 man page들을 제거하기
또한, 대체될 manual page들을 옮기길 바란다. 심지어 backup없이 Shadow Suite를 설치할 정도로 무모할지더라도, 여전히 옛 manual page들은 제거하기를 원할 것이다. 대개 옛 manual page가 압축되어 보관되어 있으므로, 새 것들은 이전 것에 덮어쓰지 못할 수 있다.

제거 또는 옮길 필요가 있는 manual page를 찾기 위해 man -aW command나 locate command를 사용할 수 있다. make install을 실행시키기 전에 그런 식으로 옛 page들을 찾는 것이 일반적으로 더 쉽다.

Slackware 3.0 배포판을 사용한다면, 제거해야 할 man page들은:

/usr/man/man1/chfn.1.gz
/usr/man/man1/chsh.1.gz
/usr/man/man1/id.1.gz
/usr/man/man1/login.1.gz
/usr/man/man1/passwd.1.gz
/usr/man/man1/su.1.gz
/usr/man/man5/passwd.5.gz
또, /var/man/cat[1-9]의 subdirectory에 삭제해야 할 것과 같은 이름을 지닌 놈들이 있다.


5.3 make install을 실행
이제 준비가 끝났다: (root로서 이 일을 합시다)

make install

이 일은 새 것을 깔거나, 옛 것과 대체하며 file permission을 고친다. 또, man page도 설치한다.

그리고, /usr/include/shadow에 Shadow Suite에 있는 include file을 설치해준다.

BETA package를 쓴다면, 직접 login.defs를 /etc에 복사하고, root만이 이를 바꿀 수 있도록 해주어야 한다.

cp login.defs /etc
chmod 700 /etc/login.defs

이 file은 login program의 설정 file이다. 내용을 다시 보고, 당신의 system에 맞게 고치기 바란다. 이것은 root로 login할 수 있는 tty를 결정하고, 다른 보안 관련 setting을 결정한다(password 취소에 대한 기본값같은).


5.4 pwconv 실행
다음 일은 pwconv를 실행시키는 것이다. 반드시 root로서 이 일을 해야 될 뿐만 아니라, /etc directory에서 하면 금상첨화다:

cd /etc
/usr/sbin/pwconv

pwconv는 /etc/passwd와 그 안에서 몇몇 field을 가져와 다음 두 file을 만든다: /etc/npasswd 와 /etc/nshadow.

pwunconv program은 /etc/passwd와 /etc/shadow로부터 평범한 /etc/passwd file을 만들 경우에 대비해 주어진다.


5.5 npasswd와 nshadow의 이름을 바꾼다.
이제 pwconv를 실행시켜서 /etc/npasswd와 /etc/nshadow를 얻었다. 이 것들을 /etc/passwd와 /etc/shadow로 덮어쓸 필요가 있다. 우리는 원 /etc/passwd를 backup을 받기를 원하고, root만 읽을 수 있게 한다. 그리고 backup을 root의 home directory로 옮긴다:

cd /etc
cp passwd ~passwd
chmod 600 ~passwd
mv npasswd passwd
mv nshadow shadow

file의 소유와 permission에 관한 것을 정확하게 해라. X-Windows를 쓸 생각이라면, xlock와 xdm program은 shadow file을 읽을 수 있게 한다 (쓰는 것은 말고).

이 일을 가능하게 하는 방법은 두가지다. xlock에 suid root를 설정해 줄 수 있다(xdm가 root의 권한으로 실행될 수 있다). 또는 shadow file을 shadow group의 root가 소유한 것으로 만드는 것이다. 그러나 두 번째 제안을 하기 전에 shadow group(/etc/group를 보라)이 있는 지 확실히 해라. 현재 system의 어떤 사용자도 shadow group에 속해있으면 안된다.

chown root.root passwd
chown root.shadow shadow
chmod 0644 passwd
chmod 0640 shadow

이제 system을 shadow된 password file을 가지게 되었다. 다른 가상 terminal을 띄우고, login할 수 있는 지 점검하는 것이 좋을 것이다.

지금 해라!

안 돼면, 뭔가 잘못된거다! shadow되지 않은 상태로 돌아가기 위해서 다음처럼 한다:

cd /etc
cp ~passwd passwd
chmod 644 passwd

그리고 나서, 이전에 있던 장소로 모든 file을 되돌려 놓아야 할 것이다.


6. patch하거나 upgrade할 필요가 있는 다른 program들
password로 접근을 필요로 하는 대부분 program들의 대치품이 shadow suite에 포함되어 있다고 해도, 대부분 system에서 password 접근을 필요로 하는 다른 program들이 있다.

Debian 배포판을 쓰고 있다면 (또는 쓰고 있지 않더라도), ftp://ftp.debian.org/debian/stable/source/로부터 다시 만들어야 될 program들의 Debian source를 얻을 수 있다.

이 section의 나머지 부분은 adduser, wu_ftpd, ftpd, pop3d, xlock, xdm, sudo같은 program들이 shadow suite를 지원하도록 upgrade하는 법에 대해 다루고 있다.

shadow suite에 대한 지원을 어떻게 program에 넣는가하는 문제는 section C program에 Shadow를 지원하도록 덧붙이기를 보라 (그리고나서 program이 shadow file을 접근할 수 있도록 SUID root나 SGID shadow로 실행해야 되지만)


6.1 Slackware adduser program
Slackware 배포판( 다른 것들중에서도)은 /sbin/adduser라고 불리우는 사용자를 추가할 때 쓰는 대화식 program을 포함하고 있다. 이 program의 shadow version은 ftp://sunsite.unc.edu/pub/Linux/system/Admin/accounts/adduser.shadow-1.4.tar.gz에서 구할 수 있다.

나는 slackware의 adduser대신에 Shadow Suite에 있는 program들 (useradd, usermod, userdel)을 사용할 것을 권한다. 그들을 익히는 데 다소 시간이 걸리지만, 그만한 값어치를 한다. 왜냐하면 당신은 좀더 자세히 control할 수 있고, /etc/passwd와 /etc/shadow에 알맞은 file locking을 행해주기 때문이다 (adduser는 아니다).

종 더 자세한 걸 알고 싶으면 Shadow Suite 사용하기를 참조하도록.

하지만, 가지고 있다면 다음처럼 해라:

tar -xzvf adduser.shadow-1.4.tar.gz
cd adduser
make clean
make adduser
chmod 700 adduser
cp adduser /sbin


6.2 The wu_ftpd Server
대부분 Linux system은 wu_ftpd server를 쓰고 있다. 배포판으로부터 shadow를 설치하지 않았다면, 당신의 wu_ftpd는 shadow 지원을 하도록 compile되지 않았다. wu_ftpd는 root process로써 실행되는 inetd/tcpd로부터 시작된다. 아직도 낡은 wu_ftpd deamon을 쓰고 있다면, 그 놈은 root 계정을 위태롭게 하는 bug를 지니고 있기에 무조건 upgrade를 해야 된다 ( Linux security home page를 참조).

다행히 source code를 가져와 shadow가 가능하도록 재compile하기만 하면 된다.

쓰고 있는 것이 ELF system이 아니라면, wu_ftp server는 sunsite의 wu-ftp-2.4-fixed.tar.gz를 쓰면 된다.

일단 가져와서 /usr/src에 놓은 뒤:

cd /usr/src
tar -xzvf wu-ftpd-2.4-fixed.tar.gz
cd wu-ftpd-2.4-fixed
cp ./src/config/config.lnx.shadow ./src/config/config.lnx

그런다음 ./src/makefiles/Makefile.lnx을 수정한다:

LIBES    = -lbsd -support

를:
LIBES    = -lbsd -support -lshadow

으로.
이제 script를 만들고 설치하기 위한 준비가 끝났다:

cd /usr/src/wu-ftpd-2.4-fixed
/usr/src/wu-ftp-2.4.fixed/build lnx
cp /usr/sbin/wu.ftpd /usr/sbin/wu.ftpd.old
cp ./bin/ftpd /usr/sbin/wu.ftpd

이는 Linux shadow 설정 file을 사용해서 compile하고 server를 설치한다.

내 Slackware 2.3 system에서는 build를 실행시키기 전에 다음과 같은 일을 해야 했다:

cd /usr/include/netinet
ln -s in_systm.h in_system.h
cd -

ELF system에서 이 package를 compile하는 데 몇가지 문제점들이 보고 되었지만, 다음 release의 Beta version에서는 잘 된다. 그것은 wu-ftp-2.4.2-beta-10.tar.gz이다.

일단 가져와서 /usr/src에 놓은 뒤:

cd /usr/src
tar -xzvf wu-ftpd-2.4.2-beta-9.tar.gz
cd wu-ftpd-beta-9
cd ./src/config

그런 뒤 config.lnx를 수정한다:

#undef SHADOW.PASSWORD

을:
#define SHADOW.PASSWORD

으로. 그리고
cd ../Makefiles

Makefile.lnx를 수정한다:
LIBES = -lsupport -lbsd # -lshadow

를:
LIBES = -lsupport -lbsd -lshadow

으로. 마지막으로 만들고 설치:
cd ..
build lnx
cp /usr/sbin/wu.ftpd /usr/sbin/wu.ftpd.old
cp ./bin/ftpd /usr/sbin/wu.ftpd

당신의 wu.ftpd server가 실제로 어디 있는 지 확인하기 위해 /etc/inetd.conf를 점검해 보라. 어떤 배포판에서는 server deamon을 다른 장소에 두고, 특히 wu.ftpd는 다른 이름을 하고 있다는 말이 있다.


6.3 표준 ftpd
표준 ftpd server를 쓰고 있다면 wu_ftpd server를 쓰도록 권한다. 위에서 얘기한 bug외에는 일반적으로 더 안전한 것으로 알려져 있다.

표준을 계속 고수하거나 NIS을 지원할 필요가 있다면, Sunsite에 ftpd-shadow-nis.tgz가 있다.


6.4 pop3d (Post Office Protocol 3)
POP3가 필요하면, pop3d program을 재compile해야 한다. pop3d는 root 권한으로 inetd/tcpd에 의해 실행된다.

Sunsite에 두가지 version이 있다: pop3d-1.00.4.linux.shadow.tar.gz 와 pop3d+shadow+elf.tar.gz

둘 다 설치까지 수월하게 진행된다.


6.5 xlock
shadow suite를 설치하고, X Windows System과 upgrade하지 않고 xlock으로 screen에 lock을 건다면, Ctrl-Atl-Fx를 눌러 다른 tty로 login한 뒤 xlock process를 죽여 할 것이 틀림없다 (또는 Ctrl-Alt-BS로 X server를 죽이던가). 다행히 xlock program을 upgrade하는 것은 쉽다.

XFree86 3.x.x를 쓰고 있다면, 아마도 xlockmore (lock기능에 훌륭한 screen-saver까지 있는)를 쓰고 있을 것이다. 이 package는 shadow와 함께 재compile할 수 있도록 되어 있다. 낡은 xlock를 쓰고 있다면, 이 걸로 upgrade하도록 권한다.

xlockmore-3.7.tgz는 ftp://sunsite.unc.edu/pub/Linux/X11/xutils/screensavers/xlockmore-3.7.tgz 에 있다.

대개, 이게 구미에 딱 맞을 것이다.

xlockmore-3.7.tgz을 구한 다음, /usr/src에 푼다:

tar -xzvf xlockmore-3.7.tgz

/usr/X11R6/lib/X11/config/linux.cf file의 다음 line을 바꾸면 된다:

#define HasShadowPasswd    NO

를 다음처럼

#define HasShadowPasswd    YES

그리고 나서 실행 file을 만들자:

cd /usr/src/xlockmore
xmkmf
make depend
make

마지막으로 모두 제자리에, 바른 permission을 지니게 하면 끝이다:

cp xlock /usr/X11R6/bin/
cp XLock /var/X11R6/lib/app-defaults/
chown root.shadow /usr/X11R6/bin/xlock
chmod 2755 /usr/X11R6/bin/xlock
chown root.shadow /etc/shadow
chmod 640 /etc/shadow

이제 xlock은 잘 돌아갈 것이다.


6.6 xdm
xdm는 X-Windows상에서의 login screen을 보여준다. 어떤 system은 특정 level로 가도록 지정하면 xdm을 시동시킨다(/etc/inittab를 보도록).

Shadow Suite가 설치되면 xdm도 update될 필요가 있다. 이는 매우 쉽다.

xdm.tar.gz는 ftp://sunsite.unc.edu/pub/Linux/X11/xutils/xdm.tar.gz에 있다.

xdm.tar.gz를 구한 다음, /usr/src에서 푼다:

tar -xzvf xdm.tar.gz

/usr/X11R6/lib/X11/config/linux.cf에서 다음 line을 고친다:

#define HasShadowPasswd    NO

를 다음처럼

#define HasShadowPasswd    YES

그리고 나서 실행 file을 만들자:

cd /usr/src/xdm
xmkmf
make depend
make

모든 걸 제자리로...:

cp xdm /usr/X11R6/bin/

xdm은 root 권한으로 실행되기에 permission을 바꿀 필요는 없다.


6.7 sudo
sudo는 시스템 관리자가 사용자로 하여금 정상적으로 root 권한을 가지고 program들을 실행할 수 있게 하도록 허용해준다. 이 것은 drive를 mount하는 것과 같은 일을 사용자가 할 수 있도록 허용함으로써, system 관리자가 root 계정으로 접속할 필요를 억제할 수 있다는 면에서 간편하다.

sudo는 실행될 때 사용자 password를 확인하기 때문에 password를 읽을 필요가 있다. sudo는 이미 SUID root상태로 동작되기에 /etc/shadow file에 접근하는 데 문제는 없다.

shadow suite에 맞는 sudo는 ftp://sunsite.unc.edu/pub/Linux/system/Admin/sudo-1.2-shadow.tgz에 있다.

경고: sudo를 설치할 때, 기존의 /etc/sudoers는 기본 설정으로 대체된다. 그러므로 기본 설정이외의 것을 쓰고 있다면 backup을 하기 바란다 (또는, Makefile에서 기본 설정 file을 /etc로 복사하도록 지시하는 line을 제거하면 된다).

이 package는 이미 shadow를 쓸 수 있게 설정되어 있으므로, 재compile하기만 하면 된다 (/usr/src에 넣고):

cd /usr/src
tar -xzvf sudo-1.2-shadow.tgz
cd sudo-1.2-shadow
make all
make install


6.9 pppd (Point-to-Point Protocol Server)
pppd server는 여러가지 방식으로 인증할 수 있게 설정할 수 있다: Password Authentication Protocol (PAP)와 Cryptographic Handshake Authentication Protocol (CHAP). 대개 pppd server는 /etc/ppp/chap-secrets와/또는 /etc/ppp/pap-secrets에 있는 password를 읽는다. 이런 식으로 pppd를 쓴다면, pppd를 다시 설치할 필요가 없다. (역자주: ppp용 password를 따로 둔다는 뜻인 듯...)

pppd는 login parameter를 사용할 수 있다 (command line이건, option file이나 설정을 통해서건). login option이 주어지면, pppd는 PAP를 위해 /etc/passwd에 있는 username과 password를 사용할 것이다. 물론 이 경우에 shadow된 password file은 쓸모없다. pppd-1.2.1d에서 shadow를 지원하도록 code를 덧붙여야 된다.

다음 section에서 pppd-1.2.1d에 shadow를 지원하도록 하는 예를 보일 것이다 (pppd의 옛 version).

pppd-2.2.0는 이미 shadow가 지원된다.


7. Shadow Suite 사용하기
이 section은 system에 Shadow Suite을 깔고 나서 알고 싶은 몇몇 주제를 다룬다. 더 자세한 것은 각 명령의 manual page를 참조하기 바란다.


7.1 사용자계정 추가, 수정, 삭제
Shadow Suite는 사용자 계정을 관리하는, 다음과 같은 명령들을 추가했다. 이미 adduser program은 그전에 설치되어 있었을 것이다.


useradd
useradd 명령은 사용자를 추가한다. 또한, 기본 설정을 바꾸기 위해 이 명령을 실행할 수 있다.

처음 해야 할 일은 기본 설정을 확인하고, system에 맞게 고치는 것이다:

useradd -D


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

GROUP=1
HOME=/home
INACTIVE=0
EXPIRE=0
SHELL=
SKEL=/etc/skel


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

기본 설정치는 아마 맘에 들지 않을 것이다. 따라서 지금 사용자를 추가하려면, 각각 사용자에게 공통되는 모든 정보를 정해야 한다. 어쨌든 우리는 기본 설정치를 바꾸고 덧붙일거다.

내 system에서는:

기본 group은 100이다.
password는 60일마다 한번씩 바꾼다.
password가 취소될 수 있으므로 계정이 고정되지 않기를 바란다.
기본 shell은 /bin/bash이다.
이렇게 바꾸기 위해서:
useradd -D -g100 -e60 -f0 -s/bin/bash

이제 useradd -D를 치면:


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

GROUP=100
HOME=/home
INACTIVE=0
EXPIRE=60
SHELL=/bin/bash
SKEL=/etc/skel


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

이러한 기본치들은 /etc/default/useradd에 저장된다.

이제 useradd를 써서 system에 사용자를 추가할 수 있다. 예를 들어, fred라는 사용자를 기본치만 적용해서 추가한다면:

useradd -m -c "Fred Flintstone" fred

/etc/passwd file에 다음과 같은 명부(?)가 생성된다:
fred:*:505:100:Fred Flintstone:/home/fred:/bin/bash

그리고, /etc/shadow file에는:
fred:!:0:0:60:0:0:0:0

fred의 home directory가 만들어지고, -m switch가 쓰였으므로 /etc/skel 전체가 그 곳으로 복사된다.
또한, 특별히 UID를 지정하지 않았으로, 이미 사용된 UID 다음 것이 쓰였다.

fred의 계정이 생겼으나, 우리가 계정을 풀어주기 전까지는 fred는 login할 수 없다. 계정을 풀어주기 위해서는 password를 바꾸어 주어야 한다.

passwd fred


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

Changing password for fred
Enter the new password (minimum of 5 characters)
Please use a combination of upper and lower case letters and numbers.
New Password: *******
Re-enter new password: *******


--------------------------------------------------------------------------------
이제 /etc/shadow는 다음과 같을 것이다:
fred:J0C.WDR1amIt6:9559:0:60:0:0:0:0

그리고, fred는 login해서 system을 사용할 수 있다. Shadow Suite에 있는 다른 program들과 같이 useradd가 좋은 점은 /etc/passwd와 /etc/shadow file의 내용을 바꿀 때 방해받지 않는다는 점이다. 따라서 동시에 당신은 사용자를 추가하고, 다른 이용자는 자신의 password를 바꾼다해도, 둘 다 제대로 이행된다. (역자주: mutex lock, race condition같은 걸 생각하면 될 것같습니다.)
/etc/passwd, /etc/shadow를 직접 편집하는 것보다 이런 명령을 쓰는 것이 더 좋다. 만일 당신이 /etc/shadow file을 편집하고 있고, 그 와중에 한 사용자가 password를 바꾸고, 그리고나서 당신이 편집을 끝내고 저장하면, 그 사용자가 한 일을 잃어버리게 된다.

여기에 useradd와 passwd를 사용한 간단한 대화형 script가 있다:


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

#!/bin/bash
#
# /sbin/newuser - Shadow Suite의 useradd와 passwd 명령을 이용해서
#                 사용자를 추가하는 script
#
# Linux Shadow Password Howto의 예제로써 Mike Jackson <mhjack@tscnet.com>에
# 의해 작성됐음. 사용과 수정을 특별히 허가함.
#
# 이 것은 Slackware의 Adduser program처럼 기본치를 보여주고, 수정할 수 있도록
# 바꿀 수 있었다. 또한 멍청한 입력을 거부하도록 바뀔 수 있었다.
# (즉, 더 나은 오류 검사등...)
#
##
#  useradd 명령의 기본 설정치들
##
GROUP=100        # 기본 Group
HOME=/home       # Home directory 위치 (/home/username)
SKEL=/etc/skel   # Skeleton(공통적인 내용을 지닌 file들?) Directory
INACTIVE=0       # password가 기한이 지난 뒤 사용자 계정이 무효가
                 # 되기까지의 기간 (0=그렇게 하고 싶지 않음)
EXPIRE=60        # password 유효기간
SHELL=/bin/bash  # 기본 Shell (full path)
##
#  passwd 명령의 기본 설정치들
##
PASSMIN=0        # password를 바꾼다음 또 바꾸기 위한 유예기간
PASSWARN=14      # password의 기한이 지나기전에 경고하는 기간
##
#  script를 실행하는 사용자가 root인지 확인
##
WHOAMI=`/usr/bin/whoami`
if [ $WHOAMI != "root" ]; then
        echo "You must be root to add news users!"
        exit 1
fi
##
#  사용자 ID(username)와 실제 이름(Full name) 묻기
##
echo ""
echo -n "Username: "
read USERNAME
echo -n "Full name: "
read FULLNAME
#
echo "Adding user: $USERNAME."
#
# $FULLNAME 주변에 ""가 필요하다는 것에 주의할 것. 이유는 이 field는
# 반드시 공란이상의 무엇인가를 포함하며, "를 없이 useradd command를
# 실행시킨다면, 다음에 이어지는 parameter들도 그 field에 일부분으로
# 인식된다.
#
/usr/sbin/useradd -c"$FULLNAME" -d$HOME/$USERNAME -e$EXPIRE \
        -f$INACTIVE -g$GROUP -m -k$SKEL -s$SHELL $USERNAME
##
#  password에 대한 기본 설정치를 정한다.
##
/bin/passwd -n $PASSMIN -w $PASSWARN $USERNAME >/dev/null 2>&1
##
#  passwd를 실행시켜 password를 입력받는다.
##
/bin/passwd $USERNAME
##
#  결과를 보여줌.
##
echo ""
echo "Entry from /etc/passwd:"
echo -n "   "
grep "$USERNAME:" /etc/passwd
echo "Entry from /etc/shadow:"
echo -n "   "
grep "$USERNAME:" /etc/shadow
echo "Summary output of the passwd command:"
echo -n "   "
passwd -S $USERNAME
echo ""


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

새로운 사용자를 추가하는 데 script를 쓰는 것은 /etc/passwd와 /etc/shadow를 직접 편집하는 거나 Slackware의 adduser를 쓰는 것보다 훨 낫다. 당신의 특별한 system에 알맞로록 자유롭게 고치기 바란다.

useradd에 대한 자세한 정보는 manual page를 보시길...


usermod
usermod는 사용자에 대한 정보를 고친다. option은 useradd와 비슷하다.

앞의 fred의 shell을 바꾸고 싶으면, 다음과 같이 입력한다:

usermod -s /bin/tcsh fred

이제 fred의 /etc/passwd file에 있는 내용은 다음처럼 바뀌어 있다:
fred:*:505:100:Fred Flintstone:/home/fred:/bin/tcsh

이번에는 fred의 계정이 97년 9월 15일까지만 쓰도록 하자:
usermod -e 09/15/97 fred

그러면 fred의 /etc/shadow file에 있는 내용은:
fred:J0C.WDR1amIt6:9559:0:60:0:0:10119:0

usermod에 대한 자세한 정보는 manual page를...


userdel
userdel는 정확히 당신이 원한 것 - 사용자 계정 죽이기 - 를 해치운다.

userdel -r username

라고 치면 된다. -r은 사용자의 home directory에 있는 모든 file들과 함께 directory 자체를 지운다. 다른 곳에 있는 file들은 일일이 찾아서 지워야 한다.
삭제보다 계정을 쓰지 못하게 할 거라면, passwd 명령을 쓰기 바란다.


7.2 passwd 명령과 passwd 수명 정하기.
passwd는 말 그대로 password를 바꾸는 데 사용된다. 더우기, root는 다음과 같은 일을 할 수 있다:

계정 잠금(lock)과 풀림(unlock)(-l와 -u)
password 유효기간(-x)
password를 다시 바꾸기 위해 기다려야 하는 기간(-n)
password 유효기간 만료임을 알리는 경고는 몇일전에 할 것인가(-w)
password 유효기간이 지난 뒤 계정을 잠그기(lock)하기까지의 기간(-i)
계정에 대한 정보를 더 자세히 보는 것을 허용함(-S)
다시 fred의 예로 돌아가면

passwd -S fred
fred P 03/04/96 0 60 0 0

이것은 fred의 password가 유효하고, 96년 3월 4일에 마지막으로 바꾸었고, 언제든지 바꿀 수 있다. 그리고, 60일동안 password를 바꾸지 않으면 그후에는 못쓰고, 그 이전에 fred는 아무런 경고를 받지 않을 것이며, password를 못쓰더라도 계정은 유효하다.
즉, fred의 password가 무효가 된 뒤 들어오면, 새로운 password를 재촉받을 것이다.

fred에게 password가 취소되기 14일전에 경고를 하고, 취소된 뒤 14일후 그의 계정을 동결시키려면:

passwd -w14 -i14 fred

그러면 다음처럼 fred에 대한 내용이 바뀐다:
fred P 03/04/96 0 60 14 14

passwd에 대한 자세한 정보는 manual page에...

7.3 The login.defs file.
/etc/login 파일(file)은 login 프로그램(program) 뿐만 아니라 전체적인(as a whole) Shadow Suite에 대한 설정 파일이다.

/etc/login은 prompt들이 어떤 모습을 하고 있는 가부터 사용자가 password를 바꾸면 기본 유효기간은 어떻게 될 것인가에 대한 설정까지 담고 있다.

/etc/login.defs 파일은 내부에 있는 수많은 comment들로 매우 잘 문서화되어 있다. 그러나, 이 파일은 다음과 같은 주의할 몇 가지 것들을 담고 있다:

발생하는 log의 양(?)을 결정하는 on/off방식의 flag들.
다른 설정 파일들(files)을 가리키는 pointer들.
password 유효기간 설정같은 기본 설정치들(assignments).
위에서 보듯 이 놈은 상당히 중요한 파일이다. 따라서, 지금 있는지 확인하고, 설정들이 system과 당신 취향에 맞는 지 점검할 것.


7.4 Group passwords.
/etc/groups file은 사용자가 특정 group의 회원이 될 수 있도록 허용하는 password를 담고 있다. 이 기능은 /usr/src/shadow-YYMMDD/config.h의 SHADOWGRP 상수를 정의할 경우 작동된다.

만일 이 기능을 쓴다면, /etc/gshadow file을 만들어, group password와 group 관리자에 대한 정보를 담을 수 있도록 하라.

/etc/shadow를 만들 때, 당신은 pwconv를 썼지만, /etc/gshadow를 만드는 데에는 그런 program이 없다. 하지만 걱정말라. 알아서 하니까.

처음 /etc/gshadow를 만들기 위해서 다음처럼 해라:

touch /etc/gshadow
chown root.root /etc/gshadow
chmod 700 /etc/gshadow

당신이 새로운 group을 만든다면, 자동적으로 /etc/group와 /etc/gshadow file에 그들이 덧붙여진다. group에 사용자를 추가하거나 삭제, 또는 group password를 바꾸면, /etc/gshadow file은 따라서 바뀔 것이다.

groups, groupadd, groupmod, groupdel program이 group을 고치는 도구로써 Shadow Suite에 포함되어 공급된다.

/etc/group file의 형식은 다음과 같다:

groupname:!:GID:member,member,...

각 요소는:
groupname
group 이름

!
이 field는 password란이지만 /etc/gshadow file로 옮겨졌다.

GID
group ID number

member
group member의 list

이다.
/etc/gshadow file 의 형식은 다음과 같다:

groupname:password:admin,admin,...:member,member,...

각 요소는:
groupname
group 이름

password
encode된 group password.

admin
group 관리자 list

member
group member list

이다.
gpasswd 명령은 group의 사용자나 관리자를 추가, 또는 삭제할 때 쓴다. root또는 관리자만이 group member를 추가, 삭제할 수 있다.

group password는 root나 group 관리자에 의해 passwd 명령으로 바꿀 수 있다.

gpasswd에 대한 manual page가 현재 제공되어 있지 않지만, 아무런 parameter없이 gpasswd를 치면 option에 대한 list가 나오므로, file format과 개념만 잘 이해하면 사용법을 쉽게 익힐 수 있다.


7.5 일관성 점검 program들


pwck
pwck program은 /etc/passwd와 /etc/shadow file간에 틀린 점이 없는 지 점검한다. 이 것은 각각 사용자에 대해 다음과 같은 사항을 점검한다:

field의 갯수는 맞는가
사용자 이름은 유일한가
사용자와 group id
기본 group
home directory
login shell
또한, password가 없는 계정에 대해 경고를 준다.

Shadow Suite을 깐 뒤, pwck를 실행시키는 것은 좋은 생각이다. 주나 월단위등 주기적으로 실행시키기를 권한다. -r option을 쓴다면, cron으로 하여금 정기적으로 실행하고 결과를 보고하도록 할 수 있다.


grpck
grpck program은 /etc/group와 /etc/gshadow file간에 틀린 점이 없는 지 점검한다. 이것은 다음과 같은 사항을 점검한다:

field의 갯수는 맞는가
사용자 이름은 유일한가
사용자와 관리자의 list가 맞는가
자동 보고서를 위해 -r option이 있다.


7.6 Dial-up passwords.
Dial-up password는 전화접속을 허용하는 system에게는 또 하나의 방어선이다. 당신은 직접이든 network를 통해서건 많은 사람들이 system에 접속하게 할 수 있지만, 전화접속을 할 수 있는 사람을 제한하고 싶다면, dial-up password는 좋은 해결책이다. dial-up password를 쓰고 싶다면, /etc/login.defs의 DIALUPS_CHECK_ENAB를 yes로 바꾸면 된다.

두 file이 전화접속에 대한 정보를 담고 있다. /etc/dialups는 ttys에 대한 내용이다 ("/dev/"는 제거된 채로 line당 하나씩). tty가 list에 올라와있다면 dial-up 검사가 수행된다(?).

두번째는 /etc/d_passwd이다. 이 file에는 password와 shell의 완전한 pathname이 들어 있다.

tty를 통해서 log하는 사용자가 /etc/dialups에, 그의 shell이 /etc/d_passwd에 있다면, 그는 제대로 password만 입력하면 된다.

dial-up password의 또 다른 이용법는 한 line에 어떤 접속 유형(대개 PPP나 UUCP 접속)을 허용할 것인가를 정하는 것이다. 사용자가 다른 유형의 접속(특히, 일련의 shell로써)을 시도하고자 한다면, line을 사용할 수 있는 password를 알고 있어야 한다.

dial-up 기능을 사용하기 전에, file들을 만들어야 한다.

dpasswd 명령은 password와 /etc/d_passwd에 있는 shell을 연결해준다. 자세한 정보는 manual page에...


8. C program에 Shadow를 지원하도록 덧붙이기
C program에 Shadow를 지원하도록 덧붙이는 것은 실제적으로 매우 간단하다. 단지 문제는 /etc/shadow file에 접근하기 위해서는 program이 root(또는 SUID root)로 실행되어야 한다는 것이다.

이 것은 커다란 문제 하나를 우리에게 강요한다: SUID program을 만들 때, 매우 조심스럽게 programming하는 습관이 되어 있어야 한다. 예를 들어, program이 shell 탈출기능을 가지고 있고 이 program이 SUID root라면, 이 기능이 root 권한을 주어서는 안된다.

password를 검사해 할 수 있지만 다른 경우는 root권한으로 실행할 필요가 없는 program에 shadow 지원 기능을 덧붙임으로써, SUID program보다 훨씬 안전한 program을 만들 수 있게 한다. xlock program이 그 한 예이다.

아래 예에서, pppd-1.2.1d는 이미 SUID root로 실행하고 있으므로, shadow 지원 기능을 덧붙이는 것은 program이 더 취약하게 만들지 않을 것이다.


8.1 Header files
header file들은 /usr/include/shadow에 있다. 또한, /usr/include/shadow.h도 있다. 그러나, 이것은 /usr/include/shadow/shadow.h에 대한 symbolic link일 것이다.

shadow 지원 기능을 추가하기 위해, header file을 넣자:

#include <shadow/shadow.h>
#include <shadow/pwauth.h>

shadow code를 상황에 따라 compile하도록 compiler directive(지시자)를 쓰는 것은 종은 방법이다 (아래 예에서 보도록).


8.2 libshadow.a library
Shadow Suite을 설치할 때, libshadow.a file은 /usr/lib에 놓인다.

shadow 지원기능을 program에 넣을려면, linker에게 libshadow.a를 같이 link하도록 지시해주어야 한다.

다음처럼:

gcc program.c -o program -lshadow

어쨌든, 아래 예에서 보다시피, 대부분 거대한 program들은 Makefile을 사용하고, 우리가 고칠 LIBS=...라는 변수를 대개 쓴다.


8.3 Shadow 구조체
libshadow.a library는 /etc/shadow file로부터 얻는 정보를 spwd라는 구조체에 담는다. spwd 구조체에 대한 정의는 /usr/include/shadow/shadow.h file에 있다:


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

struct spwd
{
  char *sp_namp;                /* 사용자 이름 */
  char *sp_pwdp;                /* encrypt된 password */
  sptime sp_lstchg;             /* 최근 data 수정일 */
  sptime sp_min;                /* 수정작업간의 최소 날짜(결국 한번 수정한
                                   다음 언제 수정이 가능한가에 대한 대답) */
  sptime sp_max;                /* 수정작업간의 최대 날짜(password 유효기간) */
  sptime sp_warn;               /* password가 무효가 되기 전 경고하는 기간 */
  sptime sp_inact;              /* password가 무효된 뒤, 계정이 사용불능이
                                   될 때까지의 기간. */
  sptime sp_expire;             /* 날짜(계정사용불능 - 1/1/70) */
  unsigned long sp_flag;        /* 나중을 위해 비워둠 */
};


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

Shadow Suite는 sp_pwdp field에 encode된 passwd와 함께 다른 걸 넣을 수 있다. password field는 다음처럼 될 수 있다:

username:Npge08pfz4wuk;@/sbin/extra:9479:0:10000::::

이는 password에 덧붙여, /sbin/extra program이 더 심화된 인증을 위해 호출된다는 것을 의미한다. 호출되는 program은 username, 호출이유를 알려주는 switch를 받을 수 있어야 될 것이다. 자세한 걸 알고 싶다면, /usr/include/shadow/pwauth.h와 pwauth.c를 보기 바란다.

이것이 의도하는 바는 -두번 사용자 확인하는 데 사용할 수도 있는- 다른 현존하는(actual) 사용자 확인 방법을 수행할 수 있도록 pwauth 기능을 쓰는 것이다.

Shadow Suite의 저자는 현존하는 대부분의 program들이 이 기능을 쓰고 있지 않음은 지적하면서, Shadow Suite 차기 version에는 사라지거나, 바뀔 것이라고 한다.


8.4 Shadow 함수들
shadow.h file은 libshadow.a library에 있는 함수들의 기본형을 포함하고 있다:


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

extern void setspent __P ((void));
extern void endspent __P ((void));
extern struct spwd *sgetspent __P ((__const char *__string));
extern struct spwd *fgetspent __P ((FILE *__fp));
extern struct spwd *getspent __P ((void));
extern struct spwd *getspnam __P ((__const char *__name));
extern int putspent __P ((__const struct spwd *__sp, FILE *__fp));


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

예제에서 쓸 함수는: getspnam - spwd 구조체에서 사용자 이름을 가져오는 함수 - 이다.


8.5 Example
이것은 shadow 지원기능이 필요하지만 기본설정으로 되어 있지 않은 program에 그것을 추가하는 예제이다.

본 예제로, PAP이나 CHAP대신 /etc/passwd file에 있는 사용자이름과 password를 사용하여 PAP 인증을 수행하는 mode를 지닌, Point-to-Point Protocol Server (pppd-1.2.1d)를 들고 있다.

pppd의 이런 기능은 그리 자주 쓰이고 있지 않다. 그러나 Shadow Suite가 설치되면 이 기능은 못 쓰게 될 것이다. 왜냐하면 password는 더 이상 /etc/passwd에 있지 않기 때문이다.

ppad-1.2.1d에서 사용자 인증하는 code는 /usr/src/pppd-1.2.1d/pppd/auth.c file에 있다.

다음 code는 #include 지시자가 위치하는 file의 윗부분에 덧댈 필요가 있다. 우리는 조건지시자(conditional directive)로 #include를 둘러쌌다 (특별히 shadow 지원기능을 넣어 compile할 때만 포함하도록)


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

#ifdef HAS_SHADOW
#include <shadow.h>
#include <shadow/pwauth.h>
#endif


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

다음은 실제 code를 고치는 일이다. 아직도 auth.c file을 고치고 있다.

고치기 전의 auth.c는:


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

/*
 * login - Check the user name and password against the system
 * password database, and login the user if OK.
 *
 * returns:
 *      UPAP_AUTHNAK: Login failed.
 *      UPAP_AUTHACK: Login succeeded.
 * In either case, msg points to an appropriate message.
 */
static int
login(user, passwd, msg, msglen)
    char *user;
    char *passwd;
    char **msg;
    int *msglen;
{
    struct passwd *pw;
    char *epasswd;
    char *tty;

    if ((pw = getpwnam(user)) == NULL) {
        return (UPAP_AUTHNAK);
    }
     /*
     * XXX If no passwd, let them login without one.
     */
    if (pw->pw_passwd == '\0') {
        return (UPAP_AUTHACK);
    }

    epasswd = crypt(passwd, pw->pw_passwd);
    if (strcmp(epasswd, pw->pw_passwd)) {
        return (UPAP_AUTHNAK);
    }

    syslog(LOG_INFO, "user %s logged in", user);

    /*
     * Write a wtmp entry for this user.
     */
    tty = strrchr(devname, '/');
    if (tty == NULL)
        tty = devname;
    else
        tty++;
    logwtmp(tty, user, "");             /* Add wtmp login entry */
    logged_in = TRUE;

    return (UPAP_AUTHACK);
}


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

사용자 password는 pw->pw_passwd에 위치한다. 따라서 할 일은 getspnam 함수를 추가하는 것이 전부다. 이 함수는 spwd->sp_pwdp에 password를 할당한다.

우리는 다른 현존하는(actual) 사용자 확인 작업을 수행하도록 pwauth 함수를 넣을 것이다. 이는 shadow file에 설정되어 있으면 자동적으로 두번째 인증을 수행한다.

shadow를 지원하도록 고친 auth.c는:


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

/*
 * login - Check the user name and password against the system
 * password database, and login the user if OK.
 *
 * This function has been modified to support the Linux Shadow Password
 * Suite if USE_SHADOW is defined.
 *
 * returns:
 *      UPAP_AUTHNAK: Login failed.
 *      UPAP_AUTHACK: Login succeeded.
 * In either case, msg points to an appropriate message.
 */
static int
login(user, passwd, msg, msglen)
    char *user;
    char *passwd;
    char **msg;
    int *msglen;
{
    struct passwd *pw;
    char *epasswd;
    char *tty;

#ifdef USE_SHADOW
    struct spwd *spwd;
    struct spwd *getspnam();
#endif

    if ((pw = getpwnam(user)) == NULL) {
        return (UPAP_AUTHNAK);
    }

#ifdef USE_SHADOW
        spwd = getspnam(user);
        if (spwd)
                pw->pw_passwd = spwd->sp-pwdp;
#endif
 
     /*
     * XXX If no passwd, let NOT them login without one.
     */
    if (pw->pw_passwd == '\0') {
        return (UPAP_AUTHNAK);
    }
#ifdef HAS_SHADOW
    if ((pw->pw_passwd && pw->pw_passwd[0] == '@'
         && pw_auth (pw->pw_passwd+1, pw->pw_name, PW_LOGIN, NULL))
        || !valid (passwd, pw)) {
        return (UPAP_AUTHNAK);
    }
#else
    epasswd = crypt(passwd, pw->pw_passwd);
    if (strcmp(epasswd, pw->pw_passwd)) {
        return (UPAP_AUTHNAK);
    }
#endif

    syslog(LOG_INFO, "user %s logged in", user);

    /*
     * Write a wtmp entry for this user.
     */
    tty = strrchr(devname, '/');
    if (tty == NULL)
        tty = devname;
    else
        tty++;
    logwtmp(tty, user, "");             /* Add wtmp login entry */
    logged_in = TRUE;

    return (UPAP_AUTHACK);
}


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

주의해서 보면 우리가 한 다른 변화를 볼 수 있을 것이다. /etc/passwd file에 password가 없다면, 원 version은 UPAP_AUTHACK를 돌려주고 접속을 허용했다. 이건 안 좋다. 왜냐하면, 이 login기능의 일반적인 용도는 PPP process에 접근한 다음, PAP에 의해 지원되는 사용자 이름과 password를 /etc/passwd에 있는 사용자 이름과 /etc/shadow에 있는 password와 맞는지 점검하도록 허용하는, 한 계정을 사용하는 것이기 때문이다.

따라서, 원 version이 사용자(특히, ppp)를 위해 shell을 실행시키도록 설정했다면, 누구든지 그들의 PAP를 사용자이름을 ppp, password를 null로 함으로써 ppp 연결을 획득할 수 있었다.

우리는 이것을 password가 없다면 UPAP_AUTHACK대신 UPAP_AUTHNAK를 되돌려주도록 고쳤다.

흥미롭게도 pppd-2.2.0로 같은 문제를 지니고 있다.

다음은 두가지 일이 일어날 수 있도록 Makefile을 고지는 것이다: USE_SHADOW가 선언되어 있어야 하고, libshadow.a가 link되도록 할 필요가 있다.

Makefile에서는:

LIBS = -lshadow

그리고나서 다음 줄을:

COMPILE_FLAGS = -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t

에서:

COMPILE_FLAGS = -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t -DUSE_SHADOW

로 바꾼다.
이제 만들어서 설치하라.


9. 자주 묻는 질문들.
질: /etc/securettys file를 써서 root가 들어갈 수 있는 tty를 조정해왔읍니다만, 이제는 안 됩니다. 뭐가 잘못일까요?

답: /etc/securettys file은 Shadow Suite이 설치된 뒤에는 더이상 쓸 수 없읍니다. login 설정 file인 /etc/login.defs에서 root가 쓸 수 있는 tty를 정할 수 있읍니다. 이 file의 항목은 또 다른 file을 가르킬 수 있읍니다.


질: Shadow Suite을 설치했더니, login할 수 없읍니다. 내가 무얼 빼 먹었지요?

답: 아마 Shadow program들을 설치했지만, pwconv를 실행시키지 않았던지, /etc/npasswd와 /etc/nshadow를 /etc/passwd와 /etc/shadow로 복사하는 것을 잊었을 겁니다. 또한 login.defs를 /etc로 복사해야 됩니다.


질: xlock section에서, /etc/shadow의 group 소유자를 shadow로 바꾸라고 합니다. 나는 shadow group을 가지고 있지 않습니다. 뭘 해야되지요?

답: 추가하시면 됩니다. 간단히 /etc/group file에 한줄 추가하면 됩니다. 다른 group으로 쓰이고 있지 않은 group number로 할당해서 nogroup 항목전에 삽입하면 됩니다. 또는 xlock를 SUID root로 하면 됩니다.


질: Linux Shadow Password Suite에 대한 mailing list가 있읍니까?

답: 예, 하지만 다음 Linux Shadow Suite의 beta test와 개발을 위한 겁니다. shadow-list-request@neptune.cin.net에 제목(subject)을 subscribe로 해서 mail로 보내시면 list에 추가되실 수 있읍니다. 이 list는 실지로 Linux shadow-YYMMSS series에 대해서 토론하고 있읍니다. 만일 개발에 참가하고 싶거나, 당신의 system에 Suite를 깔고 최근 release에 대한 정보를 얻고 싶다면, 참가하셔도 됩니다.


질: Shadow Suite를 설치했읍니다. 그런데, userdel 명령을 사용할 때마다, "userdel: cannot open shadow group file"이란 message를 받습니다. 뭘 잘못했지요?

답: Shadow Suite를 SHADOWGRP option가능으로 compile했지만, /etc/gshadow file이 없는 것입니다. config.h를 편집해서 다시 compile하거나, /etc/group file을 만드십시요. shadow group에 대한 section을 참조하시기 바랍니다.


질: Shadow Suite을 설치했지만, 지금 /etc/passwd에 encode된 password가 있읍니다. 뭐가 잘못됐지요?

답: Shadow config.h file에 AUTOSHADOW option 가능하게 했거나, libc를 SHADOW_COMPAT option을 주고 compile했을 겁니다. 어느 문제인지 확인해서 다시 compile하십시요.


10. 저작권에 관해서.
The Linux Shadow Password HOWTO is Copyright (c) 1996 Michael H. Jackson.

모든 사본에 저작권와 이 허가 통고가 제공되는 이 문서의 동일한 사본을 만들고 배포하는 것을 허가합니다.

위에 명기된 동일한 사본에 대한 조건하에서, 문서가 수정된 것이라는 명백한 통고가 수정된 문서에 또한 포함되어, 이 문서의 수정된 version을 복사하고 배포하는 행위를 허가합니다.

위에 수정된 version에 대해 서술한 조건하에서, 이 문서의 다른 언어 번역본을 복사하고 배포하는 것을 허가합니다.

위에 수정된 version에 대해 서술한 조건하에서, 새로운 매체에 원 문서에 대한 알기 쉬운 참조을 포함시키는 것과 비슷한 원 문서를 알리는 데 필요한 사항을 담고, 이 문서를 다른 매체로 바꾸는 것을 허가합니다.


11. 감사말과 그 밖에...
auth.c에 대한 code 예제는 Copyright (c) 1993 and The Australian National University와 Copyright (c) 1989 Carnegie Mellon University의 pppd-1.2.1d와 ppp-2.1.0e에서 빌려왔다.

Linux용 Shadow Suite을 만들고, 유지보수하고 있는 것에 대해, 그리고 이 문서를 쭉 보고 논평해주신 Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl>께 감사드립니다.

친절하게 쭉 읽고, 시험해주신 Ron Tidd <rtidd@tscnet.com>께 감사드립니다.

이 문서가 더 나아지도록 정정사항을 알려주신 여러분께 감사드립니다.

어떤 논평이나 제안을 제게 보내주시기 바랍니다.

Michael H. Jackson <mhjack@tscnet.com>


이 번역에 대한 어떠한 논평이나 충고 부탁드립니다.

조용일 <tolkien@nownuri.nowcom.co.kr>

'Projects > Server' 카테고리의 다른 글

mysql 문자셋 인코딩 관련  (0) 2007.03.07
mysql 데이터 백업 및 복구  (0) 2007.03.07
Linux Shadow Password HOWTO  (0) 2007.03.07
Where it came from, where it's going - Tim Waugh  (0) 2007.02.28
리눅스 swap memory  (0) 2007.02.23
centos.org  (0) 2007.02.23

Where it came from, where it's going - Tim Waugh

Projects/Server 2007.02.28 15:16 Posted by soulfree >동네청년<

VNC

Where it came from, where it's going

Tim Waugh

Abstract

This article, which briefly explains what VNC is and what pieces of software have been written that use it and its ideas, was originally published (in Italian) in issue 2 of Red Hat Magazine. It was written using OpenOffice.org, and I have since reformatted it in DocBook. This version is more or less the same as the original; some URL references have been tweaked.


VNC is a thin client technology for using an X desktop (the graphical environment we use everyday). It stands for Virtual Network Computing and can be thought of as a software version of the “network computer” which never quite took off. If you have ever used the UNIX screen command, you might like to think of VNC as its graphical equivalent. You can start a desktop session, disconnect from it and then reconnect to it at will, even from a different X terminal. All of the applications are available exactly as before disconnecting.

In contrast, although X itself allows applications to display remotely, it does not provide this persistence; you cannot move an application window from one X server to another. Another thing that VNC allows you to do is to have several viewers all watching the same server. This can be useful in training environments for example.

The original VNC design and reference implementation arose from Olivetti Research Labs in Cambridge where it was used in a “teleport” system, whereby your desktop could follow you around the building, hopping to the nearest convenient terminal (an “active badge” on your clothing made this possible). Since those days AT&T bought the facility and the VNC engineers are now in a venture named RealVNC, a company which provides commercial support for the VNC product. Although it used to be the case that VNC releases were quite infrequent, since RealVNC took off they have been more regular. VNC is free software, licensed under the GNU GPL. This means that any modifications to the software must be made available in source form, a fact which has proven to be useful as we shall see later.

The differences between VNC and X should be made clear at this point, since the terminology can be quite confusing to the uninitiated. Both have clients and servers. For both, the server is where the desktop, with all the application windows, is stored. With X, the server is on the machine in front of you and drives the video card. An X client is an application that wants to display a window on the server, like a web browser or email application. A VNC client, in contrast, is an application that displays the desktop image to the user; normally the job of the X server. Both the VNC server and client perform tasks that the X server would normally do: maintaining the desktop image (in other words, the frame buffer) and displaying that image to the user.

The two independent parts are the client and of course the server and each can be running on a different platform. The protocol is designed to adapt to the amount of bandwidth available. It is also designed to make the client (the “viewer”) very simple, without requiring extensive computing resources. This makes it ideal for thin client deployments, diskless if need be, and this perhaps is the most convenient form of network computer made from commodity components.

VNC is in fact quite pervasive—it can run on anything from high end servers to hand-held devices such as palm pilots. The uVNC project even has an 8-bit port; remember the Commodore 64?

There is even a VNC viewer written in Java. This means that you can use it from your web browser on a machine that has had no special set up. Just point the browser at a special port on the server and it will serve up a Java applet ready to go. The port number will be 5800 plus the display number for the VNC server. The display number is used to identify different VNC servers on the same machine, in exactly the same way as X works. In fact, VNC servers and X servers share the same display number range, and so if there is already an X server running (usually on display number 0), a newly started VNC server will get display number 1. To use the Java viewer for that server, point a browser at http://machinename:5801/. Note that the Java applet uses the normal VNC port number (5900 plus display number). So, if you want to use a VNC server that is behind a firewall, you might want to open up that port. (More likely you will want to tunnel VNC over SSH—detailed further on.)

Needless to say, VNC runs on Red Hat Linux as well of course. In the latest release (Red Hat Linux 7.3) there is a VNC service that can be started on boot-up. This will start VNC servers for a configured list of users, each with their own assigned display number. To configure it, you need to edit the file /etc/sysconfig/vncservers and set which users should have VNC servers started for them, and with which display numbers.

In Figure?1, you can see an OpenOffice.org document being edited using the VNC Java applet running in Mozilla on Red Hat Linux. The only thing running locally is the browser, and any Java-enabled browser on any platform will do.

Figure?1.?Java VNC client

Java VNC client

Although VNC is the name of the technology as a whole, the protocol it uses is called RFB, which stands for Remote Frame Buffer. Conceptually you can think of a VNC client as a sort of abstracted video card. This “video card” happens to be over a network and is accessible only via the RFB protocol.

Compare this with how X traditionally works: the application may or may not be remote but the X server is running on the machine in front of you, showing you the application's window on your monitor. With VNC there is an addition: the X server machine may be different to the one that your monitor is connected to.

The X protocol is itself reasonably low bandwidth but it is difficult to compare it directly to RFB because they are at different levels: where X speaks in terms of lines and text and so on, RFB is only concerned with pixels, and mouse and keyboard events. There is no provision in RFB for storage at the viewer end other than the frame buffer itself, since this makes the viewer a simpler application.

On UNIX, the RealVNC server is essentially a modified XFree86 server, named Xvnc. It differs from VNC on Windows in the way it handles sessions. UNIX can have several X servers running at the same time, each with a different login, and VNC works just as any other X server would (since that is what it is). But Windows only has one session to use and so on that platform the VNC server attaches to that. This means that when you start a VNC server on a Windows machine you are sharing that existing session but on a UNIX machine a new session is started. There are however ways to share an existing session under UNIX, just like with Windows. Both types of sharing are useful in different circumstances.

When a VNC viewer first makes a connection to the server, they negotiate common ground for their capabilities. This allows implementations to be extensible to some degree. It is also at this initial stage that any authentication is performed. It is important to note here that this is only a simple authentication scheme to prevent casual misuse and no encryption is used at all in the mainstream version, although some implementations do have ways to do this.

From then on it is, perhaps surprisingly, the viewer and not the server that initiates messages. In effect the viewer repeatedly queries the server for any screen changes as well as transmitting input events such as typing. This leads to the bandwidth usage being adaptively self-limiting; the slower the network (or viewer), the less frequently updates can be requested. With a fast viewer and network, updates for tiny changes will be requested, but if the network is slow then several changes will be combined into one screen update. Commonly the viewer will only ask for updates every few seconds, or when the user moves the mouse or types on the keyboard. The illusion of constant updates can be maintained by asking for more updates when the screen actually does change; the idea is that usually several changes will happen very shortly after one another.

The server and viewer negotiate an “encoding” to use which they both understand and the specification lists some common ones. They include “hextile” (which breaks screen areas into tiles), “copyrect” (copying another area of the screen), “ZRLE” (a compressed variant) and “raw” for when the server is the same machine as the client. It turns out to be faster to transfer unencoded screen updates when it is all on the same machine.

The RFB protocol can be used in other ways than originally intended as well. One such way is scriptable remote control, which could be used for automating tasks with applications that were not designed with scripting in mind. You can run them in a VNC session and control the session using a program such as rfbplaymacro. This takes a script and translates it into RFB input events such as mouse movements, button presses and keyboard typing.

Another use of the RFB protocol is session playback, in other words recording a series of screen updates for later display. You might want to do this if you are setting up a “rolling demo” for a shop display. A simple way to achieve this is just to record the RFB screen updates as they happen into a file with a purpose written application. There are several which perform this function including rfbproxy, which was written for a demonstration machine on a trade show stand, and Jens Wagner's xrfbplayer (in the rfb package; see later).

The disadvantage of this approach is that only applications which understand the RFB protocol will be able to interpret the saved screen updates. However there is one utility named vnc2swf which converts this format into ShockWave Flash.

VNC is currently going in several directions. The fact that historically the Olivetti/AT&T releases were so slow has led to several independent VNC development efforts springing up. It will be interesting to see how these progress, now that the original VNC developers are working at RealVNC, a company entirely devoted to that project. I personally hope that some of the development forks will be merged back into the main RealVNC project. This is mainly possible because of the GNU GPL license, of course.

One development effort was started by Jens Wagner with his rfb project. This project is also licensed under the GNU GPL, although it is mostly a re-implementation rather than a modification. There are two main programs: x0rfbserver and xrfbviewer. The first is an implementation of the VNC server that can make VNC on UNIX act as it does on Windows. The way it works is that it shares your existing X session by watching the screen for updates. Unfortunately it can be quite slow to do this since it has to continually poll the screen (the same is true for the original Windows VNC server). The other program is a re-implementation of the VNC viewer application. It looks quite a lot prettier than the original—see Figure?2. It can also record sessions and play them back in the same way and using the same format as rfbproxy, and can create scripts that rfbplaymacro can use as well.

Figure?2.?xrfbviewer

xrfbviewer

Another notable offshoot of VNC is the Tight VNC project started by Const Kaplinsky. This is a modification of the original VNC software, and so is also available in source form under the GNU GPL. Its original purpose was to enhance the original program by implementing a new encoding named “tight”. This new encoding was designed by analysing the bandwidth problems of the existing encodings, and for real sessions can provide much better bandwidth usage. Const was able to directly compare encoding efficiency with the standard encodings by using a saved session provided by the rfbproxy program and so could fine-tune its performance. Now, Tight VNC includes several other enhancements as well as bug fixes. Among them is JPEG compression (for lossy compression, if you do not mind slight loss of detail but want to use less bandwidth), local cursor handling (to prevent data transfer when you are just moving the mouse), and automatic SSH tunnelling for security. Currently Red Hat Linux ships with Tight VNC in preference to the original VNC.

The enhancements from the Tight VNC project are still largely not incorporated into the main VNC project, and this gave an opening for a company named Tridia VNC. By incorporating features from Tight VNC and the rfb project, adding a Windows installer and offering commercial support, they provided a central place for features and enhancements to go, when it looked like the Olivetti/AT&T VNC development had stagnated.

There has even been a VNC server implementation written for 8-bit microcontrollers, such as toasters and microwave ovens. The author of uVNC envisions devices like light dimmer switches and thermometers embedding a VNC server, and being able to control them over a network! For two weeks Adam Dunkels (its author) had hooked up a Commodore 64 to the Internet running uVNC on its 6510 processor. As far as I have been able to tell, there are no VNC-enabled toasters available as yet, but I'll keep my fingers crossed.

One of the problems with the VNC servers we have seen so far is that it is difficult to embed them into your own application if you need to. Also, if a bug is found in one, it most likely needs fixing in several others since they share the same heritage. One obvious way to make this better is to separate out the protocol engine and share it between all of the implementations; in other words make it into a library. One such library is libvncserver. To see why this is so useful, take the simple rfbproxy program I wrote as an example. It is so simple that it only works if the viewer is using the same resolution and colour depth as when the original recording was done. This is because it literally just remembers the bytes that were transferred originally, rather than reconstructing the screen as it was and acting as a VNC server for that. Had libvncserver existed when I wrote rfbproxy I would certainly have used it and rfbproxy would have been a better program for it. Perhaps one day I will re-write it that way.

One application using the libvncserver library is a program that acts as a gateway between the Windows Terminal Server protocol (RDP) and the protocol used by VNC. This program, rdp2vnc, was in fact the reason libvncserver was originally written. With it, you can use Windows Terminal Server just like a VNC server.

Another application that uses libvncserver is the KDE Desktop Sharing service, which is due to appear in KDE 3.1. This is a small application which allows you to share your existing KDE desktop. A similar feature is planned for the GNOME desktop environment as well. This style of desktop sharing gives very good integration into the rest of the desktop and will make it much easier for new users. However, as I understand it, it works in the same way as x0rfbserver and needs to poll the screen for updates. What is really needed is for the X server to be able to notify applications of changes to the screen, and in fact an X extension for tracking screen changes has been proposed recently. Another approach is to have an X module for VNC sharing, so the X server itself becomes the VNC server, eliminating the need for slow polling.

This problem is solved by Alan Hourihane's xf4vnc. This is exactly what is needed: a VNC server implementation as an XFree86 module, in particular for XFree86 4.2.0. This also solves another VNC problem, namely that XFree86 has made several advances since the version VNC was based on (3.3.x), and so VNC has been lagging behind ever since. In fact 3.3.x is no longer maintained at all which leaves VNC users in a bad situation. As well as providing an X driver as a drop-in replacement for the old Xvnc server, xf4vnc provides a module which can be used for VNC-enabling an existing session, in the same way that the KDE Desktop Sharing service works. In fact it will be better than the Desktop Sharing service since it will not need to poll the screen and as a result will be faster. The xf4vnc project is licensed under the GNU GPL, although that is incompatible with the license of XFree86 and so it will never be merged (but it can of course be used by everyone). It is quite a recent development and so is not being shipped by any free software vendors yet to my knowledge. It is based on the original VNC and therefore unfortunately does not have many of the enhancements of some of the other VNC projects.

VNC can be used as a teaching tool, for either teleteaching where the students are physically remote from the teacher, or class teaching in the same room. In this mode generally the teacher's screen is viewable by the students but they may not control it. When there are just a few students, all is well and good, but VNC does not scale to large numbers of viewers. One approach to solving the problem is to use multicast where the same IP packet is sent to multiple machines, rather than the unicast method (one IP packet per machine) that appears in standard VNC. This modification has been made in the MulticastVNC program.

With some teaching environments, such as computer troubleshooting, the teacher needs to be able to see and control the text console as well as the graphical environment. Imagine for example the class entitled “setting up an X server” or “recovering from boot-up problems”. There is hardware available to solve this problem, but it is quite expensive. An adequate but not as comprehensive solution can be made from software. One attempt to do this is the vtgrab project. This aims to be a text mode equivalent of VNC for the actual text console of a Linux machine. It can replicate the server machine's console on the teacher's machine in a window and is designed to be usable over a serial link (so that it does not rely on a working network connection). The teacher can switch between consoles and can see console switches made by the student; the teacher can also type at the remote console. If the student's machine is switched to a console running X, then it automatically starts x0rfbserver on the student's machine and a VNC viewer on the teacher's machine. As far as that goes it works well enough but there is plenty more to do and it will never fully replace a hardware solution. It can not start until the operating system is booted, whereas a hardware solution would allow remote BIOS setting changes for example.

There are several areas in which the current VNC efforts are lacking. One often requested feature is the ability to print things remotely and transfer files easily as part of VNC. Solutions to these problems, so the argument goes, exist already independently of VNC—network printer sharing, in the printing case, and FTP or scp in the file transfer case—but it is asked for often enough that there obviously needs to be some better integrated way of doing it. Development efforts in this area are sporadic but frequent although there is not much progress to report yet. It seems clear though that there is no need to invent another way of transferring print jobs between machines for example; all that is needed is integration to an existing method. The eSVNC project seems to be taking steps in this direction.

One interesting possible future direction would be the ability to transfer sound as well as images. In a shared session it would be advantageous to be able to talk to the person whose session you are sharing. Several low bandwidth methods are possible and with the (admittedly gradual) rise in popularity of Ogg Vorbis perhaps someone will find enough incentive to attack this problem. Even an out-of-band way of writing text to each other would be a good first step in this direction.

Perhaps the most often requested feature, and surely the most needed, is encryption. In the reference implementation from RealVNC, a challenge-response authentication scheme is possible. However even this is unfortunately vulnerable to a man-in-the-middle attack. This is in spite of the fact that it is possible to do authentication securely as well as encrypting all communications to boot (for example SSH). VNC was designed to get its job done on a trusted network and so security was never really a goal. In this day and age though, it is more and more common for people to want to share desktops across the Internet using their broadband connections making security much more of an issue.

Luckily it is possible to “tunnel” a normal VNC session over a properly authenticated connection such as SSH or Zebedee. In the short term this is adequate, and not all that difficult to set up, but it is a huge shame that you need this extra step.

There are many more VNC-related projects underway than those I have mentioned here, and features which I have not pointed out. If there is something particular that you are after it may already exist; the links in this article are probably a good place to start looking.

출처: http://cyberelk.net/tim/articles/VNC/

'Projects > Server' 카테고리의 다른 글

mysql 데이터 백업 및 복구  (0) 2007.03.07
Linux Shadow Password HOWTO  (0) 2007.03.07
Where it came from, where it's going - Tim Waugh  (0) 2007.02.28
리눅스 swap memory  (0) 2007.02.23
centos.org  (0) 2007.02.23
리눅스 페도라 4 에서 oracle xe 설치 하기  (0) 2007.02.22
TAG VNC

리눅스 swap memory

Projects/Server 2007.02.23 00:29 Posted by soulfree >동네청년<

주로 오라클 설치시 swap 메모리 용량 부족시 많이들 사용합니다.


# dd if=/dev/zero of=/swap1 bs=1024 count=532480
(1024 바이트의 크기로 532480 블럭을 만드는거죠 즉 520M ,
만들고 싶은 크기x1024 해서 count 에 넣어 주시면 됩니다.)
# mkswqp /swap1 532480 (스왑 파일 생성)

# chmod 0600 /swap1
# sync; sync (확실하게 하기위해)
# swapon /swap1 ( 스왑 파일 활성화 )

free 명령으로 확인해 보세요.

해제할때는 swapoff /swap1 하시면 되겠죠.

부팅시 마다 스왑 파일을 활성화 시킬려면 /etc/rc.d/rc.local 파일
끝에 swapon /swap1 이라고 추가하면 됩니다.

'Projects > Server' 카테고리의 다른 글

Linux Shadow Password HOWTO  (0) 2007.03.07
Where it came from, where it's going - Tim Waugh  (0) 2007.02.28
리눅스 swap memory  (0) 2007.02.23
centos.org  (0) 2007.02.23
리눅스 페도라 4 에서 oracle xe 설치 하기  (0) 2007.02.22
RHEL4 복제품인 CentOS4와 오라클 10g설치  (0) 2007.02.16
TAG Linux, swap

centos.org

Projects/Server 2007.02.23 00:21 Posted by soulfree >동네청년<
http://www.centos.org/

'Projects > Server' 카테고리의 다른 글

Where it came from, where it's going - Tim Waugh  (0) 2007.02.28
리눅스 swap memory  (0) 2007.02.23
centos.org  (0) 2007.02.23
리눅스 페도라 4 에서 oracle xe 설치 하기  (0) 2007.02.22
RHEL4 복제품인 CentOS4와 오라클 10g설치  (0) 2007.02.16
Remote Administrator  (0) 2007.02.14
TAG CentOS4, Linux

리눅스 페도라 4 에서 oracle xe 설치 하기

Projects/Server 2007.02.22 19:41 Posted by soulfree >동네청년<

되는 사람도 있었구나...
======================================================


사용하지 않는 서버가 하나 있어서 시험삼아 설치 해 봤다..

서버 사양은 p3 733, 384M, 18*2 SCSI LVM2


우선 yum -y update 한방 날려 주고 시작 했다.


[root@ml370 ~]# rpm -ivh oracle-xe-univ-10.2.0.1-1.0.i386.rpm
오류: Failed dependencies:
       libaio >= 0.3.96 is needed by oracle-xe-univ-10.2.0.1-1.0.i386


libaio 가 설치 되어 있지 않다고 해서 설치 했다.


[root@ml370 ~]# yum install libaio
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for libaio to pack into transaction set.
libaio-0.3.104-2.i386.rpm 100% |=========================| 6.6 kB    00:00
---> Package libaio.i386 0:0.3.104-2 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
libaio                  i386       0.3.104-2        base               18 k

Transaction Summary
=============================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 18 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): libaio-0.3.104-2.i 100% |=========================|  18 kB    00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: libaio                       ######################### [1/1]

Installed: libaio.i386 0:0.3.104-2
Complete!



[root@ml370 ~]# rpm -ivh oracle-xe-univ-10.2.0.1-1.0.i386.rpm
준비 중...                  ########################################### [100%]
  1:oracle-xe-univ         ########################################### [100%]
Executing Post-install steps...
You must run '/etc/init.d/oracle-xe configure' as the root user to
configure the database.



기본 셋팅

[root@ml370 init.d]# ./oracle-xe configure

Oracle Database 10g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 10g Express
Edition.  The following questions will determine whether the database should
be starting upon system boot, the ports it will use, and the passwords that
will be used for database accounts.  Press <Enter> to accept the defaults.
Ctrl-C will abort.

Specify the HTTP port that will be used for Oracle Application Express [8080]:  [엔터]

Specify a port that will be used for the database listener [1521]: [엔터]

Specify a password to be used for database accounts.  Note that the same
password will be used for SYS and SYSTEM.  Oracle recommends the use of
different passwords for each database account.  This can be done after
initial configuration: [엔터]
Password can't be null. Enter password: 비밀번호
Confirm the password: 비밀번호

Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]: [엔터]
n 으로 하는 경우에 오류가 있을 수도 있다고 주서 들은 얘기.


Starting Oracle Net Listener...Done
Configuring Database... [한참 걸립니다.]
Starting Oracle Database 10g Express Edition Instance...Done
Installation Completed Successfully.
To access the Database Home Page go to "http://127.0.0.1:8080/apex"
[root@ml370 init.d]#


setup 에서 방화벽 설정 꺼두고서 pc 에서 웹주소로 접속을 해보면 접속 환경이

웹상에서 보이게 됩니다.


제한조건으로는 저장영역 4G 이하, SGA+PGA 1G 이하라고 하네요..

연습용으로 적당할 듯 합니다..

RHEL4 복제품인 CentOS4와 오라클 10g설치

Projects/Server 2007.02.16 15:11 Posted by soulfree >동네청년<

Fedora Core4 보다 RHEL4 복제품인 CentOS4를 설치하길 권합니다.

(CentOS4는 RHEL4 AS 클론이지만, 법적으로 아무런 제약이 없습니다.)

http://mirrors.kernel.org/centos/4.3/isos/i386/CentOS-4.3-i386-bin1of4.iso

http://mirrors.kernel.org/centos/4.3/isos/i386/CentOS-4.3-i386-bin2of4.iso

http://mirrors.kernel.org/centos/4.3/isos/i386/CentOS-4.3-i386-bin31of4.iso

http://mirrors.kernel.org/centos/4.3/isos/i386/CentOS-4.3-i386-bin41of4.iso

아래의 글은 오라클 10g 설치를 위한 OS(RHEL4) 설치 과정과 오라클 설치 내용입니다.

원문은 아래 링크입니다.

http://www.oracle.com/technology/global/kr/pub/articles/smiley_10gdb_install.html#rhel4

************************************************************************

Oracle Database 10g 는 RHEL 4 (Advanced Server / Enterprise Server)의 Base Release를 공식적으로 지원합니다. (RHEL4의 무료 평가판을 다운로드 하실 수 있습니다.) 업데이트 CD를 가지고 있는 경우, Base Release의 부트 CD 대신 업데이트 버전의 부트 CD를 이용하여 설치 과정에서 업데이트를 자동 적용할 수 있습니다. 오라클은 Red Hat을 통해 제공되는 모든 업데이트를 지원합니다.

Linux 운영체제의 설치 과정에서 업데이트를 가장 쉽고 빠르게 적용하는 방법은, 업데이트 CD를 사용하여 설치 작업을 수행하는 것입니다. Linux가 이미 설치되어 있고 업데이트 CD를 가지고 있지 않다면, Red Hat Network에서 다운로드하여 적용할 수도 있습니다.
이 문서는 Linux를 처음부터 설치하는 과정을 설명하고 있으므로, 업데이트 CD를 사용하는 것으로 합니다.

  1. 첫 번째 CD를 사용하여 서버를 부팅합니다.
    • CD로부터의 부팅을 위해 BIOS 설정을 변경해야 할 수도 있습니다.
  2. 부트 스크린이 나타나고 스크린 하단에 boot:프롬프트가 표시됩니다.
    • 그래픽 UI를 이용한 설치를 계속하기 위해 Enter를 입력합니다 (그 밖의 다른 설치 방법 및 옵션에 대해서는Red Hat Installation Guide를 참고하십시오.)
    • 인스톨러가 하드웨어를 검색하고, 잠깐 동안 Red Hat 스플래쉬 스크린을 표시한 뒤, 스크린 프롬프트를 표시합니다.
  3. Language Selection
    • 디폴트 설정을 사용합니다.
  4. Keyboard Configuration
    • 디폴트 설정을 사용합니다.
  5. Welcome Screen
    • Next를 클릭합니다.
  6. Disk Partitioning Setup
    • 디스크 파티셔닝에 대한 상세한 설명은 이 가이드의 주제 범위에서 벗어나므로, 여기에서는 사용자가 디스크 파티셔닝 방법에 대해 숙지하고 있는 것으로 가정합니다.

      (WARNING: 디스크 파티셔닝 과정에서의 실수로 인해 하드 디스크의 모든 내용이 삭제될 수 있음을 각별히 주의하시기 바랍니다. 진행 방법을 정확히 이해하지 못한 경우 작업을 중단하고 다른 정보를 참고하시기 바랍니다. 그렇지 않은 경우 데이타를 모두 잃어 버릴 수 있습니다!)

      이 가이드에서는 아래와 같은 파티셔닝 구성을 사용합니다. (ext3 파일시스템 사용):

      첫 번째 컨트롤러 (/dev/sda)의 9GB 디스크에는 Linux 및 오라클 소프트웨어가 저장되며, 다음과 같이 파티션이 설정됩니다:
      - 100MB /boot 파티션
      -1,500MB swap 파티션?이 파티션의 용량은 최소 RAM 사이즈의 두 배, 최대 2 GB를 넘지 않도록 설정합니다. (32 bit 시스템은 2 GB 이상의 스왑 파일을 지원하지 않습니다.) 2 GB이상의 스왑 공간이 필요한 경우에는 스왑 파티션을 여러 개 생성합니다.
      -7,150MB root 파티션?이 파티션은 /usr, /tmp, /var, /opt, /home 등의 모든 데이타를 저장하는데 사용합니다. 여기에서는 설치 과정에 대한 이해가 쉽도록 매우 단순한 구성을 사용하였습니다. 보다 안정적인 환경을 구현하려면 디렉토리들을 별도의 파일시스템에 구분하여 생성해야 할 것입니다.

  7. Boot Loader Configuration
    • 디폴트 설정을 사용합니다.
  8. Network Configuration
    • 일반적으로 서버에는 정적 IP 주소를 설정하는 것이 권장됩니다. Edit를 클릭합니다 .
    • 팝업 윈도우가 표시됩니다. Configure using DHCP 박스의 체크를 해제하고, 서버의 IP Address와 Netmask를 입력합니다. Activate on boot가 체크되어 있는지 확인한 후 OK를 클릭합니다 .
    • Hostname 박스에서 manually를 선택하고 호스트네임을 입력합니다.
    • Miscellaneous Settings 박스에서 기타 네트워크 설정값을 입력합니다.
  9. Firewall Configuration
    • 본 문서에서는 방화벽이 사용되지 않는 것으로 가정합니다. No firewall을 선택합니다.
  10. Additional Language Support
    • 디폴트 설정을 사용합니다.
  11. Time Zone Selection
    • 현 위치에 해당하는 시간대 설정을 선택합니다. 서버 환경에서는 시스템 시간을 UTC에 맞추도록 설정하는 것이 일반적으로
      권장됩니다.
      여기에서는 System clock uses UTC를 클릭하기로 합니다.
  12. Set Root Password
    • root 계정의 패스워드를 입력하고, 확인을 위해 재입력합니다.
  13. Package Installation Defaults
    • Customize software packages to be installed를 선택합니다.
  14. Package Group Selection
    • 아래의 패키지 셋만을 선택하고, 다른 것들은 선택하지 않도록 합니다.
    • Desktop
      • X Window System
      • Gnome
      • UI의 선택에 관련하여 RHES2.1 섹션의 설명을 참고하시기 바랍니다.
    • Applications
      • Editors
      • Graphical Internet
    • Servers
      • 이 그룹 내에서는 아무 것도 선택하지 않습니다.
    • Development
      • Development Tools
    • System
      • Administration Tools
    • Red Hat Enterprise Linux
      • 이 그룹 내에서는 아무 것도 선택하지 않습니다.
    • Next를 클릭하여 다음 단계로 진행합니다.
  15. Installing Packages
    • 소프트웨어가 하드 디스크에 복사되고 설치가 진행됩니다. 프롬프트가 뜨는 경우 디스크를 교체해 줍니다.
  16. Congratulations
    • 시스템에서 설치 CD를 꺼내고 Reboot를 클릭합니다 .
  17. 17. 시스템이 자동적으로 리부팅 되고 다시 welcome 스크린이 뜹니다.
    • Next를 클릭합니다.
  18. License Agreement
    • License Agreement를 숙지한 후, 조건에 동의하는 경우 Yes, I agree to the License Agreement를 선택하고 Next를 클릭합니다.
  19. Date and Time
    • 날짜와 시간을 설정합니다.
    • NTP 서버를 사용하려는 경우(권장), Enable Network Time Protocol을 선택하고 NTP 서버의 이름을 입력합니다.
  20. Display
    • 변경할 필요가 없다면 디폴트를 선택합니다.
  21. Red Hat Login
    • Red Hat Network 로그인/패스워드를 입력하거나 새로운 계정을 생성합니다.
  22. System User
    • 시스템에 로그인하기 위한 계정을 생성합니다.
    • 오라클 관련 계정은 아직 생성하지 않습니다. 오라클 계정의 생성에 대해서는 뒷부분에서 다룹니다.
  23. Additional CDs
    • Next를 클릭합니다.
  24. Finish Setup
    • Next를 클릭합니다.
  25. 그래픽 로그인 스크린이 표시됩니다.
  26. 축하합니다! 이것으로 RHEL4 소프트웨어의 설치가 완료되었습니다.

설치 결과의 검증

위에서 설명된 모든 과정을 완료했다면, Oracle Database 10g 에 필요한 모든 패키지와 업데이트가 적용된 상태입니다.
설치 결과의 검증을 위해 아래 작업을 수행합니다.

커널 버전 요구사항: 2.6.9-5.EL (RHEL4의 Base Release에 포함된 커널 버전입니다. 이 버전 또는 업데이트를 통해 제공되는 다른 모든 버전은 Oracle Database 10g 와 연동합니다.)

아래 명령을 수행하여 커널 버전을 점검합니다:

uname -rEx:# uname -r2.6.9-5.ELsmp
기타 패키지의 버전은 아래와 동일하거나 그 이후의 버전이어야 합니다:
  • gcc-3.4.3-9.EL4
  • make-3.80-5
  • binutils- 2.15.92.0.2-10.EL4
  • openmotif-2.1.30-11
  • setarch-1.6-1
  • compat-db-4.1.25-9
시스템에 설치된 패키지의 버전을 확인하기 위해, root 계정에서 아래와 같이 명령을 입력합니다:
rpm -q gcc make binutils openmotif setarch compat-dbEx:  # rpm -q gcc make binutils openmotif setarch compat-dbgcc-3.4.3-9.EL4make-3.80-5binutils-2.15.92.0.2-10.EL4setarch-1.6-1compat-db-4.1.25-9

제 II 부: 오라클 환경을 위한 Linux 설정

Linux 소프트웨어의 설치가 완료되었다면, 다음에는 오라클 환경의 설정 작업을 수행할 차례입니다.
이 섹션에서는 Oracle Database 10g 를 위해 Linux를 설정하는 과정을 설명합니다.

시스템 요구사항의 검증

시스템이 Oracle Database 10g 의 최소 요구사항을 만족하는지 확인하기 위해, root 계정으로 로그인하고 아래 명령을 수행합니다. 메모리와 swap 공간을 확인하기 위해서 아래와 같이 실행합니다:

grep MemTotal /proc/meminfogrep SwapTotal /proc/meminfoEx:# grep MemTotal /proc/meminfoMemTotal:       512236 kB# grep SwapTotal /proc/meminfoSwapTotal:     1574360 kB

최소 메모리 요구사양은 512MB, swap 공간의 최소 요구사항은 1GB입니다. swap 공간은 2GB 이하 메모리를 장착한 시스템의 경우 메모리 용량의 2배로, 2GB를 넘는 메모리를 장착한 시스템의 경우 메모리 용량의 1~2배 사이의 용량으로 설정되어야 합니다.

또 Oracle Database 10g 소프트웨어를 위해 2.5 GB의 공간이 필요하며, 이와 별도로 데이타베이스를 위해 1.2 GB의 추가 공간이 요구됩니다. /tmp 디렉토리에는 최소한 400 MB의 여유 공간이 있어야 합니다. 디스크 여유 공간을 확인하기 위해, 아래와 같이 명령을 수행합니다:

df -hEx:# df -hFilesystem        Size  Used Avail Use% Mounted on/dev/sda3         6.8G  1.3G  5.2G  20% //dev/sda1         99M   17M   77M  18% /boot

위의 예에서는 /tmp 디렉토리가 별도 파일시스템에 구현되어 있지 않고, root 파일시스템에 포함되어 있습니다. 디스크 여유공간이 5.2 GB이므로, 설치에 필요한 공간(2.5 + 1.2 + 0.4 = 4.1GB)은 충분합니다.

오라클 그룹 및 사용자 계정 생성

다음으로, Oracle Database 10g 소프트웨어의 설치 및 관리에 사용할 Linux 그룹 및 사용자 계정을 생성합니다. 사용자 계정은 ‘oracle’, 그룹은 ‘oinstall’과 ‘dba'로 명명합니다. root 계정으로 아래 명령을 실행합니다:

/usr/sbin/groupadd oinstall/usr/sbin/groupadd dba/usr/sbin/useradd -m -g oinstall -G dba oracleid oracleEx:# /usr/sbin/groupadd oinstall# /usr/sbin/groupadd dba# /usr/sbin/useradd -m -g oinstall -G dba oracle# id oracleuid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba)

오라클 계정의 패스워드를 설정합니다:

passwd oracleEx:# passwd oracleChanging password for user oracle.New password:Retype new password:passwd: all authentication tokens updated successfully.

디렉토리의 생성

이제 Oracle 10g 소프트웨어와 데이타베이스 파일을 저장할 디렉토리를 생성할 차례입니다. 본 문서는 Optimal Flexible Architecture (OFA)의 디렉토리 명명법을 준수하고 있습니다. OSF 표준에 대한 자세한 정보는 Oracle Database 10g Installation Guide for UNIX SystemsAppendix D 를 참고하시기 바랍니다 .

모든 디렉토리는 root 파일 시스템에 생성하는 것으로 가정합니다. 이것은 일반적으로 권장되는 구성은 아니지만, 예제를 단순화함으로써 이해를 돕기 위해 설정한 것입니다. 일반적으로 오라클 디렉토리는 별도의 파일 시스템에 생성하는 것이 권장됩니다.

root 계정에서 아래 명령을 실행합니다t:

mkdir -p /u01/app/oraclemkdir -p /u02/oradatachown -R oracle:oinstall /u01/app/oracle /u02/oradatachmod -R 775 /u01/app/oracle /u02/oradataEx:# mkdir -p /u01/app/oracle# mkdir -p /u02/oradata# chown -R oracle:oinstall /u01/app/oracle /u02/oradata# chmod -R 775 /u01/app/oracle /u02/oradata

Linux 커널 매개변수의 설정

다른 UNIX 시스템과 달리, Linux 운영체제에서는 시스템이 실행 중인 상태에서 대부분의 커널 매개변수를 수정할 수 있습니다.
커널 매개변수를 변경한 뒤에 시스템을 리부팅할 필요도 없습니다. Oracle Database 10g 가 요구하는 커널 매개변수 설정이 아래와 같습니다. 아래 설정된 수치는 최소값을 의미하며, 시스템이 아래 명시된 것보다 높은 수치로 설정되어 있는 경우에는 변경하지 마시기 바랍니다.

kernel.shmall = 2097152kernel.shmmax = 2147483648kernel.shmmni = 4096kernel.sem = 250 32000 100 128fs.file-max = 65536net.ipv4.ip_local_port_range = 1024 65000

본 문서의 설명대로 Linux 운영체제를 설치한 경우라면 커널 매개변수가 디폴트 값으로 설정되어 있으므로, root로 로그인한 후
아래 명령을 복사하여 붙여 넣는 방법으로 실행할 수 있습니다.

cat >> /etc/sysctl.conf <> /etc/sysctl.conf < kernel.shmall = 2097152> kernel.shmmax = 2147483648> kernel.shmmni = 4096> kernel.sem = 250 32000 100 128> fs.file-max = 65536> net.ipv4.ip_local_port_range = 1024 65000> EOF# /sbin/sysctl -pnet.ipv4.ip_forward = 0net.ipv4.conf.default.rp_filter = 1kernel.sysrq = 0kernel.shmall = 2097152kernel.shmmax = 2147483648kernel.shmmni = 4096kernel.sem = 250 32000 100 128fs.file-max = 65536net.ipv4.ip_local_port_range = 1024 65000

설정을 확인하기 위해 아래 명령을 실행합니다:

/sbin/sysctl -a | grep shm/sbin/sysctl -a | grep sem/sbin/sysctl -a | grep file-max/sbin/sysctl -a | grep ip_local_port_rangeEx:# /sbin/sysctl -a | grep shmkernel.shmmni = 4096kernel.shmall = 2097152kernel.shmmax = 2147483648kernel.shm-use-bigpages = 0# /sbin/sysctl -a | grep semkernel.sem = 250        32000   100     128# /sbin/sysctl -a | grep file-maxfs.file-max = 65536# /sbin/sysctl -a | grep ip_local_port_rangenet.ipv4.ip_local_port_range = 1024     65000

시스템의 매개변수가 위에 명시된 값보다 낮게 설정된 경우, /etc/sysctl.conf의 매개변수를 추가하거나 수정해야 합니다.
작업이 완료되면, 아래 명령을 실행하여 변경된 설정을 반영시킵니다:

/sbin/sysctl -p

Novell SUSE Linux 운영체제의 경우 아래 명령을 사용합니다:

				   /sbin/chkconfig boot.sysctl on

oracle 사용자 계정의 Shell Limit 설정

오라클은 Linux 계정 별로 실행되는 프로세스와 열린 파일의 수를 제한하는 것을 권장합니다. 이를 위해, root 계정에서 아래 명령을
복사하여 붙여 넣는 방법으로 실행합니다:

cat >> /etc/security/limits.conf <> /etc/pam.d/login <

RHEL 2.1 / 3의 경우, 아래 명령을 사용합니다:

cat >> /etc/profile <> /etc/csh.login <

SLES8의 경우, 아래 명령을 사용합니다:

cat >> /etc/profile.local <> /etc/csh.login.local <

버그를 피하자! (Novell SUSE Linux에만 해당)

SLES8 및 SLES9 운영체제에는 /etc/services에 예약된 포트 설정으로 인해 Oracle Enterprise Manager 10g 의 설치가 실패하는 버그가 존재합니다. OEM DBConsole은 포트 1830을 필요로 하며, SUSE 환경에는 이 포트가 이미 /etc/services에 예약되어 있습니다. 이 버그에 대한 문서는 MetaLink(bug# 3513603)에서 확인하실 수 있습니다.

설치 과정에서의 문제를 예방하기 위해, Oracle Database 10g 소프트웨어를 설치하기 전에 root로 로그인하여 /etc/services 파일의 포트 1830~1849 부분을 코멘트 처리합니다. (변경 내용이 확실히 반영되도록 하기 위해 서버를 리부팅하는 것이 바람직합니다.)

oracle 계정을 위한 환경변수

오라클 제품을 사용하기 위해서 몇 가지 환경변수의 설정이 필요합니다. 데이타베이스 서버에서 설정해야 하는 환경변수가 아래와 같습니다:

ORACLE_BASE
ORACLE_HOME
ORACLE_SID
PATH

하나의 서버에 여러 가지의 오라클 제품 또는 데이타베이스를 운영하는 경우에는, ORACLE_HOME, ORACLE_SID, PATH 변수를 변경해야 합니다. ORACLE_BASE 변수는 변경되어서는 안되며, 변경이 필요한 경우 로그인 프로파일에서 설정해야 합니다. 오라클은 환경변수의 설정을 위한 유틸리티(oraenv)를 제공하고 있습니다.

ORACLE_BASE 변수를 로그인 프로파일에 추가하기 위해, oracle 계정으로 로그인한 뒤 (bash 또는 ksh을 사용하는 경우) bash_profile 또는 .profile 파일에 아래 라인을 추가합니다:

ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE

또는 (csh을 사용하는 경우) .login 파일에 아래 라인을 추가합니다:

setenv ORACLE_BASE /u01/app/oracle

변경 내역은 oracle 계정으로 다시 로그인하는 시점에 반영됩니다. 현재 세션의 변경 내역을 활성화하려면, 커맨드 라인에서 명령을
실행하면 됩니다.


제 III 부: 오라클의 설치

Oracle Database 10g는 OTN에서 다운로드할 수 있습니다. 오라클은 개발 및 테스트용 라이센스를 무료로 제공합니다. 하지만 기술지원은 제공되지 않으며, 운영 환경에서의 사용은 허용되지 않습니다. 상세한 라이센스 조건은 OTN에서 확인하실 수 있습니다.

먼저 Oracle Database 10g 소프트웨어의 배포본을 서버에 직접 다운로드하는 방법을 설명합니다.

로그인 UI를 통해 oracle 계정으로 로그인합니다.

Oracle Database 10g 배포본을 저장할 디렉토리를 생성합니다:

mkdir 10g _db

OTN으로부터 Oracle Database 10g 를 다운로드하기 위해, 브라우저에서 다음 URL을 입력합니다. (Mozilla를 통해서도 다운로드 가능합니다.) http://www.oracle.com/technology/software/products/database/oracle10g /htdocs/linuxsoft.html. Eligibility Export Restrictions 페이지를 작성하고 OTN License Agreement를 숙지합니다. 조건에 동의하는 경우, I Accept를 클릭합니다.

ship.db.cpio.gz 링크를 클릭하고, 위에서 생성한 디렉토리(10g _db)에 파일을 저장합니다. OTN에 로그인하지 않은 경우에는,
로그인이 필요하다는 프롬프트가 뜨게 됩니다.

파일의 압축을 풉니다:

cd 10g _dbgunzip ship.db.cpio.gzcpio -idmv < ship.db.cpio

소프트웨어의 설치

오라클 계정을 사용하여 로그인 합니다.

database name(ORACLE_SID)을 입력합니다. 일반적으로 5 문자 이하의 이름이 사용되며, 여기에서는 demo1이라는 이름을 사용하기로 합니다.

환경변수를 설정합니다:

  • Bourne and Korn shells
    ORACLE_BASE=/u01/app/oracle; export ORACLE_BASEORACLE_SID=demo1; export ORACLE_SID
    RHEL4 / SLES9의 경우:
    LD_ASSUME_KERNEL=2.4.19; export LD_ASSUME_KERNEL
  • C shell
    setenv ORACLE_BASE /u01/app/oraclesetenv ORACLE_SID demo1
    RHEL4 / SLES9의 경우:
    setenv LD_ASSUME_KERNEL 2.4.19
RHEL4 관련 주의 사항: Oracle Universal Installer는 설치 전에 운영체제의 버전을 점검하고 지원 가능 여부를 검증합니다.
Oracle Database 10g 10.1.0.3의 Installer는 RHEL4가 지원 가능한 버전임을 인식하지 못합니다. 이 경우, runInstaller를 실행하기 전에
아래 작업을 수행해야 합니다.
cp /etc/redhat-release /etc/redhat-release.origcat > /etc/redhat-release << EOFRed Hat Enterprise Linux AS release 3 (Taroon)EOF
Oracle Database 10g 소프트웨어의 압축을 푼 디렉토리로 이동합니다.
Ex:$ cd $HOME/10g _db

Disk1 디렉토리로 이동합니다.

Ex:$ cd Disk1

Oracle Universal Installer를 시작합니다.

$ ./runInstaller

  1. Welcome
    • Next를 클릭합니다.
  2. Specify Inventory Directory and Credentials
    • 이 가이드의 설명을 그대로 따라 했다면, 디폴트 설정을 사용해도 무방합니다. 그렇지 않은 경우, 올바른 inventory directory를 입력합니다.
    • operating system group name으로 oinstall을 입력합니다.
  3. Oracle을 서버에 처음 설치한 경우라면, orainstRoot.sh 스크립트를 root 계정에서 실행해야 한다는 팝업 창이 표시됩니다.
    root로 로그인한 뒤, 팝업 창에 명시된 디렉토리로 이동하여 스크립트를 실행합니다.
  4. Specify File Locations
    • 이 가이드의 설명을 그대로 따라 했다면, 디폴트 설정을 사용해도 무방합니다.
      그렇지 않은 경우, Source 경로와 Destination 경로가 올바르게 설정되었는지 확인합니다.
  5. Select Installation Type
    • 디폴트 설정(Enterprise Edition)을 그대로 사용합니다.
  6. Product-specific Prerequisite Checks
    • 이 가이드의 설명을 그대로 따라 했다면, 점검 작업에서 아무런 문제가 발생되지 않을 것입니다. 점검 작업이 실패한 경우,
      다음 단계로 진행하기 전에 문제의 원인을 확인합니다. (RHEL4 운영체제에서 binutils, gcc, openmotif에 대한 점검작업이 실패한 경우에는 경고 메시지를 무시하고 다음 단계로 진행합니다. SLES9에서 openmotif에 대한 점검작업이 실패한 경우에는 경고 메시지를 무시하고 다음 단계로 진행합니다.)
  7. Select Database Configuration
    • 디폴트 설정(Create a starter database, General Purpose)을 그대로 사용합니다.
  8. Specify Database Configuration Options
    • 데이타베이스의 Global Database Name을 입력합니다. ORACLE_SID와 서버의 domain name을 연결하여 명명해야 합니다. (예를 들어 ORACLE_SID가 demo1이고 domain name이 orademo.org라면, Global Database Name은 demo1.orademo.org가 됩니다.)
    • Global Database Name를 입력하면, SID는 자동으로 입력됩니다.
    • 디폴트 Database Character Set을 그대로 사용합니다.
    • Create database with sample schemas을 선택합니다.
  9. Select Database Management Option
    • Use Database Control for Database Management을 사용합니다.
  10. Specify Database File Storage Option
    • File System을 선택하고, 데이타베이스가 사용할 경로를 입력합니다 (예: /u02/oradata)
  11. Specify Backup and Recovery Options
    • Do not enable Automated backups를 선택합니다.
  12. Specify Database Schema Passwords
    • Use the same password for all the accounts를 선택합니다.
    • 패스워드를 반복 입력합니다.
  13. Summary
    • 설치되는 제품에 대한 요약이 제공됩니다.
    • Install을 클릭합니다.
  14. Install
    • 오라클 소프트웨어의 설치가 진행되는 과정에 여러 단계의 스크린이 표시됩니다.
    • 설치 과정의 마지막 단계에서 팝업 창을 통해 설정 정보가 표시됩니다. Enterprise Manager URL을 확인한 후 OK를 클릭하여 창을 닫습니다.
    • "Setup Privileges" 팝업 창을 통해 root 계정으로 configuration script를 실행해야 한다는 메시지가 표시됩니다.
      root로 로그인하여 팝업 창에 명시된 디렉토리로 이동한 뒤 root.sh 스크립트를 실행합니다. 스크립트에서 local bin directory의 위치를 묻는 프롬프트가 뜨면, 디폴트 값을 승인하고 Enter를 누릅니다. 스크립트의 실행이 완료되면 Setup Privileges 창으로 돌아가 OK를 클릭합니다 (아래 그림 참조.)
  15. End of Installation
    • 요약 화면에 표시된 URL을 확인하고 Exit를 클릭합니다.
  16. 축하합니다! 이것으로 Oracle 10g 데이타베이스의 설치가 완료되었습니다.


제 IV 부: 스토리지의 설정

제 3부에서 생성한 데이타베이스는 하나의 파일시스템(/u02/oradata)만을 사용합니다. 하지만 오라클 데이타베이스의 실제 스토리지 설정에는 여러 가지 방법이 가능합니다.

제 4부에서는 데이타베이스의 디스크 스토리지를 설정하는 방법에 대해 설명합니다. 특히 파일시스템을 추가하는 구성과 Automatic Storage Management (ASM)을 중점적으로 설명하게 될 것입니다. 로우 디바이스(raw device)를 사용한 구성과 Oracle Cluster File System (OCFS)에 대한 설명은 향후 작성될 Oracle Real Application Clusters 가이드 문서에 포함될 예정입니다.

파일시스템

파일시스템은 오라클 데이타베이스의 데이타 파일, 리두 로그, 컨트롤 파일을 저장하는 가장 일반적인 방법으로 활용됩니다.
파일시스템은 구현이 쉽고 써드 파티 소프트웨어를 이용한 관리가 불필요하다는 장점을 제공합니다.

대부분의 경우, 파일시스템은 Linux 운영체제의 최초 설치과정에서 생성됩니다. 하지만 설치가 완료된 이후에 새로운 파일시스템을
생성해야 하는 상황(예: 새로운 디스크 드라이브를 설치하는 경우)이 종종 발생하기도 합니다.

이 섹션에서는 새로운 파일 시스템을 생성하고, 오라클 데이타베이스에서 이를 활용하는 방법을 설명합니다. (별도로 명시되지 않는 한, 모든 명령은 root 계정으로 실행하는 것으로 가정합니다.)

디스크 파티셔닝

파일 시스템을 생성하려면 빈 디스크 파티션이 필요합니다. 이미 빈 디스크 파티션이 구성되어 있다면, 아래 과정을 생략해도 무방합니다.

아래 내용은 Linux 파일시스템을 위한 새로운 파티션을 생성하는 방법을 설명하고 있습니다. (주의: 디스크 파티셔닝 과정에서의 실수로 인해 하드 디스크의 모든 데이타가 삭제될 수도 있습니다.)

아래 예제에서는 /dev/sdb(파티션이 구성되지 않은 빈 SCSI 디스크)를 사용하여 전체 디스크(36 GB)를 하나의 파티션으로 설정합니다.

Ex:# fdisk /dev/sdbDevice contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabelBuilding a new DOS disklabel. Changes will remain in memory only,until you decide to write them. After that, of course, the previouscontent won't be recoverable.The number of cylinders for this disk is set to 4427.There is nothing wrong with that, but this is larger than 1024,and could in certain setups cause problems with:1) software that runs at boot time (e.g., old versions of LILO)2) booting and partitioning software from other OSs   (e.g., DOS FDISK, OS/2 FDISK)Command (m for help): pDisk /dev/sdb: 255 heads, 63 sectors, 4427 cylindersUnits = cylinders of 16065 * 512 bytes   Device Boot    Start       End    Blocks   Id  SystemCommand (m for help): nCommand action   e   extended   p   primary partition (1-4)pPartition number (1-4): 1First cylinder (1-4427, default 1):Using default value 1Last cylinder or +size or +sizeM or +sizeK (1-4427, default 4427):Using default value 4427Command (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.WARNING: If you have created or modified any DOS 6.xpartitions, please see the fdisk manual page for additionalinformation.Syncing disks.

생성된 파티션을 확인합니다:

Ex:# fdisk /dev/sdb The number of cylinders for this disk is set to 4427.There is nothing wrong with that, but this is larger than 1024,and could in certain setups cause problems with:1) software that runs at boot time (e.g., old versions of LILO)2) booting and partitioning software from other OSs   (e.g., DOS FDISK, OS/2 FDISK)Command (m for help): pDisk /dev/sdb: 255 heads, 63 sectors, 4427 cylindersUnits = cylinders of 16065 * 512 bytes   Device Boot    Start       End    Blocks   Id  System/dev/sdb1             1      4427  35559846   83  LinuxCommand (m for help): q

파일시스템의 생성

ext3를 사용하여 새로운 파일시스템을 생성합니다. 다른 파일시스템도 정상적으로 동작하지만, ext3의 경우 시스템 크래시가 발생했을 때 가장 빠른 복구가 가능하다는 장점이 있습니다.

Ex:# mke2fs -j /dev/sdb1mke2fs 1.26 (3-Feb-2002)Filesystem label=OS type: LinuxBlock size=4096 (log=2)Fragment size=4096 (log=2)4447744 inodes, 8889961 blocks444498 blocks (5.00%) reserved for the super userFirst data block=0272 block groups32768 blocks per group, 32768 fragments per group16352 inodes per groupSuperblock backups stored on blocks:        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632,        2654208, 4096000, 7962624Writing inode tables: doneCreating journal (8192 blocks): doneWriting superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 23 mounts or180 days, whichever comes first.  Use tune2fs -c or -i to override.

마운트 포인트의 생성

파일 시스템에는 마운트 포인트(mount point)가 필요합니다. 마운트 포인트란 파일시스템을 시스템의 디렉토리 트리에 “연결(attach)”하는데 사용되는 빈 디렉토리를 의미합니다. 마운트 포인트는 Oracle Flexible Architecture (OFA) 표준에 따라 명명되어야 합니다.
OFA 표준에 대한 자세한 설명은 Oracle 10g Database Installation GuideAppendix D를 참고하시기 바랍니다 .

이미 1 부에서 “/u01”, “/u02”를 디렉토리 명으로 사용했으므로, 여기에서는 “/u03”을 사용하기로 합니다.

Ex:# mkdir /u03

새로운 파일시스템을 /etc/fstab에 추가

시스템이 부팅될 때 파일시스템이 자동으로 마운트 되도록 하려면, /etc/fstab 파일에 파일시스템과 마운트 포인트에 대한 설정 항목을
추가해야 합니다. 텍스트 편집기를 사용하여 /etc/fstab 파일에 아래와 같이 라인을 추가합니다.

/dev/sdb1         /u03           ext3    defaults       1 1

파일시스템의 마운트

마운트된 파일시스템은 사용이 가능합니다. 파일시스템이 마운트 되기 전에는 파일의 저장이 불가능합니다. 아래 명령을 사용하여
파일시스템을 마운트하고, 사용가능 여부를 확인합니다.

mount /u03df -h /u03Ex:# mount /u03# df -h /u03Filesystem            Size  Used Avail Use% Mounted on/dev/sdb1             33G   33M  31G   1%   /u03

Oracle 디렉토리의 생성 및 권한 설정

이제 오라클 파일을 저장할 디렉토리를 생성할 차례입니다. 디렉토리 명은 OFA 표준 명명법을 따르며, ORACLE_SID=demo1의 설정을
사용합니다.

mkdir -p /u03/oradata/demo1chown -R oracle:oinstall /u03/oradatachmod -R 775 /u03/oradata

파일시스템에 테이블스페이스 생성

이제 파일시스템을 사용할 준비가 완료되었습니다. 다음으로 파일시스템에 데이타베이스 오브젝트를 저장할 테이블스페이스를 생성합니다. SYSTEM 계정으로 데이타베이스에 연결한 뒤, CREATE TABLESPACE 구문을 실행합니다.

Ex:$ sqlplusSQL*Plus: Release 10.1.0.2.0 - Production on Sun Jun 13 15:01:08 2004Copyright (c) 1982, 2004, Oracle.  All rights reserved.Enter user-name: systemEnter password:Connected to:Oracle Database 10g  Enterprise Edition Release 10.1.0.2.0 - ProductionWith the Partitioning, OLAP and Data Mining optionsSQL> create tablespace data1  2  datafile '/u03/oradata/demo1/data1_01.dbf' size 100M  3  extent management local  4  segment space management auto;Tablespace created.

이제 새로운 테이블스페이스에 테이블, 인덱스 등의 데이타베이스 오브젝트를 저장할 수 있습니다.

Ex:SQL> create table demotab (id number(5) not null primary key,  2  name varchar2(50) not null,  3  amount number(9,2))  4  tablespace data1;  Table created.

Automatic Storage Management (ASM)

이제 마지막으로 가장 흥미로운 부분에 대해 설명할 차례입니다. ASM은 Oracle Database 10g 에 추가된 새로운 기능으로, 플랫폼 독립적인 환경에서 파일시스템, 논리적 볼륨 관리자, 소프트웨어 RAID 등의 서비스를 제공합니다. ASM을 이용하여 디스크 스트라이핑(striping) 또는 미러링(mirroring)을 구성하거나, 데이타베이스가 운영 중인 상태에서 디스크를 추가하거나 제거할 수 있으며, 성능병목 요소(hot spot)를 제거하기 위해 자동으로 I/O 로드 밸런싱을 수행하는 것이 가능합니다. ASM은 direct I/O와 asynchronous I/O를 지원하며, Oracle9i에서 처음 구현된 Oracle Data Manager API(단순화된 I/O system call interface)를 통해 구현되었습니다.

AASM은 범용적인 파일시스템이 아니며, 오라클 데이타 파일, 리두 로그, 컨트롤 파일이 저장된 환경에서만 사용 가능합니다.
ASM의 파일의 생성/명명 작업은 데이타베이스(Oracle Managed Files 기능)에 의해 자동 수행될 수도 있고, DBA에 의해 수작업으로
수행될 수도 있습니다. ASM에 저장된 파일은 운영체제에서 접근할 수 없으며, ASM 파일의 백업/복구를 수행하려면 RMAN(Recovery Manager)을 사용해야 합니다.

ASM은 다른 데이타베이스가 접근 가능한 별도의 오라클 인스턴스에 구현됩니다. Linux에서 ASM을 사용하려면 OCSSD 서비스(Oracle Universal Installer에 의해 디폴트로 설치됩니다)가 실행되고 있어야 합니다. ASM의 메모리 요구사항은 매우 낮으며, 대부분의 시스템
환경에서 64 MB만을 사용합니다.

ASM의 설치

Linux 플랫폼에서 ASM을 구성하는 경우, 로우 디바이스(raw device)를 사용하거나, ASMLib 인터페이스를 통해 관리되는 디바이스를
사용할 수 있습니다. 오라클은 사용편의성 및 성능을 고려했을 때 로우 디바이스 대신 ASMLib을 사용하는 것을 권장합니다. ASMLib은 OTN에서 무료로 다운로드 가능합니다. 이 섹션에서는 ASMLib을 사용하여 단순한 형태의 ASM 인스턴스를 설정하고 ASM을 사용한
데이타베이스를 구현하는 방법을 설명합니다.

ASMLib 버전의 확인

ASMLib은 세 가지 Linux 패키지의 형태로 제공됩니다:

  • oracleasmlib - ASM 라이브러리
  • oracleasm-support - ASMLib 관리 유틸리티
  • oracleasm - ASM 라이브러리를 위한 커널 모듈
오라클은 각각의 Linux 배포판 별로 서로 다른 ASMLib 패키지를 제공합니다. 또 운영체제의 각 커널 버전 별로 서로 다른 oracleasm
패키지가 사용됩니다. 어떤 패키지를 사용해야 하는지 확인하기 위해 아래에 설명된 것과 같이 작업을 수행합니다.

먼저, 현재 사용 중인 커널 버전을 확인하기 위해 root 계정으로 로그인하고 아래 명령을 실행합니다:

uname -rmEx:# uname -rm2.4.9-e.27smp i686

위 실행 예의 경우, Intel i686 CPU 기반 SMP (multiprocessor) 시스템을 위한 2.4.9 커널 버전이 사용되고 있음을 확인할 수 있습니다.

ASMLib 패키지를 적용하기 위해 아래와 같이 작업을 수행합니다:

  1. 웹 브라우저에서 다음 URL을 입력합니다: http://www.oracle.com/technology/tech/linux/asmlib
  2. 사용 중인 Linux 버전의 링크를 클릭합니다.
  3. 사용 중인 Linux 버전의 oracleasmlib, oracleasm-support 패키지를 다운로드 합니다.
  4. 사용 중인 커널 버전의 oracleasm 패키지를 다운로드합니다.
    위 실행 예의 경우 oracleasm-2.4.9-e-smp-1.0.0-1.i686.rpm 패키지를 다운로드해야 합니다.

    다음으로, root 계정으로 아래 명령을 실행하여 패키지를 설치합니다:

    rpm -Uvh oracleasm-kernel_version-asmlib_version.cpu_type.rpm \oracleasmlib-asmlib_version.cpu_type.rpm \oracleasm-support-asmlib_version.cpu_type.rpmEx:# rpm -Uvh \> oracleasm-2.4.9-e-smp-1.0.0-1.i686.rpm \> oracleasmlib-1.0.0-1.i386.rpm \> oracleasm-support-1.0.0-1.i386.rpmPreparing...                #################################### [100%]   1:oracleasm-support      #################################### [ 33%]   2:oracleasm-2.4.9-e-smp  #################################### [ 66%]Linking module oracleasm.o into the module path [  OK  ]   3:oracleasmlib           #################################### [100%]

ASMLib의 설정

ASMLib을 사용하기 전에, 먼저 구성 스크립트를 실행하여 드라이버를 설정해야 합니다. 아래에 설명된 것과 같이 명령을 실행합니다.

# /etc/init.d/oracleasm configureConfiguring the Oracle ASM library driver.This will configure the on-boot properties of the Oracle ASM librarydriver.  The following questions will determine whether the driver isloaded on boot and what permissions it will have.  The current valueswill be shown in brackets ('[]').  Hitting  without typing ananswer will keep that current value.  Ctrl-C will abort.Default user to own the driver interface []: oracleDefault group to own the driver interface []: dbaStart Oracle ASM library driver on boot (y/n) [n]: yFix permissions of Oracle ASM disks on boot (y/n) [y]: yWriting Oracle ASM library driver configuration            [  OK  ]Creating /dev/oracleasm mount point                        [  OK  ]Loading module "oracleasm"                                 [  OK  ]Mounting ASMlib driver filesystem                          [  OK  ]Scanning system for ASM disks                              [  OK  ]

ASMLib 드라이버를 아래와 같이 활성화합니다.

# /etc/init.d/oracleasm enableWriting Oracle ASM library driver configuration            [  OK  ]Scanning system for ASM disks                              [  OK  ]

ASM 디스크의 구성

다음으로, ASM 드라이버가 사용할 디스크를 설정합니다. 여기에서는 파티션도 설정되지 않은 빈 디스크를 사용하고 있음에 주의하시기
바랍니다. ASM에 디스크 파티션을 사용하는 것도 가능하지만 권장되지는 않습니다.

root 계정으로 아래 명령을 실행하여, ASMLib에서 사용할 디스크를 설정합니다:

/etc/init.d/oracleasm createdisk DISK_NAME device_name

(주의: DISK_NAME은 대문자로 입력합니다. 소문자를 사용하는 경우 ASM 인스턴스에서 디스크를 인식하지 못하는 버그가 존재합니다.)

Ex:# /etc/init.d/oracleasm createdisk VOL1 /dev/sdbMarking disk "/dev/sdb" as an ASM disk                     [  OK  ]# /etc/init.d/oracleasm createdisk VOL2 /dev/sdcMarking disk "/dev/sdc" as an ASM disk                     [  OK  ]# /etc/init.d/oracleasm createdisk VOL3 /dev/sddMarking disk "/dev/sdd" as an ASM disk                     [  OK  ]# /etc/init.d/oracleasm createdisk VOL4 /dev/sdfMarking disk "/dev/sdf" as an ASM disk                     [  OK  ]# /etc/init.d/oracleasm createdisk VOL5 /dev/sdgMarking disk "/dev/sdg" as an ASM disk                     [  OK  ]# /etc/init.d/oracleasm createdisk VOL6 /dev/sdhMarking disk "/dev/sdh" as an ASM disk                     [  OK  ]

TASMLib에서 사용하도록 설정된 디스크의 목록을 확인하는 예가 아래와 같습니다.

# /etc/init.d/oracleasm listdisksVOL1VOL2VOL3VOL4VOL5VOL6

이것으로 ASMLib의 설치 및 디스크 설정이 완료되었습니다. 이제 ASM 인스턴스를 생성하고, ASM을 사용하는 데이타베이스를 구현할 수 있습니다. Data Base Configuration Assistant (DBCA)을 이용하면 이 작업을 간단하게 수행할 수 있습니다.

oracle 계정으로 로그인하고 DBCA를 실행합니다:

$ dbca

  1. Welcome
    • Next를 클릭합니다
  2. Operations
    • Create a Database를 선택합니다.
  3. Database Templates
    • General Purpose를 선택합니다.
  4. Database Identification
    • Global Database Name을 입력합니다.
  5. Management Options
    • Configure the Database with Enterprise Manager를 선택합니다.
    • Use Database Control for Database Management를 선택합니다.
  6. Database Credentials
    • Use Same Password for All Accounts를 선택합니다.
    • 패스워드를 설정합니다.
  7. Storage Options
    • Automatic Storage Management (ASM)를 선택합니다.
  8. Create ASM Instance
    • ASM 인스턴스의 패스워드를 설정합니다.
  9. 9. DBCA가 ASM 인스턴스를 생성 및 시작한다는 팝업 창이 표시됩니다.
    • OK를 클릭합니다.
  10. 10. ASM 인스턴스가 생성되는 동안 팝업 진행 창이 표시됩니다.
  11. ASM Disk Groups
    • ASM 인스턴스가 아직 생성되지 않은 상태이므로, 사용 가능한 디스크 그룹이 없다는 메시지 창이 표시됩니다.
    • Create New를 클릭합니다.
  12. Create Disk Group
    • Disk Group Name
      - 디스크 그룹 명(예: DATA1)을 입력합니다.
    • Redundancy
      - High는 데이타를 2중으로 미러링 합니다.
      - Normal은 기본적인 미러링 구성입니다.
      - External은 ASM의 디스크를 미러링 하지 않습니다. 이 옵션은 일반적으로 하드웨어 RAID 어레이가 구성된 경우에
      사용됩니다.
    • Select Member Disks
      - ASMLib 디스크의 위치를 수작업으로 지정해 주어야 합니다. Change Disk Discovery Path를 클릭합니다.
      -
      팝업 창을 통해 Disk Discovery Path를 입력합니다. 아래와 같이 Disk Discovery Path를 'ORCL:*'로 변경합니다.
      - OK를 클릭합니다.
    • 다시 Selected Member Disks 윈도우로 돌아갑니다. 사용할 ASMLib 디스크가 목록에 포함되었는지 확인합니다.
      체크박스를 클릭하여 디스크 그룹에 사용할 디스크를 선택합니다. 작업이 완료되면 OK를 클릭합니다.
  13. ASM Disk Groups
    • ASM Disk Groups 윈도우로 돌아갑니다. 앞 단계에서 생성한 디스크 그룹이 목록에 포함되었는지 확인합니다.
    • 디스크 그룹의 체크박스를 클릭합니다. (여기에서는 하나의 디스크 그룹만을 사용하는 것으로 합니다.)
    • Next를 선택합니다.
  14. Database File Locations
    • Use Oracle-Managed Files를 선택합니다.
    • 생성된 디스크 그룹에 Database Area가 설정되었는지 확인합니다. (플러스 기호로 시작됩니다. 예: “+DATA1”)
  15. Recovery Configuration
    • Specify Flash Recovery Area를 선택합니다.
      - Flash Recovery Area?Flash Recovery를 위해 사용할 ASM 디스크 그룹을 입력합니다.
      - Flash Recovery Area Size?디폴트 설정(2048)을 그대로 사용합니다.
    • 아카이브로그 모드를 사용하려는 경우 Enable Archiving을 선택합니다. 테스트 용도로만 사용하려는 경우라면 선택하지
      않고 다음 단계로 진행합니다.
  16. Database Content
    • Sample Schemas를 선택합니다.
    • Custom Script를 사용하지 않으므로 Next를 클릭합니다.
  17. Initialization Parameters
    • Next를 클릭합니다.
  18. Database Storage
    • Next를 클릭합니다.
  19. Creation Options
    • 디폴트 설정(Create Database)을 그대로 사용하고 Finish를 클릭합니다.
  20. Confirmation
    • Database Details 정보를 확인한 후 OK를 클릭합니다.
  21. DBCA가 수행할 작업 목록과 진행 상황을 표시합니다. 데이타베이스를 생성하는 작업은 하드웨어 환경에 따라 수 분에서 수
    시간이 소요됩니다.
  22. 데이타베이스 생성이 완료되었다는 메시지와 함께 요약 정보가 표시됩니다. Enterprise Manager URL을 확인한 후 Exit
    클릭합니다.


결론

이제 데이타베이스를 실행하고 Oracle Database 10g 가 제공하는 새로운 기능을 체험해 보기 위한 모든 준비가 완료되었습니다.
제일 먼저, 웹 인터페이스를 기반으로 전혀 새롭게 재작성된 Oracle Enterprise Manager를 확인해 보시기 바랍니다.
오라클 데이타베이스의 사용 방법에 익숙하지 않은 경우, Oracle Database 10g Concepts Guide2-Day DBA 가이드 를 참고하시면 도움이 됩니다. OTN은 10g 의 활용도를 극대화하기 위한 다양한 가이드를 제공하고 있습니다.
필자는 개인적으로, Arup Nanda의 "Oracle Database 10g : DBA를 위한 20가지 기능"을 추천합니다.


부록

SQL*Plus를 이용한 데이타베이스의 접근

oracle 계정으로 Linux 시스템에 로그인하고 아래와 같이 환경 변수를 설정합니다.

Set the Oracle environment variables:

$ export ORACLE_BASE=/u01/app/oracle$ export ORACLE_SID=demo1$ export ORACLE_HOME=$ORACLE_BASE/product/10.1.0/db_1$ export PATH=$PATH:$ORACLE_HOME/bin

SQL*Plus를 실행합니다:

$ sqlplusSQL*Plus: Release 10.1.0.2.0 - Production on Sat Jun 5 16:59:21 2004Copyright (c) 1982, 2004, Oracle.  All rights reserved.Enter user-name: / as sysdbaConnected to:Oracle Database 10g  Enterprise Edition Release 10.1.0.2.0 - ProductionWith the Partitioning, OLAP and Data Mining optionsSQL> 

Oracle Enterprise Manager 10g Database Control의 사용

웹 브라우저에서 설치과정에서 제공된 URL을 입력합니다.

Ex:
http://ds1.orademo.org:5500/em (데이타베이스에 DNS가 설정되지 않은 경우, 호스트 네임 대신 IP 주소를 입력해야 합니다.)

User Name: SYS
Password: <설치과정에서 입력한 패스워드>
Connect As: SYSDBA

을 클릭합니다

figure 6

Oracle Enterprise Manager 10g Database Control의 놀라운 세계에 오신 것을 환영합니다!

Oracle Enterprise Manager Database Control의 시작 및 중단:

$ emctl start dbconsole$ emctl stop dbconsole

iSQL*Plus를 이용한 데이타베이스 접근

iSQL*Plus는 SQL*Plus의 웹 기반 버전입니다. iSQL*Plus를 사용하려면, OEM 콘솔의 Related Links 섹션에 있는 iSQL* Plus 링크를
클릭하거나, 설치 과정에서 제공된 iSQL*Plus URL을 브라우저에 입력합니다.

Ex:
http://ds1.orademo.org:5560/isqlplus (데이타베이스에 DNS가 설정되지 않은 경우, 호스트 네임 대신 IP 주소를 입력해야 합니다.)

User Name: SYSTEM
Password: <설치과정에서 입력한 패스워드>

을 클릭합니다.

Workspace 박스에 SQL 명령을 입력한 뒤 Execute를 클릭합니다.

figure 7

iSQL*Plus의 시작 및 중단:

$ isqlplusctl start$ isqlplusctl stop

Listener의 시작 및 중단:

리스너(listener)는 클라이언트의 요청을 접수하고 인증 과정을 거친 후 데이타베이스 연결을 생성하는 역할을 담당합니다.
OEM과 ISQL*Plus를 사용하려면 리스너가 실행되고 있어야 합니다.

$ lsnrctl start$ lsnrctl stop

데이타베이스의 시작 및 중단:

데이타베이스를 시작/중단하는 가장 간단한 방법은 OEM 콘솔을 이용하는 것입니다. 같은 작업을 커맨드 라인에서 수행하려면 SQL*Plus에 oracle 계정으로 로그인하고 아래와 같이 실행합니다:

데이타베이스의 시작:

$ sqlplusSQL*Plus: Release 10.1.0.2.0 - Production on Sun Jun 13 22:27:48 2004Copyright (c) 1982, 2004, Oracle.  All rights reserved.Enter user-name: / as sysdbaConnected to an idle instance.SQL> startupORACLE instance started.Total System Global Area  188743680 bytesFixed Size                   778036 bytesVariable Size             162275532 bytesDatabase Buffers           25165824 bytesRedo Buffers                 524288 bytesDatabase mounted.Database opened.SQL> exit

데이타베이스의 중단:

$ sqlplusSQL*Plus: Release 10.1.0.2.0 - Production on Sun Jun 13 22:25:55 2004Copyright (c) 1982, 2004, Oracle.  All rights reserved.Enter user-name: / as sysdbaConnected to:Oracle Database 10g  Enterprise Edition Release 10.1.0.2.0 - ProductionWith the Partitioning, OLAP and Data Mining optionsSQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL> exit

오라클 프로세스의 목록 조회:

$ ps ?fuoracle

ocssd.bin 프로세스란 무엇인가?

Oracle Cluster Synchronization Services (OCSSD)는 ASM을 사용하는 RAC 및 단일 인스턴스 데이타베이스에서 요구되는 서비스입니다. OCCSD는 디폴트로 설치되며, 매우 적은 시스템 리소스만을 사용합니다. OCCSD는 /etc/inittab을 통해 설정 가능합니다.
이 프로세스는 시스템이 부팅될 때마다 자동으로 시작됩니다. 오라클은 ASM을 사용하지 않는 경우라도 OCCSD를 비활성화하는 것을
권장하지 않습니다.

출처 : oracle.com

top

re: 페도라 코어 4에 오라클 10g 설치하기좀 알려주세요

fbtjdals10 (2006-08-10 08:30 작성)1대1 질문하기

신고신고|이의제기이의제기


$ Exception in thread "main" java.lang.UnsatisfiedLinkError: /tmp/OraInstall2006-01-14_10-18-09AM/jre/1.4.2/lib/i386/libawt.so: libXp.so.6: cannot open shared object file: No such file or directory

at java.lang.ClassLoader$NativeLibrary.load(Native Method)

at java.lang.ClassLoader.loadLibrary0(Unknown Source)

at java.lang.ClassLoader.loadLibrary(Unknown Source)

at java.lang.Runtime.loadLibrary0(Unknown Source)

at java.lang.System.loadLibrary(Unknown Source)

at sun.security.action.LoadLibraryAction.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at sun.awt.NativeLibLoader.loadLibraries(Unknown Source)

at sun.awt.DebugHelper.(Unknown Source)

at java.awt.Component.(Unknown Source)


위에 색깔로 표시한 것처럼 해당 화일이 없어서 에러가 발생하는 것 입니다.


.bash_profile 은 각 계정의 디렉토리 속에 들어 있는 화일입니다.

각 계정의 설정파일입니다.

여러 환경 변수들이 있습니다. 전체 환경변수를 보려면

env

또는

set


명령을 주면 됩니다.


위의 명령 결과 중에 PATH 변수가 있습니다.

PATH(경로) 변수는 프롬프트에서 명령 실행시 명령어를 참조하는 디렉토리들을 포함합니다.

예를 들면,

명령 프롬프트에 ls 라고 입력을 하면

PATH 변수에 등록된 디렉토리 순서대로 각 디렉토리에 ls 명령어가 있으면 해당하는 ls 명령이 실행되는 것 입니다. ls는 /bin 디렉토리에 있습니다.

만약 PATH 변수에 /bin 디렉토리가 포함되지 않았을 경우에 ls 명령을 /bin 디렉토리가 아닌 /root 디렉토리에서 실행했다면

No such file or directory 또는 command not found 라는 메시지가 나옵니다.

run_installer 를 실행할 때도 앞에 ./ 를 붙이는데

PATH 설정에 run_installer 가 들어 있는 디렉토리가 포함되어 있지 않기 때문에

run_installer 가 어느 디렉토리에 있는지를 명시해 주는 것입니다.


.bash_profile 을 vi 편집기로 열면,

PATH=/bin:/usr/bin


위와 같이 디렉토리를 :로 연결해 놓은 형식의 줄이 있을 수도 없을 수도 있습니다.

있다면 마지막에 써있는 디렉토리 뒤에 :를 붙이며 새 디렉토리를 연결해 주면 됩니다.


만약에 위와 같은 PATH 변수 설정 구문이 없다면

PATH=$PATH:


위와 같이 새롭게 라인을 추가하고 마지막 : 뒤에 연결하고자 하는 디렉토리를 추가하면 됩니다. $PATH 는 이미 설정된 PATH 변수에 연결을 한다는 의미로 넣은 것 입니다.



출처 : opensrc 게시글중

top

re: 페도라 코어 4에 오라클 10g 설치하기좀 알려주세요

wholng5098 (2006-08-14 02:07 작성)1대1 질문하기

신고신고|이의제기이의제기

AdventNet SwisSQL - Oracle to SQL Server Edition
A PL/SQL to Transact-SQL Migration Tool
데이터베이스 어플리케이션을 다른 데이터베이스로 옮긴다는 것이 쉽지 않다는 것은 잘 알려진 사실입니다. 특히, 오라클의 PL/SQL이나 마이크로소프트의 Transact-SQL같이 특정 데이터베이스에 속해있는 언어로 작성된 어플리케이션의 경우는 더더욱 그렇습니다. 대부분의 데이터베이스 벤더들은 다른 데이터베이스로부터 그들의 데이터베이스로의 이전을 용이하게 하는 마이그레이션 툴을 제공합니다. 예를 들면 T-SQL을 PL/SQL로 전환해주는 오라클의 Migration work bench등 입니다. 이에 반해 마이크로소프트는 반대의 경우를 수행하는 툴을 제공하지 않습니다. 이러한 차이점을 SwisSQL ? Oracle to SQL Server Edition이 채우고자 합니다. 기업이 오라클에서 MS-SQLServer로 이전할 때나 ISV들이 Oracle과 SQL-Server 양쪽을 지원할 필요가 있을 때 SwisSQL - Oracle to SQL Server Edition은 오라클 PL/SQL의 프로시저, 펑션, 트리거들을 자동으로 T-SQL로 변환함으로써 이전작업을 간소화 시킬 수 있습니다.

SwisSQL - Oracle to SQL Server Edition은 또한 SwisSQL ? SQLOne API를 포함시켜서 PL/SQL이 포함된 SQL 문장을 특정 SQL-Server SQL문으로 번역할 수 있게 합니다.



Release Notes For AdventNet SwisSQL - Oracle to SQL Server Edition
Release 2.3에 추가된 특징

1. Stored Procedure내의 Sub-Procedure / Sub-Function 변환 지원

2. Oracle 데이터 타입을 SQL-Server 데이터 타입으로 변환 시에 사용되는 데이터 타입 맵핑의 설정

지원

3. GREATEST, LEAST, HEXTORAW, LAST_DAY 함수의 변환 지원

4. 툴이 수행하는 변환에 대한 이해를 돕기 위한 Report 제공

5. 툴 내에서 변환된 T-SQL 코드 컴파일을 제공

6. 이전의 버전보다 더 신뢰할 수 있는 변환이나 역방향 호환성을 가능케 함.

7. 2.2버전에서 생성된 버그 수정 및 성능 향상



SwisSQL - Oracle to SQL Server Edition의 일반적 특징

1. Cursor FOR 루프 내의 INLINE SELECT 문장 지원

2. PL/SQL의 이름 지어진 오브젝트 (프로시저, 펑션, 트리거, 팩키지 등)와 익명블록의 변환 지원

3. 오라클 데이터타입을 SQL-SERVER 데이터타입으로 변환 지원

4. PL/SQL 펑션을 T-SQL 펑션으로 변환 지원

5. ORACLE SQL 문장을 T-SQL SQL 문장으로 변환 지원

6. PL/SQL의 Scalar와 Record 타입 모두 지원

7. Cursor 선언, OPEN, FETCH, CLOSE 문장 변환 지원

8. Cursor 변수 변환 지원

9. User-defined Datatype 변환 지원

10. Implicit Cursor 변환 지원

11. PL/SQL 조건절 변환 지원

12. PL/SQL 제어문 변환 지원

13. Native Dynamic SQL(NDS) 변환 지원

14. %ROWCOUNT, %FOUND, %NOTFOUND, %ISOPEN 커서 attribute 지원

15. PL/SQL Label 변환 지원

16. PL/SQL IN OUT 모드 지원

17. PL/SQL Record 문장 지원

18. Collection 타입 변환 지원

19. COMMIT, ROLLBACK, SAVEPOINT 등의 트랜잭션 문장 변환 지원

20. || 와 같은 PL/SQL 문법의 변환 지원

21. 소스 데이터베이스에서 직접 PL/SQL 모델들을 fetch

22. 정형화, 가독성, 충분한 주석을 갖춘 T-SQL code 생성

23. 사용자 편의적인 그래픽 인터페이스 제공



Release 2.3의 한계점

1. Exception 블록 변환은 완벽하지 않습니다.

2. PL/SQL built-in 팩키지의 변환은 DBMS_OUTPUT과 DBMS_SQL 팩키지에 국한됩니다.

3. SYS_CONTEXT, TRANSLATE, NEW_TIME과 같은 몇몇 함수는 변환되지 않습니다.

4. Bulk SQL 문장은 지원되지 않습니다.

5. Package에 정의된 Stored Procedure, Function 또는 User datatype이 Stored Procedure 내에서

호출될 때, 해당 Package Specification은 SwisSQL - Oracle to SQL Server Edition을 통해 먼저

변환 되어야 합니다.

6. Stored Procedure 혹은 Function이 main Strored Procedure에 의해 호출될 때, 호출되는 Stored

Procedure가 먼저 SwisSQL - Oracle to SQL Server Edition를 통해 변환되어야 합니다.

7. Error report가 변환된 블록 가까이에 표시되지만 GUI 진행 리포트에는 표시되지 않습니다.

8. Pragma는 지원되지 않습니다.



알려진 Issue들

1. PL/SQL Package 명세는 해당 명세 안에 정의된 user-type, function, procedure를 사용하기 전에

수행되어야 합니다.

2. SwisSQL - Oracle to SQL Server Edition의 GUI는 와일드카드 문자를 사용한 PL/SQL 파일의 입

력을 혀용하지 않는다. 대신 전체 파일명이나 *.sql 이 주어져야 합니다.



이후 버전에서 개선될 점들

1. Exception 블록 변환 향상

2. PL/SQL built-in Package 변환 지원

3. GUI 성능 향상





User Guide
Table of Contents

툴 시작

PL/SQL문 변환

local machine에 저장된 소스 파일

database로부터 소스 임포트

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

AdventNet SwisSQL - Oracle to SQL Server Edition은 오라클 PL/SQL을 T-SQL로 변환하는 툴이다. 이 제품은 개발자들이 PL/SQL을 T-SQL로 변한 하는 작업을 돕기 위한 GUI를 제공합니다.



1.0 AdventNet SwisSQL-Oracle to SQL Server Edition GUI Migration Tool 시작

SwisSQL - Oracle to SQL Server Edition Migration tool을 시작하기 전에 초기화 설정이 필요합니다.



환경변수 설정

1. binsetenv.bat 파일 열기

2. oraclejdbc 환경변수에 Oracle JDBC driver classpath 설정

(예) set oraclejdbc= c:JDBCclasses12.zip where classes12.zip are the default JDBC drivers

provided by Oracle database



SwisSQL - Oracle to SQL Server Edition GUI Migration Tool 시작하기

툴을 시작하기 위해 툴의 홈 디렉토리로 이동

(AdventNetSwisSQLOracleToSQLServer2.3)

runPL2TSQL.bat 배치파일 실행



제품을 사용하려면




1. 다음 방법중 하나로 SwisSQL - Oracle to SQL Server Edition GUI Migration Tool 시작.



바탕화면에서 “SwisSQL ? OracleToSQLServer” 프로그램 아이콘을 더블 클릭. (제품 인스톨시 바탕

화면에 아이콘 생성 옵션을 선택한 경우)

(Or)

인스톨시 설정한 프로그램 폴더에서 “Oracle To SQL Server Edition”을 클릭

(디폴트 : Start -> Programs -> AdventNet SwisSQL -> SwisSQL-Oracle to SQL Server Edition

2.3 -> Oracle To Sql Server Editon 2.3)

(Or)

다음 경로에서 runPL2TSQL.bat 파일 실행

<OracleToSQLServer_Install_dir>AdventNetSwisSQLOracleToSQLServer2.3 디렉토리 또는 “bin” 디렉토리



2. Key 값을 묻는 대화상자가 나타난다. ‘Cancel’을 클릭해 대화상자를 닫습니다.



3. “PL2TSQLRegInfo.class” 파일이

“<OracleToSQLServer_Install_dir>AdventNetSwisSQLOracleToSQLServer2.3” 디렉토리에 생성된다. 이 파일을 swissql-support@adventnet.com에 보내 키 값을 얻는다. 파일을 보낼때는 윈집 등을 이용해서 압축한 후에 보낸다. AdventNet은 1000라인짜리 평가판 키 값을 보내줍니다.



주의 :

1. 압축된 파일을 사용하고 있는 업무용 메일로 보냄니다.

2. “PL2TSQLRegInfo.class” 파일은 컴퓨터 이름, IP 주소, MacAddress 등의 컴퓨터 정보를 가지고 있습니다.



키값을 획득한후에 툴을 다시 한번 실행하고 키 값을 입력하면 툴을 사용할 수 있게 됩니다.



2.0 PL/SQL stored procedure를 Transact ? SQL로 변환

변환은 다음의 옵션들을 통해서 수행 될 수 있습니다.

1. 로컬 머신에 저장된 PL/SQL 소스 파일 변환

1.1 메타 데이터 정보 획득

변환의 정확성을 보장하기 위해서는 변환을 수행하기 전에 PL/SQL이 수행되던 데이터베이스의 메타데이터를 가져오는 것이 필수적이다. 다음은 데이터베이스로부터 메타데이터를 가져오는 과정을 설명합니다.



1.1.1 Oracle JDBC 드라이버 설정

GUI 상에서 Configure 메뉴, JDBC 메뉴를 차례로 선택한다. JDBC 서브메뉴를 클릭하면 대화상자가 나타나고 다음을 설정할 수 있습니다.



JDBC 드라이버

이 필드에는 사용되고 있는 JDBC 드라이버 클래스의 이름입니다.

예) oracle.jdbc.driver.OracleDriver



Connection URL

오라클 데이터베이스에 접속하기 위한 접속 경로

예) jdbc:oracle:thin:@192.168.1.3:1521:ora8

192.168.1.3은 host name, 1521은 포트, ora8은 데이터베이스 이름입니다.



Driver jar/zip

JDBC 드라이버 클래스들, 혹은 JDBC jar나 zip들을 위한 클래스패스.



User Name

데이터베이스 접속에 사용되는 User name



Password

해당 유저의 데이터베이스 접속을 위한 패스워드



1.1.2 ***data 획득

Action 메뉴의 Get ***data 메뉴를 선택하면 나타나는 대화상자에서 다음을 설정합니다.



CatalogName

이 파라미터 옵션과 데이터를 가져올 카탈로그 이름과 매칭이 되어야 한다. 기본값은 NULL로 카탈로그 이름을 사용하지 않음으로써 메타데이터 검색에 제한을 두지 않는다는 의미이다. 만약 “” 값이 주어진다면 카탈로그 이름을 가지고 있지 않은 메타데이터만을 가져옵니다.



SchemaName

이 파라미터 옵션과 데이터를 가져올 스키마 이름과 매칭이 되어야 한다. 기본값은 NULL로 스키마 이름을 사용하지 않음으로써 메타데이터 검색에 제한을 두지 않는다는 의미이다. 만약 “” 값이 주어진다면 스키마 이름을 가지고 있지 않은 메타데이터만을 가져옵니다.



TableNamePattern

검색해올 테이블의 패턴을 정의한다. 가령 EMP%로 패턴을 정의하면 EMP로 시작하는 테이블의 메타데이터 정보만을 가져오게 된다. 기본값은 NULL로 검색시 TableNamePattern을 사용하지 않습니다.



ColumnNamePattern

검색해올 컬럼의 패턴을 정의한다. 가령 NAME%로 패턴을 정의하면 NAME으로 시작하는 컬럼의 메타데이터 정보만을 가져오게 된다. 기본값은 NULL.



이 작업은 전체 데이터베이스의 정보를 검색하기 때문에 시간이 많이 소요됩니다.



1.2 로컬 머신에 저장된 소스 파일로부터 PL/SQL 로딩

올바른 변환을 위해 변환전에 필수적인 환경이 갖추어졌는지 확인해야 합니다.



‘Add’ 버튼과 ‘Remove’ 버튼을 이용해 변환시킬 PL/SQL 파일들을 추가, 삭제할 수 있다.

평가판에서는 여러 파일 선택을 지원하지 않기 때문에 하나씩만 변환할 수 있다. 변환된 T-SQL 파일이 저장될 경로를 ‘T-SQL Directory’ 텍스트 필드를 통해 생성할 수 있습니다.



1.3 불러온 PL/SQL 파일을 T-SQL로 변환

‘Examine’ 아이콘을 클릭해서 PL/SQL 파일을 파싱하거나 ‘Migrate’ 아이콘을 클릭해 T-SQL 파일로 변환 할 수 있다. ‘Migrate’ 아이콘을 클릭하면 성공적인 변환 후에 리포트가 생성되어 로드된 전체 파일 수, 변환된 전체 파일 수, 변환된 파일 경로 등의 정보를 볼 수 있다. 변환된 T-SQL 파일들은 메인윈도우의 오른쪽의 T-SQL 트리에 로드됩니다.

변환된 파일들은 PL/SQL 파일과 동일한 이름을 가지며 다만 이름 끝에 ‘_T’를 가지게 됩니다.



주의 : Package body를 변환하게 되면 대응하는 패키지 명세가 먼저 변환된다. 패키지 명세는 T-SQL 파일을 생성하지는 않지만 패키지 바디가 변환될 때의 상세한 정보를 툴에 제공해 변환을 돕게 됩니다.

2. 소스 데이터베이스로부터 오라클 모델을 추출해 PL/SQL ***들을 변환 (Wizard 사용)

마법사는 다음과 같이 사용될 수 있습니다.



2.1 데이터베이스에 저장된 PL/SQL을 오라클 모델로부터 추출해 변환



2.1.1. Creating a new project



a. 메인윈도우 상의 Wizard 클릭 해서 프로젝트 생성 창을 엽니다.

b. “Create New Project” 옵션을 선택.

c. 프로젝트 이름을 수정한다. 새 프로젝트는

AdventNetSwisSQLOracleToSQLServer2.3Projects. 디렉토리 하위에 편집한 이름과 같은 이름의 디렉토리에 생성됩니다.

d. NEXT 버튼을 클릭해 데이터베이스 접속 창으로 넘어갑니다.



2.1.2 Connecting to Oracle Database

a. 소스를 추출하기에 앞서 데이터베이스 컨넥션을 설정해 주어야 합니다.

b. JDBC 혹은 ODBC를 사용할 수 있습니다.

c. JDBC를 통해 접속하기 위해 JDBC를 선택. 다음 필드들을 설정합니다.



JDBC Driver

사용하고 있는 JDBC 드라이버 클래스의 이름이다. JDBC 드라이버 이름은 다음과 같은 형식입니다.

‘oracle.jdbc.driver.OracleDriver’



Connection URL

접속 경로로 다음과 같은 형식입니다.

'jdbc:oracle:thin:@192.168.1.3:1521:ora8'



Driver jar/zip

JDBC 클래스, JDBC jar, JDBC zip의 클래스 패스



User Name

데이터베이스에 접속할 유저 이름



Password

유저가 사용할 패스워드



d. ODBC를 통해 접속하기 위해 “ODBC” 옵션을 선택. usersystem/DSN, username, password 항목을 설정합니다.



e. NEXT 버튼을 클릭해 다음으로 넘어갑니다.





2.1.3 데이터베이스로부터 소스 추출



a. “Get Oracle Schema”나 “Get Following ***s” 옵션을 통해서 소스 데이터베이스 항목들을 추출해 온다.



b. Get Oracle Schema를 선택하면 해당 스키마 내의 가능한 모든 오브젝트들을 임포트한다.

(Index, Tables, Views, Packages, Package Body, Procedures, Functions, ***data, Triggers, User Defined Datatype, Sequence)



c. Get Following ***s를 선택하면 fetch 하고자 하는 오브젝트 종류를 선택할 수 있다.



d. Next를 클릭한다. 현재 프로젝트 디렉토리 하위의 PLSQL 폴더에 오브젝트들이 임포트된다.



e. 임포트가 끝나면 팝업창이 뜨며 성공을 알린다. OK를 클릭하면 메인윈도우 왼편의 PLSQL 트리에 임포트된 오브젝트들이 로드된다.





2.1.4 로드된 PL/SQL 파일을 Transact-SQL로 변환



등록된 사용자

a. PLSQL 트리의 모든 오브젝트를 변환하려 한다면 Migrate 버튼을 클릭



b. 선택한 파일만 변환하려 한다면 트리에서 필요한 파일을 클릭한후 Migrate Selected Files를 클릭한다.



c. 매 변환과정 후에는 리포트 대화창이 생성돼 로드된 파일수, 변환된 파일수, 변환파일 경로등의 정보를 알려준다.



d. 변환된 T-SQL 파일들은 AdventNetSwisSQLOracleToSQLServer2.3Project 하위의 ConvertedTSQL 폴더에 저장되며 동시에 TSQLTree에 로드된다.



비등록(평가판) 사용자

a. 만약 비등록 사용자 이거나 평가판 사용자라면 복수 파일 선택이 지원되지 않으므로 한번에 파일 하나씩만 변환이 가능하다.



b. PLSQL 트리에서 하나의 파일을 선택한다.



c. 변환된 파일이 저장될 경로를 지정한다. Browse 버튼을 사용해 TSQL Directory 값을 설정해서 지정.



d. Migrate Selected Files 버튼을 클릭해서 선택된 파일을 변환한다.



e. 변환된 TSQL 파일은 AdventNetSwisSQLOracleToSQLServer2.3Project 하위에 ConvertedTSQL 폴더에 저장되며 동시에 TSQLTree에 로드된다.



f. 매 변환과정 후에는 리포트 대화창이 생성돼 로드된 파일수, 변환된 파일수, 변환파일 경로등의 정보를 알려준다





2.2 데이터베이스로부터 임포트되어 프로젝트에 저장되어 있는 오브젝트 변환



a. 메인윈도우의 Wizard 버튼 클릭. 프로젝트 윈도우가 나타난다.



b. ‘Open Existing Project’ 라디오 버튼을 클릭.



c. 프로젝트 이름을 직접 명시하거나, Browse 버튼을 클릭해서 로드할 프로젝트를 선택한다. (.swissql 파일 선택)



d. NEXT 버튼을 클릭해 프로젝트에 저장된 파일들을 PLSQL 트리에 로드한다.



e. 섹션 2.1.4를 참고해 로드한 파일을 변환한다.





3.0 Report 보기



컨버젼 작업을 성공적으로 마치게 되면 summary report를 볼 수 있다.



Time taken for migration

변환을 초기화한 후부터 변환이 끝나는 시점까지의 걸린 시간을 표시



Migration success percentage

변환 과정의 성공률을 나타낸다. 파싱되지 않은 파일은 계산에 포함되지 않는다.



Total number of files

변환의 입력으로 들어간 파일의 전체 개수



Number of files not parsed

이름 그대로 변환과정 중에 파싱 에러가 발생한 파일의 수를 뜻한다



Output directory

툴에 의해 출력된 파일들의 경로. 기본 값은 제품 설치 경로.



Reports directory

항상 Output directory 하위의 “swissql_migration_X” 폴더가 된다. 여기서 X는 각각 혹은 모든 변환작업 후에 발생하는 증가 값이다.



Conversion summary

변환작업의 여러 항목들을 테이블 형태로 보여준다.



3.1 Detailed Reports 보기

View Detailed Reports 버튼을 클릭해서 보다 세부적인 정보를 얻을 수 있다. 이 버튼을 클릭하면 브라우저 상에서 레포트를 볼 수 있다.



툴은 기본적으로 레포트를 열기 위해 시스템의 브라우저 경로를 검색한다. 이것이 실패하면 파일 선택 대화 상자를 열어 파일을 실행시킬 브라우저 위치를 묻게 된다. 실행 가능한 브라우저가 선택되면 툴은 세부 레포트를 열게 된다. (자동 브라우저 검색이 실패 했을 경우 한차례만 브라우저 경로를 묻게 되고 이 경로는 기억되어 다음부터는 다시 묻지 않는다.)



3.2 Reports index



이후의 쉬운 참조를 위하여 툴은 레포트들의 링크가 포함된 인덱스 페이지를 생성한다. 인덱스 페이지는 제품 홈디렉토리상에 Reports.html 파일로 저장된다.





4.0 Compiling generated Transact-SQL



변환된 파일은 실시간 환경에 배포되기 전에 테스트 되어야만 한다. 툴은 컴파일 옵션을 제공함으로써 변환된 파일의 구문과 문법을 검사할 수 있도록 한다. 단지 컴파일 버튼을 누르기만 하면 된다.



1. TSQL Files 트리에서 변환된 T-SQL 파일을 선택한 후 “Compile” 버튼을 클릭한다. “Destination DB Settings” 창이 열리면 타겟 SQL Server 데이터베이스에 대한 정보를 설정한 후 다음으로 넘어간다.



2. 데이터베이스 접속 설정은 두가지 방법이 있다.

1. JDBC Driver를 선택할 경우 다음의 SQL Server JDBC Driver 설정을 해준다.

Driver Class Name

SQL Server JDBC 드라이버 이름을 설정한다. 이름은 다음과 같은 형식이다.

‘com.microsoft.jdbc.sqlserver.SQLServerDriver’



JDBC Driver Jars

브라우즈 버튼을 이용해 JDBC Driver jar 파일의 경로를 설정해준다. 예를 들어 SQL Server 드라이버의 디폴트 jar 경로는 다음과 같다.

“c:jdbcmssqlserver.jar, c:jdbcmsutil.jar, c:jdbcmsbase.jar”



URL

SQL Server 데이터베이스에 접속할 수 있는 URL 경로를 설정한다. 예를 들면,

‘jdbc:Microsoft:sqlserver://192.168.1.8:1433:DatabaseName=NorthWind’

여기서 192.168.1.8은 SQL-Server가 가동되고 있는 Hostname이며, 1433은 SQL-Server에 접속할 수 있는 포트번호, NorthWind는 데이터베이스 이름이다.



UserName

SQL Server 데이터베이스에 로긴할 유저 이름



Password

유저가 사용할 패스워드



2. SQL Server 컴맨드 라인 유틸리티인 “ISQL”을 사용해서 컴파일 하는 것도 가능하다. 브라우즈 하여 “ISQL.exe”를 명시해야 하며 데이터베이스 이름을 넣어야 한다. 이 옵션을 사용하기 전에 로컬 머신에 ISQL이 설치되어 있는지 확인해야 할 것이다.

(기본 설치 폴더는 “C:Program FilesMicrosoft SQL Server80ToolsBinn”)

보다 자세한 사항은 다음을 참고하라.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/coprompt/cp_intro_3nsj.asp

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/coprompt/cp_isql_8r39.asp



3. 설정을 마치면 OK를 클릭한다. 위의 “Destination DB Settings” 대화상자는 컴파일 설정하기 전에 한번만 나온다. 컴파일에 관한 설정정보를 바꾸고 싶을 때는 “Configure” -> “Compilation JDBC” 메뉴나 “Ctrl + O” 단축키를 이용한다.





3. “Destination DB Setting”을 마치면 툴은 소스코드의 컴파일을 시작한다. 컴파일이 종료되면 컴파일 요약정보와 에러 세부사항들이 “Compilation Result View” 대화상자에 분리되어 표시된다. Save 버튼으로 에러사항을 저장할 수 있다.





4. 다중 파일 컴파일도 지원되므로 여러 파일을 선택하거나 트리의 루트 노드를 클릭함으로써 전체 파일을 선택해 컴파일 할 수 있다.



주의 : 컴파일시 SQL문이 실행될 수 있으므로 (create table 등) 테스트 데이터베이스에 먼저 컴파일 해 보는 것이 바람직하다.



SwisSQL ? Oracle to SQL Server Edition에 관한 기술적 문의는

swissql-support@adventnet.com 으로 하기 바랍니다.





Tutorial For Using AdventNet SwisSQL - Oracle to SQL Server Edition 2.3



SwisSQL ? Oracle to SQL Server Edition 2.3 사용 예제



이번 섹션은 SwisSQL ? Oracle to SQL Server Edition 2.3에 포함되어 있는 examples 폴더의 예제 어플리케이션들을 다룬다. 이 예제들은 PL/SQL 블록들이 어떻게 T-SQL로 바뀌는지 보여줄 것이다.



아래에 제공되는 코드의 단편들은 각 단계들의 이해를 도울 것이다.



아래의 몇몇 일부분의 코드들은 PL/SQL Function이 어떻게 T-SQL로 바뀌는지 보여준다.





커서 변환 예제

PL / SQL Code :

/* Explicit Cursor Conversion */

cursor cur_customers is
SELECT customer_name,preferred_customer
FROM S_Customer
ORDER BY preferred_customer, customer_name;
...
open cur_customers;
...
fetch cur_customers INTO lv_customer_txt,
lv_preferred_txt;
EXIT WHEN cur_customers%NOTFOUND
...

변환된 Transact-SQL code는 다음과 같다.

DECLARE cur_customers CURSOR FOR
SELECT customer_name , preferred_customer
FROM s_customer
ORDER BY preferred_customer , customer_name
...
open cur_customers
...

FETCH NEXT FROM cur_customers INTO @lv_customer_txt, @lv_preferred_txt
IF (@@FETCH_STATUS = -1)
BREAK



PL / SQL Code :


/* Implicit Cursor Conversion */

SELECT NextDoc, CurrentNextDoc, Prefix, Suffix
INTO Example6_SP.NextNo, Example6_SP.NextNoSys, Example6_SP.Prefixed_By, Example6_SP.Suffixed_By
FROM Client_Sequence
...

변환된 Transact-SQL code는 다음과 같다.

SELECT @NextNo = NextDoc , @NextNoSys = CurrentNextDoc , @Prefixed_By = Prefix , @Suffixed_By = Suffix
FROM Client_Sequence
WHERE Name = @ClientName
...





PL/SQL Loop 변환 예제

PL / SQL Code :


/* For Loop Conversion */

FOR count_ID IN 1 .. Limit_Spec_ID
LOOP
...
END LOOP
...

변환된 Transact-SQL code는 다음과 같다.

The converted Transact-SQL code snippet for this PL / SQL code will be as follows:

DECLARE @count_ID INTEGER
SET @count_ID = 1
WHILE @count_ID <= @Limit_Spec_ID
BEGIN
...
END
...

PL / SQL Code :


/* Simple Loop Conversion */

LOOP
BEGIN
...
FETCH cur1 INTO C_Ref_ID, C_Ref_NAME; EXIT WHEN cur1%NOTFOUND; ...
END



변환된 Transact-SQL code는 다음과 같다.



OPEN cur1
WHILE (0 = 0)
BEGIN
...
FETCH NEXT FROM cur1 INTO @C_Ref_ID, @C_Ref_NAME
IF (@@FETCH_STATUS = -1)
BREAK
...
END





PL/SQL 제어문 변환 예제

PL / SQL Code :

/* IF ... ELSEIF .. ELSE Conversion */
IF (Type_Def_Code = 0) THEN
ReturnStr := 'String = 0';
ELSIF (Type_Def_Code = 1) THEN
ReturnStr := 'Integer = 1';
...
ELSE ReturnStr := 'Unknown ('|| Type_Def_Code ||')';
...



변환된 Transact-SQL code는 다음과 같다.



DECLARE @LoopProcessingFlag BIT
SET @LoopProcessingFlag = 0
IF ( @Type_Def_Code = 0 )
BEGIN
SELECT @ReturnStr = 'String = 0'
SET @LoopProcessingFlag = 1
END
IF ( @Type_Def_Code = 1 ) AND (@LoopProcessingFlag = 0)
BEGIN
SELECT @ReturnStr = 'Integer = 1'
SET @LoopProcessingFlag = 1
END
...
IF (@LoopProcessingFlag = 0)
BEGIN
SELECT @ReturnStr = 'Unknown (' + @Type_Def_Code + ')'
RETURN @ReturnStr
END
...





함수 변환 예제

PL / SQL Code :

...
DocumentNo := NVL(Prefixed_By, '') || NextNoSys || NVL(Suffixed_By, '');
...



변환된 Transact-SQL code는 다음과 같다.



...
SELECT @DocumentNo = ISNULL (@Prefixed_By , '' ) + @NextNo + ISNULL (@Suffixed_By , '')
...





이번 버전에서는 일반적인 대부분의 function들의 변환이 지원됩니다. 추후버전에는 고객들의 요청에 기반하여 보다 많은 함수들이 지원될 것입니다.





Customizing Code Generation through Configurable Options


SwisSQL - Oracle to SQL Server Edition은 다양한 설정 옵션을 제공해 변환을 커스터마이징 할 수 있게 하고 코드 생성에 유연성을 부여 한다. 이러한 설정들은 설정파일들을 통해서 사용 할 수 있다. 파일 경로는 다음과 같다.

<InstallationDir>AdventNetSwisSQLOracleToSQLServer2.3conf

이번 섹션은 다양한 설정 옵션들과 코드 생성이 어떻게 커스터마이징 되는지 보여준다.



1. Data type Mapping



SwisSQL은 오라클 데이터 타입을 동등한 SQL Server 데이터 타입으로 변환하는데 필요한 데이터 타입 맵핑 설정을 지원한다. 이 옵션을 사용해 변환 엔진이 사용하는 기본 변환 규칙을 덮어 씌울수 있다.



SwisSQL은 OracleToMSSQLServerDatatype.conf 라는 이름의 설정 파일을 제공한다. 이 파일은 설정파일 경로에 존재하며 데이터 타입 맵핑시 사용된다. 이 설정 파일을 사용하여 각각의 오라클 데이터 타입에 대한 SQL-Server 데이터 타입을 커스터마이징 할 수 있다.



다음은 데이터 타입 맵핑에 대한 이해를 돕는 예제이다. 가령 오라클 데이터 타입의 DECIMAL, FLOAT, DOUBLE, REAL을 모두 SQL-Server의 REAL로 변환하고 싶다면 다음 항목들을 OracleToMSSQLServerDatatype.conf 파일에 추가하기만 하면 된다.



DECIMAL=REAL

FLOAT=REAL

DOUBLE=REAL



파일을 저장한 후에 툴을 (재)시작하고 변환작업을 한다. 오라클의 DECIMAL, FLOAT, DOUBLE 데이터 타입들이 설정파일의 설정대로 T-SQL의 REAL로 변환되는 것을 볼 수 있을 것이다.



2. Generating PL/SQL Sub procedures as Separate procedures in T-SQL



SwisSQL은 PL/SQL sub procedure를 부모 procedure에 집약된 프로시저로 변환하거나 또는 분리된 프로시저로 변환하게 하는 옵션을 제공한다.

이 설정은 설정파일 디렉토리의 PL2TSQLOptions.conf 파일에 제공된다.

옵션 이름은 SubProcedureConversionAsSeparateProcedure 이며 true 혹은 false 값을 가진다. true로 설정되면 오라클 서브 프로젝트는 SQL-Server 내의 분리된 프로시저들로 변환될 것이다. false 값 (디폴트)으로 설정된다면 Parent Procedure 내의 inline 형태로 변환될 것이다.



Example:

De***ion: 아래 PL/SQL 예제는 sp_innerproc_example이라는 이름의 프로시저로 sp_salary_bound라는 이름의 inner 프로시저를 포함하고 있다. inner 프로시저는 상위 프로시저로부터 인수로 받은 bound보다 큰 salary를 가지는 employee를 출력하는 일을 한다.

Case 1: SubProcedureConversionAsSeparateProcedure = false. 기본값

PL/SQL
Transact SQL

CREATE OR REPLACE PROCEDURE sp_innerproc_example

AS



PROCEDURE sp_salary_bound (salaryBound NUMBER(7,2)) IS

empnoholder NUMBER(2,0);

CURSOR employee_row_cursor IS SELECT empno FROM employee WHERE salary > salaryBound;

BEGIN

OPEN employee_row_cursor;

LOOP

FETCH employee_row_cursor INTO empnoholder;

EXIT WHEN employee_row_cursor%NOTFOUND;

DBMS_OUTPUT.PUT_LINE('Employee ID: ' || empnoholder);

END LOOP;

END sp_salary_bound;



BEGIN

sp_salary_bound(10000);

END sp_innerproc_example;
CREATE PROCEDURE sp_innerproc_example

AS

BEGIN

--The sub procedure is expanded inline

DECLARE @empnoholder NUMERIC(2,0)

DECLARE employee_row_cursor CURSOR FOR SELECT empno FROM employee

WHERE salary > 10000

OPEN employee_row_cursor

WHILE (0 = 0)

BEGIN --{

FETCH NEXT FROM employee_row_cursor INTO @empnoholder

IF (@@FETCH_STATUS = -1)

BREAK

DECLARE @PrintVariable1 VARCHAR (512)

SELECT @PrintVariable1 = 'Employee ID: ' + + CONVERT (VARCHAR (20),@empnoholder)

PRINT @PrintVariable1

END --}

END

Case 2: SubProcedureConversionAsSeparateProcedure = true.


CREATE PROCEDURE sp_innerproc_example

AS

BEGIN

EXEC sp_salary_bound 10000

SET NOCOUNT OFF

END

-- The PL/SQL sub procedure is generated as a separate procedure

CREATE PROCEDURE sp_salary_bound

@salaryBound NUMERIC(7,2)

AS

BEGIN

PRINT CONVERT(varchar(20), @salaryBound)

DECLARE @empnoholder NUMERIC(5,0)

DECLARE emp_row_cursor CURSOR FOR

SELECT empno FROM employee WHERE salary > @salaryBound

OPEN emp_row_cur

Remote Administrator

Projects/Server 2007.02.14 16:57 Posted by soulfree >동네청년<

Radmin이 무엇인가요?


1. Radmin이란

RAdmin은 자신의 컴퓨터에서 리모트 컴퓨터를 원격 제어하는 프로그램으로서 파일 전송, NT 보안, 텔넷 등의 주요한 기능이 포함되어 있습니다.

RAdmin을 사용하면 리모트 컴퓨터를 내 컴퓨터에서 전체 화면이나 윈도창으로 볼 수 있습니다. 마우스나 키보드의 모든 기능이 리모트 컴퓨터로 전달되어 리모트 컴퓨터가 마치 자기 앞에 있는 것처럼 작업을 하실 수 있을 겁니다.

RAdmin은 인터넷이나 LAN상의 어느 곳에 있더라도 리모트 컴퓨터를 제어할 수 있습니다. LAN으로 연결되지 않고 모뎀을 통해서 연결되어 있더라도 작업을 하실 수 있을 겁니다.

만약에 LAN으로 리모트 컴퓨터가 연결되어 있다면 거의 실시간으로 작업을 할 수 있습니다. 풀 스크린모드로 RAdmin을 사용한다면 리모트 컴퓨터에서 작업하고 있다는 것을 잊어 버릴 정도로 빠른 속도감을 만끽하실 수 있을 겁니다.

RAdmin은 매우 안전하고 믿을 수 있는 소프트웨어입니다. RAdmin에는 패스워드 프로텍션, IP 필터, TCP 포트 변경 등의 보안 기능이 있습니다.

RAdmin을 사용하면 리모트 컴퓨터에서 내 컴퓨터처럼 프로그램을 사용할 수 있을 뿐만 아니라 파일복사, 시스템 종료, 시스템 재시작, 로그오프, 로그온 등의 작업을 할 수 있습니다.

       

RAdmin Server
RAdmin Viewer
RAdmin working


2. RAdmin의 구조

RAdmin은 서버와 클라이언트로 이루어져 있으며 Radmin은 서버와 클라이언트에 같이 설치되어 있어야 하며, TCP/IP를 통해서 서버에서 클라이언트에 접속하게 해 줍니다.

3. RAdmin과 다른 프로그램 비교

속도 :
Radmin은 다른 어떤 원격제어 시스템보다 빠릅니다. 예를 들어 AT&T 제품인 VNC(Virtual Network Computing)보다 150배 정도 빠르며, pcANYWHERE, Timbuktu, Remote Control, LapLink 중에 가장 빠른 성능을 보여 줍니다.

         

             

[Radmin]
[PCAnyWhere]



속도 테스트 다운로드 받기


기능 :

파일전송, NT 보안 지원, 멀티 언어 지원, 텔넷 지원, 원격 종료 등




Radmin 주요 기능


서비스로 동작합니다.

RAdmin 서버는 WinNT와 Win9X하에서 시스템 서비스로 실행되며, 리모트에서 사용자가 접근할 수 있도록 해 줍니다.

멀티 연결 지원.

Radmin 서버는 다중 원격 제어를 지원하고 한 화면에 여러 세션을 보여 줍니다.

3가지 연결 화면 모드 지원

풀스크린 모드는 내 컴퓨터의 전 화면에 리모트 스크린을 보여줄 수 있습니다. 스케일링 모드는 지정한 크기의 윈도에 리모트 스크린을 보여줄 수 있기 때문에 여러 군데 원격컴퓨터를 한 화면에 띄울 수 있습니다.

Video hook driver technology 사용

Radmin은 Windows NT 4.0에서 성능을 향상시키기 위해 video hook kernel mode driver를 사용합니다. 이 기술은 리모트 컴퓨터에서 매우 빠른 속도로 작업을 할 수 있게 해 줍니다. 이 드라이버의 Win2000 버전은 Radmin 다음 버전에 포함될 예정입니다.

File transfers

내 컴퓨터와 리모트 컴퓨터가 서로 파일 전송이 가능합니다.

Remote shutdown feature

리모트 컴퓨터와 스크린 모드로 접속하지 않고도 리모트 컴퓨터를 종료시킬 수 있습니다. 물론 스크린 모드로 접속해서 사용자 로그인-로그오프, 시스템 재시작-종료가 가능합니다.

Telnet server

Radmin 서버는 Windows NT에서 동작할때 리모트 컴퓨터에 텔넷으로 접속이 가능합니다.

Windows NT security support

당신은 특정 유저나 그룹에 원격제어, 원격 감시, 텔넷 접속, 파일 전송등의 권리를 부여할 수 있습니다. 유저가 WinNT 도메인에 로그한다면 Radmin Viewer는 Radmin 서버에 연결하기 위해서 유저이름과 패스워드를 사용할 것입니다.

Password protection

윈도 NT 보안이 끊어진다면 패스워드를 통해 리모트 컴퓨터 접근 제어할 수 있습니다.

IP filter

이 기능은 특정 IP나 서브넷만이 Radmin 서버에 접근이 가능하도록 한다.

Radmin supports Hi-resolution modes

Radmin은 2048 X 2048 X 32bit color까지 해상도를 지원합니다.



시스템 요구사항


Hardware

윈도가 설치되어 있다면 Radmin이 동작할 것입니다. 8Mb RAM에 Win95가 설치되어 있는 386에서도 동작합니다.

OS

반드시 TCP/IP가 설치되어 있어야 합니다.

Windows 95/98/Me/2000/XP :
TCP/IP만 설치되어 있으면 됩니다.

Windows NT 4.0 :
서비스팩 4.0 이상이 필요합니다. 드라이버나 서비스를 인스톨하고자 한다면 관리자 권한이 필요합니다


Radmin 보안


Radmin을 설계하는데 보안 문제에 가장 많은 주의를 가졌습니다. Radmin 보안은 다음과 같습니다.:

Radmin 2.0 은 WindowsNT/2000 user level security를 지원합니다. 특정 유저나 그룹에 원격제어 권한을 부여할 수 있습니다.

WindowsNT security support이 동작하지 않는다면 리모트 컴퓨터의 접근은 패스워드로 관리됩니다. Radmin은 challenge-response password authentication method를 사용합니다. 이 방법은 윈도NT에서의 인증 방법와 유사하지만 프로토콜에서 더 큰 보안키를 사용합니다.

RAdmin은 암호화 모드를 지닙니다. 여기서 스크린 모드, 마우스 움직임, 키보드 입력 등 모든 데이터가 암호화됩니다. 랜덤하게 생성되는 키를 갖는 128비트 암호화가 사용됩니다. 파일 전송이나 텔넷 등과 같은 모든 다른 접속 모드가 디폴트로 암호화되는 반면 원격 제어 접속에 대해 암호화는 옵션입니다.

RAdmin 서버는 모든 액션을 로그 파일로 기록합니다.

RAdmin 서버는 IP 필터 테이블을 갖습니다, 만약 이 테이블을 사용한다면 특정 네트워크나 특정 IP 어드레스만 Radmin server에 접근하도록 할 수 있습니다.

RAdmin 서버는 자가 진단 코드 방을 합니다. 따라서 자신의 코드가 바뀌지 않도록 방어합니다.

RAdmin에서 사용되는 모든 알고리즘은 산업 표준 규격(DES, MD5)을 따름니다.



Remote Administrator 설치가이드

1. 알어드민(RAdmin, Remote Administrator) 사용 환경
2. 프로그램 설치하기
3. 알어드민 서버 보안(암호) 설정하기
4. 원격컴퓨터 제어하기

1. 알어드민(RAdmin, Remote Administrator) 사용 환경

Remote Administrator를 설치하기 위해서는 두 컴퓨터가 인터넷이나 LAN으로 서로 연결되어 있어야 하고, TCP/IP 프로토콜이 설치되어 있어야 합니다.

RAdmin은 리모트 컴퓨터와 원격으로 제어할 컴퓨터에 모두 설치해야 합니다.

2. 프로그램 설치하기

radmin 21k.exe 다운로드
위의 프로그램을 다운로드 받아 '현재 위치에서 이 프로그램을 실행'을 선택합니다.
다음->동의함->다음->설치시작->완료를 선택합니다.

3. 알어드민 서버 보안(암호) 설정하기

다른 사람이 이 컴퓨터를 임의로 제어할 수 없도록 암호 설정이나 TCP 포트를 변경합니다.
시작->프로그램->Remote Administrator v2.1->Settings for Remote Administrator Server를 실행해서 '암호 설정/변경'을 클릭합니다.

4. 원격컴퓨터 제어하기

시작->프로그램->Remote Administrator v2.1->Remote Administrator viewer를 실행해서 사용을 선택합니다.
위에서 연결 -> 새 연결을 클릭해서 원격 컴퓨터의 IP 주소(211.219.100.85)나 도메인(rad.nameip.net)을 입력하고 '연결'를 선택합니다.




정상적으로 접속이 되면 아래와 같이 원격제어 스크린이 나오며, 원격컴퓨터를 직접 제어할 수 있습니다.




Remote Administrator 프로그램 그룹 구성

Remote Administrator viewer
Settings for Remote Administrator server
Start Remote Administrator server
Stop Remote Administrator server

알어드민(Radmin)은 뷰어와 서버 두 가지 프로그램으로 구성되어 있습니다. 뷰어는 원격접속하기 위해 사용하는 프로그램이며, 서버는 원격에서 접속할 수 있도록 해 주는 프로그램입니다.




Remote Administrator viewer

리모트 컴퓨터를 원격제어, 파일전송, 종료하기 위해 사용하는 프로그램입니다. 이 프로그램을 실행시켜서 원격 컴퓨터에 접속합니다.

Settings for Remote Administrator server

알어드민 서버 설정을 위해 사용하는 프로그램입니다. 알어드민 서버를 시스템 서비스로 인스톨하거나 제거하는 명령어와, 패스워드 보안, NT 유저 레벨 보안, IP 필터, TCP 포트 변경, 접근 거부 등 보안 관련 작업을 하기 위해 사용합니다.

Start Remote Administrator server

Radmin 서버를 스타트 시키면 시스템 트레이 박스 Radmin 서버 아이콘이 생김니다. Radmin 서버를 스타트 시켜야 다른 컴퓨터가 원격에서 접근할 수 있습니다.

Stop Remote Administrator server

Radmin 서버를 스탑시키면 다른 컴퓨터가 원격에서 접근할 수 없습니다.



Remote Administrator viewer

Remote Administrator viewer 화면 설명
Remote Administrator viewer 메뉴
원격컴퓨터로 연결하기
중간 서버를 통해 리모트컴퓨터 제어

Remote Administrator viewer 화면 설명




원격 컴퓨터에 처음 연결을 할 때 새연결 아이콘을 클릭해서 원격 컴퓨터의 아이피를 입력하면 연결할 수 있습니다. 처음 연결한 경우가 아니라면 연결모드를 선택한 후에 연결리스트를 더블 클릭하면 원격컴퓨터에 연결할 수 있습니다.

Remote Administrator viewer 메뉴





Remote Administrator viewer 연결 화면

알어드민(RAdmin) 서버의 TCP 포트가 4899 번이 아니라면 TCP 포트를 변경해 주어야 합니다.






중간 서버를 통해 연결




Settings for Remote Administrator server

Settings for Remote Administrator server 메인 화면
Remote Administrator 서비스
알어드민 서버 암호 설정
NT 유저 레벨 보안 사용
옵션 메인 화면(IP 필터, TCP 포트, 로그파일, 연결시도 알림)
옵션 설정 예

Settings for Remote Administrator server 메인 화면





Remote Administrator 서비스 설치

서비스 설치를 해야만 부팅할 때 알어드민(RAdmin, Remote Administrator) 서버가 시스템 서비스로 동작합니다. 항상 알어드민 서버가 동작하고 있을 필요가 없을 때는 서비스 제거를 한 후에, 사용할 때 알어드민 서버를 실행(Start Remote Administrator server)시켜 주어도 됩니다.

알어드민 서버 암호 설정




아무나 접속하지 못하도록 암호를 설정하시기 바랍니다. 여기서 암호 대신에 NT 유저 레벨 보안을 설정할 수도 있습니다.

NT 유저 레벨 보안 사용



암호 대신 윈도 NT 유저 레벨 보안을 사용할 수 있습니다. 이 기능은 NT/2000/XP 에서만 지원 되며, 윈도에 등록된 사용자 아이디와 사용자의 암호, 도메인(또는 작업그룹)을 이용해서 외부에서 접속을 하는 보안입니다. 각 사용자별로 모드별 연결 권한을 할당할 수 있습니다.

옵션 메인 화면





알어드민(RAdmin, Remote Administrator) 서버는 암호 설정뿐만 아니라 TCP 포트 변경과 IP 필터 기능에 의해 완벽한 보안을 제공합니다.
로그파일기록 기능은 외부에서 원격 접근 시도한 PC의 IP와 시간을 기록하게 됩니다.
접근허가묻기 기능을 이용하면 이 PC를 사용하는 사용자나 먼저 원격제어를 하고 있는 사용자가 외부에서 또 다른 원격제어를 시도를 차단할 수 있습니다.

로그파일기록과 IP 필터 기능이나 접근허가묻기의 자동차단 기능을 이용해서 원격에서 접근한 PC의 원격 접속은 차단하고 그 PC의 IP만을 기록할 수 있습니다.

옵션 설정 예




TCP 포트를 변경한 알어드민 서버에 연결하기 위해서는 연결하는 PC에 설치된 Remote Administrator viewer의 TCP 포트도 변경해 주어야 합니다




Remote Screen

Ctrl+Alt+Del 보내기
클립보드 데이타 전송하기
해상도 변경
업데이트 속도 조절

Remote Screen 설명

원격제어 모드로 접속을 하면 아래와 같은 원격제어 화면이 나타납니다. 원격제어 화면에서 'Ctrl + F12'를 누르거나 알어드민(RAdmin) 아이콘을 클릭하면 아래와 같은 메뉴가 나타납니다. 이 메뉴에서 원격제어 화면에 사용하는 Tool과 설정을 변경할 수 있습니다.





원격컴퓨터 연결하기

(제어,감시,파일전송,종료)

알어드민 뷰어 메인 화면
원격제어모드로 연결하기
감시모드(보기모드)로 연결하기
파일전송 모드로 연결하기
원격종료 모드로 연결하기
Telnet 모드로 연결하기

알어드민 뷰어 메인 화면

알어드민으로 원격 컴퓨터에 처음 접속하는 경우는 새연결로 연결리스트를 만들어서 연결하면 됩니다. 기존에 접속했던 연결리스트가 있으면 연결모드를 선택한 후에 연결리스트를 클릭하면 접속을 할 수가 있습니다.






원격제어모드로 연결하기

원격제어 모드로 연결하면 내 컴퓨터의 마우스와 키보드를 이용해서 원격컴퓨터를 마음대로 사용할 수 있습니다. 내 컴퓨터 모니터안에 원격컴퓨터의 모니터가 다시 생성되서 마치 원격컴퓨터 앞에 앉아 있는 것처럼 사용이 가능합니다.






감시모드(보기모드)로 연결하기

감시모드는 마치 원격컴퓨터 앞에 앉아 있는 것처럼 리모트컴퓨터의 모니터를 내 컴퓨터 모니터 앞에서 볼수는 있지만 내 키보드와 마우스를 이용해서 원격컴퓨터를 조작할 수는 없습니다.

파일전송 모드로 연결하기

파일전송 모드로 접속하면 파일이나 폴더를 반대편으로 드래그해서 서로 복사할 수 있습니다.





원격종료 모드로 연결하기

원격종료는 제어모드로 연결하지 않은 상태에서 원격컴퓨터를 종료할 수 있습니다. 원격종료는 재시작, Shutdown(파워오프전 종료), 파워오프, 로그아웃 중 하나를 선택해서 실행할 수 있습니다.




Telnet 모드로 연결하기

텔넷모드로 접속을 하면 원격컴퓨터의 명령 프롬프트 화면이 내 컴퓨터 모니터에 생성이 되어 각종 명령어를 직접 입력할 수 있습니다.




중간 서버를 통해 사설 IP를 사용하는

PC 제어

알어드민은 직접 연결되어 있지 않더라도 두 PC와 동시에 연결된 PC를 이용해서 원격제어가 가능합니다.




먼저 인터넷에 연결된 PC에 대한 연결리스트를 만듭니다.





사설 IP를 접속할 연결리스트를 만듭니다.
이때 중간서버를 통해 연결을 체크한 후에 인터넷에 연결된 PC의 연결리스트를 선택해 줍니다.




이제 사설 IP 연결리스트를 클릭한다면 연결이 가능할 겁니다.
만약 중간 알어드민서버와 사설 IP의 알어드민 서버에 암호가 설정되어 있다면 첫번째 묻는 암호는 중간 서버에 설정된 암호이며, 두번째 묻는 암호는 사설 IP에 설치된 알어드민 서버의 암호입니다.



아이피공유기내의 사설IP를 쓰는 원격컴퓨터제어

아이피공유기를 사용하는 네트워크



알어드민으로 아이피공유기 내부 PC 연결하기

아이피공유기를 사용하는 경우 외부에서 아이피공유기내의 PC를 제어하기 위해서는 공유기의 WAN IP로 접속해야 하고, 공유기에서 내부 PC의 알어드민 서버로 접속할 수 있도록 NAT 방화벽을 오픈해 주어야 합니다.





소호라우터에서 내부 PC로 알어드민의 TCP 포트 연결하기

아이피공유기에서 내부 PC로 알어드민 접속을 가능하게 하는 방법은 두가지가 있습니다.
하나는 TCP 포트를 포워딩하는 방법이고, 다른 하나는 DMZ Host를 이용하는 것입니다.
아래는 Sohomate 의 Soho Router에 대한 설정의 예입니다. 참고하셔서 자신이 가지고 있는 공유기에도 적용을 하시기 바랍니다.

DMZ Host 라는 용어는 모든 공유기에서 같이 사용하는 용어이지만 TCP 포트 포워딩을 설정하는 방법은 각기 용어가 상이합니다.

Soho Router 는 Virtual Server 라고 하며, Linksys Router 에는 Forwarding 이라고 합니다. 일부 공유기는 Local Server 라고도 합니다.
공유기 설명서에 보시면 Web 서버나 FTP 서버를 설정하는 방법이 나와 있는데 이것이 아이피공유기에서 TCP 포트를 포워딩하는 방법을 설명하는 것입니다.

아이피공유기의 기본 IP인 192.168.123.254를 인터넷 익스플로러에 입력하면 아래와 같은 로그인 창이 뜹니다. 패스워드 입력란에 'admin' 이라고 입력한 후에 Log in 을 클릭하면 아이피라우터를 설정할 수 있습니다.
알어드민으로 접속을 할 때는 이곳에 있는 WAN IP 주소로 접속을 해야  

것입니다.

아이피공유기의 기본 IP인 192.168.123.254를 인터넷 익스플로러에 입력하면 아래와 같은 로그인 창이 뜹니다. 패스워드 입력란에 'admin' 이라고 입력한 후에 Log in 을 클릭하면 아이피라우터를 설정할 수 있습니다.
알어드민으로 접속을 할 때는 이곳에 있는 WAN IP 주소로 접속을 해야 합니다.

http://www.radmin.co.kr/ 에서 확인요

Virual server를 이용해서 원격컴퓨터제어

왼쪽 메뉴에서 Virtual Server를 클릭해서아래와 같이 설정을 해 주어야만 외부에서 아이피공유기 내부의 PC를 원격제어할 수 있습니다.
여기서 Service Ports는 알어드민 서버가 사용하는 TCP 포트(기본 : 4899)이며, Server IP는 원격으로 제어할 알어드민 서버가 설치된 PC의 사설 아이피(예, 192.168.123.100)입니다.
이렇게 설정한 후에 Enable 에 체크한 후에 Save를 클릭하고 Reboot 를 클릭한다면 외부에서 접속할 환경 설정이 끝나는 것입니다.

http://www.radmin.co.kr/ 에서 확인요


DMZ를 이용해서 원격컴퓨터제어

DMZ란 '비무장 지대'를 나타내는 군사용어에서 사용하듯이 아이피공유기의 NAT 방화벽이 해제되어 외부에 노출되는 PC를 의미합니다.
이런 경우는 인터넷에 공유하지 않은 PC 하나만 단독으로 인터넷에 직접 연결되어 있는 것과 동일한 환경에 놓이게 됩니다.
DMZ host의 알어드민 서버가 설치된 PC의 IP 주소(예, 192.168.123.100)을 입력하면 외부에서 이 PC를 원격 제어가 가능합니다.
아이피를 입력하고 Enable를 체크하고 'Save'를 클릭한 후에 'Reboot'를 클릭하면 설정이 적용됩니다.

http://www.radmin.co.kr/ 에서 확인요




유동IP를 사용하는 원격컴퓨터 제어

유동IP를 사용하는 원격컴퓨터에 아이피 변경과 관계없이 수시로 접속하기 위해서는 IP 대신에 도메인(예, rad.nameip.net)을 이용해서 접속해야 합니다.
네임아이피서비스(http://www.nameip.co.kr)를 가입한 후에 네임아이피클라이언트 프로그램을 원격컴퓨터(유동IP)에 설치하면 네임아이피클라언트가 IP가 변경되면 수시로 네임아이피 서버로 변경된 IP를 통보하게 됩니다.

다른 컴퓨터에서 원격컴퓨터에 도메인(예, rad.nameip.net)으로 접속을 하게 되면 네임아이피 서버가 도메인(rad.nameip.net)에 대한 IP(예, 211.219.100.85)를 알려주어서 유동IP를 사용하는 컴퓨터에 접속을 할 수 있게 됩니다.

알어드민으로 원격컴퓨터 접속하기

알어드민으로 원격컴퓨터에 연결을 할 때 IP 주소 대신에 컴퓨터이름(도메인)을 입력해서 연결을 합니다.






중간서버를 이용해 원격컴퓨터에 연결하는 사용자관리




중간서버를 이용해 다수의 원격컴퓨터에 연결하는 사용자(Viewer) 관리

(1) 외부에서 접근하는 사용자들을 관리하는 관리자 PC의 IP만 원격제어할 모든 PC의 IP 필터에 등록합니다.

(2) 외부에서 PC를 원격제어할 때 중간 서버에 관리자 PC 연결리스트를 선택하고 원격제어할 PC의 IP를 IP 주소에 입력해야 합니다.

(3) 관리자 PC에서는 각종 서버 보안을 설정합니다.
관리자 PC의 접근을 차단하면 외부에서 관리자 PC 뿐만아니라 다른 모든 PC에 접근을 할 수가 없습니다.
접근허가묻기를 체크하고 자동거부를 선택하면 관리자의 승인을 받아야만 내부 컴퓨터에 연결을 할 수가 있게 됩니다.





IP Scanner를 이용해 꺼져 있는

원격컴퓨터 켜기

컴퓨터와 랜카드의 Wake-on-LAN 기능을 이용해서 원격에서 켜는 방법입니다.

Wake on-LAN 기능은 LAN 상의(WAN 상이 아님)의 PC를 원격에서 켤수 있는 기능입니다. 따라서 인터넷을 통해서 원격에 있는 컴퓨터를 켤 수는 없습니다.
그러나 약간만 응용해도 원격에서 이 기능을 이용해서 컴퓨터를 켤 수가 있습니다.

조건

  • 꺼져 있는 컴퓨터의 마더 보드에서 Wake-on-LAN 기능 지원
  • 꺼져 있는 컴퓨터의 랜카드에서 Wake-on-LAN 기능 지원
  • 꺼져 있는 컴퓨터의 LAN 상의 2대 이상의 컴퓨터가 존재
  • 이 중 한대는 반드시 켜져 있어야 함.
  • 켜져 있는 있는 컴퓨터에 알어드민과 ip scanner가 설치되어 있슴.

    이러한 조건일때 원격에서 켜져 있는 컴퓨터에 원격으로 접속을 한다면 Wake-on-LAN 기능을 지원하는 모든 컴퓨터는 ipscanner를 이용해서 켤 수가 있습니다.
    또한 알어드민도 설치되어 있다면 끄고 켜는 것을 자유자재로 할 수 있을 겁니다.

    모든 컴퓨터가 꺼져 있는 경우는 방법이 없으며 LAN상의 컴퓨터가 한대 뿐일때도 방법이 없습니다.



  • 8. Windows XP 방화벽에서 Radmin 포트 오픈하기


    바탕화면 내 컴퓨터를 더블 클릭합니다.



    내 네트워크 환경을 더블 클릭합니다.





    네트워크 연결 보기를 더블 클릭합니다.






    인터넷에 연결되는 랜카드에 해당하는 로컬영역연결을 클릭한 후에 오른쪽 마우스 버튼을 눌러 나타나는 창에서 '속성'을 클릭합니다.





    '고급' 탭을 누른 후에 설정을 클릭합니다.







    1. '사용 안함'을 클릭하면 XP 방화벽이 해제되고 Radmin 서버에 접근할 수 있습니다.

    2. XP 방화벽을 해제하지 않은 상태로 Radmin 서버에 접근하려면 '예외' 탭을 누릅니다.






    '포트 추가'를 클릭합니다.




    이름에 'radmin'이라고 입력하고 포트 번호에 Radmin 서버에 설정되어 있는 포트 번호를 입력합니다.

    TCP 가 체크되어 있어야 합니다. Radmin은 TCP 포트를 사용하기 때문입니다.

    아래는 기본 포트로 설정되어 있는 '4899'번 포트를 사용할 때 설정하는 예제입니다.





    모든 설정이 끝나고 확인을 누르면 아래와 같은 radmin 서비스가 나타나고 체크박스에 체크가 되어 있으면 외부에서 연결할 수 있습니다.






    그래도 연결이 안된다면 홈페이지 초기화면 http://www.radmin.co.kr/ 에 접속하셔서 포트체크를 해 보시기 바랍니다.'open'이라고 나와야 하며, 'blocked'라고 나온다면 방화벽 해제를 잘못 하신 것이니 다시 순서대로 따라 해 보시기 바랍니다.



    Remote Administrator 자주하는 질문


    1. 알어드민 설치후 반드시 해야 될 일이 있습니다
    2. Radmin 설치했는데 연결이 안됩니다.
    3. Radmin을 삭제하고 싶습니다.

    컴퓨터 - 활용 … MySql 5.0과 Tomcat / 한글 관련 문제

    Projects/Server 2006.10.18 14:51 Posted by soulfree >동네청년<
    컴퓨터 - 활용 … MySql 5.0과 Tomcat / 한글 관련 문제
    으으.. 일주일이 넘도록 신경쓰지 못했던 문제를 드디어 처리했다.
    사건의 발단은 양질(?)의 수업을 제공하는 DB 과목 프로젝트..

    1. MsSQL과 Tomcat으로 제작할까 하다가 Ym형이 mySql도 5.0부터 Procedure를 제공하는것을 발견. 실제 돌아가고 있는 서버에 설치하는것이 플러스 요소가 될것이라는 판단에 이쪽으로 결정.

    2. 하지만 전에 돌던 MySql은 4.0.x였다. 5.x 알파 버전 설치 후 패스워드가 먹히지 않는 문제가 발생.. 메뉴얼을 뒤져서 old_password를 사용해야 한다는걸 알아냈으나 나중에 검색해보니 한글로 된 글도 이미 몇건 있었음.. -_-

    # mysqld_safe --old_password &

    이런식으로 적어줘야 4.1 이전 버전의 패스워드를 계속 사용할 수 있다. 제로보드 역시 비슷한 문제로 약간의 수정, install.php도 수정.

    3. Stored Procedure
    원래는 이게 정상적으로 동작해야 하지만, 뭘 잘못했는지 컴파일 버전으로는 도무지 저장/불러오기가 되지 않아 어쩔 수 없이 바이너리 버전을 사용하게 됐다.

    4. 또 하나의 문제점은 character set. 4.1 이후 버전부터 euc_kr이 euckr로 바뀌었고, mySql 관련 작업을 할 때마다 항상 옵션을 붙여주어야 한다는 점이었다.
    • mysqld 구동시
      전까지는 euc_kr 옵션으로 컴파일을 해서 기본값으로 사용했지만, 4.1 이후 버전부터는 구동시에 character set 옵션을 항상 적어주어야 한다. (..라기 보다는 적어주는게 속 편하다. 더군다나 바이너리 버전이기 때문에 디폴트값은 latin1, 선택의 여지는 없다.)
      그래서 결론은,

      # mysqld_safe --character-set-server=euckr --default-character-set=euckr \
      --character-sets-dir=/usr/local/mysql/share/mysql/korean --language=korean \
      --old-password &


      --default-character-set 이 --character-set-server 로 대체되었다고는 하는데, 아무래도 메뉴얼을 뒤적여보면 이 옵션이 또 필요한 곳이 몇몇 군데 계속 나온다.

    • mysql 클라이언트 접속 시
      전에는 mysql -u namida -p 이런식으로만 접근했었지만, 이러면 character_set_result, character_set_client 변수가 latin1이기 때문에 쿼리문이나 결과문 모두 한글이 깨져나오게 된다. 따라서 mysql 실행 후, mysql> SET NAMES=euckr 명령을 한번씩 수행해주어야 했는데, 심각한건 php, jsp등에서 쿼리문을 수행하기 전에 이짓(?)을 한번씩 해주어야 한다는 것이다. 하지만 이 경우 그 세션에서만 해당 상태가 유지되고, 매번 연결시마다 SET 명령을 내려야 하는 방식이었다. 하지만 그 해결책은 역시 있었고, 몇번의 시행착오와 검색의 도움으로 해결할 수 있었다. 아래에 해결책이 있다.

      # mysql -u namida -p --default-character-set=euckr

      그냥 이런 옵션을 붙여서 클라이언트 환경을 한글로 유지할 수 있다는 것을 알게 해준다. 하지만 매번 저런 옵션을 칠 수는 없는 노릇이므로 환경설정 파일에 내용을 추가해준다.

      mysql 설치후 복사한 /etc/my.cnf 파일에서 [mysql], [client], [mysqldump] 부분에 default-character-set=euckr 행을 추가해주면 된다.

      # vi /etc/my.cnf
      [mysqld]
      port   = 3306
      socket   = /tmp/mysql.sock
      .. (생략)
      default-character-set=euckr

      [client]
      ..
      default-character-set=euckr

      [mysqldump]
      ..
      default-character-set=euckr


    • mysql/J (JDBC) 접속시
      가장 핵심적으로 고생을 시켰던 부분.. 막상 위 환경을 다 해결하고 JSP 페이지에서 한글 데이터를 insert를 해 보니 data truncation warning과 함께 물음표들이 잔뜩 들어가 있었다.

      메뉴얼을 찾아보니 4.1 이후 버전부터는 connection을 얻을때도 character set을 명시해줘야 했다.. (너무 복잡해..)

      Connection Conn = DriverManager.getConnection("jdbc:mysql://localhost/DB이름?characterEncoding=euckr&useUnicode=true&mysqlEncoding=euckr","아이디","패스워드");

      그러나 접속 문제를 해결하고나서도 물음표들은 없어지지 않았고 안되겠다.. 라는 생각이 드는 순간 문득 CLASSPATH를 살펴보니 아래와 같았다.

      # env |grep CLASS
      CLASSPATH=.:/usr/local/jdk/lib/tools.jar:/usr/local/tomcat/common/lib/mysql-connector-java-2.0.14-bin.jar
      #

      ..
      젠장!! connector 풀네임을 경로로 잡아놓고 있었다. 어쩐지 3.1이랑 3.2버전 다 넣어줘도 안되더라 했더니.. 즉시 2.0은 삭제하고 3.1로 대체, 경로 역시 나중에 같은 실수를 범하지 않기 위해 /usr/local/tomcat/common/lib/ 까지만 잡아줬다.

      Tomcat 재시작.. euckr 설정과 함께 정상적으로 삽입됐다. 휴..
    닫기..

    ** DB 구동시 :
    # mysqld_safe --old-password --character-set-server=euckr --default-character-set=euckr --character-sets-dir=/usr/local/mysql/share/mysql/korean --language=korean &
    ** 클라이언트(mysql 프롬프트) 접속 시 :
    /etc/my.cnf 파일의 [mysql], [client], [mysqldump] 부분에 default-character-set=euckr 행을 추가해준다.

    만약 서버에 설정이 되어있지 않다면 다음과 같이 접속한다.
    $ mysql -u namida -p --default-character-set=euckr
    ** JDBC (MySql/J Connector)
    3.1 버전을 사용한다 ㅡㅡ;
    mysql-connector-java-3.1.8-bin.jar 파일을 CLASSPATH 가 있는 디렉토리에 넣어주면 된다. 다운로드는 MySql 홈페이지에서..


    출처 : http://namida.pe.kr/tt/index.php

    Installing Oracle, PHP, and Apache on Linux

    Projects/Server 2006.09.23 00:36 Posted by soulfree >동네청년<

    Installing Oracle, PHP, and Apache on Linux | 서버  2006/07/21 11:51 


    출처 : http://blog.naver.com/spaper/120026857176


    Installing Oracle, PHP, and Apache on Linux

    By Robert Clevenger
    Updated by Christopher Jones, May 2006


    Are you ready to start using PHP to talk to an Oracle database?

    Let's walk through the steps required to install the Oracle Database, Apache HTTP Server, and PHP as an Apache module on Linux. Check out the OTN Linux Technology Center to see what versions of Linux are certified for use with the Oracle Database. We will be using Red Hat Enterpise Linux AS 4.0 for this example.

    Software Requirements:

    Software Version URL
    Oracle Database 10g Express Edition 10.2 http://www.oracle.com/technology/products/database/xe/
    Apache HTTP Server 2.0.58 http://httpd.apache.org/download.cgi
    PHP Hypertext Processor 5.1.3 http://www.php.net/downloads/


    Installing Oracle

    You have a choice here. You may either install the database locally on this Linux machine, or you may decide to use an Oracle server located on another machine on your network. If your database is remote, jump to the article on Installing PHP and the Oracle 10g Instant Client for Linux and Windows.

    Otherwise, if this is your first time with Oracle, installing the Oracle Database 10g Express Edition only takes a few minutes. Download the Express Edition (commonly known as "XE") RPM package, log in as root and run:

      # rpm -ivh oracle-xe-univ-10.2.0.1-1.0.i386.rpm

    After the software package is installed on the machine, configure a database by running this and answering its four questions:

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

    For Debian users, a .deb file is also available.

    Starting and Stopping Oracle
    Oracle XE will be running after installation. You can test it by opening your browser to the Database home page http://localhost:8080/apex. Use the username "SYSTEM" and the password you chose during installation.

    Note: You may need to replace "localhost" with the IP address 127.0.0.1 or your machine's DNS name if you are behind a firewall or if localhost does not resolve for some other reason.

    Don't forget to register for the free Oracle XE forum by following the "Forum Registration" link on the Database home page.

    If you need to restart the database at any time use the Start Database and Stop Database items on the operating system's "Oracle Database 10g Express Edition" menu. To run these you will need to add yourself to the operating system "dba" group and re-login to the machine.

    Alternatively you can call the oracle-xe script as the root user:

      # /etc/init.d/oracle-xe stopTo restart:

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

    Installing Apache HTTP Server
    Now that the Oracle Database is installed, you should install Apache. You must install Apache before you can install PHP, since PHP will be installed into Apache.

    Download httpd-2.0.58.tar.bz2 from the Apache web site, log in as the root user and execute these commands:

      # tar -jxvf httpd-2.0.58.tar.bz2
      # cd httpd-2.0.58
      # ./configure --prefix=/usr/local/apache --enable-module=so
      # make
      # make installWhen configuring the web server, the option "--enable-module=so" allows PHP to be compiled as a Dynamic Shared Object (DSO). Also, the "--prefix=" option sets where Apache will be installed during the command "make install"

    If you are familiar with the tar command on UNIX systems, you may be wondering why we did not need to invoke bunzip2 to extract the tar file. Linux includes the GNU version of tar which has a new 'j' flag to automatically uncompress a bzipped tar file. If you downloaded the gzipped file you could have used the 'z' flag instead.

    Note: With Apache 2 you should use the default pre-fork MPM ("Multi-Processing Module") because many of the PHP extentions are not known to be thread-safe.

    Starting and Stopping Apache

    Start and stop Apache with the apachectl script:

      # /usr/local/apache/bin/apachectl startYou should test that Apache is up and running on your machine by opening your web browser to http://localhost/.

    Now stop Apache so it can be configured for PHP:

      # /usr/local/apache/bin/apachectl stopInstalling PHP
    If you don't want to mess about compiling PHP, use the pre-built Zend Core for Oracle package and follow its installation instructions.

    Otherwise, Download the file php-5.1.3.tar.bz2 from the PHP downloads page.

    Installation Steps

    Log in as the root user and execute these commands:

      # tar -jxvf php-5.1.3.tar.bz2
      # cd php-5.1.3
      # export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
      # ./configure \
             --with-oci8=$ORACLE_HOME \
             --with-apxs2=/usr/local/apache/bin/apxs \
             --with-config-file-path=/usr/local/apache/conf \
             --enable-sigchild
      # make
      # make install

    Note: if you are behind a firewall, you may need to set the environment variable http_proxy to your proxy server before running make install. This enables PHP's PEAR components to be installed.

    Copy PHP's supplied initialization file:

      # cp php.ini-recommended /usr/local/apache/conf/php.iniFor testing it is helpful to edit php.ini and set display_errors to On so you see any problems in your code.

    Edit Apache's configuration file /usr/local/apache/conf/httpd.conf and add the following lines:

      #
      # This next section will call PHP for .php, .phtml, and .phps files
       #    AddType application/x-httpd-php .php    AddType application/x-httpd-php .phtml    AddType application/x-httpd-php-source .phps
       #
       # This is the directory containing php.ini
       #    PHPIniDir "/usr/local/apache/conf"

    If a LoadModule line was not already inserted by the PHP install, add it too:

      LoadModule php5_module modules/libphp5.so

    Restart the Apache HTTP Server

    You must now restart the Apache Server so that you can test your PHP installation.

      # /usr/local/apache/bin/apachectl start

    Note: If you are using Oracle 10.2 but not the Express Edition, you must give the "nobody" user access to the Oracle directory. With Oracle 10.2.0.2 there is a script $ORACLE_HOME/install/changePerm.sh to do this.

    If there are errors, they will display on your screen. They may also be recorded in /usr/local/apache/logs/error_log. If you have problems, double check your httpd.conf and php.ini, and make corrections.

    When you start Apache, you must at least have ORACLE_HOME defined. Any other required Oracle environment variables must be set before Apache starts too. These are the same variables set by the $ORACLE_HOME/bin/oracle_env.sh or the /usr/local/bin/oraenv scripts.

    To simplify things, you may create a script to start Apache. I did this and named it start_apache:

      #!/bin/sh    ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server    export ORACLE_HOME
       echo "Oracle Home: $ORACLE_HOME"
       echo Starting Apache
       /usr/local/apache/bin/apachectl start

    Testing Apache and PHP with Oracle
    Testing PHP with Oracle is easy. You simply need to place a PHP file into your htdocs directory; normally /usr/local/apache/htdocs.

    Here are two files, the first is used to test basic PHP installation. Open it in a browser with http://localhost/phpinfo.php. If PHP is installed you should see a large page full of PHP configuration information.

    phpinfo.php
      <?php
         phpinfo();
       ?>

    Check there is a section titled "oci8".

    oci8test.php

    The second file will display name and salary columns from the EMPLOYEES table owned by the HR user. This requires the HR schema be installed otherwise you will need to modify the script. The HR schema comes with Oracle XE. You can unlock access and set a password using the Adminstration section of the Database home page.

    This file uses PHP4-style function names such as "ocilogon". In PHP5 names were standardized like "oci_connect" but the old names are still available.

    For Oracle XE the database connection string is simply "//127.0.0.1/XE". If you are not using Oracle XE then change the connection string (third parameter) to the Oracle Net entry for your database.

      <?php
         $db_conn = ocilogon("hr", "your_hr_password", "//127.0.0.1/XE");
         $cmdstr = "select last_name, salary from employees";
         $parsed = ociparse($db_conn, $cmdstr);
         ociexecute($parsed);
         $nrows = ocifetchstatement($parsed, $results);
         echo "<html><head><title>Oracle PHP Test</title></head><body>";
         echo "<center><h2>Oracle PHP Test</h2><br>";
         echo "<table border=1 cellspacing='0' width='50%'>\n<tr>\n";
         echo "<td><b>Name</b></td>\n<td><b>Salary</b></td>\n</tr>\n";
         for ($i = 0; $i < $nrows; $i++ )
         {
           echo "<tr>\n";
           echo "<td>" . $results["LAST_NAME"][$i] . "</td>";
           echo "<td>$ " . number_format($results["SALARY"][$i], 2). "</td>";
           echo "</tr>\n";
         }
         echo "<tr><td colspan='2'> Number of Rows: $nrows</td></tr></table>";
         echo "<br><em>If you see data, then it works!</em><br></center></body></html>\n";
      ?>

    Conclusion

    You should now have the Oracle Database, Apache HTTP Server, and PHP installed and configured. At this point you are ready to start writing PHP applications on the Oracle platform.

    For more information about PHP and Oracle, visit the OTN PHP Developer Center.

    Robert Clevenger joined Oracle in 1997 and is an architect for Oracle Fusion middleware.
    Christopher Jones joined Oracle in 1990 and is an open source evangelist.