Довольно часто может понадобиться получить доступ к удаленному компьютеру или серверу через интернет. В случае с персональным компьютером, это может понадобиться для срочного решения какой-либо проблемы, а в случае с сервером это вообще очень распространенная практика. В Linux наиболее часто для решения таких задач используется протокол ssh.
Служба ssh позволяет получить доступ к терминалу удаленного компьютера и выполнить там все необходимые вам команды. При своей простоте она достаточно безопасна, чтобы использоваться для решения серьезных коммерческих задач, так и задач обычных пользователей. В этой статье мы рассмотрим как выполняется установка ssh Ubuntu 16.04, а также поговорим о начальной настройке ssh сервера.
SSH или Secure Shell — это протокол безопасного доступа из одного компьютера к другому по сети. У протокола SSH очень много возможностей. Вы можете создавать защищенные соединения между компьютерами, открывать командную строку на удаленном компьютере, запускать графические программы, передавать файлы и организовывать частные сети.
За поддержку протокола SSH в Linux отвечает набор программного обеспечения OpenSSH. Это открытая реализация этого протокола, которая предоставляет все необходимые возможности. В состав пакета OpenSSH входят утилиты для установки соединения, передачи файлов, а также сам ssh сервер.
Установить ssh на Ubuntu будет очень просто, программа считается стандартной и используется почти везде. Хотя по умолчанию в дистрибутиве ее нет, но зато она есть в официальных репозиториях.
Поэтому для установки откройте терминал с помощью сочетания клавиш Ctrl+Alt+T и выполните команду:
Будет загружено несколько пакетов, а когда установка ssh сервера Ubuntu завершится, программа будет готова к работе. Если вы хотите чтобы служба запускалась автоматически нужно добавить его в автозагрузку. Поэтому чтобы включить ssh Ubuntu 16.04 выполните:
Если затем вы захотите удалить службу из автозагрузки, используйте команду disable:
Что касается клиента ssh, то он уже установлен в системе по умолчанию. Сейчас вы можете попробовать подключиться к локальному ssh серверу просто набрав:
В одной из предыдущих статей мы рассматривали что означает адрес 0.0.0.0, сейчас вы можете убедиться что в пределах этой машины он значит локальный адрес:
Точно таким способом вы можете получить ssh доступ ubuntu к любому другому компьютеру из сети. Для этого достаточно указать вместо localhost его ip адрес и имя пользователя в таком формате:
$ sshимя_пользователя@ip_адрес
С параметрами по умолчанию сервер SSH не очень безопасен поэтому перед тем, как программа будет готова к полноценному использованию ее нужно немного настроить. Все настройки сервера SSH хранятся в конфигурационном файле sshd_config, который находится в папке /etc/ssh.
Перед тем как вносить изменения в этот конфигурационный файл рекомендуется сделать его резервную копию, для этого можете использовать такую команду:
Дальше вы можете перейти к настройке конфигурационного файла:
Первым делом желательно сменить порт, на котором работает ssh, возможный злоумышленник не знал включен ли у вас этот сервис. Найдите в конфигурационном файле строчку Port и замените ее значение на любое число, например, Port 2222:
По умолчанию вход от имени суперпользователя включен, рекомендуется отключить такую возможность. Для этого найдите строчку PermitRootLogin и замените ее значение на no:
Чтобы разрешить аутентификацию по ключу, а не по паролю найдите строку PubkeyAuthentication и убедитесь, что ее значение yes.
После того как все настройки будут завершены, сохраните изменения нажав :w и перезапустите службу ssd:
Более подробно про настройку и использование различных тонкостей ssh рассказано в статье как использовать ssh.
Если вы изменили порт, то при подключении в клиенте тоже нужно указать новый порт, так как по умолчанию будет использоваться 22, например:
К тому же, если на компьютере установлен и настроен брандмауэр, то в нем тоже нужно разрешить доступ к новому порту ssh, для этого выполните:
Даже если служба ssh находится на порту по умолчанию, его тоже нужно открыть в брандмауэре если вы собираетесь подключаться к компьютеру через интернет:
Настройка ssh Ubuntu 16.04 полностью завершена.
Теперь, когда установка ssh Ubuntu 16.04 завершена, вы можете получить удаленный доступ к своему компьютеру через интернет и быть уверенными что он находится в безопасности. Если у вас остались вопросы, спрашивайте в комментариях.
На завершение видео, где подробно рассказано о том, что такое ssh:
Установка и настройка SSH — Ubuntu
«Вы начинающий админ и хотите, например, поднять свой веб сервер. Идете в интернет, находите подходящую Вам статью и вперед! Давайте обратим внимание на один Важный момент, практически во всех этих статьях дается минимум команд для запуска необходимых служб и сервисов. Хорошо — заработало! А все ли Вы сделали для того, чтобы работать не перестало? Используете SSH через интернет? Почему никто в своих статьях не освещает проблем, которые могут получить новоиспеченные админы с таким подходом к настройке сервера, ведь именно для новичков и написаны статьи. Для того, чтобы Вы вовремя обратили внимание на вопрос безопасности, я обязательно буду делать пометки и ссылки в своих статьях на данный материал. Предупрежден – вооружен! «
Итак, SSH (secure shell) – безопасный сервер терминалов, предоставляет удаленный доступ к системе. Безопасный, т.к. весь трафик между клиентом и сервером шифруется. А так ли он безопасен с настройками по умолчанию? Если Вы имеете сервер с возможностью подключения по SSH через интернет, обязательно найдутся желающие подобрать пароль для входа. Думаю, не стоит объяснять, что возможный злоумышленник сможет получить практически неограниченный доступ к системе.
Во всех современных дистрибутивах Ubuntu разработчики пытаются повысить уровень безопасности при стандартных параметрах, но этого не всегда бывает достаточно, а иногда мы сами выбираем неправильную концепцию и совершаем ошибки.
Установка SSH сервера в Ubuntu.
Установка SSH сервера в Ubuntu выполняется следующей командой:
sudo apt-get install ssh openssh-server
После установки SSH сервер автоматически прописывается в автозагрузку. Управлять его запуском, остановкой или перезапуском можно с помощью команд:
sudo service ssh stop | start | restart
Основной файл конфигурации SSH — сервера — файл /etc/ssh/sshd_config, доступный для чтения или редактирования только супер пользователю (root). Для применения изменений необходимо перезапустить ssh-сервер .
Настройки безопасности SSH сервера.
Протокол по умолчанию.
Опять же в современных дистрибутивах по умолчанию реализуется протокол SSH2. Если в Вашем случае указано нечто вроде:
Protocol 2,1
Необходимо оставить только 2:
Protocol 2
Использование небезопасного протокола SSH1 не рекомендуется.
Авторизация супер пользователя root.
Правильнее будет авторизоваться под пользовательской учетной записью и повышать свои привилегии с помощью команды sudo su, либо использовать sudo.
По умолчанию в последних релизах Ubuntu, доступ пользователя root через SSH ограничен.
PermitRootLogin without-password
Позволяет авторизоваться пользователю root по ключам, при этом авторизацию по паролю запрещает.
Я рекомендую Вам изменить параметр на no:
PermitRootLogin no
С такими настройками пользователь root не сможет авторизоваться по SSH.
Также данный параметр будет удобен, если с сервером работает несколько администраторов под учетной записью супер пользователя. Администраторы будут заходить под своей учетной записью и только после этого получать привилегии root, это намного облегчит аудит сервера и действий, которые выполняют администраторы.
Еще немного о root в Ubuntu, созданный по умолчанию пользователь (при установке системы) может решать все административные задачи через sudo. Активировать пользователя root для доступа к системе мне кажется не обоснованным решением.
Предоставление доступа только указанным пользователям или группам.
Представим, что на Вашем сервере есть определенное количество пользователей, но предоставлять доступ по SSH необходимо только некоторым. Так давайте ограничим круг пользователей имеющих доступ:
AllowUsers user1 user2
Также Вы можете указать необходимую группу, например administrators:
AllowGroups administrators
Запретите доступ с «пустыми» паролями.
Вы должны явно запретить удаленный доступ с использованием пустых паролей:
PermitEmptyPasswords no
Изменение стандартного порта.
SSH по умолчанию работает на 22 порту. Соответственно основная масса атак будет направлена именно на этот порт, далее используя подбор имени пользователя и пароля, будут происходить попытки получить доступ к серверу. Мы уже исключили самое известное имя пользователя из базы возможного злоумышленника (root) и разрешили доступ только определенным пользователям, теперь сократим количество возможных атак (боты, ищущие уязвимости на стандартных портах), изменив порт, используемый по умолчанию (новый порт должен быть свободен!).
Port 22
Изменим, к примеру, на:
Port 2220
Стоит понимать, что изменение порта никак не поможет Вам при целенаправленной атаке brute-force (подбор пароля). Злоумышленник может, например, пройтись сканером портов по IP адресу, на котором распложен Ваш сервер, в результате он получит список всех открытых портов.
Также помните, что теперь для подключения к серверу помимо IP адреса Вам нужно указать и номер порта.
Авторизация на основе SSH2 RSA – ключей.
Действительно рабочим вариантом защиты от перебора является использование для аутентификации SSH2 RSA-ключей. При таком способе пользователь генерирует пару ключей, из которой один ключ является секретным, а другой публичным. Публичный ключ находится на сервере и служит для проверки идентичности пользователя. Плюс ко всему связку ключ – публичный ключ можно обезопасить парольной фразой, повысив криптостойкость авторизации. Логика проста, не используете для авторизации пароль – подбирать нечего!
Заходим в систему под тем пользователем, которому будем настраивать доступ по SSH к серверу.
Сгенерируем RSA ключ длинной 4096, Вам будет предложено указать место хранения, оставим по умолчанию (/home/UserName/.ssh/id_rsa), также будет предложено задать пароль на создаваемый ключ. Если пароль не указывать, то во время аутентификации на сервере по сертификату вводить его не придется, это менее надежно. Рекомендую Вам указать пароль:
ssh-keygen -t rsa -b 4096
В указанной директории будет создана пара ключей:
id_rsa.pub — публичный
id_rsa – приватный
Проверим, созданы ли файлы:
cd ~/.ssh ls -al
Установим права на папку и файлы:
sudo chmod 0700 ~/.ssh/ sudo chmod 0600 ~/.ssh/id*
Приватный ключ необходимо передать клиенту защищенным образом и удалить с сервера во избежание компрометации ключей.
Ключ id_rsa передается клиенту:
/home/UserName/.ssh/id_rsa
После чего удаляется с сервера:
sudo rm /home/UserName/.ssh/id_rsa
Создадим файл authorized_keys (находимся в системе под тем же пользователем “UserName”, для которого создавался сертификат) и скопируем в него содержимое файла id_rsa.pub, определим владельца и выставим права на директорию и файл.
cd ~/.ssh sudo touch authorized_keys sudo chown UserName:UserName authorized_keys sudo cat id_rsa.pub >> authorized_keys sudo chmod 0700 ~/.ssh/ sudo chmod 0600 ~/.ssh/authorized_keys
Проверим, что текст скопировался:
sudo cat /home/UserName/.ssh/authorized_keys
Если текст успешно скопирован, можно удалить публичный ключ:
sudo rm /home/UserName/.ssh/id_rsa.pub
Включаем авторизацию по ключам:
sudo nano /etc/ssh/sshd_config
Необходимо раскоментировать строки и выставить параметры следующим образом:
# разрешаем авторизацию при помощи ключей PubkeyAuthentication yes # Путь, где будут находиться ключи, с которыми можно соединяться для каждого пользователя свой файл в его директории. AuthorizedKeysFile %h/.ssh/authorized_keys
Перезапустим SSH сервер:
sudo service ssh restart
После того, как Вы сформировали сертификаты для всех пользователей (кому необходим доступ по SSH), рекомендую Вам отключить аутентификацию по паролю, отредактировав все тот же файл /etc/ssh/sshd_config
Внимание перед отключением аутентификации по паролю убедитесь в возможности доступа по ключу
PasswordAuthentication no
- Подключение к SSH серверу через PuTTY, используя сертификат.
-
Для начала необходимо выполнить конвертацию приватного ключа (ключ пользователя UserName), который ранее мы забрали с сервера.
Для этого нам потребуется программа PuTTYgen.
Загружаем файл приватного ключа «Conversions — Import Key«.
Если Вы установили, пароль вводим его.
Выбираем «Save private key» и сохраняем полученный ppk файл. Хранить его стоит в месте, где он не сможет быть скомпрометирован.
Открываем программу PuTTY и настраиваем соединение:
Session — Host Name (or IP Address) IP адрес хоста, на котором настраивался SSH Сервер;
Session — Port Порт, указанный в настройках SSH сервера;
Session — SavedSession Название сессии (соединения);
Connection — Data — Autologin username Имя пользователя;
Connection — SSH — Auth — Private key file for authentication Путь к ppk файлу;
Session — Save Сохраняем сессию;
Session — Saved Session (выбираем нашу сессию) — Load — Open — Сессия должна запуститься;
Вводим пароль и нажимаем Enter, после этого попадаем в систему.
В случае если сертификат пользователя был скомпрометирован, выполняем отзыв сертификата и запрещаем доступ пользователю.
Для того, чтобы закрыть доступ пользователю UserName к Хосту по сертификату, перейдем в папку где хранится его сертификат:
cd ~/.ssh
Удалим файл его публичного сертификат authorized_key с сервера OpenSSH, если же вы неосмотрительно не удаляли файлы id_rsa.pub и id_rsa, удалите их. Просматриваем содержимое каталога коммандой «ls».
Удаляем необходимые файлы:
sudo rm authorized_key id_rsa.pub id_rsa
Также хорошим тоном будет ограничение времени на ввод данных для авторизации, ну и таймаут при отсутствии активности.
Изменение времени ожидания авторизации.
При авторизации по SSH у Вас есть 2 минуты, чтобы ввести логин и пароль. Если вы этого не сделаете, то соединение с сервером будет разорвано.
В примере ниже это время ограничено до 30 секунд:
LoginGraceTime 30
Таймаут при отсутствии активности соединения.
Автоматическое отключение соединения после определенного времени, в течение которого зафиксировано бездействие в консоли.
ClientAliveCountMax – Параметр указывает на полное количество сообщений, отсылаемых ssh-сервером для распознавания активности ssh-клиента. По умолчанию это 3.
ClientAliveInterval – Параметр указывает на время ожидания в секундах. По истечению ssh-сервер отошлет сообщение-запрос клиенту. По умолчанию значение этого параметра – 0. Сервер не отсылает сообщение для проверки.
Отключение ssh-клиента автоматически после 5 минут (300 секунд):
ClientAliveInterval 300 ClientAliveCountMax 0
Раздел:Unix сервераTop
Сегодня рассмотрим, как поднять SSH-сервер в Ubuntu и подобных ей операционных системах. Обзорную статью о протоколе SSH можно прочитать по этой ссылке, в ней же приведен пример подключения по SSH через популярный клиент PuTTY. Но вернемся к SSH-серверу.
В Ubuntu и родственных дистрибутивах используется свободная реализация клиента и сервера SSH — OpenSSH. И клиент, и сервер устанавливаются общей командой:
sudo apt-get install ssh
Как правило, SSH-клиент уже установлен в системе, поэтому данная команда доустановит SSH-сервер.
SSH-сервер прописывается в автозагрузку. Если нужно запустить сервер вручную, используйте команду:
sudo service ssh start
Для остановки SSH-сервера используйте команду:
sudo service ssh stop
Для перезапуска:
sudo service ssh restart
Настройки SSH-сервера лежат в файле /etc/ssh/sshd_config, который доступен для чтения и редактирования только суперпользователю.
Повышаем безопасность SSH-сервера
В случае с SSH-сервером к безопасности подключений надо относиться внимательно, так как в противном случае потенциальный злоумышленник сможет получить практически полный доступ к системе.
Для начала будет не лишним сменить порт для подключения. Стандартом является порт 22, многие сетевые сканеры пытаются соединиться с устройствами по данному порту и получить доступ через перебор логинов и паролей. Если на сервере используется несколько сетевых интерфейсов, можно задать используемый порт отдельно для каждого, либо задать общую настройку для всех.
Если нужно задать общую настройку используемого порта, используйте директиву Port:
Port 2002
Если нужно задать используемый порт для каждого интерфейса в отдельности, используйте директиву ListenAddress:
ListenAddress 192.168.0.1:2003ListenAddress 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.
В Linux сгенерировать ключи можно прямо в терминале. Для этого введите команду
ssh-keygen -t rsa
Терминал выведет следующее сообщение:
Нажмите Enter. Далее будет предложено задать кодовую фразу для дополнительной защиты SSH-подключения. Этот шаг можно пропустить.
При ответе на следующий вопрос тоже нажмите Enter.
После этого пара ключей будет создана, а на экран будет выведено сообщение следующего характера:
Для просмотра приватного ключа введите команду:
cat ~/.ssh/id_rsa
Ключ будет выведен в окне терминала.
Ну а для просмотра публичного ключа введите:
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-серверу. По умолчанию не указан. Если занести в этот список группы (группу), то подключаться смогут только пользователи, входящие в эти группы (группу).
Используемые источники:
- https://losst.ru/ustanovka-ssh-ubuntu-16-04
- https://a-rm.ru/materials/unix-servera/ustanovka-i-nastroyka-ssh-ubuntu
- https://webistore.ru/administrirovaniye-unix/ustanovka-i-nastrojka-ssh-servera-v-ubuntu/