110.3 Bài 1
Chứng chỉ: |
LPIC-1 |
---|---|
Phiên bản: |
5.0 |
Chủ đề: |
110 Bảo mật |
Mục tiêu: |
110.3 Bảo mật Dữ liệu bằng Mã hóa |
Bài: |
1 trên 2 |
Giới thiệu
Bảo mật dữ liệu bằng mã hóa là một điều hết sức quan trọng trong nhiều khía cạnh của quản trị hệ thống ngày nay — thậm chí còn quan trọng hơn nữa trong trường hợp truy cập hệ thống từ xa. Ngược lại với các giải pháp không an toàn như telnet, rlogin hoặc FTP, giao thức SSH (Secure SHell - Giao thức Vỏ an toàn) được thiết kế chú trọng đến bảo mật. Sử dụng mật mã khóa công khai, SSH sẽ xác thực cả máy chủ và người dùng, đồng thời mã hóa tất cả các trao đổi về thông tin diễn ra sau đó. Hơn nữa, SSH có thể được sử dụng để thiết lập các cổng hầm — bên cạnh nhiều tiện ích thứ khác — cho phép giao thức không được mã hóa truyền dữ liệu qua kết nối SSH được mã hóa. Phiên bản hiện tại được đề xuất của giao thức SSH là 2.0. OpenSSH là một triển khai mã nguồn mở và tự do của giao thức SSH.
Bài học này sẽ trình bày về cấu hình máy khách OpenSSH cơ bản cũng như vai trò của các khóa máy chủ OpenSSH. Khái niệm về đường hầm cổng SSH cũng sẽ được đề cập tới. Chúng ta sẽ sử dụng hai máy với thiết lập sau:
Vai trò của máy | Hệ điều hành | Địa chỉ IP | Tên máy chủ | Người dùng |
---|---|---|---|---|
Máy khách |
Debian GNU/Linux 10 (buster) |
|
|
|
Máy chủ |
openSUSE Leap 15.1 |
|
|
|
Cấu hình và cách sử dụng Máy khách OpenSSH cơ bản
Mặc dù máy chủ và máy khách OpenSSH có các gói riêng biệt nhưng thông thường, chúng ta có thể cài đặt một siêu gói sẽ cung cấp cả hai cùng một lúc. Để thiết lập một phiên từ xa với máy chủ SSH, ta sẽ sử dụng lệnh ssh
và chỉ định người dùng mà ta cần kết nối trên máy từ xa và địa chỉ IP hoặc tên máy chủ của máy từ xa. Vào lần đầu tiên kết nối với máy chủ từ xa, chúng ta sẽ nhận được thông báo như sau:
carol@debian:~$ ssh ina@192.168.1.77 The authenticity of host '192.168.1.77 (192.168.1.77)' can't be established. ECDSA key fingerprint is SHA256:5JF7anupYipByCQm2BPvDHRVFJJixeslmppi2NwATYI. Are you sure you want to continue connecting (yes/no)?
Sau khi gõ yes
và nhấn Enter, chúng ta sẽ được hỏi về mật khẩu của người dùng từ xa. Nếu nhập thành công, thông báo cảnh báo sẽ xuất hiện và sau đó ta sẽ được đăng nhập vào máy chủ từ xa:
Warning: Permanently added '192.168.1.77' (ECDSA) to the list of known hosts. Password: Last login: Sat Jun 20 10:52:45 2020 from 192.168.1.4 Have a lot of fun... ina@halof:~>
Các thông báo đều khá là dễ hiểu: vì đây là lần đầu tiên thiết lập kết nối với máy chủ từ xa 192.168.1.77
nên tính xác thực của nó không thể được kiểm tra đối chứng với bất kỳ một cơ sở dữ liệu nào. Do đó, máy chủ từ xa đã cung cấp một dấu vân tay khóa ECDSA (ECDSA key fingerprint
) của khóa công khai của nó (sử dụng hàm băm SHA256
). Sau khi chấp nhận kết nối, khóa công khai của máy chủ từ xa sẽ được thêm vào cơ sở dữ liệu các máy chủ đã biết (knownhosts), từ đó cho phép xác thực máy chủ cho các kết nối trong tương lai. Danh sách khóa công khai của các máy chủ đã biết này được lưu giữ trong tệp known_hosts
nằm trong ~/.ssh
:
ina@halof:~> exit logout Connection to 192.168.1.77 closed. carol@debian:~$ ls .ssh/ known_hosts
Cả .ssh
và known_hosts
đều đã được tạo sau khi kết nối từ xa đầu tiên được thiết lập. ~/.ssh
là thư mục mặc định cho thông tin xác thực và cấu hình dành riêng cho người dùng.
Note
|
Bạn cũng có thể sử dụng |
Nếu đang sử dụng cùng một người dùng trên cả máy chủ cục bộ và máy chủ từ xa thì ta không cần chỉ định tên người dùng khi thiết lập kết nối SSH. Ví dụ: nếu đăng nhập với tư cách là người dùng carol
trên debian
và muốn kết nối với halof
cũng với tư cách người dùng carol
, ta chỉ cần gõ ssh 192.168.1.77
hoặc ssh halof
(nếu tên có thể được phân giải):
carol@debian:~$ ssh halof Password: Last login: Wed Jul 1 23:45:02 2020 from 192.168.1.55 Have a lot of fun... carol@halof:~>
Bây giờ, giả sử chúng ta thiết lập một kết nối từ xa mới với một máy chủ có cùng địa chỉ IP như halof
(một điều khá phổ biến nếu ta sử dụng DHCP trong mạng LAN của mình). Chúng ta sẽ được cảnh báo về khả năng xảy ra một cuộc tấn công từ xen giữa (man-in-the-middle):
carol@debian:~$ ssh john@192.168.1.77 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is SHA256:KH4q3vP6C7e0SEjyG8Wlz9fVlf+jmWJ5139RBxBh3TY. Please contact your system administrator. Add correct host key in /home/carol/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /home/carol/.ssh/known_hosts:1 remove with: ssh-keygen -f "/home/carol/.ssh/known_hosts" -R "192.168.1.77" ECDSA host key for 192.168.1.77 has changed and you have requested strict checking. Host key verification failed.
Vì không phải đối phó với một cuộc tấn công xen giữa nên chúng ta có thể thêm vân tay khóa công khai của máy chủ mới vào .ssh/known_hosts
một cách an toàn. Như thông báo cho biết, trước tiên, chúng ta có thể sử dụng lệnh ssh-keygen -f "/home/carol/.ssh/known_hosts" -R "192.168.1.77"
để xóa khóa vi phạm (một cách khác là sử dụng ssh -keygen -R 192.168.1.77
để xóa tất cả các khóa thuộc về 192.168.1.77
khỏi ~/.ssh/known_hosts
). Sau đó, chúng ta sẽ có thể thiết lập kết nối với máy chủ mới.
Đăng nhập dựa trên Khóa
Ta có thể thiết lập máy khách SSH của mình để không cần phải cung cấp bất kỳ một mật khẩu nào khi đăng nhập mà thay vào đó là sử dụng các khóa công khai. Đây là phương pháp kết nối được ưa thích với máy chủ từ xa thông qua SSH vì nó an toàn hơn rất nhiều. Điều đầu tiên chúng ta phải làm là tạo một cặp khóa trên máy khách. Để thực hiện việc này, ta sẽ sử dụng ssh-keygen
với tùy chọn -t
chỉ định loại mã hóa cần dùng (trong trường hợp của chúng ta là Thuật toán chữ kí số đường cong Elip, viết tắt là ECDSA). Sau đó, ta sẽ được yêu cầu về đường dẫn để lưu cặp khóa (~/.ssh/
và vị trí mặc định đều rất thuận tiện) và cụm mật khẩu. Mặc dù cụm mật khẩu là tùy chọn nhưng người dùng được khuyến nghị luôn luôn sử dụng nó.
carol@debian:~/.ssh$ ssh-keygen -t ecdsa Generating public/private ecdsa key pair. Enter file in which to save the key (/home/carol/.ssh/id_ecdsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/carol/.ssh/id_ecdsa. Your public key has been saved in /home/carol/.ssh/id_ecdsa.pub. The key fingerprint is: SHA256:tlamD0SaTquPZYdNepwj8XN4xvqmHCbe8g5FKKUfMo8 carol@debian The key's randomart image is: +---[ECDSA 256]---+ | . | | o . | | = o o | | B * | | E B S o | | o & O | | @ ^ = | | *.@ @. | | o.o+B+o | +----[SHA256]-----+
Note
|
Khi tạo cặp khóa, ta có thể truyền cho |
Lệnh trên đã tạo thêm hai tệp nữa trong thư mục ~/.ssh
của chúng ta:
carol@debian:~/.ssh$ ls id_ecdsa id_ecdsa.pub known_hosts
id_ecdsa
-
Đây là khóa riêng tư.
id_ecdsa.pub
-
Đây là khóa công khai.
Note
|
Trong mật mã bất đối xứng (còn gọi là mật mã khóa công khai), khóa công khai và khóa riêng tư có liên quan về mặt toán học với nhau trên phương diện là bất cứ thứ gì được mã hóa bởi cái này sẽ chỉ có thể được giải mã bởi cái kia. |
Điều tiếp theo chúng ta cần làm là thêm khoá công khai của mình vào tệp ~/.ssh/authorized_keys
của người dùng mà ta sẽ sử dụng để đăng nhập vào máy chủ từ xa (nếu thư mục ~/.ssh
chưa tồn tại , chúng ta sẽ phải tạo nó trước). Ta có thể sao chép khóa công khai của mình vào máy chủ từ xa theo một số cách: sử dụng ổ flash USB, thông qua lệnh scp
(lệnh này sẽ truyền tệp qua bằng SSH) hoặc bằng cách sao chép nội dung của khóa công khai và dẫn ống nó vào ssh
như sau:
carol@debian:~/.ssh$ cat id_ecdsa.pub |ssh ina@192.168.1.77 'cat >> .ssh/authorized_keys' Password:
Khi khóa công khai đã được thêm vào tệp authorized_keys
trên máy chủ từ xa, ta có thể gặp phải hai tình huống sau khi cố gắng thiết lập một kết nối mới:
-
Nếu không cung cấp cụm mật khẩu khi tạo cặp khóa, chúng ta sẽ tự động đăng nhập. Mặc dù thuận tiện nhưng phương pháp này có thể sẽ không an toàn tùy theo từng tình huống:
carol@debian:~$ ssh ina@192.168.1.77 Last login: Thu Jun 25 20:31:03 2020 from 192.168.1.55 Have a lot of fun... ina@halof:~>
-
Nếu đã cung cấp cụm mật khẩu khi tạo cặp khóa, ta sẽ phải nhập cụm mật khẩu đó trên mọi kết nối giống như khi nhập mật khẩu. Ngoài khóa công khai, phương pháp này còn bổ sung thêm một lớp bảo mật dưới dạng cụm mật khẩu và từ đó có thể được coi là an toàn hơn. Tuy nhiên, xét về mặt tiện lợi thì nó hoàn toàn giống như việc bạn phải nhập một mật khẩu mỗi khi thiết lập một kết nối. Nếu không sử dụng cụm mật khẩu và ai đó đã tìm được cách để lấy được tệp khóa SSH riêng tư, họ sẽ có quyền truy cập vào mọi máy chủ nơi khóa công khai của chúng ta được cài đặt.
carol@debian:~/.ssh$ ssh ina@192.168.1.77 Enter passphrase for key '/home/carol/.ssh/id_ecdsa': Last login: Thu Jun 25 20:39:30 2020 from 192.168.1.55 Have a lot of fun... ina@halof:~>
Tuy nhiên, có một cách kết hợp giữa bảo mật và tính tiện lợi: sử dụng tác nhân xác thực SSH (ssh-agent
). Tác nhân xác thực cần tạo ra một vỏ riêng của nó và giữ các khóa riêng tư của người dùng — để xác thực khóa công khai — trong bộ nhớ dành cho phần còn lại của phiên. Chúng ta hãy xem cách nó hoạt động một cách chi tiết hơn:
-
Sử dụng
ssh-agent
để khởi động một vỏ Bash mới:carol@debian:~/.ssh$ ssh-agent /bin/bash carol@debian:~/.ssh$
-
Sử dụng lệnh
ssh-add
để thêm khóa riêng tư vào một vùng bộ nhớ an toàn. Nếu đã cung cấp cụm mật khẩu khi tạo cặp khóa — điều này được khuyến nghị để tăng cường bảo mật — chúng ta sẽ được yêu cầu nhập cụm mật khẩu đó:carol@debian:~/.ssh$ ssh-add Enter passphrase for /home/carol/.ssh/id_ecdsa: Identity added: /home/carol/.ssh/id_ecdsa (carol@debian)
Sau khi danh tính người dùng đã được thêm, chúng ta có thể đăng nhập vào bất kỳ một máy chủ từ xa nào có khóa công khai của chúng ta mà không cần phải nhập lại cụm mật khẩu. Thông thường, trên các máy tính hiện đại, việc thực hiện lệnh này khi khởi động máy tính là khá thông dụng vì nó sẽ vẫn còn trong bộ nhớ cho đến khi máy tính bị tắt (hoặc khóa không được tải xuống theo cách thủ công).
Chúng ta hãy kết thúc phần này bằng cách liệt kê bốn loại thuật toán khóa công khai có thể được chỉ định bằng ssh-keygen
:
RSA
-
Được đặt theo tên của những người sáng tạo ra nó là Ron Rivest, Adi Shamir và Leonard Adleman và được xuất bản vào năm 1977. Nó được coi là an toàn và vẫn được sử dụng rộng rãi cho đến ngày nay. Kích thước khóa tối thiểu của nó là 1024 bit (mặc định là 2048).
DSA
-
Thuật toán chữ ký số đã được chứng minh là không an toàn và không còn được dùng kể từ OpenSSH 7.0. Khóa DSA phải có độ dài chính xác là 1024 bit.
ecdsa
-
Thuật toán chữ kí số đường cong Elip là một cải tiến trên nền tảng của DSA và vì thế mà được coi là an toàn hơn. Nó sử dụng mật mã đường cong elip. Độ dài khóa ECDSA được xác định bởi một trong ba kích thước đường cong elip có thể tính bằng bit là 256, 384 hoặc 521.
ed25519
-
Đây là một triển khai của
EdDSA
— Thuật toán chữ kí số đường cong Edwards — sử dụng đường 25519 mạnh hơn. Nó được coi là an toàn nhất trong tất cả các thuật toán. Tất cả các khóa Ed25519 đều có độ dài cố định là 256 bit.
Note
|
Nếu được gọi mà không có chỉ định |
Vai trò của Khóa máy chủ của Máy chủ OpenSSH
Thư mục cấu hình chung cho OpenSSH được nằm trong thư mục /etc
:
halof:~ # tree /etc/ssh /etc/ssh ├── moduli ├── ssh_config ├── ssh_host_dsa_key ├── ssh_host_dsa_key.pub ├── ssh_host_ecdsa_key ├── ssh_host_ecdsa_key.pub ├── ssh_host_ed25519_key ├── ssh_host_ed25519_key.pub ├── ssh_host_rsa_key ├── ssh_host_rsa_key.pub └── sshd_config 0 directories, 11 files
Ngoài moduli
và các tệp cấu hình cho máy khách (ssh_config
) và máy chủ (sshd_config
), ta có thể tìm thấy bốn cặp khóa — một cặp khóa cho mỗi một thuật toán được hỗ trợ — được tạo khi máy chủ OpenSSH được cài đặt. Như đã nói ở trên, máy chủ sử dụng khoá máy chủ này để nhận dạng chính nó với máy khách theo yêu cầu. Mẫu tên của chúng sẽ như sau:
- Khóa riêng tư
-
tiền tố
ssh_host_
+ thuật toán + hậu tốkey
(ví dụ:ssh_host_rsa_key
) - Khóa công khai (hoặc vân tay khóa công khai)
-
tiền tố
ssh_host_
+ thuật toán + hậu tốkey.pub
(ví dụ:ssh_host_rsa_key.pub
)
Note
|
Vân tay được tạo bằng cách áp dụng hàm băm mật mã cho khóa công khai. Vì vân tay ngắn hơn các khóa mà chúng đề cập đến nên chúng rất hữu ích trong việc đơn giản hóa một số tác vụ quản lý khóa nhất định. |
Quyền trên các tệp chứa khóa riêng tư là 0600
hoặc -rw-------
: chỉ chủ sở hữu (root
) mới có thể đọc và ghi được. Mặt khác, tất cả các tệp khóa công khai cũng có thể được đọc bởi các thành viên trong nhóm chủ sở hữu và những người khác (0644
hoặc -rw-r—r--
):
halof:~ # ls -l /etc/ssh/ssh_host_* -rw------- 1 root root 1381 Dec 21 20:35 /etc/ssh/ssh_host_dsa_key -rw-r--r-- 1 root root 605 Dec 21 20:35 /etc/ssh/ssh_host_dsa_key.pub -rw------- 1 root root 505 Dec 21 20:35 /etc/ssh/ssh_host_ecdsa_key -rw-r--r-- 1 root root 177 Dec 21 20:35 /etc/ssh/ssh_host_ecdsa_key.pub -rw------- 1 root root 411 Dec 21 20:35 /etc/ssh/ssh_host_ed25519_key -rw-r--r-- 1 root root 97 Dec 21 20:35 /etc/ssh/ssh_host_ed25519_key.pub -rw------- 1 root root 1823 Dec 21 20:35 /etc/ssh/ssh_host_rsa_key -rw-r--r-- 1 root root 397 Dec 21 20:35 /etc/ssh/ssh_host_rsa_key.pub
Chúng ta có thể xem vân tay của các khoá bằng cách truyền khoá chuyển -l
cho ssh-keygen
. Ta cũng phải cung cấp -f
để chỉ định đường dẫn tệp chính:
halof:~ # ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key 256 SHA256:8cnPrinC49ZHc+/9Ai5pV+1JfZ4WBRZhd3rDOsc2zlA root@halof (ED25519) halof:~ # ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub 256 SHA256:8cnPrinC49ZHc+/9Ai5pV+1JfZ4WBRZhd3rDOsc2zlA root@halof (ED25519)
Để xem vân tay cũng như hình ảnh ngẫu nhiên của nó, ta chỉ cần thêm khóa chuyển -v
như sau:
halof:~ # ssh-keygen -lv -f /etc/ssh/ssh_host_ed25519_key.pub 256 SHA256:8cnPrinC49ZHc+/9Ai5pV+1JfZ4WBRZhd3rDOsc2zlA root@halof (ED25519) +--[ED25519 256]--+ | +oo| | .+o.| | . ..E.| | + . +.o| | S + + *o| | ooo Oo=| | . . . =o+.==| | = o =oo o=o| | o.o +o+..o.+| +----[SHA256]-----+
Đường hầm Cổng SSH
OpenSSH có tính năng chuyển tiếp rất mạnh mẽ, nhờ đó mà lưu lượng truy cập trên cổng nguồn có thể được điều chỉnh — và mã hóa — thông qua tiến trình SSH và sau đó chuyển hướng nó đến một cổng trên máy chủ đích. Cơ chế này được gọi là tạo đường hầm cho cổng (port tunneling) hoặc chuyển tiếp cổng (port forwarding) và có những ưu điểm quan trọng như sau:
-
Nó cho phép ta vượt qua tường lửa để truy cập các cổng trên máy chủ từ xa.
-
Nó cho phép truy cập từ bên ngoài vào máy chủ trên mạng riêng của người dùng.
-
Nó cung cấp mã hóa cho tất cả các trao đổi dữ liệu.
Nói một cách đại khái, chúng ta có thể phân biệt giữa việc tạo hầm cho cổng cục bộ và từ xa.
Đường hầm Cổng cục bộ
Chúng ta có thể xác định một cổng cục bộ để chuyển tiếp lưu lượng truy cập đến máy chủ đích thông qua tiến trình SSH nằm ở giữa. Tiến trình SSH có thể chạy trên máy chủ cục bộ hoặc một máy chủ từ xa. Ví dụ: nếu vì lý do nào đó mà chúng ta cần tạo đường hầm cho một kết nối tới www.gnu.org
thông qua SSH bằng cổng 8585
trên máy cục bộ, chúng ta có thể thực hiện như sau:
carol@debian:~$ ssh -L 8585:www.gnu.org:80 debian carol@debian's password: Linux debian 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2 (2020-04-29) x86_64 The programs included with the Debian GNU/Linux system are free software; (...) Last login: Sun Jun 28 13:47:27 2020 from 127.0.0.1
Có thể giải thích như sau: với khóa chuyển -L
, chúng ta đã chỉ định cổng cục bộ 8585
để kết nối với cổng 80
http trên www.gnu.org
bằng tiến trình SSH chạy trên debian
— máy chủ cục bộ của chúng ta. Chúng ta có thể viết ssh -L 8585:www.gnu.org:80 localhost
và đạt được một kết quả tương tự. Bây giờ, nếu sử dụng trình duyệt web để truy cập http://localhost:8585
, chúng ta sẽ được chuyển tiếp đến www.gnu.org
. Với mục đích minh hoạ, chúng ta sẽ sử dụng lynx
(trình duyệt web ở chế độ văn bản cổ điển):
carol@debian:~$ lynx http://localhost:8585 (...) * Back to Savannah Homepage * Not Logged in * Login * New User * This Page * Language * Clean Reload * Printer Version * Search * _ (...)
Nếu cần thực hiện điều tương tự nhưng kết nối thông qua tiến trình SSH chạy trên halof
, chúng ta sẽ tiến hành như sau:
carol@debian:~$ ssh -L 8585:www.gnu.org:80 -Nf ina@192.168.1.77 Enter passphrase for key '/home/carol/.ssh/id_ecdsa': carol@debian:~$ carol@debian:~$ lynx http://localhost:8585 (...) * Back to Savannah Homepage * Not Logged in * Login * New User * This Page * Language * Clean Reload * Printer Version * Search * _ (...)
Chúng ta cần phải lưu ý ba chi tiết quan trọng trong lệnh:
-
Nhờ tùy chọn
-N
, chúng ta đã không đăng nhập vàohalof
mà thay vào đó đã chuyển tiếp cổng. -
Tùy chọn
-f
đã cho SSH biết phải chạy ngầm. -
Chúng ta đã chỉ định người dùng
ina
thực hiện chuyển tiếp:ina@192.168.1.77
Đường hầm Cổng từ xa
Trong đường hầm cổng từ xa (hoặc chuyển tiếp cổng ngược), lưu lượng truy cập đến trên một cổng trên máy chủ từ xa sẽ được chuyển tiếp đến tiến trình SSH chạy trên máy chủ cục bộ và từ đó đến cổng được chỉ định trên máy chủ đích (cũng có thể chính là máy cục bộ của chúng ta). Ví dụ: giả sử chúng ta cần cho phép ai đó từ bên ngoài mạng truy cập vào máy chủ web Apache chạy trên máy chủ cục bộ thông qua cổng 8585
của máy chủ SSH chạy trên halof
(192.168.1.77
), chúng ta có thể tiến hành như sau:
carol@debian:~$ ssh -R 8585:localhost:80 -Nf ina@192.168.1.77 Enter passphrase for key '/home/carol/.ssh/id_ecdsa': carol@debian:~$
Giờ đây, bất kỳ ai thiết lập kết nối tới halof
trên cổng 8585
cũng sẽ thấy trang chủ mặc định Apache2 của Debian
:
carol@debian:~$ lynx 192.168.1.77:8585 (...) Apache2 Debian Default Page: It works (p1 of 3) Debian Logo Apache2 Debian Default Page It works! This is the default welcome page used to test the correct operation of the Apache2 server after installation on Debian systems. If you can read this page, it means that the Apache HTTP server installed at this site is working properly. You should replace this file (located at /var/www/html/index.html) before continuing to operate your HTTP server. (...)
Note
|
Có một loại chuyển tiếp cổng thứ ba phức tạp hơn nằm ngoài phạm vi của bài học này là chuyển tiếp cổng động (dynamic port forwarding). Thay vì tương tác với một cổng duy nhất, kiểu chuyển tiếp này sử dụng nhiều giao tiếp TCP khác nhau trên nhiều cổng. |
Đường hầm X11
Bây giờ chúng ta đã hiểu về đường hầm cổng, chúng ta có thể kết thúc bài học này bằng cách thảo luận về đường hầm X11 (còn được gọi là X11forwarding). Thông qua đường hầm X11, Hệ thống X Window trên máy chủ từ xa sẽ được chuyển tiếp đến máy cục bộ của chúng ta. Để làm được điều này, ta chỉ cần truyền cho ssh
tùy chọn -X
:
carol@debian:~$ ssh -X ina@halof ...
Bây giờ, chúng ta có thể khởi chạy một ứng dụng đồ họa như trình duyệt web firefox
với kết quả sau: ứng dụng sẽ chạy trên máy chủ từ xa nhưng màn hình của nó sẽ được chuyển tiếp đến máy chủ cục bộ của chúng ta.
Thay vào đó, nếu ta bắt đầu một phiên SSH mới với tùy chọn -x
, X11forwarding sẽ bị vô hiệu hoa. Nếu thử khởi động firefox
ngay bây giờ, chúng ta sẽ gặp lỗi như sau:
carol@debian:~$ ssh -x ina@halof carol@192.168.0.106's password: (...) ina@halof:~$ firefox (firefox-esr:1779): Gtk-WARNING **: 18:45:45.603: Locale not supported by C library. Using the fallback 'C' locale. Error: no DISPLAY environment variable specified
Note
|
Ba chỉ thị cấu hình liên quan đến chuyển tiếp cổng cục bộ, chuyển tiếp cổng từ xa và chuyển tiếp X11 lần lượt là |
Bài tập Hướng dẫn
-
Hãy đăng nhập với tư cách là người dùng
sonya
trên máy khách của bạn và thực hiện các tác vụ SSH sau trên máy chủ từ xahalof
:-
Thực thi lệnh để liệt kê nội dung của
~/.ssh
với tư cách là người dùngserena
trên máy chủ từ xa; sau đó quay trở lại cửa sổ dòng lệnh cục bộ của bạn. -
Đăng nhập với tư cách là người dùng
serena
trên máy chủ từ xa. -
Đăng nhập với tư cách là người dùng
sonya
trên máy chủ từ xa. -
Xóa tất cả các khóa thuộc về
halof
khỏi tệp~/.ssh/known_hosts
cục bộ của bạn. -
Trên máy khách của bạn, tạo cặp khóa
ecdsa
gồm 256 bit. -
Trên máy khách của bạn, tạo cặp khóa
ed25519
gồm 256 bit.
-
-
Hãy thực hiện các bước sau theo đúng thứ tự để thiết lập kết nối SSH bằng tác nhân xác thực SSH:
-
Trên máy khách, khởi động một vỏ Bash mới cho tác nhân xác thực bằng
ssh-agent /bin/bash
. -
Trên máy khách, tạo một cặp khóa bằng
ssh-keygen
. -
Trên máy khách, thêm khóa riêng tư của bạn vào một vùng bộ nhớ an toàn bằng
ssh-add
. -
Thêm khóa công khai của máy khách vào tệp
~/.ssh/authorized_keys
của người dùng mà bạn muốn sử dụng để đăng nhập trên máy chủ từ xa. -
Nếu chưa tồn tại, hãy tạo
~/.ssh
cho người dùng bạn muốn sử dụng để đăng nhập trên máy chủ. -
Kết nối với máy chủ từ xa.
Thứ tự đúng sẽ là:
Bước 1:
Bước 2:
Bước 3:
Bước 4:
Bước 5:
Bước 6:
-
-
Về chuyển tiếp cổng, tùy chọn và chỉ thị nào được sử dụng cho các loại đường hầm sau:
Loại đường hầm Tùy chọn Chỉ thị Cục bộ
Từ xa hoặc đảo ngược
X
-
Giả sử bạn gõ lệnh
ssh -L 8888:localhost:80 -Nf ina@halof
vào cửa sổ dòng lệnh của máy khách. Vẫn trên máy khách, bạn trỏ một trình duyệt tớihttp://localhost:8888
. Bạn sẽ nhận được kết quả gì?
Bài tập Mở rộng
-
Liên quan đến chỉ thị bảo mật SSH:
-
Lệnh nào được sử dụng trong
/etc/ssh/sshd_config
để kích hoạt phiên đăng nhập choroot
: -
Bạn sẽ sử dụng lệnh nào trong
/etc/ssh/sshd_config
để chỉ định một tài khoản cục bộ chấp nhận các kết nối SSH:
-
-
Khi sử dụng cùng một người dùng trên cả máy khách và máy chủ, bạn có thể sử dụng lệnh
ssh
nào để chuyển khóa công khai của máy khách sang máy chủ để bạn có thể đăng nhập thông qua xác thực khóa công khai? -
Hãy tạo hai đường hầm cổng cục bộ bằng một lệnh duy nhất để chuyển tiếp các cổng cục bộ không có đặc quyền 8080 và 8585 thông qua máy chủ từ xa
halof
tương ứng tới các trang webwww.gnu.org
vàwww.melpa.org
. Hãy sử dụng người dùngina
trên máy chủ từ xa và đừng quên sử dụng các khóa chuyển-Nf
:
Tóm tắt
Trong bài học này, chúng ta đã thảo luận về OpenSSH 2 sử dụng giao thức Secure Shell để mã hóa thông tin liên lạc giữa máy chủ và máy khách. Chúng ta đã học được:
-
cách đăng nhập vào máy chủ từ xa.
-
cách thực hiện lệnh từ xa.
-
cách tạo cặp khóa.
-
cách thiết lập các phiên đăng nhập dựa trên khóa.
-
cách sử dụng tác nhân xác thực để tăng cường bảo mật và tính tiện dụng.
-
các thuật toán khóa công khai được hỗ trợ bởi OpenSSH:
RSA
,DSA
,ecdsa
,ed25519
. -
vai trò của khóa máy chủ OpenSSH.
-
cách tạo đường hầm cổng: cục bộ, từ xa và X.
Các lệnh sau đã được thảo luận trong bài học này:
ssh
-
Đăng nhập hoặc thực thi lệnh trên máy từ xa.
ssh-keygen
-
Tạo, quản lý và chuyển đổi khóa xác thực.
ssh-agent
-
Tác nhân xác thực OpenSSH.
ssh-add
-
Thêm danh tính của khóa riêng tư vào tác nhân xác thực.
Đáp án Bài tập Hướng dẫn
-
Hãy đăng nhập với tư cách là người dùng
sonya
trên máy khách của bạn và thực hiện các tác vụ SSH sau trên máy chủ từ xahalof
:-
Thực thi lệnh để liệt kê nội dung của
~/.ssh
với tư cách là người dùngserena
trên máy chủ từ xa; sau đó quay trở lại cửa sổ dòng lệnh cục bộ của bạn.ssh serena@halof ls .ssh
-
Đăng nhập với tư cách là người dùng
serena
trên máy chủ từ xa.ssh serena@halof
-
Đăng nhập với tư cách là người dùng
sonya
trên máy chủ từ xa.ssh halof
-
Xóa tất cả các khóa thuộc về
halof
khỏi tệp~/.ssh/known_hosts
cục bộ của bạn.ssh-keygen -R halof
-
Trên máy khách của bạn, tạo cặp khóa
ecdsa
gồm 256 bit.ssh-keygen -t ecdsa -b 256
-
Trên máy khách của bạn, tạo cặp khóa
ed25519
gồm 256 bit.ssh-keygen -t ed25519
-
-
Hãy thực hiện các bước sau theo đúng thứ tự để thiết lập kết nối SSH bằng tác nhân xác thực SSH:
-
Trên máy khách, khởi động một vỏ Bash mới cho tác nhân xác thực bằng
ssh-agent /bin/bash
. -
Trên máy khách, tạo một cặp khóa bằng
ssh-keygen
. -
Trên máy khách, thêm khóa riêng tư của bạn vào một vùng bộ nhớ an toàn bằng
ssh-add
. -
Thêm khóa công khai của máy khách vào tệp
~/.ssh/authorized_keys
của người dùng mà bạn muốn sử dụng để đăng nhập trên máy chủ từ xa. -
Nếu chưa tồn tại, hãy tạo
~/.ssh
cho người dùng bạn muốn sử dụng để đăng nhập trên máy chủ. -
Kết nối với máy chủ từ xa.
Thứ tự đúng sẽ là:
Bước 1:
Trên máy khách, tạo cặp khóa bằng
ssh-keygen
.Bước 2:
* Nếu chưa tồn tại, hãy tạo
~/.ssh
cho người dùng bạn muốn sử dụng để đăng nhập trên máy chủ.Bước 3:
* Thêm khóa công khai của máy khách vào tệp
~/.ssh/authorized_keys
của người dùng mà bạn muốn sử dụng để đăng nhập trên máy chủ từ xa.Bước 4:
* Trên máy khách, khởi động một vỏ Bash mới cho tác nhân xác thực bằng
ssh-agent /bin/bash
.Bước 5:
* Trên máy khách, thêm khóa riêng tư của bạn vào một vùng bộ nhớ an toàn bằng
ssh-add
.Bước 6:
* Kết nối với máy chủ từ xa.
-
-
Về chuyển tiếp cổng, tùy chọn và lệnh nào được sử dụng cho các loại đường hầm sau:
Loại đường hầm Tùy chọn Chỉ thị Cục bộ
-L
AllowTcpForwarding
Từ xa hoặc đảo ngược
-R
GatewayPorts
X
-X
X11Forwarding
-
Giả sử bạn gõ lệnh
ssh -L 8888:localhost:80 -Nf ina@halof
vào cửa sổ dòng lệnh của máy khách. Vẫn trên máy khách, bạn trỏ một trình duyệt tớihttp://localhost:8888
. Bạn sẽ nhận được kết quả gì?Trang chủ của máy chủ web
halof
vìlocalhost
được hiểu dưới góc độ của máy chủ.
Đáp án Bài tập Mở rộng
-
Liên quan đến chỉ thị bảo mật SSH:
-
Lệnh nào được sử dụng trong
/etc/ssh/sshd_config
để kích hoạt phiên đăng nhập choroot
:PermitRootLogin
-
Bạn sẽ sử dụng lệnh nào trong
/etc/ssh/sshd_config
để chỉ định một tài khoản cục bộ chấp nhận các kết nối SSH:AllowUsers
-
-
Khi sử dụng cùng một người dùng trên cả máy khách và máy chủ, bạn có thể sử dụng lệnh
ssh
nào để chuyển khóa công khai của máy khách sang máy chủ để bạn có thể đăng nhập thông qua xác thực khóa công khai?ssh-copy-id
-
Hãy tạo hai đường hầm cổng cục bộ bằng một lệnh duy nhất để chuyển tiếp các cổng cục bộ không có đặc quyền 8080 và 8585 thông qua máy chủ từ xa
halof
tương ứng tới các trang webwww.gnu.org
vàwww.melpa.org
. Hãy sử dụng người dùngina
trên máy chủ từ xa và đừng quên sử dụng các khóa chuyển-Nf
:ssh -L 8080:www.gnu.org:80 -L 8585:www.melpa.org:80 -Nf ina@halof