Cách làm cứng và bảo mật OpenSSH trên Ubuntu 20.04

Tác giả Network Engineer, T.M.Một 14, 2021, 02:05:13 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách làm cứng và bảo mật OpenSSH trên Ubuntu 20.04


Máy chủ Linux thường được quản lý từ xa bằng SSH bằng cách kết nối với máy chủ OpenSSH, đây là phần mềm máy chủ 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.

Máy chủ OpenSSH là phía máy chủ của SSH, còn được gọi là SSH daemon hoặc sshd. Bạn có thể kết nối với máy chủ OpenSSH bằng ứng dụng khách OpenSSH, cụ thể là bằng cách chạy lênh ssh.

Bảo mật đúng cách máy chủ OpenSSH của bạn là rất quan trọng, vì nó hoạt động như cửa trước hoặc điểm vào máy chủ của bạn.

Trong hướng dẫn này, bạn sẽ làm cứng máy chủ OpenSSH của mình bằng cách sử dụng các tùy chọn cấu hình khác nhau để đảm bảo rằng truy cập từ xa vào máy chủ của bạn càng an toàn càng tốt.

Để hoàn thành hướng dẫn này, bạn sẽ cần:

  • Máy chủ Ubuntu 20.04 được thiết lập bằng cách làm theo thiết lập máy chủ ban đầu với Ubuntu 20.04, bao gồm cả người dùng không phải root nhưng có quyền sudo.

Khi bạn đã chuẩn bị xong, hãy đăng nhập vào máy chủ của bạn với tư cách là người dùng không phải root nhưng có quyền của bạn để bắt đầu.

Bước 1: Làm cứng 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 máy chủ SSH của mình.

Cấu hình cứng chính xác phù hợp nhất cho máy chủ của riêng 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 riêng bạn. Tuy nhiên, cấu hình bạn sẽ sử dụng trong bước này là cấu hình bảo mật chung sẽ phù hợp với phần lớn các máy chủ.

Bạn sẽ chỉnh sửa tập tin cấu hình OpenSSH chính /etc/ssh/sshd_config để thiết lập phần lớn các tùy chọn tăng cường trong hướng dẫn này. Trước khi tiếp tục, bạn nên tạo một bản sao lưu của tập tin cấu hình hiện có của bạn để bạn có thể khôi phục nó trong trường hợp không may xảy ra sự cố.

Tạo bản sao lưu của tập tin bằng lệnh cp sau:

Mã nguồn [Chọn]
$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Thao tác này sẽ lưu một bản sao lưu của tập tin vào /etc/ssh/sshd_config.bak.

Tiếp theo, hãy xem lại các tùy chọn cấu hình OpenSSH mặc định hiện tại tương ứng với các cài đặt trong /etc/ssh/sshd_config. Để thực hiện việc này, hãy chạy lệnh sau:

Mã nguồn [Chọn]
$ sudo sshd -T
Thao tác này sẽ chạy máy chủ OpenSSH ở chế độ kiểm tra mở rộng, sẽ xác thực tập tin cấu hình đầy đủ và in ra các giá trị cấu hình hiệu quả.

Bây giờ bạn có thể mở tập tin cấu hình bằng cách sử dụng nano hoặc trình soạn thảo văn bản yêu thích của bạn để bắt đầu thực hiện các biện pháp làm cứng ban đầu:

Mã nguồn [Chọn]
$ sudo nano /etc/ssh/sshd_config
Lưu ý: tập tin cấu hình máy chủ OpenSSH được cài đặt với Ubuntu 20.04 bao gồm nhiều tùy chọn và cấu hình mặc định. Tùy thuộc vào cấu hình máy chủ 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 thiết lập.

Khi chỉnh sửa tập tin cấu hình của bạn, một số tùy chọn có thể được vô hiệu hóa theo mặc định bằng cách sử dụng một ký tự # ở đầu dòng. Để chỉnh sửa các tùy chọn này hoặc bật tùy chọn, bạn sẽ cần bỏ ghi chú chúng bằng cách xóa ký tự # ở đầu dòng.

Tùy chọn tăng cường đầu tiên là vô hiệu hóa đăng nhập qua SSH với tư cách người dùng root. Đặt tùy chọn PermitRootLogin thành no bằng cách bỏ ghi chú hoặc chỉnh sửa dòng:

Mã nguồn [Chọn]
PermitRootLogin no
Tùy chọn này sẽ ngăn kẻ tấn công tiềm năng đăng nhập trực tiếp vào máy chủ của bạn với tư cách là root. Nó cũng khuyến khích các phương pháp bảo mật hoạt động tốt từ phía bạn, chẳng hạn như hoạt động với tư cách người dùng không có đặc quyền và chỉ sử dụng sudo để nâng cao đặc quyền khi thực sự cần thiết.

Tiếp theo, bạn có thể giới hạn số lần xác thực tối đa cho một phiên đăng nhập cụ thể bằng cách cấu hình tùy chọn MaxAuthTries:

Mã nguồn [Chọn]
MaxAuthTries 3
Giá trị tiêu chuẩn của 3 được chấp nhận đối với hầu hết các thiết lập, nhưng bạn có thể muốn đặt giá trị này cao hơn hoặc thấp hơn tùy thuộc vào ngưỡng rủi ro của riêng bạn.

Nếu được yêu cầu, bạn cũng có thể đặt thời gian gia hạn đăng nhập giảm xuống, là lượng thời gian người dùng phải hoàn tất xác thực sau khi kết nối ban đầu với máy chủ SSH của bạn:

Mã nguồn [Chọn]
LoginGraceTime 20
Tập tin cấu hình chỉ định giá trị này trong vài giây.

Đặt giá trị này thành giá trị thấp hơn sẽ giúp ngăn chặn một số cuộc tấn công từ chối dịch vụ nhất định trong đó nhiều phiên xác thực được giữ mở trong một khoảng thời gian dài.

Nếu bạn đã cấu hình khóa SSH để xác thực, thay vì sử dụng mật khẩu, hãy tắt xác thực mật khẩu SSH để ngăn mật khẩu người dùng bị rò rỉ cho phép kẻ tấn công đăng nhập:

Mã nguồn [Chọn]
PasswordAuthentication no
Là một biện pháp tăng cường hơn nữa liên quan đến mật khẩu, bạn cũng có thể muốn tắt xác thực với mật khẩu trống. Điều này sẽ ngăn đăng nhập nếu mật khẩu của người dùng được đặt thành giá trị trống hoặc bỏ trống:

Mã nguồn [Chọn]
PermitEmptyPasswords no
Trong phần lớn các trường hợp sử dụng, SSH sẽ được cấu hình với xác thực khóa công khai là phương thức xác thực đang sử dụng duy nhất. Tuy nhiên, máy chủ OpenSSH cũng hỗ trợ nhiều phương thức xác thực khác, một số phương thức được bật theo mặc định. Nếu không bắt buộc phải có những điều này, bạn có thể tắt chúng để giảm thêm bề mặt tấn công của máy chủ SSH của bạn:

Mã nguồn [Chọn]
ChallengeResponseAuthentication no
KerberosAuthentication no
GSSAPIAuthentication 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ể muốn xem lại các tài nguyên sau:

  • Xác thực Challenge Response
  • Xác thực Kerberos
  • Xác thực GSSAPI

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, nhưng điều này hiếm khi được sử dụng trong thực tế. Vô hiệu hóa nó nếu bạn không chạy môi trường đồ họa trên máy chủ của mình:

Mã nguồn [Chọn]
X11Forwarding no
Máy chủ OpenSSH cho phép kết nối các máy khách để chuyển các biến môi trường tùy chỉnh. Ví dụ: một ứng dụng khách có thể cố gắng thiết lập $PATH của riêng mình hoặc cấu hình cài đặt Terminal. Tuy nhiên, giống như chuyển tiếp X11, chúng không được sử dụng phổ biến, vì vậy bạn có thể tắt tùy chọn này trong hầu hết các trường hợp:

Mã nguồn [Chọn]
PermitUserEnvironment no
Nếu bạn quyết định hạn chế tùy chọn này bằng cách đặt nó thành no, thì bạn cũng nên đảm bảo đưa ra bất kỳ tham chiếu nào trong tập tin cấu hình AcceptEnv bằng cách thêm # vào đầu dòng bất kỳ chỉ định tùy chọn đó.

Tiếp theo, bạn có thể tắt một số tùy chọn khác liên quan đến đường hầm và chuyển tiếp nếu bạn không sử dụng những tùy chọn này trên máy chủ của mình:

Mã nguồn [Chọn]
AllowAgentForwarding no
AllowTcpForwarding no
PermitTunnel no

Cuối cùng, bạn có thể tắt biểu ngữ SSH dài dòng được bật theo mặc định, vì nó hiển thị nhiều thông tin khác nhau về hệ thống của bạn, chẳng hạn như phiên bản hệ điều hành:

Mã nguồn [Chọn]
DebianBanner no
Lưu ý rằng tùy chọn này rất có thể sẽ không có trong tập tin cấu hình, vì vậy bạn có thể cần phải thêm nó theo cách thủ công. Lưu và thoát khỏi tập tin khi bạn đã hoàn tất. Nếu bạn đang sử dụng nano thì nhấn CTRL+O để lưu tập tin và nhấn ENTER khi được nhắc với tên tập tin. Sau đó nhấn CTRL+X để thoát khỏi trình chỉnh sửa.

Bây giờ xác thực cú pháp của cấu hình mới của bạn bằng cách chạy sshd ở chế độ thử nghiệm với tùy chọn -t:

Mã nguồn [Chọn]
$ sudo sshd -t
Nếu tập tin cấu hình của bạn có cú pháp hợp lệ, sẽ không có đầu ra. Trong trường hợp có lỗi cú pháp, sẽ có một đầu ra mô tả sự cố.

Sau khi hài lòng với tập tin cấu hình của mình, bạn có thể tải lại sshd bằng cách sử dụng systemd để áp dụng cài đặt mới:

Mã nguồn [Chọn]
$ sudo systemctl reload sshd.service
Trong bước này, bạn đã hoàn thành một số quá trình làm cứng chung cho tập tin cấu hình máy chủ OpenSSH của mình. Tiếp theo, bạn sẽ triển khai danh sách cho phép địa chỉ IP để hạn chế hơn nữa những người có thể đăng nhập vào máy chủ của bạn.

Bước 2: Triển khai danh sách cho phép địa chỉ IP

Bạn có thể sử dụng danh sách cho phép địa chỉ IP để giới hạn người dùng được phép đăng nhập vào máy chủ của bạn trên cơ sở mỗi địa chỉ IP. Trong bước này, bạn sẽ cấu hình danh sách cho phép IP cho máy chủ OpenSSH của mình.

Trong nhiều trường hợp, bạn sẽ chỉ đăng nhập vào máy chủ của mình từ một số lượng nhỏ các địa chỉ IP đã biết, đáng tin cậy. Ví dụ: kết nối internet gia đình của bạn, thiết bị VPN của công ty hoặc hộp nhảy tĩnh hoặc máy chủ pháo đài trong trung tâm dữ liệu.

Bằng cách triển khai danh sách cho phép địa chỉ IP, bạn có thể đảm bảo rằng mọi người sẽ chỉ có thể đăng nhập từ một trong những địa chỉ IP đã được phê duyệt trước, giảm đáng kể nguy cơ vi phạm trong trường hợp khóa riêng tư và / hoặc mật khẩu của bạn bị lộ.

Lưu ý: Hãy cẩn thận trong việc xác định các địa chỉ IP chính xác để thêm vào danh sách cho phép của bạn và đảm bảo rằng đây không phải là các địa chỉ động hoặc động có thể thường xuyên thay đổi, chẳng hạn như thường thấy với các nhà cung cấp dịch vụ internet tiêu dùng.

Bạn có thể xác định địa chỉ IP mà bạn hiện đang kết nối với máy chủ của mình bằng cách sử dụng lệnh w:

Mã nguồn [Chọn]
$ w
Điều này sẽ xuất ra một cái gì đó tương tự như sau:
   
Mã nguồn [Chọn]
14:11:48 up 2 days, 12:25,  1 user,  load average: 0.00, 0.00, 0.00
         USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
your_username     pts/0    203.0.113.1     12:24    1.00s  0.20s  0.00s w

Tìm tài khoản người dùng của bạn trong danh sách và ghi chú địa chỉ IP kết nối. Ở đây mình sử dụng IP mẫu là 203.0.113.1

Để bắt đầu triển khai danh sách cho phép địa chỉ IP của bạn, hãy mở tập tin cấu hình máy chủ OpenSSH trong nano hoặc trình soạn thảo văn bản ưa thích của bạn:

Mã nguồn [Chọn]
$ sudo nano /etc/ssh/sshd_config
Bạn có thể triển khai danh sách cho phép địa chỉ IP bằng cách sử dụng tùy chọn AllowUsers, chỉ thị này hạn chế xác thực người dùng dựa trên tên người dùng và / hoặc địa chỉ IP.

Yêu cầu và thiết lập hệ thống của riêng bạn sẽ xác định cấu hình cụ thể nào là thích hợp nhất. Các ví dụ sau sẽ giúp bạn xác định cái phù hợp nhất:

Hạn chế tất cả người dùng ở một địa chỉ IP cụ thể:

Mã nguồn [Chọn]
AllowUsers *@203.0.113.1
Hạn chế tất cả người dùng trong một dải địa chỉ IP cụ thể bằng cách sử dụng ký hiệu định tuyến liên miền không phân lớp (CIDR):

Mã nguồn [Chọn]
AllowUsers *@203.0.113.0/24
Hạn chế tất cả người dùng trong một dải địa chỉ IP cụ thể (sử dụng ký tự đại diện):

Mã nguồn [Chọn]
AllowUsers *@203.0.113.*
Hạn chế tất cả người dùng ở nhiều địa chỉ IP và dải ô cụ thể:

Mã nguồn [Chọn]
AllowUsers *@203.0.113.1 *@203.0.113.2 *@192.0.2.0/24 *@172.16.*.1
Không cho phép tất cả người dùng ngoại trừ những người dùng được đặt tên từ các địa chỉ IP cụ thể:

Mã nguồn [Chọn]
AllowUsers [email protected] [email protected]
Hạn chế một người dùng cụ thể ở một địa chỉ IP cụ thể, trong khi tiếp tục cho phép tất cả người dùng khác đăng nhập mà không có giới hạn:

Mã nguồn [Chọn]
Match User vietn
  AllowUsers [email protected]

Lưu ý: Trong tập tin cấu hình OpenSSH, tất cả các cấu hình trong khối Match sẽ chỉ áp dụng cho các kết nối phù hợp với tiêu chí, bất kể thụt lề hoặc ngắt dòng. Điều này có nghĩa là bạn phải cẩn thận và đảm bảo rằng các cấu hình dự định áp dụng trên toàn cầu không vô tình bị đưa vào khối Match. Bạn nên đặt tất cả các khối Match ở cuối / cuối tập tin cấu hình của mình để tránh điều này.

Khi bạn đã hoàn thành cấu hình của mình, hãy thêm cấu hình vào cuối tập tin cấu hình máy chủ OpenSSH của bạn:

Mã nguồn [Chọn]
AllowUsers *@203.0.113.1
Lưu và đóng tập tin, sau đó tiến hành kiểm tra cú pháp cấu hình của bạn:

Mã nguồn [Chọn]
$ sudo sshd -t
Nếu không có lỗi nào được báo cáo, bạn có thể tải lại máy chủ OpenSSH để áp dụng cấu hình của mình:

Mã nguồn [Chọn]
$ sudo systemctl reload sshd.service
Trong bước này, bạn đã triển khai danh sách cho phép địa chỉ IP trên máy chủ OpenSSH của mình. Tiếp theo, bạn sẽ giới hạn shell của người dùng để giới hạn các lệnh mà họ được phép sử dụng.

Bước 3: Hạn chế shell của người dùng

Trong bước này, bạn sẽ khám phá các tùy chọn khác nhau để hạn chế shell của người dùng SSH.

Ngoài việc cung cấp quyền truy cập shell từ xa, SSH cũng rất tốt để truyền tập tin và dữ liệu khác, chẳng hạn như qua SFTP. Tuy nhiên, không phải lúc nào bạn cũng có thể muốn cấp toàn quyền truy cập shell cho người dùng khi họ chỉ cần có thể thực hiện truyền tập tin.

Có nhiều cấu hình trong máy chủ OpenSSH mà bạn có thể sử dụng để hạn chế môi trường shell của những người dùng cụ thể. Ví dụ: trong hướng dẫn này, mình sẽ sử dụng chúng để tạo người dùng chỉ SFTP.

Thứ nhất, bạn có thể sử dụng /usr/sbin/nologinshell để tắt thông tin đăng nhập tương tác cho một số tài khoản người dùng nhất định, trong khi vẫn cho phép các phiên không tương tác hoạt động, như truyền tập tin, đào đường hầm, v.v.

Để tạo người dùng mới với nologinshell, hãy sử dụng lệnh sau:

Mã nguồn [Chọn]
$ sudo adduser --shell /usr/sbin/nologin vietnetw
Ngoài ra, bạn có thể thay đổi giao diện người dùng hiện tại thành nologin:

Mã nguồn [Chọn]
$ sudo usermod --shell /usr/sbin/nologin vietnetw
Sau đó, nếu bạn cố gắng đăng nhập tương tác với tư cách là một trong những người dùng này, yêu cầu sẽ bị từ chối:

Mã nguồn [Chọn]
$ sudo su vietnetw
Điều này sẽ xuất ra một cái gì đó tương tự như thông báo sau:
     
Mã nguồn [Chọn]
This account is currently not available.
Bất chấp thông báo từ chối trên các lần đăng nhập tương tác, các hành động khác như chuyển tập tin vẫn sẽ được cho phép.

Tiếp theo, bạn nên kết hợp việc sử dụng nologinshell với một số tùy chọn cấu hình bổ sung để hạn chế hơn nữa các tài khoản người dùng có liên quan.

Bắt đầu bằng cách mở lại tập tin cấu hình máy chủ OpenSSH trong nano hoặc trình soạn thảo ưa thích của bạn:

Mã nguồn [Chọn]
$ sudo nano /etc/ssh/sshd_config
Có hai tùy chọn cấu hình mà bạn có thể triển khai cùng nhau để tạo tài khoản người dùng chỉ SFTP bị hạn chế chặt chẽ: ForceCommand internal-sftpChrootDirectory.

Tùy chọn ForceCommand trong máy chủ OpenSSH buộc một người dùng để thực thi một lệnh cụ thể khi đăng nhập. Điều này có thể hữu ích cho một số giao tiếp giữa máy với máy hoặc để khởi chạy một cách cưỡng bức một chương trình cụ thể.

Tuy nhiên, trong trường hợp này, lệnh internal-sftp đặc biệt hữu ích. Đây là một chức năng đặc biệt của máy chủ OpenSSH khởi chạy trình nền SFTP tại chỗ không yêu cầu bất kỳ tập tin hệ thống hoặc cấu hình hỗ trợ nào.

Điều này lý tưởng nên được kết hợp với tùy chọn ChrootDirectory, sẽ ghi đè / thay đổi thư mục chính được nhận thức cho một người dùng cụ thể, về cơ bản giới hạn họ trong một thư mục cụ thể trên hệ thống.

Thêm phần cấu hình sau vào tập tin cấu hình máy chủ OpenSSH của bạn cho phần này:

Mã nguồn [Chọn]
Match User vietnetw
  ForceCommand internal-sftp
  ChrootDirectory /home/vietnetw/

Lưu ý: Như đã lưu ý trong Bước 2, trong tập tin cấu hình OpenSSH, tất cả các cấu hình trong khối Match sẽ chỉ áp dụng cho các kết nối phù hợp với tiêu chí, bất kể thụt lề hoặc ngắt dòng. Điều này có nghĩa là bạn phải cẩn thận và đảm bảo rằng các cấu hình dự định áp dụng trên toàn cục không vô tình bị đưa vào khối Match. Bạn nên đặt tất cả khối Match ở cuối / cuối tập tin cấu hình của mình để tránh điều này.

Lưu và đóng tập tin cấu hình của bạn, sau đó kiểm tra lại cấu hình của bạn:

Mã nguồn [Chọn]
$ sudo sshd -t
Nếu không có lỗi, bạn có thể áp dụng cấu hình của mình:

Mã nguồn [Chọn]
$ sudo systemctl reload sshd.service
Điều này đã tạo ra một cấu hình mạnh mẽ cho người dùng vietnetw, nơi đăng nhập tương tác bị vô hiệu hóa và tất cả hoạt động SFTP bị hạn chế trong thư mục chính của người dùng. Từ quan điểm của người dùng, thư mục gốc của hệ thống, nghĩa là, / là thư mục chính của họ và họ sẽ không thể truy cập hệ thống tập tin để truy cập các khu vực khác.

Bạn đã triển khai nologinshell cho người dùng và sau đó tạo cấu hình để hạn chế quyền truy cập SFTP vào một thư mục cụ thể.

Bước 4: Làm cứng nâng cao

Trong bước cuối cùng này, bạn sẽ thực hiện nhiều biện pháp tăng cường bổ sung khác nhau để đảm bảo quyền truy cập vào máy chủ SSH của bạn càng an toàn càng tốt.

Máy chủ OpenSSH có thể áp đặt các hạn chế trên cơ sở từng khóa. Cụ thể, các hạn chế hạn chế có thể được áp dụng cho bất kỳ khóa công khai nào có trong tập tin .ssh/authorized_keys. Khả năng này đặc biệt hữu ích để kiểm soát quyền truy cập cho các phiên máy đến máy, cũng như cung cấp khả năng cho người dùng không phải sudo kiểm soát các giới hạn cho tài khoản người dùng của chính họ.

Mặc dù bạn có thể áp dụng hầu hết các hạn chế này ở cấp hệ thống hoặc cấp độ người dùng bằng cách sử dụng tập tin /etc/ssh/sshd_configurationx, nhưng việc triển khai chúng ở cấp độ khóa cũng có thể thuận lợi, để cung cấp khả năng bảo vệ chuyên sâu và bổ sung dự phòng trong trường hợp hệ thống ngẫu nhiên các lỗi cấu hình toàn bộ.

Lưu ý: Bạn chỉ có thể triển khai các cấu hình bảo mật bổ sung này nếu đang sử dụng xác thực khóa công khai SSH. Nếu bạn chỉ sử dụng xác thực mật khẩu hoặc có thiết lập phức tạp hơn như tổ chức phát hành chứng chỉ SSH, thì các tùy chọn này sẽ không thể sử dụng được.

Bắt đầu bằng cách mở tập tin .ssh/authorized_keys của bạn trong nano hoặc trình soạn thảo ưa thích của bạn:

Mã nguồn [Chọn]
$ nano ~/.ssh/authorized_keys
Lưu ý: Vì các cấu hình này áp dụng trên cơ sở từng khóa, bạn sẽ cần chỉnh sửa từng khóa riêng lẻ trong từng tập tin authorized_keys riêng lẻ mà bạn muốn chúng áp dụng cho tất cả người dùng trên hệ thống của bạn. Thông thường bạn sẽ chỉ cần chỉnh sửa một khóa / tập tin, nhưng điều này đáng xem xét nếu bạn có một hệ thống nhiều người dùng phức tạp.

Khi bạn đã mở tập tin authorized_keys của mình, bạn sẽ thấy rằng mỗi dòng chứa một khóa công khai SSH, rất có thể sẽ bắt đầu bằng một cái gì đó giống như ssh-rsa AAAB.... Các tùy chọn cấu hình bổ sung có thể được thêm vào đầu dòng và những tùy chọn này sẽ chỉ áp dụng cho việc xác thực thành công đối với khóa công khai cụ thể đó.

Các tùy chọn hạn chế sau có sẵn:

  • no-agent-forwarding: Tắt chuyển tiếp SSH agent.
  • no-port-forwarding: Tắt chuyển tiếp cổng SSH.
  • no-pty: Vô hiệu hóa khả năng cấp phát một tty (tức là bắt đầu một shell).
  • no-user-rc: Ngăn chặn việc thực thi tập tin ~/.ssh/rc.
  • no-X11-forwarding: Tắt chuyển tiếp màn hình X11.

Bạn có thể áp dụng những điều này để tắt các tính năng SSH cụ thể cho các khóa cụ thể. Ví dụ: để tắt chuyển tiếp và chuyển tiếp X11 cho một khóa, bạn sẽ sử dụng cấu hình sau:

Mã nguồn [Chọn]
no-agent-forwarding,no-X11-forwarding ssh-rsa AAAB...
Theo mặc định, các cấu hình này hoạt động bằng cách sử dụng phương pháp luận "cho phép theo mặc định, chặn theo ngoại lệ"; tuy nhiên, cũng có thể sử dụng "chặn theo mặc định, cho phép theo ngoại lệ", thường được ưu tiên hơn để đảm bảo bảo mật.

Bạn có thể thực hiện việc này bằng cách sử dụng tùy chọn restrict, tùy chọn này sẽ ngầm từ chối tất cả các tính năng SSH cho khóa cụ thể, yêu cầu chúng chỉ được bật lại một cách rõ ràng khi thực sự cần thiết. Bạn có thể bật lại các tính năng bằng cách sử dụng các tùy chọn cấu hình tương tự được mô tả trước đó trong hướng dẫn này, nhưng không có tiền tố no-

Ví dụ: để tắt tất cả các tính năng SSH cho một khóa cụ thể, ngoài tính năng chuyển tiếp màn hình X11, bạn có thể sử dụng cấu hình sau:

Mã nguồn [Chọn]
restrict,X11-forwarding ssh-rsa AAAB...
Bạn cũng có thể muốn xem xét sử dụng tùy chọn command, rất giống với tùy chọn ForceCommand được mô tả trong Bước 3. Điều này không mang lại lợi ích trực tiếp nếu bạn đang sử dụng ForceCommand, nhưng bạn nên bảo vệ chuyên sâu nếu có nó trong cấu hình, chỉ trong trường hợp không chắc rằng tập tin cấu hình máy chủ OpenSSH chính của bạn bị ghi đè, chỉnh sửa, v.v.

Ví dụ: để buộc người dùng xác thực bằng một khóa cụ thể để thực hiện một lệnh cụ thể khi đăng nhập, bạn có thể thêm cấu hình sau:

Mã nguồn [Chọn]
command="top" ssh-rsa AAAB...
Lưu ý: Các tùy chọn command cấu hình hoạt động hoàn toàn như phương pháp bảo vệ theo chiều sâu, và không nên chỉ dựa vào để hạn chế các hoạt động của một người sử dụng SSH, vì có khả năng cách để ghi đè lên hoặc bỏ qua nó tùy thuộc vào môi trường của bạn. Thay vào đó, bạn nên sử dụng cấu hình song song với các điều khiển khác được mô tả trong bài viết này.

Cuối cùng, để sử dụng tốt nhất các hạn chế cho mỗi khóa cho người dùng chỉ SFTP mà bạn đã tạo ở Bước 3, bạn có thể sử dụng cấu hình sau:

Mã nguồn [Chọn]
restrict,command="false" ssh-rsa AAAB...
Các tùy chọn restrict sẽ vô hiệu hóa tất cả các truy cập tương tác, và tùy chọn command="false" đóng vai trò như một dòng thứ hai của bạo vệ trong trường hợp tùy chọn ForceCommand hoặc nologin bị lỗi.

Lưu và đóng tập tin để áp dụng cấu hình. Điều này sẽ có hiệu lực ngay lập tức đối với tất cả các lần đăng nhập mới, vì vậy bạn không cần phải tải lại OpenSSH theo cách thủ công. Đảm bảo kiểm tra các lệnh mà bạn định sử dụng trước khi ngắt kết nối phiên SSH hiện tại của bạn.

Trong bước cuối cùng này, bạn đã triển khai một số biện pháp tăng cường nâng cao bổ sung cho máy chủ OpenSSH bằng cách sử dụng các tùy chọn tùy chỉnh trong các tập tin .ssh/authorized_keys của bạn.

Trong bài viết này, bạn đã xem xét cấu hình máy chủ OpenSSH và thực hiện các biện pháp tăng cường khác nhau để giúp bảo mật máy chủ của bạn.

Các tùy chọn mà bạn đã cấu hình đã làm giảm bề mặt tấn công tổng thể của máy chủ của bạn bằng cách vô hiệu hóa các tính năng không sử dụng và khóa quyền truy cập của những người dùng cụ thể.

Bạn có thể muốn xem lại các trang hướng dẫn sử dụng cho máy chủ OpenSSH và tập tin cấu hình liên quan của nó, để xác định bất kỳ điều chỉnh nào khác tiềm năng mà bạn muốn thực hiện.