크리에이티브 커먼즈 라이센스
Creative Commons License

SSL을 사용한 통신에서 암호화 방식의 선택은 Client Hello와 Server Hello를 주고 받을 때 Cipher suites을 주고 받는다. 즉, 클라이언트에서는 자신이 지원하는 암호화 방식의 리스트(Cipher Suites)을 서버에 전송하고 서버에서는 클라이언트가 준 Cipher suites에서 자신이 지원하는 암호화 방식을 택하여 서버와 클라이언트간의 암호화 방식을 택하게 된다.

Client Hello

*** ClientHello, TLSv1
RandomCookie:  GMT: 1226648498 bytes = { 200, 58, 111, 214, 101, 210, 35, 45, 30, 95, 248, 152, 164, 79, 190, 173, 246, 107, 75, 117, 87, 53, 57, 130, 181, 247, 4, 49 }
Session ID:  {}
Cipher Suites: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA]
Compression Methods:  { 0 }
***

위에 처럼 Cipher Suites 가 ClientHello에 실려 날아가게된다.

Server Hello

*** ServerHello, TLSv1
RandomCookie:  GMT: 1226648580 bytes = { 5, 238, 245, 170, 224, 35, 204, 164, 117, 25, 117, 146, 156, 96, 177, 125, 190, 18, 220, 170, 62, 65, 6, 108, 174, 253, 27, 67 }
Session ID:  {103, 15, 0, 0, 41, 170, 156, 123, 141, 32, 89, 224, 116, 103, 216, 190, 48, 141, 19, 213, 138, 211, 210, 218, 165, 23, 132, 90, 120, 77, 134, 26}
Cipher Suite: SSL_RSA_WITH_RC4_128_MD5
Compression Method: 0
***

위와 같이 서버에서는 Client Hello에 실린 Cipher Suites중 하나를 택하여 사용하게 된다. 이로써 이후의 통신은 선택된 방식을 사용하여 암호화 하게 된다.

사실 클라이언트 입장에서 자신이 지원하는 모든 Cipher suites를 전송하는게 맞으나.. 어느 회사에서 자신들은 3DES이상의 암호화만 안전한 것으로 판단하니 Cipher Suites를 바꿔 달라는 요청이 있었다.. ㅡㅡ;; 그럴바에 그냥 LDAP 서버에서 지원하는 암호화 리스트를 3DES 이상의 것들만 선택하는게 더 간단할텐데.. 왜 이런 삽질을 요구하는지 ㅡㅡ;;;;;

Java에서의 LDAP의 지원은 javax.naming 패키지에서 지원을 한다. LDAP 프로그래밍을 해 본 사람이면 아래의 구문은 익숙할 것이다.

LDAP 프로토콜을 사용한 통신

[code Java]
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://IP주소:389/");
env.put(Context.SECURITY_PRINCIPAL, "계정의 도메인");
env.put(Context.SECURITY_CREDENTIALS,"계정의 암호");

DirContext ctx = new InitialDirContext(env);
[/code]

위의 예제는 LDAP 프로토콜을 이용하여 389번 포트로 평문 통신을 하여 사용하는 것의 예제이다.


LDAPS 프로토콜을 사용한 통신

[code]
System.setProperty("javax.net.ssl.trustStore","c:\\java\\trust.keystore");

Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldaps://IP주소:636/");
env.put(Context.SECURITY_PRINCIPAL, "계정의 도메인");
env.put(Context.SECURITY_CREDENTIALS,"계정의 암호");
env.put(Context.SECURITY_PROTOCOL,"ssl");
 
DirContext ctx = new InitialDirContext(env);
[/code]

위의 예제는 LDAPS 프로토콜을 사용하여 636 포트로 SSL암호화 통신을 한 예제이다. 다른게 있다면 포트가 636으로 바뀌었고 시스템 프로퍼티에 신뢰된 저장소(Trust store)를 지정한 것 그리고 암호화 프로토콜로 SSL을 지정 하였을 뿐이다.

이렇게 자바에서 LDAP 프로그래밍은 아주 간단히 큰 변화를 일으키지 않고도 많은 LDAP에서 LDAPS로의 변경이 가능하다. 여기서 문제가 되는 것은 이렇게 내부의 로직이 숨어 있어서 우리가 하고 싶은 Cipher Suites을 변경하는 작업이 어렵다는 점이다.

이런 문제점을 해결하기 위해 Jndi에서는 CustomSocketFactory라는 방식으로 지원을 한다. CustomSocketFactory는 이름에서도 알 수 있듯이 사용자 정의 소켓을 생성하도록 해주는 Factory 패턴이다. LDAP나 LDAPS 통신을 할때 기본적으로 SocketFactory나 이를 상속 받는 SSLSocketFactory를 사용하도록 되어 있다. 우리가 할일은 SSLSocketFactory를 상속받은 CustomSSLSocketFactory를 생성하고 jndi가 앞으로 소켓을 생성할때는 우리가 만든 CustomSSLSocketFactory를 사용하도록 지정하면 되는 것이다.

각설하고 소스코드는 다음과 같이 변한다.

[code]
System.setProperty("javax.net.ssl.trustStore","c:\\java\\trust.keystore");

Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldaps://IP주소:636/");
env.put(Context.SECURITY_PRINCIPAL, "계정의 도메인");
env.put(Context.SECURITY_CREDENTIALS,"계정의 암호");
env.put(Context.SECURITY_PROTOCOL,"ssl");
env.put("java.naming.ldap.factory.socket", "CustomSSLSocketFactory");
 
DirContext ctx = new InitialDirContext(env);
[/code]

기본 LDAPS 소스코드에다 단지
env.put("java.naming.ldap.factory.socket", "CustomSSLSocketFactory"); 을 삽입한 것 뿐이다.

이는 LDAP에서 사용할 Socket은 CustomSSLSocketFactory 라는 클래스를 사용하여 생성하라는 것을 알려주는 것이다.

[code]

import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import javax.net.SocketFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
public class CustomSSLSocketFactory extends SSLSocketFactory {
 private SSLSocketFactory factory;
 String suites[] = {
   "SSL_RSA_WITH_3DES_EDE_CBC_SHA",
 };

 public CustomSSLSocketFactory() {
  try {

   SSLContext sslcontext = null;

   if (sslcontext == null) {
    sslcontext = SSLContext.getInstance("TLS");
    sslcontext.init(null, // No KeyManager required
      new TrustManager[] { new CustomTrustManager() },
      new java.security.SecureRandom());
   }

   factory = (SSLSocketFactory) sslcontext.getSocketFactory();
  } catch (Exception ex) {
   ex.printStackTrace();
  }
 }

 public static SocketFactory getDefault() {
  return new CustomSSLSocketFactory();
 }

 public Socket createSocket(Socket socket, String s, int i, boolean flag) throws IOException {
  SSLSocket sock = (SSLSocket)factory.createSocket(socket, s, i, flag);
  sock.setEnabledCipherSuites(suites);
  return sock;
 }

 public Socket createSocket(InetAddress inaddr, int i, InetAddress inaddr1, int j) throws IOException {
  SSLSocket sock = (SSLSocket)factory.createSocket(inaddr, i, inaddr1, j);
  sock.setEnabledCipherSuites(suites);
  return sock;
 }

 public Socket createSocket(InetAddress inaddr, int i) throws IOException {
  SSLSocket sock = (SSLSocket)factory.createSocket(inaddr, i);
  sock.setEnabledCipherSuites(suites);
  return sock;
 }

 public Socket createSocket(String s, int i, InetAddress inaddr, int j) throws IOException {
  SSLSocket sock = (SSLSocket)factory.createSocket(s, i, inaddr, j);
  sock.setEnabledCipherSuites(suites);
  return sock;
 }

 public Socket createSocket(String s, int i) throws IOException {
  SSLSocket sock = (SSLSocket)factory.createSocket(s, i);
  sock.setEnabledCipherSuites(suites);
  return sock;
 }

 public String[] getDefaultCipherSuites() {
  return suites;
 }

 public String[] getSupportedCipherSuites() {
  return suites;
 }

}

[/code]

이름에서도 알 수 있듯이 Factory 패턴은 새로운 객체를 생성하는 디자인 패턴이다. 소스코드를 살펴보면 SSLSocket을 생성하고 Cipher suites를 지정한것 밖에 없다.

그리고 Trust Store를 찾기 위해 X509TrustManager의 구현을 참조하기 때문에 가짜로 CustomTrustManager라는 파일을 하나 생성하자. 그렇지 않으면 NULL Exception이 발생하니 가짜로라도 만들어 놓아야한다. 앞의 메인 프로그램에서 시스템 프로퍼티에 Trust Store를 지정하였으므로 가짜라도 상관이 없다.

[code]
CustomTurstManager.java

import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;

public class CustomTrustManager implements X509TrustManager {
 public void checkClientTrusted(X509Certificate[] cert, String authType) {
  return;
 }

 public void checkServerTrusted(X509Certificate[] cert, String authType) {
  return;
 }

 public X509Certificate[] getAcceptedIssuers() {
  return new X509Certificate[0];
 }
}
[/code]

이로써 LDAPS에서 사용할 클라이언트 Cipher suites는 위의 CustomSSLSocketFactory에서 지정한 것으로 Client Hello를 날리게 될 것이다. 제대로 된 Cipher suites가 날라가는지 알고 싶으면 실행시에 -Djavax.net.debug=ssl 옵션을 줘서 실행하자. SSL 통신 절차들이 모두 디버그 코드로 화면에 출력 될 것이다.


참조 : JNDI Tutorial: SSL and Custom Sockets

Posted by 느긋나긋

2008/11/14 16:36 2008/11/14 16:36
, , , , ,
Response
No Trackback , No Comment
RSS :
http://onurmark.co.kr/tc/rss/response/135

Trackback URL : http://onurmark.co.kr/tc/trackback/135

Leave a comment
크리에이티브 커먼즈 라이센스
Creative Commons License

* 이 문서는 제가 작업한 내용을 잊지 않기 위해 기록하는 것으로 자세히 설명되어 있지 않습니다. 도움이 필요하시다면 답글이나 email을 통해서 도와드리겠습니다.
 
Redmine은 프로젝트를 관리하는 웹 어플리케이션으로 유연하고 손쉬운 프로젝트 관리를 돕는 툴이다. 간트(gantt) 차트, 일정, wiki, 포럼, 다양한 역할 할당과 같은 기능들이 포함되어 있고 Subversion, Darcs, Mercurial, CVS, Bazzar, Git와 같은 다양한 소스 형상관리 툴을 지원한다.

설치 완료 후 화면

사용자 삽입 이미지


설치 구성
사용자 삽입 이미지
Redmine은 mongrel_rails 를 사용하여 8000, 8001,8002 포트로 클러스터링하고 apache에서 443포트로의 접속을 로드밸런싱하여 redmine에 접속하도록 하였다. SVN은 mod_dav를 사용하여 SVN에 접속할 수 있도록 설정하였다. 클라이언트와 서버간의 접속프로토콜은 SSL 프로토콜을 사용한 HTTPS프로토콜을 사용하도록 하였다.

설치에 사용한 프로그램

Apache httpd(ver.2.2.8)
MySQL(ver.5.0.18)
Redmine(ver.0.7)
BerkeleyDB(ver.4.3)
Subversion(ver.1.5.4)

1. BerkeleyDB 설치
저장소를 Berkeley-DB를 사용하지 않고 file로만 사용한다면 Berkeley-DB를 설치 하지 않아도 무관하다.
압축을 해제 후 build_unix 디렉토리로 이동한다.

../dist/configure
make
make install
echo "/usr/local/BerkeleyDB4.3/lib" >> /etc/ld.so.conf

ldconfig

2. apache 설치
http://www.apache.org 에서 아파치를 다운로드 할 수 있다.

./configure --prefix=/opt/apache-2.2.8 --enable-rewrite --enable-dav --enable-unique-id --enable-proxy --enable-proxy_http --enable-proxy_connect --enable-headers --enable-logio --enable-ssl --enable-deflate --with-mpm=worker --enable-nonportable-atomics=yes --with-berkeley-db=/usr/local/BerkeleyDB.4.3
make && make install

configure옵션은 자신이 필요한 모듈을 알아서 설정하도록 한다. 만일 wiki를 설치하고싶다면 php 모듈도 같이 설치 한다. 위의 구성에서 다음 모듈 rewrite, dav, proxy, ssl모듈은 반드시 설치하도록 한다.

Rewrite 모듈은 80포트로의 접속을 443으로 리다이렉트 할 때 사용하며 이외에도 유연한 기능을 지원한다.
dav 모듈은 SVN서버를 웹에서도 볼 수 있도록 지원하며 이 모듈이 없을 경우에는 http 프로토콜을 사용하여 SVN에 접속 할 수 없다.
proxy는 Redmine 서버를 로드밸런싱을 위해 사용한다.
ssl 모듈은 서버를 https 프로토콜을 사용하도록 설정하기 위함이다.

3. MySQL 설치
(생략)

4. Redmine 설치
Redmine은 Ruby on Rails로 작성되어 있는 웹 어플리케이션 프로그램이다. 즉 설치를 위해서는 Ruby와 Rails를 설치하여야 한다. 설치가 간단하니 웹 문서를 참조하여 설치를 한 후 다음으로 진행한다.

a. Redmine가 사용할 데이터 베이스를 생성한다. mysql에 root권한으로 접속한 후 아래의 명령어를 입력하여 데이터베이스를 생성한다.
create database redmine character set utf8;

b. config/database.yml.example 파일을 config/database.yml 파일로 복사 한 후 수정한다.

production:
  adapter: mysql <- mysql을 지정
  database: redmine <- 사용할 데이터베이스 이름
  host: localhost <- 데이터베이스의 위치
  username: dbuser <- 사용자 ID
  passwd: dbpasswd <- 사용자 PW

c. mysql 데이터베이스에 테이블들을 생성한다.

rake db:migrate RAILS_ENV="production"

d. redmin의 초기 설정을 mysql데이터베이스에 입력한다.

rake redmine:load_default_data RAILS_ENV="production"

e. redmine은 실행시에 redmine:redmine 권한으로 실행이 된다. files, log, tmp 폴더에 redmine:redmine 사용자가 읽고 쓸 수 있도록 권한을 부여한다.

mkdir tmp
chown -R redmine:redmine files log tmp
chmod -R 755 files log tmp

f. mongrel 설치 및 cluster 구성
mongrel 및 mongrel_cluster 설치

gem install mongrel mongrel_cluster daemons

cluster 설정
port 8000 번 부터 3개(즉, 8000, 8001, 8002)를 사용하도록 하고 사용자와 그룹을 redmine로 설정한다.

mongrel_rails cluster::configure -e production -p 8000 -N 3 -c /opt/redmine-0.7 --user redmine --group redmine

cluster 시작

mongrel_rails cluster:start

5. subversion 설치

./configure --prefix=/opt/subversion-1.5.4 --with-zlib=/usr/local/include --with-ssl=/usr/local/ssl --with-apr=/opt/apache-2.2.8 --with-apr-util=/opt/apache-2.2.8 --with-apxs=/opt/apache-2.2.8/bin/apxs --with-berkeley-db=/usr/local/BerkeleyDB.4.3
make && make install

--with-apr, --with-apr-util, --with-apxs는 설치 된 아파치의 위치로 적절하게 잡아주고 berkeleyDb의 위치를 지정한다.  

6. apache 설정
conf/httpd.conf 파일을 수정

[code]
Listen 80
Listen 443
Listen 8443

<VirtualHost *:80>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{SERVER_NAME}:443/$1 [L,R]
</VirtualHost>

# redmine Server and Repository
<VirtualHost *:443>
        ServerName svn.secuwiz.net
        DocumentRoot /opt/redmine-0.7/public
        <Directory "/opt/redmine-0.7/public">
                Options FollowSymLinks
                AllowOverride None
                Order allow,deny
                Allow from all
        </Directory>
        <Proxy balancer://redmine_cluster>
                Order allow,deny
                Allow from all
                BalancerMember http://127.0.0.1:8000
                BalancerMember http://127.0.0.1:8001
                BalancerMember http://127.0.0.1:8002
        </Proxy>
        RewriteEngine On
        RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
        RewriteRule ^/(.*)$ balancer://redmine_cluster%{REQUEST_URI} [P,QSA,L]

        RequestHeader set X_FORWARDED_PROTO 'https'

        SSLEngine On
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
        SSLCertificateFile "conf/server.crt"
        SSLCertificateKeyFile "conf/server.pem"
</VirtualHost>

<VirtualHost *:8443>
        <Location /svn/sample>
                DAV svn
                SVNPath /opt/SvnRepo/sample
                AuthType Basic
                AuthName "Sample Repository"
                AuthUserFile conf/.passwd
                AuthGroupFile conf/.groups
                Require group alluser <= alluser라는 그룹에게 공개
        </Location>
        <LocationMatch "/svn/sample/branches.*">
                AuthType Basic
                AuthName "Sample Repository"
                AuthUserFile conf/.passwd
                AuthGroupFile conf/.groups
                Require user admin <= admin이라는 사용자에게 공개
        </LocationMatch>
        SSLEngine On
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
        SSLCertificateFile "conf/server.crt"
        SSLCertificateKeyFile "conf/server.pem"

        LogFormat "%t %u %h %l \"%r\" %>s %b" comonvhost
        CustomLog "logs/svn_access_log" comonvhost
</VirtualHost>
[/code]

설정을 살펴보면 80포트에서는 들어오는 모든 요청을 Rewrite 모듈을 사용하여 443 포트로 리다이렉트 하고 있다.
443은 들어온 요청에 https 헤더를 붙이고 SSL 인증서와 키를 지정하여 암호화 하도록 하고 있다.
8443은 dav 모듈이 SVN을 사용하도록 하고 있고 Basic 인증을 사용하여 사용자 인증을 처리하고 있다. LocationMatch를 사용하여 사용자의 권한별 접근제한을 수행하고 있다.
사용자 생성과 그룹 생성, SSL 인증서 생성에 관한 것은 http://www.apache.org를 참고 하도록 하자.

위에 사용된 httpd.conf 파일은 예제일 뿐이다(즉, 실행되지 않는다.). 저 파일을 참고로 설치 시 기본으로 생성된 httpd.conf 파일을 수정하도록 하자

Posted by 느긋나긋

2008/11/12 11:37 2008/11/12 11:37
, ,
Response
A trackback , No Comment
RSS :
http://onurmark.co.kr/tc/rss/response/134

Trackback URL : http://onurmark.co.kr/tc/trackback/134

Trackbacks List

  1. [CentOS]Redmine0.8 SMTP 사용하기

    Tracked from Gyuuuuu~* 2009/12/04 10:07 Delete

    Redmine 0.7 이하의 버전에는 environment..rb라는 파일에서 smtp 정보를 수정하면 됐었습니다. (요즘 , redmine 때문에 머리 아풉니다. ;;) 그런데 0.8에서는 쵸큼! 달라졌습니다. 인증 과정에 따라 두가지 ?

Leave a comment

Fedora core 5에서 serial console 사용하기

크리에이티브 커먼즈 라이센스
Creative Commons License

일반 데스크탑이나 랩탑 같은 PC기종에서는 모니터 출력을 위한 VGA카드가 필요하지만 서비스를 위한 서버 컴퓨터 환경의 경우는 특별한 경우를 제외하고는 필요가 없을 경우가 많다. 원가 절감이나 전력 절감의 차원에서도 서버용 컴퓨터에서 VGA카드가 없는 경우가 대부분이다. 이 같은 환경에서는 VGA를 이용한 입출력을 대신하여 serial console을 이용한 텍스트 방식의 입출력이 주로 사용이 된다.

1. BIOS(Basic Input Output System)에서의 지원
이름에서 알 수 있듯이 기본적인 입출력을 지원하는 곳이다. 컴퓨터에 전원이 공급되면 가장 먼저 BIOS에서 기본적인 테스트를 실시하는데 이부분에서 keyboard, mouse, video와 같은 입출력 장치를 찾게 된다. 만일 이와 같은 기본적인 입출력 장치가 존재하지 않을 경우 beep음과 함께 부팅이 되지 않게 된다. 그러나 요즘 나오는 대부분의 board에서는 이를 회피하기 위한 기술들이 있으니 board 메뉴얼을 살펴보고 CMOS의 설정값을 변경하자.(일부 board에서는 지원하지 않을 수도 있다.)

2. boot loader의 입출력을 콘솔로 출력
GRUB의 기본적인 옵션에 splashimage가 설정이 되어있다. 최신의 linux 배포판의 경우 부트로더 배경에 이미지가 설정이 되어 있는데 이것이 바로 splashimage이다. serial console 같은 경우는 그림을 출력할 수 없으므로 GRUB 설정에서 splashimage항목을 제외한다. kernel의 부팅 message를 serial로 출력하기 위해 커널 command에 console 항목을 추가한다. 이 설정들은 /boot/grub/grub.conf 파일에서 설정을 한다.

default=0
timeout=5
# splashimage=(hd0,0)/boot/grub/splash.xpm.gz # comment 처리
# 부트로더의 화면을 serial로 출력
serial --unit=0 --speed=19200 --word=8 --parity=no --stop=1 terminal --timeout=5 serial console
hiddenmenu
title Fedora Core (2.6.20.19)
        root (hd0,0)
# 커널 메시지를 ttyS0(com1)로 출력
        kernel /boot/vmlinuz-2.6.20.19 ro root=LABEL=/ console=ttyS0,19200
        initrd /boot/initrd-2.6.20.19.img


3. 터미널을 ttyS0로 입출력
/etc/inittab 설정을 보면 터미널 들이 설정되어 있다. 기본적으로 6개의 터미널이 모니터를 통해서 출력이 되도록 설정이 되어있다. 여기에 ttyS0에 터미널을 하나 등록을 한다.

# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# ttyS0에 터미널을 만든다.
S0:2345:respawn:/sbin/agetty -L 19200 ttyS0 vt100


4. console에 root 사용자가 접속할 수 있도록 허용
/etc/securetty 파일을 열어보면 루트권한으로 접속을 허용하는 터미널들의 목록이 들어 있다. 이 파일에 ttyS0를 추가한다. 만일 console에서 root 사용자가 접속 할 수 없도록 제한 할려면 이과정을 생략한다.

* serial console은 windows에서 com1 com2와 같은 이름으로 불리운다. 리눅스에서는 ttyS0 ttyS1과 같은 이름으로 분류를 한다.

Posted by 느긋나긋

2008/10/31 15:31 2008/10/31 15:31
,
Response
No Trackback , No Comment
RSS :
http://onurmark.co.kr/tc/rss/response/133

Trackback URL : http://onurmark.co.kr/tc/trackback/133

Leave a comment
« Previous : 1 : 2 : 3 : 4 : 5 : 6 : 7 : ... 39 : Next »

블로그 이미지

네트워크, SSL, VPN, 보안장비, Linux 정보 제공.

- 느긋나긋

Notices

Archives

Calendar

«   2010/09   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

Site Stats

Total hits:
197173
Today:
149
Yesterday:
151