본문 바로가기

공부/리눅스

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. 공개키로  데이터를 암호화 한다.
3. 개인키로 데이터를 해석한다.  <----------------  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키 둘다 생성해야 한다. (클라이언트가 어떤것을 사용할지 모르므로.)

dsa 인 경우에는 authorized_keys
rsa 인 경우에는 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

반응형