Установка и настройка SSH-сервера в Ubuntu

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

В Ubuntu и родственных дистрибутивах используется свободная реализация клиента и сервера SSH — OpenSSH. И клиент, и сервер устанавливаются общей командой:

sudo apt-get install ssh

Как правило, SSH-клиент уже установлен в системе, поэтому данная команда доустановит SSH-сервер.

Установка и настройка SSH-сервера в Ubuntu
Установка пакетов SSH-сервера.

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

sudo service ssh start

Для остановки SSH-сервера используйте команду:

sudo service ssh stop

Для перезапуска:

sudo service ssh restart

Настройки SSH-сервера лежат в файле /etc/ssh/sshd_config, который доступен для чтения и редактирования только суперпользователю.

Установка и настройка SSH-сервера в Ubuntu
Пример файла /etc/ssh/sshd_config.

Повышаем безопасность SSH-сервера

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

Для начала будет не лишним сменить порт для подключения. Стандартом является порт 22, многие сетевые сканеры пытаются соединиться с устройствами по данному порту и получить доступ через перебор логинов и паролей. Если на сервере используется несколько сетевых интерфейсов, можно задать используемый порт отдельно для каждого, либо задать общую настройку для всех.

Если нужно задать общую настройку используемого порта, используйте директиву Port:

Port 2002

Если нужно задать используемый порт для каждого интерфейса в отдельности, используйте директиву ListenAddress:

ListenAddress 192.168.0.1:2003
ListenAddress 192.168.1.1:2004

Кстати, про IP-адреса. По умолчанию SSH-сервер в Ubuntu настроен на использование IPv4 и IPv6. Определяется это директивой AddressFamily.

Разрешены IPv4 и IPv6:

AddressFamily any

Разрешены только IPv4:

AddressFamily inet

Разрешены только IPv6:

AddressFamily inet6

Следующим разумным шагом для повышения безопасности SSH-подключений будет отключение удаленного доступа для суперпользователя. По умолчанию доступ суперпользователю открыт только по ключу, а по паролю закрыт. Определяется это директивой PermitRootLogin, которая выставлена в значении prohibit-password (в OpenSSH до версии 7.0 without-password).

Для отключения суперпользователю доступа по SSH выставьте директиву как:

PermitRootLogin no

Ещё есть особый режим подключения суперпользователя, когда такой пользователь можно зайти на SSH-сервер, пользуясь публичным ключом, но только если передаст необходимую к исполнению команду. Для этого задайте следующее значение:

PermitRootLogin forced-commands-only

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

PermitRootLogin yes

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

Наверное, вы уже заметили, что в материалах про SSH упоминаются разные способы аутентификации (по логину/паролю и по ключу). Разберем оба способа подробнее.

Аутентификация через логин и пароль упрощает подключение к серверу новых пользователей, но является не слишком безопасным, поскольку пароль можно подобрать (а пользователь может задать очень простой пароль, чтобы ему его было проще запомнить). По умолчанию аутентификация по паролю включена. Отвечает за это директива PasswordAuthentication.

Аутентификация по логину/паролю разрешена:

PasswordAuthentication yes

Аутентификация по логину/паролю запрещена:

PasswordAuthentication no

Если вы всё таки хотите использовать парольную аутентификацию, хотя бы отключите возможно зайти с пустым паролем:

PermitEmptyPasswords no

Более безопасным способом подключения является аутентификация на основе SSH2 RSA-ключей. Этот способ подразумевает генерацию пользователем на своей стороне пары ключей — приватного и публичного. Публичный ключ копируется на сервер и служит для проверки идентичности пользователя.

Сам способ генерации зависит от используемого пользователем SSH-клиента. В том же PuTTY есть утилита PuTTY Key Generator (puttygen.exe), которая позволяет генерировать различные ключи, а не только RSA. О ней можете прочитать в этой статье. Но это что касается Windows.

Установка и настройка SSH-сервера в Ubuntu
Интерфейс PuTTY Key Generator.

В Linux сгенерировать ключи можно прямо в терминале. Для этого введите команду

ssh-keygen -t rsa

Терминал выведет следующее сообщение:

Установка и настройка SSH-сервера в Ubuntu

Нажмите Enter. Далее будет предложено задать кодовую фразу для дополнительной защиты SSH-подключения. Этот шаг можно пропустить.

Установка и настройка SSH-сервера в Ubuntu

При ответе на следующий вопрос тоже нажмите Enter.

После этого пара ключей будет создана, а на экран будет выведено сообщение следующего характера:

Установка и настройка SSH-сервера в Ubuntu

Для просмотра приватного ключа введите команду:

cat ~/.ssh/id_rsa

Ключ будет выведен в окне терминала.

Установка и настройка SSH-сервера в Ubuntu

Ну а для просмотра публичного ключа введите:

cat ~/.ssh/id_rsa.pub

Вернемся к настройке SSH-сервера в Ubuntu. Первым делом отметим, что OpenSSH умеет работать как с протоколом SSH-1, так и с SSH-2. И оба поддерживают RSA-ключи. Но SSH-1 ныне считается небезопасным протоколом, поэтому рекомендуется использовать только SSH-2. Сделать это можно через следующую директиву:

Protocol 2

За включение или выключение аутентификации по паре RSA-ключей отвечает директива PubkeyAuthentication. Для включения аутентификации задайте:

PubkeyAuthentication yes

Кроме того, нужно указать, где будут храниться публичные ключи пользователей. Для этого используется специальный файл authorized_keys. Можно использовать общий файл для всех ключей пользователей или задать по отдельному файлу для каждого пользователя. Второй способ, естественно, является более безопасным. Задать расположение файла с ключами можно директивой AuthorizedKeysFile.

Например, если мы используем общий файл для хранения всех ключей, то выглядеть это будет так:

AuthorizedKeysFile /etc/ssh/authorized_keys

Если нужно задать отдельный файл для каждого пользователя, используйте:

AuthorizedKeysFile %h/.ssh/authorized_keys

Скорее всего, указанные файлы и каталоги не были созданы заранее в Вашей системе, создайте их и скопируйте туда публичные ключи (содержимое файла id_rsa.pub, который мы создали выше при генерации ключей) командой:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

где user и server это имена пользователя и сервера соответственно.

Если вы уже изменили порт для подключения по SSH, слегка модифицируйте команду:

ssh-copy-id '-p 2002 -i ~/.ssh/id_rsa.pub user@server

Естественно, вместо 2002 может быть и другой порт.

В старых версиях OpenSSH нет скрипта ssh-copy-id, поэтому можно использовать другую команду:

cat ~/.ssh/id_rsa.pub | ssh user@server 'cat >> ~/.ssh/authorized_keys'

Если вы подключаетесь с клиентской машины с Windows, то скопировать публичный ключ на сервер можно, например, через любой FTP-клиент (SFTP-клиент).

Кстати, про SFTP. Как известно, SSH-серверы позволяют передавать файлы через SFTP. И OpenSSH тут не исключение. Для включения SFTP добавьте в файл sshd_config строку:

Subsystem sftp /usr/lib/openssh/sftp-server

В конце поговорим о разграничении доступа к серверу через SSH. Допустим, сервером пользуется большое число пользователей, но далеко не всем из них нужно предоставлять доступ по SSH. Для разграничения доступа используются специальные директивы: DenyUsers, AllowUsers, DenyGroups, и AllowGroups. Проверка этих директив осуществляется именно в той последовательности, в какой они здесь перечислены. В директивах принимаются только имена пользователей и групп, UserID не распознаются.

DenyUsers — список пользователей, которым нельзя подключаться к SSH-серверу. По умолчанию не указан.

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

DenyGroups — список групп пользователей, которым нельзя подключаться к SSH-серверу. По умолчанию не указан.

AllowGroups — список групп пользователей, которым можно подключаться к SSH-серверу. По умолчанию не указан. Если занести в этот список группы (группу), то подключаться смогут только пользователи, входящие в эти группы (группу).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *