2011. 11. 28. 19:39 Log/Linux
OpenSSh 및 SELinux
OpenSSH
공식사이트 : www.openssh.com
SSH는 공개키 암호화 기법에 기반을 두고 있다.
*. 공개키
누구나 받아서 사용할 수 있는 키
*. 개인키
공개키로 암호화해서 보낸 메세지를 해석할 수 있는
유일한 키
SSH client SSH server
-- 연결요청 -->
<-- 공개호스트키,공개서버키
----- 비밀키 ------->
<--- 사용자 인증 ---
모든 암호체계는 기본적으로 두 단계가 있다.
1. 평문 (key 사용) -> 암호문 ; 암호화
2. 암호문 (key 사용) -> 평문 ; 복호화
공개호스트키
SSH 서버를 설치할때 만드는 키, 클라이언트가 다른 ssh 서버와
구별할수 있는 키.
다음에 접속할 때 이키를 가지고 그 서버가 지난번에 접속한 서버와
같은 서버라는것을 확인한다.
만약 클라이언트가 가지고 잇는 known-host list 에 서버가 보낸 공개키가
존재하지 않으면 클라이언트 프로그램은 사용자에게 ' 이런 호스트의 키가 도착했는데
현재 신뢰할수 있는 리스트에 없으니 know-host list 에 넣을까요? 라는 경고 메세지를 보여준다.
최초로 ssh 서버에 접속했다면 known-host list 에 없는것은 당연하므로 이 메세지는 뜨게된다.
공개서버키
서버의 디스크에 저장되어 있지 않고 서버가 주기적으로 생성을 하는 키.
서버로 부터 두개의 키를 받은후 클라이언트는 랜덤키를 하나 생성한후 이 랜덤키를 호스트 공개키와
서버키를 가지고 차례대로 암호화 시킨다. 클라이언트는 이키를 서버에 보내게 되고 서버와
클라이언트는 이 키를 대칭형 암호화 키로 사용하게 된다.
이와 같은 인증 방법을 호스트 기반 인증 이라고 한다.
일단 클라이언트와 서버사이에 채널이 만들어졌기 때문에 서버는 클라이언트가 해당 서버를 사용할 수 있는
사용자 인증을 해야 한다.
이 단계가 클라이언트 인증단계이다.
클라이언트 인증방법은 비밀번호 기반 인증기법과 비비밀번호 기반 인증기법 이 두가지로 나눌수 있다.
1. 비밀번호 인증기법
SSH Client ---> 클라이언트 공개키 --> SSH 서버
known host list 확인.
<----- 인증 결과 --------
2. 공개키 인증기법
SSH Client --- 클라이언트 공개키 -----> SSH 서버
Authorized_keys 확인
<-- 공개키로 암호화된 랜덤값 --
--- 128비트 MD5 해쉬 ---->
<-- 사용자 인증 ---------
SSH2 Connection Layer
----------------------
SSH2 User-Auth Layer
----------------------
SSH2 Transport Layer
======================
TCP / IP 프로토콜
OpenSSH 설치
설치는 rpm 파일을 설치하거나 소스파일을 직접 컴파일하여 설치할 수 있다.
소스를 직접 컴파일하여 설치한다면 openssh 를 이해하는데 좀 더 도움이 될것이다.
최신버전을 다운르드 하여 설치한다.
[root@centos1 ~]# rpm -qa | grep ssh
openssh-4.3p2-29.el5 <== open ssh 설정파일, 문서파일, 도움말파일, 키생성파일
openssh-askpass-4.3p2-29.el5 <== (?)
[root@centos1 ~]# rpm -ql openssh-askpass
/etc/profile.d/gnome-ssh-askpass.csh
/etc/profile.d/gnome-ssh-askpass.sh
/usr/libexec/openssh/gnome-ssh-askpass
/usr/libexec/openssh/ssh-askpass
openssh-clients-4.3p2-29.el5
openssh-server-4.3p2-29.el5
기존에 설치된 패키지는 모두 삭제한 다음 새로운 버전의 패키지를 설치한다.
[root@centos1 ssh]# yum erase openssh-clients
[root@centos1 ssh]# yum erase openssh <= 의존성에 걸려있는 나머지 두가지 패키지도 삭제한다.
기존에 설치된 ssh를 다 제거한후 다운로드 받은 소스파일을 적당한 디렉토리에 압축을 풀고 컴파일한다.
#./configure --prefix=/usr/local/openssh-5.6p1 --sysconfdir=/etc/ssh --with-lastlog=/var/log/lastlog --with-md5-passwords
#make && make install
root /usr/local/openssh-5.6p1/bin]# ls
scp sftp slogin ssh ssh-add ssh-agent ssh-keygen ssh-keyscan
scp : 안전한 romote copy utility
ssh : ssh client
ssh-agent : RSA 형태의 인증방법을 수행한다.
ssh-keygen : ssh 를 위한 생성키, RSA 키를 생성한다.
ssh client 사용방법
ssh -l 계정명 접속할host주소
안전한 통신을 위한 조건.
1. 보내고자 하는 내용을 특정 사람만 읽을수 있어야 한다.
2. 받는 사람은 보낸 사람에 대해서 신뢰를 할 수 있어야 한다.
3. 주고받는 데이터가 변형되지 않아야 한다.
암호화 방법은 크게 비밀키 암호화 방법과 공개키 암호화 방법으로
나눌 수 있다.
비밀키를 사용해서 암호화를 하는경우에는 보내는 사람과 받는 사람 둘다
암호 해독키를 가지고 있어야 한다.
원래데이터 --- 대칭키 ---> 암호화된 데이터 ----- 대칭키 ---> 원래데이터
(encryption) (decryption)
데이터 송신측과 수신측에서는 똑 같은 해독키를 가지고 있어야 하므로
적어도 한번은 키를 전송해줘야 하는것이 단점이다.
키를 전송하는 키가 해커에 의해 노출되게 되면 안전한 데이터전송을 보장 받을 수
없다.
공개키암호화 방법은
두사람이 다른 키를 가지고 메시지를 주고 받기때문에 비대칭적 암호화라고 한다.
공개키는 여러 사람이 모두 공유할 수 있는 키이다.
공개키에 기반한 암호화 구조를 PKI 라고 한다.
1. 개인키와 공개키를 만든다.
2. 공개키를 공개한다. -----------------> 3. 공개키로 데이터를 암호화 한다.
5. 개인키로 데이터를 해석한다. <---------------- 4. 공개키로 암호화된 데이터를 보낸다.
이런 방법은 메시지를 주고 받는데 확실한 보안을 제공하지만 암호화 하고 해석하는데
많은 비용을 치뤄야 한다. 따라서 인터넷을 사용할 때 모든 데이터를 암호화해서 보낸다는 것은
시스템에게는 엄청난 부하를 준다.
더 좋은 방법은
1. 개인키와 공개키를 만든다.
2. 공개키를 공개한다. ----------------------> 3. 비밀키를 만든다.
5. 개인키로 비밀키를 해석한다. <---------------- 4. 공개키로 비밀키를 암호화 한다.
6. 개인키로 데이터를 암호화해서 주고 받는다. ------------> 6. 개인키로 데이터를 암호화해서 주고 받는다.
서로 메시지를 주고 받는 단계는 많아졌지만 비밀키를 한번만 교환하게 되면 다음 메시지를 주고 받을때에는
훨씬 간단해 진다는 잇점이 있다.
컴파일해서 설치하게 되면 필요한 키가 아래처럼 /etc/ssh 디렉토리에 자동으로 생성이 된다.
[root /usr/local/openssh-5.6p1/bin]# ls /etc/ssh
moduli ssh_host_dsa_key.pub ssh_host_rsa_key
ssh_config ssh_host_key ssh_host_rsa_key.pub
ssh_host_dsa_key ssh_host_key.pub sshd_config
You have new mail in /var/spool/mail/root
[root /usr/local/openssh-5.6p1/bin]#
rpm 패키지를 설치한 경우에는 /etc/init.d/sshd 데몬스크립트를 실행시키면 키가 자동으로 생성이 된다.
*. 키를 수동으로 생성하려면
RSA 키와 DSA키 둘다 생성해야 한다. (클라이언트가 어떤것을 사용할지 모르므로.)
*. 암호없이 로그인
$ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/taejun/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): xxxxxx
Enter same passphrase again: xxxxxx
Your identification has been saved in /home/taejun/.ssh/id_rsa.
Your public key has been saved in /home/taejun/.ssh/id_rsa.pub.
The key fingerprint is:
65:ac:e5:70:9a:b2:4f:25:c4:d3:0270:9a:b2:4f:25 user1@localhost
id_rsa 개인키
id_rsa.pub 공개키
생성된 파일을 서버의 자기계정으로 복사 ~/.ssh/authorized_keys 또는 authorized_keys2
====================================================================
SELinux
설정파일 : /etc/sysconfig/selinux
SELINUX = value
value 는 세가지 값이 허용된다.
enforcing - SELinux 모듈이 보안관련기능을 감지하고 제한하며 로그를 남긴다.
permissive - SELinux 모듈이 시스템 보안관련 기능을 감지하면 허용하며 로그를 남긴다.
disable - SELinux를 사용하지 않는다.
SELINUXTYPE = value
value 는 두가지 값이 허용된다.
trageted - target 으로 설정된 네트워크 데몬만 SELinux 를 적용한다.
strict - Full SELinux protection.
이 파일 설정을 변경한 경우 rebooting 을 해야 바뀐 설정이 적용된다.
selinux 관련 utility.
[root /etc/selinux]# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: enforcing
Policy version: 21
Policy from config file: targeted
[root /etc/selinux]#
setenfoce - SELinux 설정 변경. reboot 없이 바로 적용된다.
형식)
setenforce [ Enforcing | Permissive | 1 | 0 ]
ex) setenforce 1 <== SELinux enforcing 모드로 사용
setenforce 0 <= SELinux premisive 모드로 사용
SELinux boolean 설정
ftp_home_dir : 사용자 홈 디렉토리에 읽기/쓰기 권한설정
allow-ftpd_full_acess : ftp 서버에 로그인/읽기/쓰기 모든 access 허용
allow_ftpd_use_nfs : ftp 버서에 nfs 파일 접근 허용
allow_ftpd_anon_write : 공개 ftp에 쓰기를 허용
설정방법
setsebool -P allow_ftpd_full_access=1 ; <== ftp 서비스에 대해서 읽기/쓰기 등 모든권한 부여.
값이 0 이면 권한을 주지 않음을 의미한다.
설정값을 확인하는것은
getsebool 로 확인한다.
ex) getsebool -a
getsebool ftp_home_dir
공식사이트 : www.openssh.com
SSH는 공개키 암호화 기법에 기반을 두고 있다.
*. 공개키
누구나 받아서 사용할 수 있는 키
*. 개인키
공개키로 암호화해서 보낸 메세지를 해석할 수 있는
유일한 키
SSH client SSH server
-- 연결요청 -->
<-- 공개호스트키,공개서버키
----- 비밀키 ------->
<--- 사용자 인증 ---
모든 암호체계는 기본적으로 두 단계가 있다.
1. 평문 (key 사용) -> 암호문 ; 암호화
2. 암호문 (key 사용) -> 평문 ; 복호화
공개호스트키
SSH 서버를 설치할때 만드는 키, 클라이언트가 다른 ssh 서버와
구별할수 있는 키.
다음에 접속할 때 이키를 가지고 그 서버가 지난번에 접속한 서버와
같은 서버라는것을 확인한다.
만약 클라이언트가 가지고 잇는 known-host list 에 서버가 보낸 공개키가
존재하지 않으면 클라이언트 프로그램은 사용자에게 ' 이런 호스트의 키가 도착했는데
현재 신뢰할수 있는 리스트에 없으니 know-host list 에 넣을까요? 라는 경고 메세지를 보여준다.
최초로 ssh 서버에 접속했다면 known-host list 에 없는것은 당연하므로 이 메세지는 뜨게된다.
공개서버키
서버의 디스크에 저장되어 있지 않고 서버가 주기적으로 생성을 하는 키.
서버로 부터 두개의 키를 받은후 클라이언트는 랜덤키를 하나 생성한후 이 랜덤키를 호스트 공개키와
서버키를 가지고 차례대로 암호화 시킨다. 클라이언트는 이키를 서버에 보내게 되고 서버와
클라이언트는 이 키를 대칭형 암호화 키로 사용하게 된다.
이와 같은 인증 방법을 호스트 기반 인증 이라고 한다.
일단 클라이언트와 서버사이에 채널이 만들어졌기 때문에 서버는 클라이언트가 해당 서버를 사용할 수 있는
사용자 인증을 해야 한다.
이 단계가 클라이언트 인증단계이다.
클라이언트 인증방법은 비밀번호 기반 인증기법과 비비밀번호 기반 인증기법 이 두가지로 나눌수 있다.
1. 비밀번호 인증기법
SSH Client ---> 클라이언트 공개키 --> SSH 서버
known host list 확인.
<----- 인증 결과 --------
2. 공개키 인증기법
SSH Client --- 클라이언트 공개키 -----> SSH 서버
Authorized_keys 확인
<-- 공개키로 암호화된 랜덤값 --
--- 128비트 MD5 해쉬 ---->
<-- 사용자 인증 ---------
SSH2 Connection Layer
----------------------
SSH2 User-Auth Layer
----------------------
SSH2 Transport Layer
======================
TCP / IP 프로토콜
OpenSSH 설치
설치는 rpm 파일을 설치하거나 소스파일을 직접 컴파일하여 설치할 수 있다.
소스를 직접 컴파일하여 설치한다면 openssh 를 이해하는데 좀 더 도움이 될것이다.
최신버전을 다운르드 하여 설치한다.
[root@centos1 ~]# rpm -qa | grep ssh
openssh-4.3p2-29.el5 <== open ssh 설정파일, 문서파일, 도움말파일, 키생성파일
openssh-askpass-4.3p2-29.el5 <== (?)
[root@centos1 ~]# rpm -ql openssh-askpass
/etc/profile.d/gnome-ssh-askpass.csh
/etc/profile.d/gnome-ssh-askpass.sh
/usr/libexec/openssh/gnome-ssh-askpass
/usr/libexec/openssh/ssh-askpass
openssh-clients-4.3p2-29.el5
openssh-server-4.3p2-29.el5
기존에 설치된 패키지는 모두 삭제한 다음 새로운 버전의 패키지를 설치한다.
[root@centos1 ssh]# yum erase openssh-clients
[root@centos1 ssh]# yum erase openssh <= 의존성에 걸려있는 나머지 두가지 패키지도 삭제한다.
기존에 설치된 ssh를 다 제거한후 다운로드 받은 소스파일을 적당한 디렉토리에 압축을 풀고 컴파일한다.
#./configure --prefix=/usr/local/openssh-5.6p1 --sysconfdir=/etc/ssh --with-lastlog=/var/log/lastlog --with-md5-passwords
#make && make install
root /usr/local/openssh-5.6p1/bin]# ls
scp sftp slogin ssh ssh-add ssh-agent ssh-keygen ssh-keyscan
scp : 안전한 romote copy utility
ssh : ssh client
ssh-agent : RSA 형태의 인증방법을 수행한다.
ssh-keygen : ssh 를 위한 생성키, RSA 키를 생성한다.
ssh client 사용방법
ssh -l 계정명 접속할host주소
안전한 통신을 위한 조건.
1. 보내고자 하는 내용을 특정 사람만 읽을수 있어야 한다.
2. 받는 사람은 보낸 사람에 대해서 신뢰를 할 수 있어야 한다.
3. 주고받는 데이터가 변형되지 않아야 한다.
암호화 방법은 크게 비밀키 암호화 방법과 공개키 암호화 방법으로
나눌 수 있다.
비밀키를 사용해서 암호화를 하는경우에는 보내는 사람과 받는 사람 둘다
암호 해독키를 가지고 있어야 한다.
원래데이터 --- 대칭키 ---> 암호화된 데이터 ----- 대칭키 ---> 원래데이터
(encryption) (decryption)
데이터 송신측과 수신측에서는 똑 같은 해독키를 가지고 있어야 하므로
적어도 한번은 키를 전송해줘야 하는것이 단점이다.
키를 전송하는 키가 해커에 의해 노출되게 되면 안전한 데이터전송을 보장 받을 수
없다.
공개키암호화 방법은
두사람이 다른 키를 가지고 메시지를 주고 받기때문에 비대칭적 암호화라고 한다.
공개키는 여러 사람이 모두 공유할 수 있는 키이다.
공개키에 기반한 암호화 구조를 PKI 라고 한다.
1. 개인키와 공개키를 만든다.
2. 공개키를 공개한다. -----------------> 3. 공개키로 데이터를 암호화 한다.
5. 개인키로 데이터를 해석한다. <---------------- 4. 공개키로 암호화된 데이터를 보낸다.
이런 방법은 메시지를 주고 받는데 확실한 보안을 제공하지만 암호화 하고 해석하는데
많은 비용을 치뤄야 한다. 따라서 인터넷을 사용할 때 모든 데이터를 암호화해서 보낸다는 것은
시스템에게는 엄청난 부하를 준다.
더 좋은 방법은
1. 개인키와 공개키를 만든다.
2. 공개키를 공개한다. ----------------------> 3. 비밀키를 만든다.
5. 개인키로 비밀키를 해석한다. <---------------- 4. 공개키로 비밀키를 암호화 한다.
6. 개인키로 데이터를 암호화해서 주고 받는다. ------------> 6. 개인키로 데이터를 암호화해서 주고 받는다.
서로 메시지를 주고 받는 단계는 많아졌지만 비밀키를 한번만 교환하게 되면 다음 메시지를 주고 받을때에는
훨씬 간단해 진다는 잇점이 있다.
컴파일해서 설치하게 되면 필요한 키가 아래처럼 /etc/ssh 디렉토리에 자동으로 생성이 된다.
[root /usr/local/openssh-5.6p1/bin]# ls /etc/ssh
moduli ssh_host_dsa_key.pub ssh_host_rsa_key
ssh_config ssh_host_key ssh_host_rsa_key.pub
ssh_host_dsa_key ssh_host_key.pub sshd_config
You have new mail in /var/spool/mail/root
[root /usr/local/openssh-5.6p1/bin]#
rpm 패키지를 설치한 경우에는 /etc/init.d/sshd 데몬스크립트를 실행시키면 키가 자동으로 생성이 된다.
*. 키를 수동으로 생성하려면
RSA 키와 DSA키 둘다 생성해야 한다. (클라이언트가 어떤것을 사용할지 모르므로.)
*. 암호없이 로그인
$ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/taejun/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): xxxxxx
Enter same passphrase again: xxxxxx
Your identification has been saved in /home/taejun/.ssh/id_rsa.
Your public key has been saved in /home/taejun/.ssh/id_rsa.pub.
The key fingerprint is:
65:ac:e5:70:9a:b2:4f:25:c4:d3:0270:9a:b2:4f:25 user1@localhost
id_rsa 개인키
id_rsa.pub 공개키
생성된 파일을 서버의 자기계정으로 복사 ~/.ssh/authorized_keys 또는 authorized_keys2
====================================================================
SELinux
설정파일 : /etc/sysconfig/selinux
SELINUX = value
value 는 세가지 값이 허용된다.
enforcing - SELinux 모듈이 보안관련기능을 감지하고 제한하며 로그를 남긴다.
permissive - SELinux 모듈이 시스템 보안관련 기능을 감지하면 허용하며 로그를 남긴다.
disable - SELinux를 사용하지 않는다.
SELINUXTYPE = value
value 는 두가지 값이 허용된다.
trageted - target 으로 설정된 네트워크 데몬만 SELinux 를 적용한다.
strict - Full SELinux protection.
이 파일 설정을 변경한 경우 rebooting 을 해야 바뀐 설정이 적용된다.
selinux 관련 utility.
[root /etc/selinux]# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: enforcing
Policy version: 21
Policy from config file: targeted
[root /etc/selinux]#
setenfoce - SELinux 설정 변경. reboot 없이 바로 적용된다.
형식)
setenforce [ Enforcing | Permissive | 1 | 0 ]
ex) setenforce 1 <== SELinux enforcing 모드로 사용
setenforce 0 <= SELinux premisive 모드로 사용
SELinux boolean 설정
ftp_home_dir : 사용자 홈 디렉토리에 읽기/쓰기 권한설정
allow-ftpd_full_acess : ftp 서버에 로그인/읽기/쓰기 모든 access 허용
allow_ftpd_use_nfs : ftp 버서에 nfs 파일 접근 허용
allow_ftpd_anon_write : 공개 ftp에 쓰기를 허용
설정방법
setsebool -P allow_ftpd_full_access=1 ; <== ftp 서비스에 대해서 읽기/쓰기 등 모든권한 부여.
값이 0 이면 권한을 주지 않음을 의미한다.
설정값을 확인하는것은
getsebool 로 확인한다.
ex) getsebool -a
getsebool ftp_home_dir
'Log > Linux' 카테고리의 다른 글
ACL (Access Control List) (0) | 2011.11.28 |
---|---|
메일서비스(sendmail) (0) | 2011.11.28 |
samba 서비스 (0) | 2011.11.28 |
IDS - snort 1 (0) | 2011.11.28 |
tcpdump - packet capture / 분석 (0) | 2011.11.28 |