Posted by : Unknown Thứ Hai, 9 tháng 6, 2014

Tìm hiểu về SSH để nắm được cấu hình và thiết lập an ninh là điều cần thiết đối với quản trị viên UNIX.

1.  Khái niệm về SSH:
Secure Shell (SSH) được thiết kế để truy nhập an toàn vào một máy chủ thông qua mạng Ethernet. SSH mã hóa thông tin truyền trên mạng bằng cách sử dụng phương pháp nhận thực tối ưu hơn so với Telnet, Secure Copy (SCP), Secure File Transfer Protocol (SFTP), X session. Trong Hình 1 và hình 2 ta sẽ so sánh SSH với Telnet (là một công cụ dễ dàng bị bắt gói bằng các phần mềm như Wireshark).


Hình 1: Nhận thực khi sử dụng Telnet

Trong telnet, các bản tin giữa client và server được gửi dưới dạng clear text. Do đó, kẻ tấn công có thể dễ dàng bắt được gói tin và đọc thông tin trong đó.

Hình 2: Nhận thực khi sử dụng SSH
Trong giao thức SSH, các thông tin khi được truyền trên media đều được mã hóa. Nếu kẻ tấn công bắt được gói cũng không thể đọc được thông tin. Các hệ điều hành UNIX, Linux ngày nay đều được cài sẵn gói SSH (openSSH). Trên các nền tảng khác, bạn có thể dễ dàng download các công cụ hỗ trợ SSH như WinSCP, Putty, FileZilla, TTSSH, Cygwin.

2.   Một số cách sử SSH trong UNIX, Linux
-         Remote tới một host:
# ssh host_IP
hostname ~
-         Thực thi câu lệnh sau khi ssh
# ssh root@hostname date
root@hostname’s password: *****

3. Thiết lập an ninh cho SSH:
-         Giới hạn account root chỉ được truy nhập qua giao diện console:
# vi /etc/ssh/sshd_config
PermitRootLogin no

-         Cấu hình TCP wrappers để cho phép một số lượng host được chọn và từ chối các host không mong muốn:
# vi /etc/hosts.deny
ALL: 192.168.200.09              # IP Address of badguy

-         Đối với các máy không cần thiết, cấu hình remove ssh
# chkconfig sshd off 
# yum erase openssh-server

-         Cấu hình controllist để giới hạn user truy cập
# vi /etc/ssh/sshd_config 
AllowUsers oracle monitor operator
DenyUsers hacker badguy 

-         Chỉ cho phép dùng SSH protocol 2
# vi /etc/ssh/sshd_config
Protocol 2

-         Cấu hình Log Out Timeout
# vi /etc/ssh/sshd_config
ClientAliveInterval 600          # (Set to 600 seconds = 10 minutes)
ClientAliveCountMax 0

-         Disable users’.rhost file
# vi /etc/ssh/sshd_config
IgnoreRhosts yes

-         Cấu hình SFTP server  truy nhập vào thư mục của người dùng:
# vi /etc/ssh/sshd_config 
ChrootDirectory /data01/home/%u
X11Forwarding no
AllowTcpForwarding no

-         Disable empty passwords
# vi /etc/ssh/sshd_config
PermitEmptyPasswords no

Khóa bí mật và khóa công khai (Private and public key pair):

Hình 3: Mô hình khóa bí mật, khóa công khai trong SSH

Tại server sẽ tạo ra cặp khóa bí mật, khóa công khai (private, public key pairs). Khóa công khai sẽ được gửi đến client. Mỗi khi client muốn gửi bản tin, client sẽ dùng khóa public để mã hóa bản tin đó. Khi bản tin đến server, server sẽ dùng khóa private để giải mã bản tin. Như vậy có thể thấy, khóa công khai (public) được gửi ở dạng không mã hóa (clear text) trên đường truyền, bất kỳ ai cũng có thể bắt được gói tin này. Khóa private chỉ được lưu trên server, không truyền ra bên ngoài. Khi gói tin được mã hóa bằng khóa public, kẻ tấn công không có khóa private nên không thể đọc được bản tin.

 4.1 Cấu hình SSH passwordless sử dụng khóa bí mật, khóa công khai
Các bước:

On the client run the following commands: (Tại máy client, sử dụng các lệnh)

$ mkdir -p $HOME/.ssh
$ chmod 0700 $HOME/.ssh
$ ssh-keygen -t dsa -f $HOME/.ssh/id_dsa -P ''
This should result in two files, $HOME/.ssh/id_dsa (private key) and $HOME/.ssh/id_dsa.pub (public key). (Kết quả tạo ra 2 file gồm id_dsa (khóa bí mật) và id_dsa.pub (khóa công khai))
Copy $HOME/.ssh/id_dsa.pub to the server by ftp
Sử dụng fpt để copy khóa công khai từ client lên server.

On the Server, run ftp protocol: (Sử dụng ftp trên server)
$ ftp client_ip_address
ftp> cd $HOME/.ssh
ftp> get id_dsa.pub
ftp> close
ftp> quit

On the server run the following commands: (Trên Server chạy các lệnh)

$ cat id_dsa.pub >> $HOME/.ssh/authorized_keys2
$ chmod 0600 $HOME/.ssh/authorized_keys2
Depending on the version of OpenSSH the following commands may also be required:
(Tùy thuộc vào phiên bản OpenSSH, sẽ cần thực hiện thêm một số lệnh)
$ cat id_dsa.pub >> $HOME/.ssh/authorized_keys
$ chmod 0600 $HOME/.ssh/authorized_keys
An alternative is to create a link from authorized_keys2 to authorized_keys:
(có thể cần tạo link giữa authorized_key2 và authorized_keys, test thử trên server thì đến bước này là có thể ssh không cần password ok)
$ cd $HOME/.ssh && ln -s authorized_keys2 authorized_keys
On the client test the results by ssh  to the server:


 $ ssh -i $HOME/.ssh/id_dsa server
(Optional) Add the following $HOME/.ssh/config on the client:

Host server
         IdentityFile ~/.ssh/id_dsa
This allows ssh access to the server without having to specify the path to the id_dsa file as an argument to ssh each time.

Leave a Reply

Subscribe to Posts | Subscribe to Comments

- Copyright © aix-san-linux - Skyblue - Powered by Blogger - Designed by Johanes Djogan -