Уже несколько лет пользуюсь услугой VPS
от разных провайдеров. Но недавно понадобилось собрать кластер VPS
для микросервисной архитектуры. Первый вопрос - что делать с новоиспеченной VPS
? Разберем в статье.
Не реклама, этот текст не оплачен.
Я некоторое время искал дешевые VPS
, требования к безопасности и надежности были малые. Долгое время пользуюсь firstbyte.ru реально дешевые и надежные VPS
, безопасность еще не удалось протестировать. ЛК не такой красивый как у гигантов, но со своими функциями справляется. Пока доволен.
$ sudo apt update
$ sudo apt upgrade
Меняем имя хоста на нужное:
$ sudo nano /etc/hostname
Нужно будет перезагрузить чтобы имя хоста поменялось.
Меняем пароль root
пользователя (чтобы тот который в панеле был неактуален, а самый актуальный был только у нас):
$ sudo passwd root
Пароль желательно не забывать, но если вдруг забуем тогда зайти можно через VNC
, которую предоставляет хостер, неудобно, но базовый минимум можно сделать.
Многие действия не требуют root
прав, поэтому создадим нового пользователя и предоставим ему права суперпользовтаеля через sudo
:
$ sudo adduser username
$ sudo usermod -aG sudo username
Желательно задать пароль для пользователя, так будет дополнительное препятствие для злоумышленика, и стоп-сигнал при совершинии
sudo
действий.
Поменять пароль пользователю можно так:
$ sudo passwd username
Переключимся на нашего нового пользователя:
$ sudo su username
Заранее на клиентской машине нужно подготовить ssh
ключ для доступа на сервер:
$ ssh-keygen
Программа задаст нужные вопросы, в том числе путь до файла ключа. В итоге будет сгенерировано 2 ключа по указанному пути:
.pub
Теперь предоставим пользователю доступ по ssh
, добавив публичный ключ на VPS
:
# создаем директорию если ее еще не было
$ [ -d ~/.ssh] || mkdir ~/.ssh -m 700
# открываем файл с ключами пользователя
$ nano ~/.ssh/authorized_keys
Вставляем при помощи Ctrl+Shift+V
ключ, затем сохраняем Ctrl+S
и закрываем Ctrl+X
.
ssh
ключей для одного и того же пользователя может быть несколько.
Заходим на VPS
:
$ ssh -i ~/.ssh/keyname username@x.x.x.x
$ sudo userdel -rf username
Флаги:
r
- удалить домашнуюю директироюf
- принудительное удаление пользователя (даже с активной сессией) и уничтожение всех запущенных им процессов, либо так:$ sudo killall -u username
Если в имени пользователя есть кириллица, то для удаления такого пользователя для начала нужно поправить его имя в следующих файлах:
/etc/shadow
/etc/passwd
Предлагаю посмотреть что происходит в логах ssh
:
$ sudo journalctl _SYSTEMD_UNIT=ssh.service -xe
В логах
ssh
множество записей о неудачных попытка входа, с разных адресов, и кстати для разных пользователей, ноroot
самый популярный. Это сканеры уязвимостей. Когда дыра будет найдена или подобран пароль, тогда третьей лицо получит доступ на сервер. Это плохо.
Открываем конфиг ssh
:
$ sudo nano /etc/ssh/sshd_config
Здесь мы должны найти (Ctrl+W
) и указать следующие значения директивам:
PasswordAuthentication no
- запрещаем вход по паролюPermitRootLogin no
- запрещает вход root
Выполнять sudo
действия необходимо от ранее созданного пользователя username
, например переключившись на пользователя root
:
$ sudo su root
Сохраним файл (Ctrl+S
) перезагрузим демон ssh
чтобы изменения вступили в силу:
$ sudo systemctl restart ssh
При входе по ssh
можно наблюдать такое сообщение:
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-154-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Last login: Wed Jan 25 11:42:35 2023 from x.x.x.x
Эта информация выводится при помощи bash
файлов, которые находятся по пути /etc/update-motd.d
, (файлы можно удалить).
Это можно заменить на что-то более информативное (здесь хороший набор) и/или приятное для глаз. Например можно воспользоваться сервисами генераторами ASCII
баннеров этим или этим.
Можно сделать что-то типа такого:
Базовая настройка завершена, оказывается не так уж и сложно, только нудно делать это руками на каждой машине в кластере, можно посмотреть в сторону Ansible.
А что дальше - зависит от потребностей, можно например настроить VPN
.