Безопасное подключение к Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Secure Shell (SSH) — это криптографический сетевой протокол, используемый для безопасного доступа к удаленным серверам по незащищенной сети. Как профессионал в области IT, понимание того, как устанавливать безопасные соединения с серверами Linux, является важным навыком.

В этом практическом занятии (LabEx) вы научитесь создавать пары SSH-ключей, управлять своими ключами и настраивать SSH для безопасной аутентификации. Эти знания являются фундаментальными для системных администраторов, разработчиков и специалистов по кибербезопасности, которым необходимо безопасно получать доступ к удаленным системам и управлять ими.

Завершив это практическое занятие, вы получите практический опыт работы с SSH, который является стандартом отрасли для безопасного удаленного администрирования серверов Linux и безопасной передачи файлов.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") linux/RemoteAccessandNetworkingGroup -.-> linux/ssh("Secure Connecting") linux/VersionControlandTextEditorsGroup -.-> linux/nano("Simple Text Editing") subgraph Lab Skills linux/ls -.-> lab-271389{{"Безопасное подключение к Linux"}} linux/cat -.-> lab-271389{{"Безопасное подключение к Linux"}} linux/chmod -.-> lab-271389{{"Безопасное подключение к Linux"}} linux/cd -.-> lab-271389{{"Безопасное подключение к Linux"}} linux/mkdir -.-> lab-271389{{"Безопасное подключение к Linux"}} linux/ssh -.-> lab-271389{{"Безопасное подключение к Linux"}} linux/nano -.-> lab-271389{{"Безопасное подключение к Linux"}} end

Понимание основ SSH

SSH (Secure Shell) — это протокол, который обеспечивает безопасный способ доступа к удаленным компьютерам. В отличие от старых протоколов, таких как Telnet, SSH шифрует все коммуникации между клиентом и сервером, защищая ваши данные от прослушивания.

SSH имеет несколько преимуществ:

  • Шифрованные коммуникации
  • Прочные методы аутентификации
  • Проверка целостности данных
  • Безопасная передача файлов

Начнем с проверки, установлен ли SSH на вашей системе. Откройте терминал и выполните следующую команду:

ssh -V

Вы должны увидеть вывод, похожий на этот, показывающий установленную версию SSH:

OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022

Теперь перейдем в наш проектный каталог, где мы будем работать:

cd ~/project

Эта команда изменяет текущий каталог на /home/labex/project, где мы будем выполнять все операции в этом практическом занятии (LabEx).

Генерация пар SSH-ключей

SSH поддерживает несколько методов аутентификации, но аутентификация на основе ключей является наиболее безопасной и удобной. На этом этапе вы сгенерируете пару SSH-ключей.

Пара SSH-ключей состоит из:

  • Приватного ключа: Это как ваш секретный пароль, и его никогда не следует передавать.
  • Публичного ключа: Его можно безопасно передавать удаленным серверам, к которым вы хотите подключиться.

Для генерации новой пары SSH-ключей используйте команду ssh-keygen:

ssh-keygen -t rsa -b 4096

Эта команда задает:

  • -t rsa: Использовать алгоритм RSA для генерации ключей
  • -b 4096: Создать ключ размером 4096 бит, что обеспечивает высокий уровень безопасности

При выполнении этой команды вас попросят:

  1. Ввести путь к файлу для сохранения ключа (нажмите Enter, чтобы принять путь по умолчанию ~/.ssh/id_rsa)
  2. Ввести пароль-фразу (вы можете оставить это поле пустым в этом практическом занятии (LabEx), нажав Enter дважды)

Вот пример того, что вы должны увидеть:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/labex/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/labex/.ssh/id_rsa
Your public key has been saved in /home/labex/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz1234567890 labex@hostname
The key's randomart image is:
+---[RSA 4096]----+
|                 |
|       . .       |
|      . + .      |
|     . = + .     |
|    . = S = .    |
|   . . = = + .   |
|    . . + = + .  |
|     . . + + .   |
|      .. . .     |
+----[SHA256]-----+

Теперь давайте рассмотрим сгенерированные ключи. Чтобы просмотреть ваш публичный ключ, используйте:

cat ~/.ssh/id_rsa.pub

Это отобразит ваш публичный ключ, который выглядит так:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ... (long string of characters ... ...labex@hostname

Помните, публичный ключ можно передавать, но приватный ключ (~/.ssh/id_rsa) должен быть надежно защищен и никогда не должен передаваться кому-либо.

Понимание разрешений для SSH-ключей

По соображениям безопасности SSH очень требователен к разрешениям на файлы. На этом этапе вы узнаете о правильных разрешениях для SSH-ключей и о том, как их установить.

Давайте проверим текущие разрешения для ваших SSH-ключей:

ls -la ~/.ssh/

Вы должны увидеть вывод, похожий на следующий:

total 16
drwx------ 2 labex labex 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw------- 1 labex labex 3381 Jan 1 12:00 id_rsa
-rw-r--r-- 1 labex labex  741 Jan 1 12:00 id_rsa.pub

Правильные разрешения следующие:

  • Приватный ключ (id_rsa): 600 (доступен только вам для чтения и записи)
  • Публичный ключ (id_rsa.pub): 644 (доступен для чтения всем, но запись разрешена только вам)
  • Каталог .ssh: 700 (доступен только вам)

Если ваши разрешения отличаются, вы можете установить их правильно с помощью следующих команд:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

Давайте проверим, были ли разрешения установлены правильно:

ls -la ~/.ssh/

Теперь вывод должен показать правильные разрешения:

total 16
drwx------ 2 labex labex 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw------- 1 labex labex 3381 Jan 1 12:00 id_rsa
-rw-r--r-- 1 labex labex  741 Jan 1 12:00 id_rsa.pub

Эти разрешения являются критически важными для безопасности - SSH откажется работать, если разрешения слишком открыты, так как это может привести к раскрытию вашего приватного ключа.

Настройка аутентификации SSH

На этом этапе вы узнаете, как настроить аутентификацию на основе SSH-ключей. Это позволит вам входить на удаленные сервера без необходимости каждый раз вводить пароль.

Для работы аутентификации по SSH-ключам вам нужно скопировать ваш публичный ключ в файл ~/.ssh/authorized_keys на сервере. В реальной ситуации вы бы использовали команду ssh-copy-id для этого:

## Example for reference (Do not run this)
## ssh-copy-id username@remote_host

Поскольку в этом практическом занятии (LabEx) у нас нет реального удаленного сервера, мы имитируем этот процесс, создав локальный файл authorized_keys.

Сначала создадим каталог .ssh, если он еще не существует:

mkdir -p ~/.ssh

Команда mkdir -p создает каталог, если он не существует, и не делает ничего, если он уже есть.

Теперь создадим или добавим в файл authorized_keys:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Эта команда добавляет ваш публичный ключ в файл authorized_keys. В реальной среде этот файл находился бы на удаленном сервере.

Проверим содержимое файла authorized_keys:

cat ~/.ssh/authorized_keys

В выводе вы должны увидеть ваш публичный ключ, который должен выглядеть примерно так:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ... (long string of characters) ...labex@hostname

Наконец, убедимся, что файл authorized_keys имеет правильные разрешения:

chmod 600 ~/.ssh/authorized_keys

Это устанавливает разрешения на чтение и запись только для владельца, что является требованием безопасности для файла authorized_keys.

Понимание файла конфигурации SSH

SSH позволяет настраивать его поведение с помощью файла конфигурации SSH. Это особенно полезно, когда вы регулярно подключаетесь к нескольким серверам.

Давайте создадим файл конфигурации SSH, чтобы увидеть, как он работает:

nano ~/.ssh/config

Эта команда открывает текстовый редактор nano. Добавьте следующее содержимое в файл:

## Default settings for all hosts
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

## Example server configuration
Host example
    HostName example.com
    User username
    Port 22
    IdentityFile ~/.ssh/id_rsa

В этой конфигурации:

  • ServerAliveInterval 60 отправляет сигнал о том, что соединение активно каждые 60 секунд
  • ServerAliveCountMax 3 разрывает соединение, если сервер не отвечает на 3 последовательных сигнала
  • Раздел Host example создает псевдоним, чтобы вы могли подключаться с помощью команды ssh example вместо ssh username@example.com -p 22

Чтобы сохранить файл в nano, нажмите Ctrl+O, затем Enter для подтверждения, и Ctrl+X для выхода.

Теперь установим правильные разрешения для файла конфигурации:

chmod 600 ~/.ssh/config

Это гарантирует, что только вы можете читать и записывать в этот файл, что важно для безопасности.

В реальной ситуации вы теперь сможете подключиться к серверу просто введя:

## Example for reference (Do not run this)
## ssh example

Вместо:

## Example for reference (Do not run this)
## ssh username@example.com -p 22

Файл конфигурации SSH - это мощный инструмент, который может сэкономить вам время и сделать управление множеством SSH-соединений намного проще.

Резюме

В этом практическом занятии (LabEx) вы изучили основы SSH (Secure Shell) для безопасного подключения к Linux-серверам. Вот краткий обзор того, что вы достигли:

  1. Вы поняли, что такое SSH и какова его важность для безопасных удаленных подключений
  2. Вы сгенерировали пару SSH-ключей, состоящую из приватного и публичного ключей
  3. Вы узнали о важности правильных разрешений файлов для безопасности SSH
  4. Вы настроили аутентификацию на основе SSH-ключей, настроив файл authorized_keys
  5. Вы создали файл конфигурации SSH для настройки и упрощения SSH-соединений

Эти навыки являются обязательными для всех, кто работает с Linux-системами, особенно в облачных вычислениях, системном администрировании, DevOps и кибербезопасности. SSH является стандартным методом безопасного доступа к удаленным Linux-серверам и ежедневно используется ИТ-специалистами по всему миру.

Благодаря знаниям, полученным в этом практическом занятии, вы теперь можете устанавливать безопасные соединения с Linux-серверами, что является фундаментальным навыком для дальнейшего изучения системного администрирования Linux и облачных вычислений.