Làm thế nào để quản lý client OpenSSH trên Ubuntu 18.04
Server Linux thường được quản lý từ xa bằng SSH bằng cách kết nối với server OpenSSH , đây là phần mềm server SSH mặc định được sử dụng trong Ubuntu, Debian, CentOS, FreeBSD và hầu hết các hệ thống dựa trên Linux / BSD khác. Nỗ lực đáng kể được đặt vào việc đảm bảo khía cạnh phía server của SSH, vì SSH hoạt động như một mục nhập vào server của bạn.Tuy nhiên, điều quan trọng là phải xem xét bảo mật ở phía client , chẳng hạn như client OpenSSH.
Máy khách OpenSSH là phía "máy khách" của SSH, còn gọi là lệnh ssh
. Bạn có thể tìm hiểu thêm về mô hình client - server SSH trong SSH Essentials: Làm việc với Server , Máy khách và Khóa SSH .
Khi tăng cường SSH ở phía server , mục tiêu chính là làm cho các tác nhân độc hại khó truy cập vào server của bạn hơn. Tuy nhiên, việc củng cố ở phía client rất khác, vì thay vào đó bạn đang làm việc để bảo vệ và bảo vệ kết nối SSH và client của bạn khỏi nhiều mối đe dọa khác nhau, bao gồm:
- Những kẻ tấn công trên mạng, được gọi là các cuộc tấn công "người ở giữa".
- Server bị xâm nhập hoặc độc hại gửi các gói dữ liệu không đúng định dạng, trình tự kiểm soát bất chính hoặc lượng lớn dữ liệu để làm quá tải client của bạn.
- Lỗi do con người, chẳng hạn như nhập nhầm địa chỉ server hoặc giá trị cấu hình.
Trong hướng dẫn này, bạn sẽ tăng cường ứng dụng OpenSSH của bạn để giúp đảm bảo các kết nối SSH gửi đi càng an toàn càng tốt.
Yêu cầu
Để hoàn thành hướng dẫn này, bạn cần :
Một thiết bị mà bạn sử dụng làm client SSH, ví dụ:
- Máy tính cá nhân của bạn
- SSH " server nhảy" hoặc " server pháo đài"
- Server Ubuntu 18.04 được cài đặt theo Cài đặt server ban đầu với Ubuntu 18.04 , bao gồm cả user không phải root có quyền sudo
Server SSH mà bạn muốn kết nối, ví dụ:
Khi bạn đã có những thứ này sẵn sàng, hãy đăng nhập vào thiết bị khách SSH của bạn với quyền là user không phải root để bắt đầu.
Bước 1 - Củng cố chung
Trong bước đầu tiên này, bạn sẽ triển khai một số cấu hình cứng ban đầu để cải thiện tính bảo mật tổng thể của client SSH của bạn.
Cấu hình cứng chính xác phù hợp nhất cho khách hàng của bạn phụ thuộc nhiều vào mô hình mối đe dọa và ngưỡng rủi ro của bạn . Tuy nhiên, cấu hình được mô tả trong bước này là cấu hình chung, bảo mật toàn diện nên phù hợp với đa số user .
Nhiều cấu hình cứng cho client OpenSSH được triển khai bằng cách sử dụng file cấu hình client OpenSSH global , có tại /etc/ssh/ssh_config
. Ngoài ra, một số cấu hình cũng có thể được đặt bằng cách sử dụng file cấu hình SSH local cho user của bạn, có tại ~/.ssh/config
.
Trước khi tiếp tục với hướng dẫn này, bạn nên tạo một bản backup của cả hai file này để bạn có thể khôi phục chúng trong trường hợp không may xảy ra sự cố.
Backup các file bằng các lệnh sau:
- sudo cp /etc/ssh/ssh_config /etc/ssh/ssh_config.bak
- cp ~/.ssh/config ~/.ssh/config.bak
Thao tác này sẽ lưu một bản backup của các file ở vị trí mặc định của chúng, nhưng với phần mở rộng .bak
được thêm vào.
Lưu ý file cấu hình SSH local của bạn ( ~/.ssh/config
) có thể không tồn tại nếu bạn chưa sử dụng nó trước đây. Nếu đây là trường hợp, nó có thể được bỏ qua một cách an toàn cho bây giờ.
Đến đây bạn có thể mở file cấu hình chung bằng editor yêu thích của bạn để bắt đầu thực hiện các biện pháp tăng cường ban đầu:
- sudo nano /etc/ssh/ssh_config
Lưu ý: Tệp cấu hình client OpenSSH bao gồm nhiều tùy chọn và cấu hình mặc định. Tùy thuộc vào cài đặt ứng dụng client hiện tại của bạn, một số tùy chọn tăng cường được đề xuất có thể đã được cài đặt .
Khi chỉnh sửa file cấu hình của bạn, một số tùy chọn có thể được comment theo mặc định bằng cách sử dụng một ký tự băm ( #
) ở đầu dòng. Để chỉnh sửa các tùy chọn này hoặc để tùy chọn comment được nhận dạng, bạn cần bỏ ghi chú chúng bằng cách xóa hàm băm.
Trước tiên, bạn nên tắt chuyển tiếp màn hình X11 qua SSH bằng cách đặt các tùy chọn sau:
ForwardX11 no ForwardX11Trusted no
Chuyển tiếp X11 cho phép hiển thị các ứng dụng đồ họa từ xa qua kết nối SSH, tuy nhiên điều này hiếm khi được sử dụng trong thực tế. Bằng cách vô hiệu hóa nó, bạn có thể ngăn chặn các server có khả năng độc hại hoặc bị xâm nhập cố gắng chuyển tiếp phiên X11 tới client của bạn, điều này trong một số trường hợp có thể cho phép bỏ qua các quyền của hệ thống file hoặc các thao tác gõ phím local được giám sát.
Tiếp theo, bạn có thể xem xét việc tắt tính năng SSH tunneling. SSH tunneling được sử dụng khá rộng rãi, vì vậy bạn có thể cần bật tính năng này. Tuy nhiên, nếu nó không cần thiết cho cài đặt cụ thể của bạn, bạn có thể tắt nó một cách an toàn như một biện pháp tăng cường thêm:
Tunnel no
Bạn cũng nên xem xét việc tắt chuyển tiếp tác nhân SSH nếu không bắt buộc, để ngăn server yêu cầu sử dụng tác nhân SSH local của bạn để xác thực các kết nối SSH trở đi:
ForwardAgent no
Trong phần lớn các trường hợp, client SSH của bạn sẽ được cấu hình để sử dụng xác thực password hoặc xác thực public key khi kết nối với server . Tuy nhiên, ứng dụng client OpenSSH cũng hỗ trợ các phương pháp xác thực khác, một số phương thức được bật theo mặc định. Nếu những điều này không được yêu cầu, chúng có thể bị vô hiệu hóa để giảm thêm khả năng tấn công bề mặt khách hàng của bạn:
GSSAPIAuthentication no HostbasedAuthentication no
Nếu bạn muốn biết thêm về một số phương pháp xác thực bổ sung có sẵn trong SSH, bạn có thể cần xem lại các tài nguyên sau:
Ứng dụng khách OpenSSH cho phép bạn tự động chuyển các biến môi trường tùy chỉnh khi kết nối với server , chẳng hạn, để đặt tùy chọn ngôn ngữ hoặc cấu hình cài đặt terminal . Tuy nhiên, nếu điều này không được yêu cầu trong cài đặt của bạn, bạn có thể ngăn bất kỳ biến nào được gửi bằng cách đảm bảo tùy chọn SendEnv
được comment hoặc bị xóa hoàn toàn:
# SendEnv
Cuối cùng, bạn nên đảm bảo tính năng kiểm tra khóa server nghiêm ngặt được bật, đảm bảo rằng bạn được cảnh báo thích hợp khi khóa server / dấu fingerprint của server từ xa thay đổi hoặc khi kết nối với server mới lần đầu tiên:
StrictHostKeyChecking ask
Điều này sẽ ngăn bạn kết nối với server khi khóa server đã biết đã thay đổi, điều này có thể nghĩa là server đã được xây dựng lại hoặc nâng cấp hoặc có thể là dấu hiệu của một cuộc tấn công người trung gian đang diễn ra.
Khi kết nối với một server mới lần đầu tiên, ứng dụng SSH của bạn sẽ hỏi bạn có muốn chấp nhận khóa server và lưu nó trong file ~/.ssh/known_hosts
. Điều quan trọng là bạn phải xác minh khóa server trước khi chấp nhận, điều này thường liên quan đến việc hỏi administrator server hoặc duyệt tài liệu cho dịch vụ (trong trường hợp của GitHub / GitLab và các dịch vụ tương tự khác).
Lưu và thoát khỏi file .
Đến đây bạn đã hoàn thành việc củng cố file cấu hình ban đầu của bạn , bạn nên xác thực cú pháp của cấu hình mới bằng cách chạy SSH ở chế độ thử nghiệm:
- ssh -G .
Bạn có thể thay thế .
với bất kỳ tên server nào để kiểm tra / mô phỏng cài đặt nào có trong các khối Match
hoặc Host
.
Nếu file cấu hình của bạn có cú pháp hợp lệ, các tùy chọn áp dụng cho kết nối cụ thể đó sẽ được in ra. Trong trường hợp có lỗi cú pháp, sẽ có một kết quả mô tả sự cố.
Bạn không cần phải khởi động lại bất kỳ dịch vụ hệ thống nào để cấu hình mới của bạn có hiệu lực, mặc dù các phiên SSH hiện có cần được cài đặt lại nếu bạn muốn chúng kế thừa cài đặt mới.
Trong bước này, bạn đã hoàn thành một số phần cứng chung cho file cấu hình client OpenSSH của bạn . Tiếp theo, bạn sẽ hạn chế các mật mã có sẵn để sử dụng trong các kết nối SSH.
Bước 2 - Hạn chế mật mã có sẵn
Tiếp theo, bạn sẽ cấu hình các bộ mật mã có sẵn trong client SSH của bạn để vô hiệu hóa hỗ trợ cho những bộ mã không còn được dùng nữa / kế thừa.
Bắt đầu bằng cách mở file cấu hình chung trong editor của bạn:
- sudo nano /etc/ssh/ssh_config
Tiếp theo, đảm bảo dòng cấu hình Ciphers
hiện có được comment bằng cách đặt tiền tố cho nó bằng một hàm băm ( #
).
Sau đó, thêm phần sau vào đầu file :
Ciphers -arcfour*,-*cbc
Điều này sẽ vô hiệu hóa các mật mã Arcfour kế thừa, cũng như tất cả các mật mã sử dụng Chuỗi khối mã hóa (CBC) , không còn được khuyến khích sử dụng nữa.
Nếu có yêu cầu kết nối với các hệ thống chỉ hỗ trợ các mật mã kế thừa này, bạn có thể bật lại rõ ràng các mật mã bắt buộc cho các server cụ thể bằng cách sử dụng khối Match
. Ví dụ: để bật mật mã 3des-cbc
cho một server kế thừa cụ thể, có thể sử dụng cấu hình sau:
Match host legacy-server.your-domain Ciphers +3des-cbc
Lưu và thoát khỏi file .
Cuối cùng, như bạn đã làm ở Bước 1, bạn có thể cần kiểm tra lại cấu hình client SSH của bạn để kiểm tra xem có bất kỳ lỗi tiềm ẩn nào không:
- ssh -G .
Nếu bạn đã thêm khối Match
để bật mật mã kế thừa cho một server cụ thể, bạn cũng có thể nhắm đến cụ thể cấu hình đó trong quá trình kiểm tra bằng cách chỉ định địa chỉ server được liên kết:
- ssh -G legacy-server.your-domain
Bạn đã bảo mật các mật mã có sẵn cho ứng dụng SSH của bạn . Tiếp theo, bạn sẽ xem xét các quyền truy cập cho các file được ứng dụng client SSH của bạn sử dụng.
Bước 3 - Bảo mật file cấu hình và quyền private key
Trong bước này, bạn sẽ khóa quyền đối với file cấu hình client SSH và private key của bạn để giúp ngăn chặn các thay đổi ngẫu nhiên hoặc độc hại hoặc tiết lộ private key . Điều này đặc biệt hữu ích khi sử dụng thiết bị khách dùng chung giữa nhiều user .
Theo mặc định trên bản cài đặt Ubuntu mới, (các) file cấu hình client OpenSSH được cấu hình để mỗi user chỉ có thể chỉnh sửa file cấu hình local của riêng họ ( ~/.ssh/config
) và quyền truy cập sudo / quản trị được yêu cầu để chỉnh sửa cấu hình toàn hệ thống ( /etc/ssh/ssh_config
).
Tuy nhiên, trong một số trường hợp, đặc biệt là trên các hệ thống đã tồn tại trong thời gian dài, các quyền đối với file cấu hình này có thể đã bị sửa đổi hoặc điều chỉnh vô tình, vì vậy tốt nhất bạn nên đặt lại chúng đảm bảo rằng cấu hình được bảo mật.
Bạn có thể bắt đầu bằng cách kiểm tra giá trị quyền hiện tại cho file cấu hình client OpenSSH trên toàn hệ thống bằng cách sử dụng lệnh stat
, bạn có thể sử dụng lệnh này để hiển thị trạng thái hoặc file và / hoặc đối tượng hệ thống file :
- stat -c "%a %A %U:%G" /etc/ssh/ssh_config
Bạn sử dụng đối số -c
để chỉ định định dạng kết quả tùy chỉnh.
Lưu ý : Trên một số hệ điều hành, chẳng hạn như macOS, bạn cần sử dụng tùy chọn -f
để chỉ định định dạng tùy chỉnh thay vì -c
.
Trong trường hợp này, tùy chọn %A %a %U:%G
sẽ in các quyền cho file ở định dạng bát phân và người có thể đọc được, cũng như user / group sở hữu file .
Điều này sẽ xuất ra một cái gì đó tương tự như sau:
Output644 -rw-r--r-- root:root
Trong trường hợp này, các quyền là chính xác, root sở hữu hoàn toàn file và chỉ root mới có quyền ghi / sửa đổi nó.
Lưu ý: Nếu bạn muốn nâng cao kiến thức của bạn về các quyền của Linux trước khi tiếp tục, bạn có thể cần xem lại Giới thiệu về Quyền của Linux .
Tuy nhiên, nếu kết quả của bạn khác, bạn nên đặt lại các quyền về mặc định bằng các lệnh sau:
- sudo chown root:root /etc/ssh/ssh_config
- sudo chmod 644 /etc/ssh/ssh_config
Nếu bạn lặp lại lệnh stat
từ trước đó trong bước này, bây giờ bạn sẽ nhận được các giá trị chính xác cho file cấu hình toàn hệ thống của bạn .
Tiếp theo, bạn có thể thực hiện các kiểm tra tương tự cho file cấu hình client SSH local của riêng mình, nếu bạn có:
- stat -c "%a %A %U:%G" ~/.ssh/config
Điều này sẽ xuất ra một cái gì đó tương tự như sau:
Output644 -rw--r--r-- user:user
Nếu các quyền đối với các quyền đối với file cấu hình client của bạn là khác nhau, bạn nên đặt lại chúng bằng các lệnh sau, tương tự như trước đó trong bước:
- chown user:user ~/.ssh/config
- chmod 644 ~/.ssh/config
Tiếp theo, bạn có thể kiểm tra quyền đối với từng private key SSH mà bạn có trong ~/.ssh
, vì những file này chỉ được truy cập bởi chính bạn chứ không phải mọi user khác trên hệ thống.
Bắt đầu bằng cách in các giá trị quyền và quyền sở hữu hiện tại cho mỗi private key :
- stat -c "%a %A %U:%G" ~/.ssh/id_rsa
Điều này sẽ xuất ra một cái gì đó tương tự như sau:
Output600 -rw------- user:user
Điều cực kỳ quan trọng là bạn phải khóa các quyền đối với các file private key của bạn một cách hợp lý, vì nếu không làm như vậy có thể cho phép những user khác trên thiết bị của bạn lấy cắp chúng và truy cập vào các server được liên kết hoặc account user từ xa.
Nếu các quyền không được cấu hình đúng, hãy sử dụng các lệnh sau trên mỗi file private key để đặt lại chúng về mặc định an toàn:
- chown user:user ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
Trong bước này, bạn đã đánh giá và khóa quyền đối với file cấu hình client SSH và private key của bạn . Tiếp theo, bạn sẽ triển khai danh sách cho phép gửi đi để giới hạn server mà khách hàng của bạn có thể kết nối với.
Bước 4 - Hạn chế kết nối đi bằng danh sách cho phép server lưu trữ
Trong bước cuối cùng này, bạn sẽ triển khai danh sách cho phép gửi đi để hạn chế các server mà client SSH của bạn có thể kết nối với. Điều này đặc biệt hữu ích cho các hệ thống chia sẻ / nhiều user , cũng như server lưu trữ nhảy SSH hoặc server pháo đài.
Kiểm soát bảo mật này được thiết kế đặc biệt để giúp bảo vệ khỏi lỗi / nhầm lẫn của con người, chẳng hạn như địa chỉ server hoặc tên server bị nhập sai. User có thể dễ dàng bỏ qua nó bằng cách chỉnh sửa file cấu hình local của họ và do đó, nó không được thiết kế để hoạt động như một biện pháp bảo vệ chống lại user / tác nhân độc hại.
Nếu bạn muốn hạn chế các kết nối đi ở cấp độ mạng, cách chính xác để làm điều này là sử dụng các luật firewall . Điều này nằm ngoài phạm vi của hướng dẫn này, nhưng bạn có thể xem UFW Essentials: Common Firewall Rules and Commands .
Tuy nhiên, nếu bạn muốn thêm một số két dự phòng bổ sung, thì việc kiểm soát an ninh này có thể có lợi cho bạn.
Nó hoạt động bằng cách sử dụng luật ký tự đại diện trong file cấu hình client SSH của bạn để định tuyến rỗng tất cả các kết nối gửi đi, ngoại trừ các kết nối đó đến các địa chỉ hoặc tên server cụ thể. Điều này nghĩa là nếu bạn vô tình nhập nhầm địa chỉ server hoặc cố gắng kết nối với một server mà bạn không được phép, yêu cầu sẽ bị dừng ngay lập tức, cho bạn cơ hội nhận ra lỗi của bạn và thực hiện hành động sửa chữa.
Bạn có thể áp dụng điều này ở phạm vi hệ thống ( /etc/ssh/ssh_config
) hoặc sử dụng file cấu hình user local của bạn ( ~/.ssh/config
). Trong ví dụ này, ta sẽ sử dụng file cấu hình user local .
Bắt đầu bằng cách mở file , tạo file nếu nó chưa tồn tại:
- nano ~/.ssh/config
Ở cuối file , hãy thêm nội dung sau, thay thế trong danh sách địa chỉ IP và tên server được phép của bạn :
Match host !203.0.113.1,!192.0.2.1,!server1.your-domain,!github.com,* Hostname localhost
Bạn phải đặt trước địa chỉ IP hoặc tên server bằng dấu chấm than ( !
) Và sử dụng dấu phẩy để phân tách từng mục trong danh sách. Mục danh sách cuối cùng phải là một dấu hoa thị ( *
) không có tiền tố dấu chấm than.
Nếu bạn cũng đang chạy một server SSH trên máy của bạn , bạn có thể cần sử dụng giá trị tên server khác với localhost
, vì điều này sẽ khiến các kết nối được định tuyến rỗng được gửi đến server SSH local của bạn , điều này có thể phản tác dụng hoặc gây nhầm lẫn. Bất kỳ tên server nào bị nullrouted đều có thể chấp nhận được, chẳng hạn như null
, do-not-use
, hoặc disallowed-server
.
Lưu file khi bạn đã áp dụng các thay đổi của bạn .
Đến đây bạn có thể kiểm tra xem cấu hình có đang hoạt động hay không bằng cách cố gắng kết nối với đích không được phép bằng ứng dụng SSH của bạn. Ví dụ:
- ssh disallowed.your-domain
Nếu cấu hình hoạt động bình thường, bạn sẽ ngay lập tức nhận được lỗi tương tự như sau:
OutputCannot connect to localhost: connection refused
Tuy nhiên, khi bạn cố gắng kết nối với một điểm đến được phép, kết nối sẽ thành công như bình thường.
Trong bước cuối cùng này, bạn đã triển khai một số khóa dự phòng bổ sung để giúp bảo vệ khỏi lỗi của con người và những sai lầm khi sử dụng client SSH của bạn.
Kết luận
Trong bài viết này, bạn đã xem xét cấu hình client OpenSSH của bạn và thực hiện các biện pháp tăng cường khác nhau.
Điều này sẽ cải thiện tính bảo mật của các kết nối SSH đi của bạn, cũng như giúp đảm bảo các file cấu hình local của bạn không thể bị sửa đổi một cách vô tình hoặc có hại bởi những user khác.
Bạn có thể cần xem lại các trang hướng dẫn sử dụng cho ứng dụng OpenSSH và file cấu hình liên quan của nó để xác định bất kỳ chỉnh sửa nào có thể có thêm mà bạn muốn thực hiện:
Cuối cùng, nếu bạn cũng muốn củng cố OpenSSH ở phía server , hãy xem Cách củng cố OpenSSH trên Ubuntu 18.04 .
Các tin liên quan
Cách cài đặt và sử dụng ClickHouse trên Ubuntu 20.042020-09-22
Cách cài đặt và cấu hình Mahara trên Ubuntu 18.04
2020-09-21
Cách cài đặt Jitsi Meet trên Ubuntu 20.04
2020-09-18
Cách xử lý sandbox với Systemd trên Ubuntu 20.04
2020-09-16
Cách cài đặt và cấu hình Neo4j trên Ubuntu 20.04
2020-09-15
Cách cài đặt Webmin trên Ubuntu 20.04
2020-08-26
Cách thiết lập môi trường JupyterLab trên Ubuntu 18.04
2020-08-26
Cách cài đặt Node.js trên Ubuntu 18.04
2020-08-06
Cách cài đặt MongoDB trên Ubuntu 20.04 từ site chính thức của Mongodb
2020-07-31
Cách cấu hình truy cập từ xa cho MongoDB trên Ubuntu 20.04
2020-07-31