ssh 의 모든것
네트워크가 발달하면서 그 보안의 중요성은 더해가고 있습니다. 하지만 다행히도 네트워크 보안은 물리적 보안이나 지역 보안을 깨는것보다는 수월 하다고 할 수 있습니다.
최근에는 그 도구들이 리눅스 배포본에 포함되어 배포되고 있기도 합니다. 리눅스의 인기가 더해짐에 따라 크래커들의 표적이 가중되지만 리눅스가 개방성을 가진 탓에 그러한 헛점들을 빨리 패치가 되고 임시적으로 어똫게 대처해야 하는지 또는 갱신된 소프트웨어는 어디서 구할 수 있는지 등을 담은 보안 관련 안내문이 널리 배포되고 있습니다.
SSH Secure Shell !!
SSH(Secure Shell)은 네트워크의 다른 컴퓨터에 로그인 할 수 있으며 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 프로그램입니다.
강력한 인증방법과 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공해 줍니다.
SSH는 두 호스트간의 통신 암호화와 사용자 인증을 위하여 공개 열쇠 암호 기법을 사용합니다. 즉, telnet,rlogin,rcp등과 비교해 보면 이들은 스니퍼를 당하면 입력 문자 그대로 패킷이 쉽게 노출됩니다.
이에 반해 ssh는 이 모든 문자들을 암호화 하여 비록 노출이 된다 하더라도 이해할 수 없는 암호화된 문자로 나타나게 되는 것입니다. 또 IP스푸핑, DNS 스푸핑등으로부터 SSH를 사용하면 보호가 가능합니다.
세션 하이젝킹(Session Hijacking)과 DNS 스푸핑을 방지해 주면서 원격 호스트에 로그인 하거나 호스트끼리 데이터를 복사하기 위해 사용될 수 있습니다.
일반 login프로그램과 달리 패킷 전송시 암호화하기 때문에 원격 관리의보안이 매우 안정적입니다.
SSH Secure Shell !!
SSH는 RSA공개키/개인키 방식을 이용하여 암호화 하게 되는데 Secure ID, S/Key, Kerberos and TIS 역시 지원합니다.
또한 SSH 는 X11서버와 연결도 지원 하므로 접속한 서버의 X프로그램 또한 실행 가능하게 해줍니다.
그리고 파일 전송등 현재는 sftp까지 지원을 하고 있으며, SOCKS 도 지원합니다.
현재는 ssh1과 ssh2가 나와 있는데 ssh1은 공개로 자유롭게 사용가능하지만 ssh2는 비상업적인 경우에만 자유롭게 사용할 수 있는 라이선스 제한을 가하고 있습니다.
[1] SSH설치
ssh의 소스파일은 http//www.ssh.org에서 받을 수 있습니다.
그러면 우선 소스파일의 압축을 풀어보도록 하겠습니다.
# tar zxvf ssh-2.0.13.tar.gz # cd ssh-2.0.13 # ./configure
configure는 시스템 종류와 ssh를 컴파일 하는데 필요한 파일들을 확인하는 작업을 수행하게 되는데 에러없이 정상적으로 종료가 되면 아래와 같이 ssh를 컴파일합니다.
# make
시스템 속도에 따라서 컴파일 하는데 걸리는 시간은 약간의 차이가 있을 것입니다. 컴파일하는 동안 에러가 출력되는지 확인합니다.
컴파일이 끝나면 ssh디렉토리에는 다음과 같은 실행파일이 만들어졌을 겁니다.
scp2
ssh2
ssh-add2
ssh-agent2
sshd2
ssh-keygen2
위의 파일들이 제대로 생성되었는지 확인하기 위해서 다음과 같이 실행해 보겠습니다.
File * | grep utable
확인이 끝났으면 이제 컴파일된 파일을 설치합니다.
# make install
이 명령은 호스트키를 포함한ssh 의 모든 유틸리티를 /usr/local 디렉토리에 복사하고 ssh도움말 문서를 작성해 줍니다.
만약 이전 파일이 이미 존재할 경우 *.old 파일명으로 이전 파일을 저장합니다. 이들 모두를 삭제하고자 한다면 다음과 같이 실행하시면 됩니다.
# cd apps/ssh # make clean-up-old
그러면 모두 삭제가 됩니다.
마지막으로 셋업을 하기 위해 아래 명령을 실행시켜 주면 모든 설치가 끝납니다.
# configure sshd2
[2] SSH 설정하기
설치가 모두 끝나면 /etc/ssh2 디렉토리하에 다음과 같은 파일들이 생성됩니다.
hostkey : host 의 비밀키로 개인 키이며 보안에 조심해야 하는 파일 hostkey.pub : host를 나타내는 공개키
ssh2_config : ssh 클라이언트의 설정파일로 실제로 ssh1과 호환할 필요가 없으면 신경쓰지 않아도 된다.
sshd2_config: ssh demon의 설정 파일입니다.
그외 각 계정의 키는 홈디렉토리하에 .ssh2 라는 디렉토리에 생성되는데 공개키는 .pub 라는 확장자가 붙고 비밀키는 확장자가 붙지 않습니다.
그러면 이제 ssh 설정 파일의 옵션을 필요에 따라 바꾸거나 확인해 주어야 합니다.
ssh2_config는 ssh client의 설정 file로 만약 사용자가 sh1과의 호환하여 사용하지 않을 것이라면 별로 수정 설정해야 할 것은 없습니다.
다음은 ssh 서버설정 파일인 sshd2_config의 명령행 옵션들입니다.
AllowGroups
ssh서비스에 접근 가능한 그룹명시(예 : AllowGroups sysadmin
accounting) 와일드카드가 지원되며 공백문자로 그룹을 구분합니다.
AllowHosts
Ssh 서비스에 접근가능한호스트 명시 (예 : AllowHosts
shell.ourcompany.net) 호스트는 IP를 스거나 호스트명을 쓸 수 있으며 와일드카드가 지원되고 공백문자로 호스트를 구분합니다.
AllowSHosts
.shosts나 .rhosts에 있는 호스트들 중에서 shd서비스를 접근할 수 있는 호스트를 명시. 호스트는 IP 를 스거나 호스트명을 쓸 수 있으며 와일드카드가 지원되고 공백 문자로 호스트를 구분합니다.
CheckMail (yes/no)
사용자가 로그인할 때 새매일이 도착했음을 알리도록 하는 기능을 설정하며 기본값은 yes로 되어있습니다. Port 22 : ssh가 사용할 port를 지정해줍니다. 변경의 필요성은 별로 없습니다.
Cipher (ciher)
세션을 암호화 할 때 사용할 방법을 명시해 줍니다 (idea,des,3des,blowfish,arcfour 또는 없음)
DenyGroups
명시된 그룹은 ssh서비스에 접근할 수 없도록 하는 기능(DenyGroups sysadmin accounting) 와일드카드가 지원되며 공백 문자로 그룹을 구분합니다.
DenyHosts
명시된 호스트는 ssh서비스에 접근할 수 없도록 하는 기능(Deny Hosts shell.ourcompany.net).호스트 IP를 쓰거나 호스트 명을 쓸 수 있으며 와일드 카드가 지원되고 공백 문자로 호스트를 구분합니다.
ForwardAgent
인증 대리인이 포워드되어야 하는지를 명시
KeepAlive yes
RequireReverseMapping no
클라이언트에게 aliive메시지를 보낼 것인지 명시하는데 접속하는 곳의 도메인이 revers Mapping 이 되는지를 활인하여 접속을 허가할지 안할지를 지정합니다.
실제로 internet상에 호스트 들중 revers mapping 이 안되는 호스트가 상당수이므로 되도록 no로 설정할 것을 권장합니다.
만약 여러분이 사용하시는 host가 revers mapping 이 확실히 된다면 보안상 yes로 하는것이 좋겠지만 revers mapping이 되지 않으면 접속이 불가능 하므로 조심하십시오.
ListenAddress 0.0.0.0
sshd가 귀를 기울일 주소를 정해준다. 0.0.0.0은 모든 곳으로 부터 접속을 받아들이겠다는 의미입니다.
하지만 패키징을 할때 어떻게 한것인지는 모르겠지만 tcp-wrapper의 영향을 받아서 hosts.deny에서 막혀 있으면 접속이 안되니 hosts.allow와 hosts.deny에서 sshd2 항목으로 제어를 할수가 있습니다.
PasswordAuthentication (yes/no)
패스워드 기반의인증방법을 사용할 것인지를 명시
MaxConnections 0
최대 몇개의 접속을 허락할지를 지정합니다. 0은 제한을 하지 않는다는 것을 의미합니다.
PermitRootLogin
ssh를 이용하여 루트로 로그인 할 수 있는지를 명시
PubkeyAuthentication (yes/no)
인증 순서를 지정합니다.
[3] SSH 사용
그럼 이제 ssh 클라이언트 프로그램을 사용하여 서버에 접속해보겠습니다.
주의할 것은 ssh2는 ssh2사이에서만 통신이 가능하고, 만약 ssh1과 호환하려면 설정파일에서 별도로 ssh1 부분 설정을 해주어야 합니다.
ssh1과 통신을 하려면 ssh1과ssh2이 둘 다 설치되어 있어야 합니다. ssh1 과의 호환은 아래에서 언급하도록 하겠습니다.
일단 #sshd host를 실행하여 접속합니다. host 이름으로 로그인이 될 것입니다. 그러면 다시 호스트 명과 IP주소를 다음과 같이 인자로 전달합니다.
#ssh 210.127.236.93
이때 이미 앞에서 함께 실행했듯이 authorization file 에 공개키가 등록되어 있는 사용자는 passphrase를 묻고, 만약 등록이 안되어 있다면 host account 의 password를 묻습니다.
즉, Accepting host 210.127.236.93 key without checking 이라는 글이 뜨면 passphrase 를 확인하지 않고도 접속이 수용된다는 것이지요.
다음은 ssh 클라이언트의 클라이언트의 명령행 옵션들입니다.
-v : 디버깅모드로 접속이 안되고 에러가 발생할 때 사용
-a : 대리인 인증 포워딩 사용
-c cipher : 현재 세션에서 사용할 암호 방법 명시 ( blowfish, idea, 3des)
-e char : escape 문자 변경
-f : 세션 인증이 끝난 후에 백그라운드로 작업을 수행하도록 명시
-i 파일 : 신원파일을 변경
-l : 로그인시 사용자 명시
-n : /dev/null로 부터 입력을 받는다.
-p port : ssh가 접속하기 위해 사용할 포트 명시
-q : 정적 모드에서는 STDOUT로 경고메시지가 출력되지 않음
-t : 하나의 명령을 수행하더라도 tty를 연다.
-x : x11포워딩 기능 해제
SSH1 과 SSH2 의 호환
Ssh1과 ssh2를 호환 하려면 ssh1과ssh2이 둘 다 설치되어 있어야 합니다.
먼저 서버의 경우 ssh1과의 호환을 유지 하기 위해 /etc/sh2 디렉토리 아래에 sshd2_config 파일을수정해야 하는데 거의 대부분 지원이 디폴트를 사용하면 가능합니다.
Ssh1은 Ssh1Compatibility 와 SshdPath 를 다음과 같이 지정해 주면 됩니다.
Ssh1Compatibility yes
Sshd1Path /경로/sshd1
(경로는 sshd1파일이 존재하는 경로를 말합니다)
ssh2_config도 다음과 같이 수정합니다.
Ssh1Compatibility yes
Sshd1Path/경로/ssh1
(여기서의 경로도 ssh1이 존재하는 경로를 말합니다)
SSH client 사용
일단 ssh2의 설치를 마치고 나면 /etc/ssh2 라는 directory에 아래와 같이 hostkey와 ssh client config file, ssh daemon config file이 설치가 됩니다.
Hanterm - /etc/ssh2
[root@linuxi ssh2]$ ls /etc/ssh2
hostkey hostkey.pub ssh2_config sshd2_config
[root@linuxi ssh2]$
각 file들을 설명하자면 hostkey는 말그대로 host를 나타내는 privite key 이며 보안에 아주 신경을 써야 하는 파일이다.
hostkey.pub는 말그대로 host를 나타내는 공개 key입니다. ssh2_config는 ssh client의 설정 file이며, 실제로 ssh1과의 호환을 고려하지 않는다면 손을 델 필요가 없다.
sshd2_config는 ssh daemon의 설정 파일이며, 아래를 보도록 하자. 한가지 설정만 빼고는 ssh1과의 호환을 고려하지 않는다면 특별히 sshd2_config 역시 손을 볼것은 없다고 생각됩니다..
Hanterm - /etc/ssh2
[root@linuxi ssh2]$ cat /etc/ssh2/sshd2_config
# sshd2_config
# SSH 2.0 Server Configuration File
*:
Port 22
ssh가 사용할 port를 지정해 준다. 변경 필요성은 별로 없습니다.
ListenAddress 0.0.0.0
sshd가 귀를 기울일 주소를 정해준다. 0.0.0.0은 모든 곳으로 부터 접속을 받아들이겠다는 의미입니다.. 하지만 패키징을 할때 어떻게 한것인지는 모르겠지만 tcp-wrapper의 영향을 받아서 hosts.deny에서 막혀 있으면 접속이 안되니 hosts.allow와 hosts.deny에서 sshd2 항목으로 제어를 할수가 있습니다.
28
Ciphers AnyStd
# Ciphers AnyCipher
# Ciphers AnyStdCipher
# Ciphers 3des
IdentityFile identification
AuthorizationFile authorization
HostKeyFile hostkey
PublicHostKeyFile hostkey.pub
RandomSeedFile random_seed
ForwardAgent yes2
ForwardX11 yes
2# DEPRECATED PasswordAuthentication yes
PasswordGuesses 3
인증에 실패했을때 몇번까지 재시도할수 있는지를 지정해야 합니다.
2
# MaxConnections 50
# 0 == number of connections not limited
MaxConnections 0
최대 몇개의 접속을 허락할지를 지정해야 합니다. 0은 제한을 하지 않는다는 것을 의미합니다.
# PermitRootLogin nopwd
PermitRootLogin yes
root로의 login 허락 여부를 지정합니다.
# DEPRECATED PubkeyAuthentication yes
# AllowedAuthentications publickey,password,hostbased
AllowedAuthentications publickey,password
인증 순서를 지정합니다.
# RequiredAuthentications publickey,password
ForcePTTYAllocation no
VerboseMode no
PrintMotd yes
CheckMail yes
UserConfigDirectory "%D/.ssh2"
user들의 정보가 들어 있는 directory를 지정합니다
# UserConfigDirectory "/etc/ssh2/auth/%U"
SyslogFacility AUTH
# SyslogFacility LOCAL7
Ssh1Compatibility yes
# Sshd1Path
위의 두line은 ssh1과의 호환 부분이다. 여기서는 생략합니다.
# AllowHosts localhost, foobar.com, friend.org
# DenyHosts evil.org, aol.com
# AllowSHosts trusted.host.org
# DenySHosts not.quite.trusted.org
# NoDelay yes
# KeepAlive yes
RequireReverseMapping no
접속하는 곳의 도메인이 Revers Mapping이 되는지를 확인하여 접속을 허가할지 안할지를 지정해야 합니다. 실제로 internet 상에 호스트들중 revers mapping이 안되는 host가 상당히 많으며 또한 여러분이 사용하는 host중에도 revers mapping 이 안되는 host이 대다수이니 no로 설정을 하는 것이 낳6을듯 합니다. 자신의 host들이 revers mapping이 되는 것이 확실하다면 보안상 yes로 하는 것이 좋을수도 있습니다. 단 revers mapping이 안되면 접속이 안된다는 것을 명심하셔야 할 것입니다
UserKnownHosts yes
# subsystem definitions
subsystem-sftp sftp-server
[root@linuxi ssh2]$
SSH 기타
ssh 의 유틸리티
ssh2 : 보안 쉘 클라이언트로 텔넷 클라이언트와 비슷하다. 서버와 연결되면 ssh를 사용하여 기본 시스템 명령을 수행할 수 있다. 모든 면에서 ssh 세션은 텔넷 세션과 비슷하다.
sshd2 : 포트 22번을 사용할 때 네트워크를 통해 RSA형태의 인증방법을 수행한다. 합법적인 ssh2클라이언트로부터 연결요구가 들어오면 새로운 세션을 시작한다.
sftp : sftp 클라이언트이다.
sftp-server : sftp 서버로 sshd2에 의해 실행된다.
scp2 : 보안 복사프로그램으로 하나의 호스트에서 다른 호스트로 파일을 복사할 때 앉ㄴ한 방법을 제공한다. rcp와 비슷하지만 파일전송을 수월하게 하기 위해 ssh를 사용한다.
ssh-keygen2 : 키생성 유틸리티로 이를 사용하여 내/외부적으로 사용가능한 RSA키를 생성할 수 있다.
ssh-add2 : ssh-agent 인증 대리인을 위해 새로운 키를 등록한다.
ssh-agent2 : ssh를 사용할때 네트워크를 통해 rSA 형태의 인증 방법을 수행한다.
ssh-askpass 2: X11용 패스워드 질의 유틸리티
ssh-signer2 : hostbased인증에 대한 사인을 해주는 프로그램으로 make install시 실행된다.
scp(secure copy client) 파일 복사
scp는 투명한 ssh인증과 암호화를 통하여 호스트간에 파일을 복사 또는 이동 하는 기능을 제공합니다. #man scp를 실행하면 아주 자세히 알 수 있지만 여기서는 간단한 사용법만 언급하도록 하겠습니다.
user@host1 : filename user2@host2:filename
다음은 scp의 명령행 옵션을 요약한 것입니다.
- A ; 파일에 대한 파일 통계 출력 기능 해제
- a : 파일에 대한 파일 통계 출력 기능 사용
- cipher : 이번 전송에서 사용할 암호 방법 명시 ( blowfis, idea, 3des)
- i : 신원 파일 변경
- o(ssh옵션) : 파일을 전송하기 전에 ssh에게 옵션을 전달
- P : 원격 호스트로 접속할 포트 명시
- q : 세션에 대한 통게 출력 기능 해제
- Q : 세션에 대한 통계 출력 기능 사용
- r : 디렉토리를 재귀적으로 복사
- v : 디버그 모드로 수행
매킨토시에서의 ssh
매킨토시용 ssh클라이언트 유틸러티로는 다음의 두가지 종류가 있습니다.
Nifty Telnet, http://www.lysator.liu.se/~jonsasw/freeware/niftyssh/
Sassy software 의 Better Telnet, http://www.cstone.net/~rbraim/mac/telnet
그밖에 상업적 제품으로는 DataFellow사의 맥을 위한 F-Secure가 있습니다. 이 제품에 관한 설명은 http://www.datafellows.com/f~secure/ssh/mac 을 참조하시면 됩니다.
이와 함께 JVM(자바 가상 머신)도 사용하고 있다면 자바 기반의 ssh클라이언트인 MindTerm을 사용할 수 있습니다.
MindTerm은 브라우저 안에서 수행회거나 독립된 어플리케이션으로 수행되며 이 패키지는 SSL을 다른 어플리케이션과 함께 사용가능하도록 해주는 도구들을 제공합니다.
http;//www.mindbright.se/mindterm을 방문 하시면 더 자세한 정보를 얻으실 수 있습니다.
네트워크사이의 ssh서비스
전기적 도청으로부터 네트워크를 안전히 지키려면 ssh서비스를 전 시스템으로 확대해 주어야 하는데, 이를위해 DataFellows ( http://wwwldatafellows.com )사의 매킨토시 상업 버전을 구할 수 있습니다.
만약 한번 실행해보려면 윈도우를 위한 Tera Term Pro + TTSSH가 있습니다.
영삼넷
Categories
Recent Posts
Recent Comments
Statistics
- Total Visitors:
- 425971
- Today:
- 684310
- Yesterday:
- 9756653
IT강국 김영삼 블로그에 오신걸 진심으로 환영합니다.
©2002 영삼넷 // openkr
©2002 영삼넷 // openkr