Защита виртуального сервера VDS Linux. Часть 1
После покупки виртуального сервера, первым делом необходимо его настроить и позаботится о защите VDS. В статье покажу, как правильно настроить и защитить виртуальный сервер на Linux. Погнали!
Мы будем рассматривать настройку VDS на примере дистрибутива Ubuntu, но инструкция, также актуальна для других дистрибутивов.
Сначала прочитайте инструкцию, вникните, поймите, что вам нужно, а что нет, и только после этого используйте рекомендации! Если просто скопируете и примените некоторые команды в консоли под рутом, то можете потерять доступ к серверу. Поддержка вам, разумеется, поможет и восстановит доступ, но восстановить потраченное время, вам никто не сможет.
Смена пароля пользователя root
Обычно, после покупки виртуального сервера вам должны сообщить его IP-адрес и пароль пользователя. Пароль можно найти в панели управления сервером. Обычно пароль создается генератором паролей и хранится в базе данных. Такие пароли не всегда отвечают требования. Это говорим о том, что его лучше сразу изменить.
Зайдите по SSH с правами root и введите следующую команду:
passwd
При изменении пароля символы не будут отображаться — это нормально. Введите новый пароль и нажми Enter. На данном этапе мы уже себя немного обезопасили. Теперь можно приступить к последующей настройке.
Из соображений безопасности, стоит изменять пароль минимум раз в пол года (чем чаще, тем лучше).
Есть разные стратегии обеспечения безопасности учетной записи root:
Вы создаете учетную запись пользователя с известным только вам именем, предоставляете ей возможность использовать команду sudo (чтобы вы могли редактировать файлы конфигурации и устанавливать ПО), а затем отключаете вход для пользователя root по SSH. На выходе мы получим парольную аутентификацию, но будет использована учетная запись, имя которой известно только вам. Преимущества такие: никто не взломает учетную запись root, поскольку она всегда будет выключена. Недостаток один — парольная аутентификация не настолько надежна, как аутентификация по публичному ключу.
Вторая стратегия заключается в использовании публичного ключа. Недостаток заключается в более сложной настройке, именно для конечных пользователей: им придется генерировать пару ключей, и для пользователя, который никогда этого не делал, будет сложно. Большое преимущество аутентификации по публичному ключу заключается в том, что никто не сможет сбрутить пароль и получить доступ к вашему виртуальному серверу.
Если собираетесь использовать аутентификацию по ключу, тогда можете пропустить главы 2 и 4 — не необходимости создавать дополнительную учетную запись и вносить ее в sudoers. А вот главу 3 стоит прочитать, так как хороший редактор вам очень пригодится.
Создание обычного пользователя
После покупки виртуального сервера VDS клиенту сообщают пароль root, после чего, пользователь вставляет его в профиль своего SSH-клиента. Но так поступать нельзя. Во‑первых, учетка root — это всем известное имя пользователя, и, когда хакер начнет пытаться взломать ваш сервер методом перебора, он начнет именно с учетной записи root. Учетные записи созданные вами он не знает, а root знают все. Поэтому нам нужно создать обычного пользователя, под которым вы будете работать всегда.
Создайте свою учетную запись (обязательно измените имя на свое):
adduser user passwd user
- Команда adduser добавит нового пользователя с именем user.
- Команда passwd изменит пароль новой учетной записи.
Только не стоит создавать пользователя admin, пожалуйста!
Чтобы данный пользователь мог работать с правами root, надо будет добавить его в sudoers. Для этого нужен редактор, не просто редактор, а удобный редактор!
Установка удобного редактора
Используемый подавляющим большинством провайдеров редактор по умолчанию Vi очень неудобный и требует дополнительных знаний, что может напугать начинающего пользователя.
Перед установкой ПО всегда начинайте с обновления списков пакетов. Сделать это можно с помощью команды apt update. Обновлять список пакетов надо как минимум один раз — перед первой установкой. Потом выполняют обновление по мере необходимости.
# apt update
Итак, установите любой удобный текстовый редактор, который вам нравится. Мне нравится редактор nano:
# apt install nano
Запустить отдельно можете с помощью команды nano. Находим местоположение редактора:
which nano
Как правило он находится здесь /bin/nano. Теперь, настроим его редактором по умолчанию. В последних версиях Ubuntu это делается таким образом:
update-alternatives --config editor
Теперь выберите nano из списка. Если этот способ не работает (нет команды update-alternatives), пропишите переменную окружения EDITOR:
export EDITOR=/bin/nano
Для автоматического запуска при каждом входе, отредактируйте файл .bashrc, который лежит в домашнем каталоге пользователя. Добавьте в него команду
export EDITOR=/bin/nano
Эту операцию надо проделать для каждого пользователя. Для учетной записи root домашний каталог — /root. Для учетной записи spysoftnet — /home/spysoftnet.
После этих манипуляций, все команды будут вызывать редактор nano. Одна из них — visudo.
Права администратора
Ранее мы создали обычного пользователя user. Теперь нужно превратить его в администратора, то есть предоставить возможность использовать sudo. Введите в терминале команду
visudo
Эта команда запустит текстовый редактор для изменения файла конфигурации sudoers. Найдите и раскомментируйте строчку:
wheel ALL=(ALL) ALL
Указанная строчка разрешает всем пользователям группы wheel использовать команду sudo. Если она уже раскомментирована, ничего делать не нужно. Нажмите F10 для выхода из редактора.
После этого добавьте нашего пользователя user в группу wheel:
usermod -aG wheel user
Далее отключитесь от SSH-сервера и попытайтесь войти как пользователь user с заданным ранее паролем. Обратите внимание, что, когда вы работали как пользователь root, приглашение командной строки имело вид #, теперь оно выглядит как $. Залогинившись, введите команду:
sudo bash
Если приглашение командной строки поменялось на #, теперь у вас есть права root. Такой трюк позволяет вводить команды от имени root без использования команды sudo, что, несомненно, удобнее.
Запрет входа как root по SSH
Дело осталось за малым — запретить пользователю root входить в систему по SSH. Для этого, работая уже под новым пользователем user, введите команду:
sudo mcedit /etc/ssh/sshd_config
Добавьте в конфигурационный файл сервера SSH такую строку (или раскомментируйте ее):
PermitRootLogin no

Ваш локальный компьютер просто не распознает удаленный сервер — это нормально при первом подключении. Введите yes (именно yes, а не y) и нажмите Enter. Команда ssh-copy-id найдет созданный ключ и отправит его на сервер. Содержимое ключа ~/.ssh/id_rsa.pub будет скопировано в файл ~/.ssh/authorized_keys удаленной учетной записи. Данный способ сработает, если пока еще действует аутентификация по паролю.
На этапе первоначальной настройки это обычное дело — сначала все пользователи генерируют ключевые пары и загружают на сервер свои открытые ключи, а затем закрывается вход по паролю. Но если вход по паролю уже отключен, а вам надо загрузить ключ для нового пользователя, то потребуется найти способ доставить ключ (файл id_rsa.pub) на сервер. Далее нужно перейти в каталог ~/.ssh учетной записи, для которой настраивается ключ, и поместить содержимое id_rsa.pub в конец файла authorized_keys:
cat id_rsa.pub >> authorized_keys
Но не будем строить лишние предположения и усложнять себе жизнь. Считаем, что доступ по паролю пока открыт и достаточно использовать команду ssh-copy-id для загрузки ключей на сервер. Когда открытые ключи всех пользователей загружены, можно отключить вход по паролю. Для этого откройте в любом текстовом редакторе файл /etc/ssh/sshd_config и установите в значение No директиву PasswordAuthentication:
PasswordAuthentication no
Также нужно убедиться, что три следующие директивы установлены таким образом:
PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys PermitRootLogin without-password
Первая включает аутентификацию по публичному ключу, а вторая указывает имя файла, в котором должны храниться ключи. Третья разрешает вход как root без использования пароля (по ключу).
Осталось перезагрузить SSH:
systemctl restart ssh
На стороне клиента войти по ключу на SSH-сервер можно так:
ssh -i ~/.ssh/id_rsa.pub [email protected]
Здесь мы указываем имя файла ключа, имя пользователя и имя сервера. В Windows нужно настраивать используемый вами SSH-клиент, например в Bitvise SSH Client необходимо нажать кнопку‑ссылку Client key manager на вкладке Login и в появившемся окне нажать кнопку Generate New. В окне Generate New Keypair можно просто воспользоваться кнопкой Generate. А можно дополнительно защитить ключевую пару паролем — для этого ввести пароль, подтвердить его и нажать кнопку Generate. Рекомендуется использовать парольную фразу — если во время вашего отсутствия кто‑то запустит SSH-клиент и попробует подключиться к серверу, используя ваш открытый ключ, у него ничего не получится, так как он не знает пароль.
Пароль нужен для доступа к ключевой паре только на локальном компьютере, он не передается в каком бы то ни было виде на сервер. После того как ключевая пара сгенерирована, нужно нажать кнопку Export для экспорта публичного ключа. Формат — OpenSSH. После того как вы сохраните открытый ключ в каком‑нибудь файле, загрузите этот ключ на сервер и добавьте его содержимое в файл:
~/.ssh/authorized_keys
Способов много, например можно использовать учетку, в которой уже настроена аутентификация для загрузки этого файла. Можно загрузить ключ на какой‑то сайт и на сервере скачать его с помощью команды:
wget http://адрес/имя_файла
В общем, проявите фантазию, и у вас все получится. После того как сервер «узнает» ваш ключ, в основном окне клиента выберите Initial method — publickey, а из списка Client Key — профиль, в котором вы сохранили ключ.