- Back to Home »
- Tìm hiểu về SSH: cấu hình và thiết lập an ninh
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
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.