본문 바로가기

Linux/보안

네트워크 서비스 보안 - ssh


SSH (Secure Shell)

http://www.openssh.com/

- 원격머신에 로긴하여 그 안에 명령들을 실행하는 원격접속 서비스
- 패킷 전송시 암호화하여 전달
- 기본적으로 설치되어 있다.

- 즉, ssh는 rlogin, esh, telnet 명령의 보안대체로 원격 컴퓨터로 로그인시 패킷을 RSA 키를 이용하여 원격머신과 통신하기 때문에 안전하다.



SSH 패키지 확인 및 구동

 
[root@server2 ~]# rpm -qa | grep ssh
openssh-server-4.3p2-26.el5
openssh-4.3p2-26.el5
openssh-clients-4.3p2-26.el5
openssh-askpass-4.3p2-26.el5

[root@server2 ~]# service sshd restart or /etc/rc.d/init.d/sshd start/stop/restart
sshd 를 정지 중:                                           [  OK  ]
sshd (을)를 시작 중:                                       [  OK  ]




SSH 환경설정

 
[root@server3 ~]# pwd
/root
[root@server3 ~]# cd .ssh
[root@server3 .ssh]# vi known_hosts - 지금까지 ssh접속을 통해 전달된 공개키들이 저장되어 있다.

[root@server2 ~]# cd /etc/ssh
[root@server2 ssh]# ls
moduli      ssh_host_dsa_key      ssh_host_key      ssh_host_rsa_key      sshd_config
ssh_config  ssh_host_dsa_key.pub  ssh_host_key.pub  ssh_host_rsa_key.pub  sshusers

[root@server2 ssh]# vi ssh_host_dsa_key - DSA PRIVATE KEY
[root@server2 ssh]# vi ssh_host_dsa_key.pub - 공개키

------------------------------------------

- ssh 환경설정파일
[root@server2 ssh]# vi ssh_config - ssh_config,v 1.21 2005/12/06 22:38:27
[root@server2 ssh]# vi sshd_config - sshd_config,v 1.73 2005/12/06 22:38:28

#Port 22 - sshd 가 사용할 포트를 지정한다. 사용하지 않는 다른 포트로 지정할 수 있다.

#Protocol 2,1
Protocol 2 - 프로토콜 버전을 지정한다. 기본값은 2이다.

#ListenAddress 0.0.0.0 - sshd 데몬이 서비스할 네트워크 대역을 지정한다.
#ServerKeyBits 768 - 서버키의 비트수를 정의한다. 최소값은 512 이고 기본값은 768이다.
#LogLevel INFO - 로그레벨을 지정하는 옵션이다.
#LoginGraceTime 2m - 사용자가 로그인에 실패하였을 경우 서버가 연결을 끊는 시간이다.
#RSAAuthentication yes - RSA 인증을 사용한다는 옵션이다.
#PermitEmptyPasswords no - 패스워드 인증시 서버가 비어있는 패스워드를 인정하는 옵션으로 기본값은 no이다.
#AuthorizedKeysFile     .ssh/authorized_keys   - 패스워드를 입력하지 않고 ssh로 접속할 때 사용

#X11Forwarding no
X11Forwarding yes - 원격에서 X11 포워딩을 허용하는 옵션으로 yes로 설정하면 xhost 보다 안전한 방법으로 원격 X 프로그램을 사용 할 수 있다.

#PermitRootLogin yes
PermitRootLogin no - root 사용자 접속을 허용하는 설정이다. no로 하면 root로 접근이 거부된다.

#UsePAM no
UsePAM yes - /etc/pam.d/sshd 를 사용하겠다는 의미




SSH 원격 접속 & 명령


- SSH 원격 접속
[root@server3 ~]# ssh 10.10.33.2 - 10.10.33.2 의 root 사용자로 로그인을 시도한다.
[root@server3 ~]# ssh 10.10.33.2 -l test1 - 10.10.33.2 의 test1 사용자로 로그인을 시도한다.
[root@server3 ~]# ssh test1@10.10.33.2 - 10.10.33.2 의 test1 사용자로 로그인을 시도한다.
 
------------------------------------------

- SSH 원격 명령
[root@server3 ~]# ssh 10.10.33.2 ls -l /root - 10.10.33.2 의 /root 디렉토리에 ls -l 명령을 출력한다.
root@10.10.33.2's password:




SSH 원격 복사
- SCP & SFTP 모두 SSH 포트를 이용한다.

 
- SCP 를 이용한 방법
[root@server3 ~]# scp 10.10.33.2:/root/Desktop/test.txt /root/Desktop
- 10.10.33.2 의 /root/Desktop 디렉토리에 있는 test.txt 파일을 /root/Desktop 디렉토리에 복사한다.
root@10.10.33.2's password: - 10.10.33.2 의 root 패스워드를 입력한다.

------------------------------------------

- SFTP 를 이용한 방법
[root@server3 ~]# sftp 10.10.33.2
Connecting to 10.10.33.2...
root@10.10.33.2's password:
sftp> ls
Desktop                anaconda-ks.cfg        dump.txt               install.log           
install.log.syslog     john-1.7.0.2           john-1.7.0.2.tar.gz    swapfile              
vmware                 vmware-distrib        
sftp> help
Available commands:
cd path                       Change remote directory to 'path'
lcd path                      Change local directory to 'path'
chgrp grp path                Change group of file 'path' to 'grp'
chmod mode path               Change permissions of file 'path' to 'mode'
chown own path                Change owner of file 'path' to 'own'
help                          Display this help text
get remote-path [local-path]  Download file

- 중략

sftp> get dump.txt - 파일을 다운로드 할 때 사용하는 명령어
Fetching /root/dump.txt to dump.txt
/root/dump.txt                                              100%  110MB   3.7MB/s   00:30   
sftp> exit
[root@server3 ~]#




패스워드를 입력하지 않고 ssh로 접속

 
[root@server3 ssh]# pwd
/etc/ssh
[root@server3 ssh]# vi sshd_config

#AuthorizedKeysFile     .ssh/authorized_keys
AuthorizedKeysFile     .ssh/authorized_keys   - 패스워드를 입력하지 않고 ssh로 접속할 때 사용하나 기본 설정이기 때문에 꼭 해줄 필요는 없다.

[root@server3 ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):   
- 패스워드를 입력하지 않으면 패스워드 없이 접속이 가능하다.
하지만 패스워드를 입력하면 루트 패스워드가 아닌 여기서 입력한 패스워드로만 접속이 가능하다.


Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
6e:49:96:10:ff:d3:61:44:9d:2d:75:5c:7a:06:4e:0f root@server3.co.kr

[root@server3 ssh]# cd /root/.ssh
[root@server3 .ssh]# ll
-rw------- 1 root root 1671  1월 30 16:33 id_rsa   - 비밀키
-rw-r--r-- 1 root root  400  1월 30 16:33 id_rsa.pub - 공유키
-rw-r--r-- 1 root root 1574  1월 29 15:18 known_hosts

[root@server3 .ssh]# scp id_rsa.pub 10.10.33.2:/root/.ssh/authorized_keys
- id_rsa.pub 파일을 10.10.33.2의 /root/.ssh 디렉토리에 authorized_keys 라는 파일명으로 복사한다.

- 2명 이상일 경우에는 authorized_keys의 파일명을 authorized_keys, authorized_keys1, authorized_keys2 등으로 해주면 된다.




ssh 접속 제한

 
root 접속 제한
[root@server3 ~]# vi /etc/ssh/sshd_config

#PermitRootLogin yes

PermitRootLogin no - root 사용자 접속을 허용하는 설정이다. no로 하면 root로 접근이 거부된다.

[root@server3 ~]# service sshd restart


일반사용자 접속제한
[root@server3 ~]# vi /etc/ssh/sshd_config

DenyUsers test1 - test1 사용자만 접속을 거부한다.

- 참고
- 기본적으로 ssh는 모든 사용자의 ssh접속을 허용한다.
- 옵션 (해당 그룹, 유저는 space로 구분한다.)
AllowGroups : 해당 그룹에 속한 사용자만 접속할 수 있다.
AllowUsers : 열거한 사용자만 접속할 수 있다.
DenyGroups : 전체 사용자의 접속을 허용하고 명시된 그룹은 접속에서 제외된다.
DenyUsers : 전체 사용자의 접속을 허용하고 명시된 유저의 접속은 제외된다.

- 적용 예
AllowUsers test1 test2 - test1, test2 이라는 유저만 접속을 허용 space bar로 구분
DenyUsers test1 - 모든 유저의 접속을 허락하고 test1 라는 유저의 접속을 막는다.

[root@server3 ~]# service sshd restart