검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : How to automatically chroot jail selected ssh user logins

1. 소개
  이 글에서는 사용자 그룹을 기반으로 ssh를 사용하여 로그인하는 특정 그룹의 사용자들에게 chroot jail을 적용시키는 방법을 소개합니다 .이 기술은 특정 사용자들에게 제한된 시스템 환경을 제공하면서도 메인 시스템에 접근하지 못하게 할 때 유용합니다.

2. 기본 chroot 환경 제작
  먼저 간단한 chroot 환경을 만들어야 합니다. 리눅스인 만큼 bash를 사용하는 것으로 간주하고 환경을 제작할 것입니다. chroot 대상 디렉토리는 /var/chroot로 간주합니다. 먼저 해당 디렉토리를 mkdir /var/choot 명령어로 생성합니다. 그 다음으로 bash 바이너리와 관련 공유 라이브러리를 모두 복사해야 합니다. ldd 명령어를 통해 bash의 공유 라이브러리 목록을 볼 수 있습니다.
$ ldd /bin/bash
    linux-vdso.so.1 =>  (0x00007fff017ff000)
    libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003ef9800000)
    libdl.so.2 => /lib64/libdl.so.2 (0x0000003eeac00000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003eea800000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003eea000000)
  이제 필요한 디렉토리들을 모두 수동으로 만들고 bash와 관련 라이브러리를 새로운 chroot 디렉토리 밑에 적절한 위치로 복사합니다.
# cd /var/chroot/
# mkdir bin/ lib64/ lib64/
# cp /lib64/libtinfo.so.5 lib64/
# cp /lib64/libdl.so.2 lib64/
# cp /lib64/libc.so.6 lib64/
# cp /lib64/ld-linux-x86-64.so.2 lib64/
# cp /bin/bash bin/
  이제 모든 준비가 끝났으므로 chroot를 할 수 있는지 테스트합니다.
# chroot /var/chroot
bash-4.1# ls /
bash: ls: command not found
  하지만 복사한 건 bash 뿐이므로 쉘 내장 명령어가 아니라면 아직 어떤 명령어도 사용할 수 없습니다. 지금까지 했던 걸 매 명령어마다 모두 반복할 순 없으므로 아래의 bash 스크립트를 이용해 한 번에 처리합니다.
#!/bin/bash
# This script can be used to create simple chroot environment
# Written by LinuxCareer.com <http://linuxcareer.com/>
# (c) 2013 LinuxCareer under GNU GPL v3.0+

#!/bin/bash

CHROOT='/var/chroot'
mkdir $CHROOT

for i in $( ldd $* | grep -v dynamic | cut -d " " -f 3 | sed 's/://' | sort | uniq )
  do
    cp --parents $i $CHROOT
  done

# ARCH amd64
if [ -f /lib64/ld-linux-x86-64.so.2 ]; then
   cp --parents /lib64/ld-linux-x86-64.so.2 /$CHROOT
fi

# ARCH i386
if [ -f  /lib/ld-linux.so.2 ]; then
   cp --parents /lib/ld-linux.so.2 /$CHROOT
fi

echo "Chroot jail is ready. To access it execute: chroot $CHROOT"
  이 스크립트는 chroot로 사용할 디렉토리까지 생성하므로 이전에 사용했던 /var/chroot 디렉토리를 삭제하고 아래처럼 복사할 명령어들과 파일들의 풀 패스를 인자로 넣어 실행합니다. 명령어의 풀 패스는 which 명령어로 알아보는 것이 좋습니다.
./chroot.sh /bin/{ls,cat,echo,rm,bash,vi} /etc/hosts
ldd: warning: you do not have execution permission for `/etc/hosts'
Chroot jail is ready. To access it execute: chroot /var/chroot
  출력된 에러는 /etc/hosts 파일이 실행 파일이 아니라서 ldd가 작동하지 않았기 때문에 발생한 것이므로 문제 될 건 없습니다. 이제 chroot jail을 테스트합니다.
# chroot /var/chroot
bash-4.1# echo linuxcareer.com > file
bash-4.1# cat file
linuxcareer.com
bash-4.1# rm file
bash-4.1# ls
bin  etc  lib64

3. chroot 용 그룹 생성
  sshd가 chroot jail의 대상으로 삼을 그룹을 생성합니다. 여기서는 chrootjail이라는 그룹을 생성하여 사용할 것입니다.
# groupadd chrootjail

4. chroot jail을 위한 sshd 설정
  chrootjail 그룹에 속한 사용자가 ssh로 접속 시 /var/chroot로 chroot jail이 되도록 설정합니다. /etc/ssh/sshd_config 파일에 아래 내용을 추가하면 됩니다.
Match group chrootjail
            ChrootDirectory /var/chroot/
  그리고 ssh를 재시작합니다.
# sudo service ssh restart
  이제 chrootjail 그룹에 속한 사용자를 생성하여 테스트합니다. 한 가지 유의할 점은 원래 홈 디렉토리가 아닌 chroot jail 내의 홈 디렉토리도 별도로 생성해야 한다는 것입니다. 그렇지 않으면 사용자는 로그인 후 chroot jail 내의 / 디렉토리로 가게 됩니다.
# mkdir /var/chroot/home
# cp -rp ~tester/ /var/chroot/home/
# useradd tester -g chrootjail
# passwd tester
Changing password for user tester.
New password:
Retype new password:
# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
# ssh tester@localhost
tester@localhost's password:
Last login: Sun Jul  7 21:14:29 2013 from localhost
-bash-4.1$ pwd
/home/tester
  물론 /etc 디렉토리의 환경설정 파일들 부재나 쉘 환경 등의 문제 때문에 이후 자신에게 필요한 추가적인 작업들을 해야 할 것입니다.
2013/07/07 21:30 2013/07/07 21:30
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : SSH: The VPN No One Remembers

  사실 이전에 VPN 관련 글과 SSH 관련 글에서 비슷한 내용을 다루긴 했는데 VPN 능력 자체를 메인으로 다룬 것도 아니고 이 글은 사용법이 조금 달라서 작성하기로 했습니다. 그렇다고 이게 그 기능을 자세히 다뤘냐면 그건 또 아닌 것 같지만...

  SSH를 통한 VPN 활용은 일반적인 전용 VPN 솔루션에 비하면 그리 강력하지 않습니다. 서버와 클라이언트 사이의 모든 패킷을 암호화하는 것이 아니라 하나의 포트를 오가는 패킷을 암호화하며 그로 인해 이 VPN을 사용할 응용 프로그램이 프록시 기능을 지원해야 쓸 수 있기 때문이죠. 허나 적절히 활용한다면 닭 잡는데 소 잡는 칼은 쓸 일을 없앨 수 있을 것입니다.

  먼저 SSH가 서버에 이미 설치되어 있다고 가정합니다. 그리고 기존의 SSH 서비스는 그대로 두고 새로운 포트를 VPN 용도로 사용한다고 가정하겠습니다. 이를 위해 먼저 기존의 설정 파일을 복사합니다.
cp /etc/ssh/sshd_config /etc/ssh/proxy_config
  새롭게 복사한 설정 파일에서 가장 중요한 건 포트입니다. 새롭게 사용할 포트를 정합니다.
Port ####
  보안을 위해 root 로그인 금지도 걸어줍니다.
PermitRootLogin no
  SSH 서버가 프록시 서버 역할을 할 수 있도록 아래 옵션을 활성화합니다. 예전에는 없어도 됐다는 것 같은데 지금은 필요하다고 합니다. 확인해보니 디폴트도 no더군요.
PermitTunnel yes
  추가로 아래처럼 ACL을 걸 수도 있습니다. 이건 저도 처음 보는 것 같네요.
AllowUsers user1 user2 etc...
AllowGroups group1 group2 etc...
  이제 방화벽을 적절히 설정하고 필요한(=SSH가 사용할) 계정과 그룹을 생성합니다. 물론 SSH 설정 파일에 해당 계정과 그룹이 적혀있어야겠죠. 이때 보안을 위해 사용자 계정에 쉘을 주지 않는 것이 좋습니다. 이제 기존의 스크립트를 복사 및 수정하여 기존의 sshd_config 파일을 돌리듯 돌리거나 간단히 아래 명령어를 실행합니다.
/usr/sbin/sshd -f /etc/ssh/sshd_proxy
  만약 스크립트를 사용한다면 스크립트 내에 있는 PID_FILE 변수와 설정 파일명을 적절히 수정해야 한다. 예를 들어 PID_FILE 변수는 sshd_proxy.pid 처럼 기존 이름과 같지 않게 해야 하며 설정 파일도 복사한 파일명으로 바꿔야 한다.

  서버가 정상적으로 작동한다면 클라이언트가 될 머신에서 터미널을 열어 아래를 실행합니다.
ssh -fND localhost:로컬_포트_번호 -p 서버의_포트 접속_계정명@원격_서버_IP
  만약 백그라운드에서 돌아가길 원한다면 옵션에서 f를 제외합니다. N 옵션은 접속 후 원격 명령어를 실행하지 않는 옵션으로 지금처럼 포워딩을 할 때 사용하는 옵션입니다. '로컬_포트_번호'에는 1024 보다 높으면서 현재 사용하지 않는 포트 번호를 씁니다. 이제 VPN을 이용할 프로그램(브라우저, 메신저, 이메일 등)에서 프록시 기능을 활성화하고 호스트네임에 localhost, 포트에 위에서 정한 포트를 입력하여 프록시를 작동시킵니다.

  예를 들어 로컬 포트가 5555, 서버가 열고 있는 포트가 9999, 접속 계정명이 bob, 서버의 IP가 255.244.222.111이라면 아래와 같은 명령어가 됩니다.
ssh -fND localhost:5555 -p 9999 bob@255.244.222.111
  참고로 예전 글(VNC 패킷을 터널링하기 위해 SSH를 쓰던 글)에서는 -D가 아닌 -L 옵션을 쓰고 그로 인해 추가로 최종 포워딩 대상과 포트를 적었었는데 -D 옵션을 사용하면 반대편으로 포워딩 후 서버에서 어플리케이션 프로토콜을 통해 어디로 접속할지 결정합니다. 두 옵션의 차이를 설명하자면 아래와 같습니다.
  • -L : 이전 VNC 때처럼 터널링 생성 후 프로그램에서 접속 목적지를 터널링이 생성된 localhost의 특정 포트로 설정하여 번대편 터널링 서버까지 패킷을 포워딩한 후 그곳에서 터널링을 할 때 지정했던 곳으로 다시 포워딩할 경우 사용.(프로그램(직접 연결)->시큐어 터널(터널링 구간)->SSH서버->지정한 주소의 지정한 포트(보통은 동일 서버의 특정 포트))
  • -D : 네이트를 우회해서 사용할 때처럼 터널링 생성 후 프로그램에서 프록시 기능을 사용해 터널링이 생성된 localhost의 특정 포트로 프록시 서버를 설정하여 반대편 터널링 서버까지 패킷을 포워딩한 후 그곳에서 프로그램이 정한 진짜 목적지로 다시 포워딩할 때 사용.(프로그램(프록시 이용)->시큐어 터널(터널링 구간)->SSH서버->프로그램이 지정한 곳)



2013/06/27 16:53 2013/06/27 16:53
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : Three locks for your SSH door

  아무래도 SSH 접속을 허용하면 잠재적인 취약점이 생기기 마련입니다. 이번 글에서는 SSH 서비스를 통한 침입을 막기 위한 3가지 기술을 설명합니다.
  • SSH의 포트를 다른 값으로 바꾸고 SSH 설정을 보강하여 허접한 공격 튕겨내기
  • SSH를 통해 로그인이 가능한 사용자 목록 지정하기
  • SSH 접속이 가능하다는 사실을 숨기고 접속을 위한 비밀 절차 만들기
  당연하지만 이 글에 있는 내용을 실현하려면 루트 권한이 필요합니다. 덤으로 몇 가지 패키지를 설치해야 하고 만약 방화벽이나 공유기(라우터)를 사용한다면 그에 대한 설정도 해야 합니다.


more..



more..



more..

2010/10/25 16:39 2010/10/25 16:39
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : Remotely Accessible Virtual Desktops
관련 글 : SSH와 VNC를 이용한 원격 접속 설정

  저번에 이어서 이번에는 가상 데스크탑을 이용한 원격 접속을 설정하는 포스팅입니다. 저번의 경우 로컬과 원격이 같은 데스크탑을 공유했기 때문에 원격에서 동시에 2명 이상이 접속할 수 없었고 로컬이나 원격 중 한 곳에서만 데스크탑을 사용할 수 있었습니다. 이번 포스팅은 그 제한을 타파하기 위해 '가상 데스크탑'이라는 것을 사용합니다. 말 그대로 가상의 데스크탑을 여러 개 띄워서 그 중 하나에 접속하는 것이죠.

  저번과 마찬가지로 이 포스팅은 데비안 기반(민트, 데비안, 우분투)의 배포판을 기준으로 작성되었습니다. 그리고 이전 글에 있는 내용을 이미 수행하여 SSH와 VNC 서버, Xfce 같은 가벼운 데스크탑 환경을 설치했음을 가정하고 설명합니다.


1. 가상 데스크탑 설정
  먼저 아래의 명령어를 통해 SSH로 원격 컴퓨터에 접속합니다. 당연하지만 port에는 SSH 서버의 포트 번호, username에는 로그인할 사용자명, your_server_ip에는 원격 컴퓨터의 IP를 적습니다.
ssh -p port username@your_server_ip
  접속하면 사용자의 홈 디렉토리 밑에 ".vnc"라는 디렉토리를 만듭니다. 맨 앞이 점(.)이니까 숨겨진 디렉토리가 되겠습니다. 그리고 그 밑에 xstartup이라는 파일을 만듭니다. 결과적으로 ~/.vnc/xstartup이라는 위치와 이름의 파일이 되겠군요. 이 파일은 데스크탑 환경이나 윈도우 매니저에 대한 설정을 담는 파일입니다. 이제 파일에 아래와 같은 내용을 적습니다.
#!/bin/sh
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
xfce4-session
  만약 데스크탑 환경으로 Xfce가 아닌 다른 것을 사용한다면 데스크탑 환경을 실행하기 위한 마지막 줄의 명령어를 자신이 사용할 것에 맞춰 적습니다. Fluxbox의 경우 "fluxbox"라고 적으면 되고 LXDE의 경우 "lxsession"이라고 적으면 됩니다.

  이 파일은 스크립트 파일이므로 편집을 마친 후 실행 권한을 주는 것을 잊지 맙시다. 이제 SSH 연결을 끊습니다. 만약 여러 사용자에 대해 가상 데스크탑을 설정하려면 위 작업을 가상 데스크탑을 사용할 각 계정마다 반복해서 해줘야 합니다.


2. 가상 데스크탑 실행하기
  가상 데스크탑을 사용하기 위해 특정한 디스플레이 번호를 정해야 합니다. 다시 클라이언트에서 SSH를 사용하여 원격 컴퓨터에 접속합니다. 단, 이번에는 VNC에서 사용할 포트에 대해 SSH 터널을 뚫어 접속합니다.
ssh -p port -L 5910:localhost:5901 username@your_server_ip
  저번에도 설명했지만 "localhost"의 왼쪽에 있는 것이 로컬의 포트 번호고 오른쪽에 있는 것이 원격의 포트 번호입니다. 로컬의 5910 포트로 들어가는 트래픽은 SSH 터널을 이용해 "your_server_ip" 주소를 가진 원격 호스트의 5901 포트로 흘러갑니다. 물론 그 반대도 마찬가지입니다. "localhost"는 "your_server_ip" 주소의 원격 컴퓨터에게 있어서 localhost 입니다. 그러므로 별로 신경 쓸 필요는 없습니다.

  왼쪽에 있는 5910은 로컬에서 사용할 포트 번호이기 때문에 아무거나 사용해도 별 문제는 없습니다. 단, VNC의 디스플레이 번호에 5900을 더한 것이 해당 디스플레이 번호가 사용하는 포트 번호가 되기 때문에 5900 이상의 숫자여야 합니다. 또한 0번은 보통 로컬 화면으로 사용되므로 5901 이상의 디스플레이 번호를 사용하면 됩니다.

  오른쪽에 있는 5901은 원격에서 사용할 포트 번호이기 때문에 원격 호스트에서 VNC 서버를 실행할 때 넣는 디스플레이 번호와 맞춰야 합니다.

  이제 가상 데스크탑을 실행하겠습니다. SSH로 연결한 터미널에서 아래의 명령어를 실행합니다.
vncserver :1 -localhost -geometry 1100x700 -dpi 100 -depth 16
  "-localhost" 옵션은 저번 글에서 설명했으므로 넘어가고 다른 옵션들도 이름으로 뭘 의미하는지 알 수 있으니 생략하겠습니다. 해상도 같은 것은 원하는 값으로 바꿉시다. 중요한 것은 ":1"인데 설명 안 해도 눈치채셨겠지만 디스플레이 번호입니다. 바로 위에서 디스플레이 번호에 5900을 더한 값이 해당 디스플레이 번호에서 사용하는 포트 번호라고 설명했습니다. 위 예에서는 1번을 사용했으므로 5901번 포트를 사용하게 됩니다. 아까 SSH 터널을 뚫을 때 원격 컴퓨터의 5901번 포트를 뚫은 이유가 이겁니다. 명령어가 실행되고 나면 원격 호스트의 1번 디스플레이가 만들어집니다.


3. 가상 데스크탑 접속하기
  저번과 다를 게 없습니다. 클라이언트에서 VNC 뷰어를 실행한 주소에 "localhost:10"이라고 적고 접속합니다. ":10"인 이유는 아까 SSH 터널을 뚫을 때 로컬의 5910번 포트를 뚫었기 때문입니다. 제대로 설정이 됐다면 원격 데스크탑이 열릴 겁니다.

  만약 설정에 문제가 없는 거 같은데 열리지 않는다면 방화벽을 확인합시다. 공유기 같은 걸 사용하고 있고 외부에서 공유기 내부에 있는 호스트에 접속하려는 거라면 포트 포워딩도 꼭 확인합시다. 하긴, 이 글을 보고 있고 이미 SSH 접속도 성공했다면 이런 설명을 할 필요도 없겠군요.

  그리고 주의할 점이 가상 데스크탑에서 배경화면을 사용하면 화면 갱신 속도가 느리기 때문에 되도록이면 배경을 사용하지 않는 것이 좋습니다.


4. 접속해제
  저번과 비슷합니다만 중간에 가상 데스크탑을 닫는 과정이 추가됩니다. 먼저 VNC 뷰어를 종료하고 아래의 명령어로 가상 데스크탑을 닫은 후 SSH에서 exitlogout 명령어로 SSH 세션을 종료하면 됩니다.
vncserver -kill :1
  한 가지 중요한 점은 VNC 뷰어와 SSH 접속만 종료하고 가상 데스크탑은 그대로 남겨둘 경우 다음에 VNC 뷰어로 다시 로그인할 때 이전에 접속을 종료하기 전의 상태가 그대로 나온다는 겁니다. 윈도우의 '원격 데스크탑 연결'과 동일하게 작동한다는 뜻이죠. 당연하지만 이렇게 다시 접속할 때는 가상 데스크탑을 또 실행할 필요가 없습니다.

2010/10/19 00:02 2010/10/19 00:02
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : http://kpweb.homelinux.org/blog/index.php?id=13
관련 글 : 가상 데스크탑을 이용한 원격 접속

  이번 포스팅에서는 데비안 계열의 리눅스(데비안, 민트, 우분투)에서 VNC와 SSH를 이용한 원격 접속을 설정하는 내용을 담고 있습니다. 정확히는 SSH 터널을 만든 뒤 그 터널을 이용해 VNC 연결을 만들어 VNC의 트래픽을 암호화하는 방법을 담고 있습니다.



1. 패스워드
  가장 우선적이고 중요한 사항은 원격에서 로그인이 가능한 모든 계정들의 암호는 추측하기 어려운 것이어야 한다는 겁니다. 8자 이상에 숫자, 대소문자를 섞는 것이 좋겠습니다.


2. SSH 포트 번호
  기본적으로 SSH의 포트는 22번이지만 다른 포트 번호를 사용할 경우 외부에서 SSH 서버를 운용하고 있는 것을 파악하기 힘들어지므로 보안상 더 좋습니다. 이 때 Well-Known 포트 번호를 피해 1024 이상의 번호를 사용하는 것이 좋겠습니다.

  만약 공유기를 사용하고 있다면 서버가 될 컴퓨터의 사설 IP를 고정으로 할당합니다. 그리고 포트 포워딩 기능을 통해 아까 정한 포트를 해당 사설 IP와 연결시킵니다. 아니면 공유기에서 사용할 SSH 포트 번호만 아까 선택한 번호로 지정하고 실제 서버 머신에서는 그냥 22번을 사용하도록 설정한 후 둘을 연결하는 것도 좋은 방법입니다. 방화벽을 사용하고 있을 경우 외부에서 해당 포트에 접근할 수 있도록 설정하는 것도 잊지 않도록 합니다.


3. root 계정으로 변경
  이후 작업에는 root 사용자의 권한이 필요합니다. 물론 직접 root 사용자로 로그인하지 않아도 sudo 명령어를 통해 필요한 작업을 할 수 있고 보안상으로도 그게 더 좋겠습니다만 root가 되는 방법을 알아둬서 나쁠 것은 없습니다.

  데비안의 경우 처음부터 root로 직접 로그인할 수 있지만 우분투나 민트의 경우 root 계정에 패스워드가 설정되어 있지 않기 때문에 로그인이 불가능합니다. root로 로그인하는 가장 쉬운 방법으로 아래의 2가지 방법이 있습니다.
  1. 'sudo passwd root' 명령어로 root의 패스워드를 설정한 후 정상적인 방법을 통해 로그인.
  2. 'sudo su -' 명령어로 편법적인 유저 변경. 단, /etc/sudoers 파일에 등록된 계정만 가능.


4.  SSH와 VNC 서버 설치
  아래의 명령어를 통해 SSH 서버와 VNC 서버를 설치합니다.
apt-get install openssh-server x11vnc
  기본적으로 SSH는 암호화를 사용하는 원격 접속 프로그램이지만 이 예제에서는 VNC를 이용한 원격 데스크탑 연결에서 데이터를 암호화하기 위해 사용합니다.

  x11vnc는 원격에서 특정 머신의 데스크탑(GUI 환경을 의미)에 접속할 수 있게 해줍니다. 이 때 원격에서 접속한 사용자와 로컬에서 데스크탑을 사용하던 사용자는 동일한 화면을 보게 됩니다. 즉, 하나의 데스크탑을 두 사용자가 동시에 공유해서 사용하게 됩니다.

  만약 별도의 데스크탑으로 로그인하고 싶다면 아래의 두 패키지를 추가로 설치해줍니다. 하나의 머신으로 여러 사용자가 각자 자신의 데스크탑을 사용할 필요가 있을 때(예를 들어 재택근무용 서버) 유용합니다.
apt-get install tightvncserver xfce4
  tightvncserver는 로컬 데스크탑과는 다른 개별적으로 독립된 가상 데스크탑들을 생성해줍니다. 이 가상 데스크탑들은 VNC로만 접근할 수 있습니다.

  xfce4는 동시에 여러 데스크탑을 만들기에 적합한 수준의 가벼운 데스크탑 환경입니다. Xfce보다 가벼는 데스크탑 환경(=윈도우 매니져)으로는 LXDE, Fluxbox 등이 있습니다.

  여러 가상 데스크탑을 띄울 때 하나의 데스크탑 환경만 사용할 수도 있지만 가상 데스크탑마다 다른 데스크탑 환경을 사용할 수도 있습니다. 자세한 내용은 원격에서 접속 가능한 가상 데스크탑에서 다루겠습니다.


5. SSH 서버 설정
  SSH 서버의 디폴트 설정에 따르면 root 계정으로 로그인이 가능하지만 이것은 보안상 권장되지 않습니다. 만약 SSH를 통해 root 계정으로 로그인하지 못하게 하려면 /etc/ssh/sshd_config 파일에서 아래와 같은 부분을 찾아 yes를 no로 바꿉니다.
PermitRootLogin yes    <- yes를 no로 변경
2014년 01월 30일 추가사항:  SSH 서버가 프록시 서버 역할을 할 수 있도록 아래 옵션을 활성화합니다. 예전에는 없어도 됐다는 것 같은데 지금은 필요하다고 합니다. 확인해보니 디폴트도 no더군요.
PermitTunnel yes
2014년 01월 30일 추가사항: 기본적으로 SSH 서버는 포워딩을 위한 연결이 들어왔을 때 포워딩 대상이 자신의 루프백 주소(localhost, 127.0.0.1)인 연결 요청만 받아들입니다. 이유는 보안 때문입니다. 데이터가 서버까지는 암호화돼서 가지만 서버에서 목적지로 보낼 때는 평문으로 가기 때문이죠. 이를 허용하려면 아래의 옵션도 추가해야 합니다. 단, 이 글의 예에서는 필요하지 않습니다.
GatewayPorts yes
  포트를 바꾸는 것도 간단합니다. 같은 파일에서 아래와 같은 부분을 찾아 포트 번호를 원하는 번호로 바꿉니다. 공유기의 경우 이걸 바꾸는 대신 이 컴퓨터의 이 포트 번호와 연결된 공유기의 외부 포트 번호를 바꾸는 것도 좋은 방법입니다.
Port 22    <- 숫자를 원하는 포트 번호로 변경
  변경을 모두 마쳤으면 /etc/init.d/ssh restart 명령어로 SSH 서버를 재가동시켜 변경사항을 적용합니다.


6. root 계정 로그아웃
  이제 root 계정이 필요 없기 때문에 exit 또는 logout 명령어로 root 계정에서 빠져나옵니다.


7. 로컬에서 SSH 테스트
  SSH 서버가 작동하는지 테스트를 해보기 위해 아래의 명령어를 실행해봅니다.
ssh username@localhost
  "username" 부분에는 테스트에 사용할 계정명을 입력합니다. 비밀번호를 물어보면 입력합니다. 로그인에 성공하면 exit 또는 logout 명령어로 빠져나옵니다.
  만약 SSH 서버의 포트 번호를 변경했다면(공유기의 외부 포트 번호만 변경한 경우라면 제외) 아래처럼 -p 옵션을 추가합니다. "port" 부분에는 SSH 서버의 포트 번호를 입력합니다.
ssh -p port username@localhost


8. 랜에서 SSH와 VNC 테스트
  만약 동일한 랜에 다른 리눅스 컴퓨터가 있다면 그 컴퓨터로 가서 아래의 명령어를 실행합니다.
ssh -L 5903:localhost:5900 username@your_server_ip
  username에는 계정명을, your_server_ip에는 접속할 SSH 서버의 주소를 적습니다. -L 옵션은 로컬 호스트의 특정 포트를 암호화된 SSH 채널을 통해 특정 호스트의 포트로 포워딩시키는 옵션입니다. 위의 예에서는 로컬 호스트의 5903 포트를 원격 호스트의 5900 포트와 연결시키고 있습니다. 이런 연결을 'SSH 터널'이라고 부릅니다. 이해할 때 한 가지 주의할 점은 두 포트 번호의 중간에 있는 localhost인데 이것은 원격 호스트(SSH로 접속할 곳. 즉, "your_server_ip")의 입장에서 localhost를 뜻하는 겁니다. 위 명령어를 차례대로 설명하자면 "로컬 호스트의 5903 포트로 오는 트래픽을 암호화해서 'your_server_ip'로 보내고 그곳에서 복호화한 후 localhost(=your_server_ip)의 5900 포트로 다시 넘긴다."라는 의미가 됩니다. (2014.01.30 추가)위의 GatewayPorts 옵션을 yes로 지정해야 localhost가 아닌 다른 곳으로 설정할 수 있습니다.
 
  아래의 명령어로 VNC 서버를 실행합니다.
x11vnc -localhost -display :0
  "-localhost" 옵션을 사용하면 외부에서 가상 데스크탑으로 직접 접속하는 것을 허용하지 않습니다. 즉, 자신으로부터의 접속만 허용하는데 재미있게도 우리는 위에서 SSH 터널링을 통해 두 호스트를 연결했고 이로 인해 클라이언트 측에서 5903 포트에 데이터를 보내면 그게 서버 측으로 넘어가고 서버는 그것을 다시 자기 자신의 5900 포트로 보내기 때문에 "-localhost" 옵션을 사용해도 원격에 있는 클라이언트가 접속할 수 있게 되는 겁니다.

  이제 클라이언트 데스크탑에서 VNC 뷰어 프로그램을 실행한 뒤 'localhost:3'을 접속 주소로 넣고 접속을 시도합니다. VNC에서 접속 주소 뒤에 넣는 숫자는 VNC 디스플레이 번호를 의미하는 값으로서 거기에 5900을 더한 값이 실제 접속 포트 넘버가 됩니다. 그러므로 'localhost:3'이라고 적은 것은 'localhost에 5903번 포트로 접속하라'라는 뜻입니다. 이 포트를 통해 서버의 5900번 포트(VNC 디스플레이 0번)로 접속하는 겁니다. 위에서 클라이언트의 5900번 포트와 서버의 5903번 포트를 SSH 터널로 연결했던 게 바로 이걸 위해서였던 겁니다.

  이제 VNC 트래픽은 SSH 터널을 통해 암호화되어 전송됩니다. 또한 SSH 터널을 사용하고 있다는 사실을 모르는 공격자는 VNC 서버의 "-localhost" 옵션 때문에 VNC 서버에 접속을 시도조차 할 수 없기 때문에 보안상 1석 2조가 되는 셈이죠.

  연결을 종료하고 싶으면 VNC 뷰어 프로그램을 종료한 후 SSH 접속을 하고 있는 터미널에서 exitlogout 명령어로 SSH 세션을 종료하면 됩니다.


9. 원격 접속하기
  이제 본방입니다. 사실 중요한 건 위에서 전부 다해서 그닥 설명할 것도 없습니다. 외부에 있는 클라이언트 컴퓨터에서 SSH 서버에 접속하기 위해 아래처럼 명령어를 실행합니다.
ssh -p port -L 5903:localhost:5900 username@your_server
  "port"에 서버의 포트 번호, "username"에 로그인할 계정명, "your_server"에 서버의 IP나 도메인을 적습니다. 접속을 시도하면 패스워드를 묻기까지 시간이 좀 걸립니다. 로그인에 성공하면 VNC 서버를 작동시키기 위해 아래의 명령어를 실행합니다.
x11vnc -localhost -display :0
  이제 클라이언트의 데스크탑(=GUI)에서 VNC 뷰어 프로그램을 실행한 뒤 'localhost:3'으로 접속합니다. 이제까지 설정이 올바르다면 서버의 데스크탑 화면이 나올 겁니다. 만약 배경화면을 사용하고 있다면 화면의 갱신속도가 매우 느릴 겁니다. 때문에 원격 접속을 사용할 때는 데스크탑의 배경화면을 단색으로 설정하는 것이 좋습니다.

  연결을 종료하고 싶으면 VNC 뷰어 프로그램을 종료한 후 SSH 접속을 하고 있는 터미널에서 exitlogout 명령어로 SSH 세션을 종료하면 됩니다.

2010/10/17 20:23 2010/10/17 20:23
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : http://symkat.com/35/ssh-tips-and-tricks-you-need/

  요즘 구직 활동 때문에 포스팅을 못한지 정말 오래됐네요. 뭐, 어차피 보는 사람도 없지만;;
  리눅스에서 가장 흔히 볼 수 있는 SSH 클라이언트 프로그램인 OpenSSH에 대한 몇 가지 팁이 있어서 포스팅해봅니다.

more..



more..



more..



more..



more..



more..




2010/10/16 21:23 2010/10/16 21:23