Почти каждый новый VPS начинается одинаково: заходите под root, ставите пару программ — и через месяц всё ещё работаете под root. Это нормально ровно до того момента, пока скопированный скрипт не удалит не тот каталог. Обычный пользователь с sudo настраивается за пять минут, и порядок действий здесь важнее самих команд: ошибётесь — и останетесь снаружи.
Вот безопасная последовательность для Ubuntu 22.04/24.04 и Debian 12.
1. Создаём пользователя
Под root:
adduser deploy
usermod -aG sudo deploy
adduser спросит пароль и необязательные данные (там можно просто жать Enter). Пароль придумайте настоящий: вы будете вводить его для sudo. Если на минимальном Debian команды нет, сначала выполните apt install -y sudo.
2. Даём ему SSH-ключ
Проще всего скопировать ключи root, сохранив правильного владельца:
rsync --archive --chown=deploy:deploy /root/.ssh /home/deploy
Если хочется вручную:
mkdir -p /home/deploy/.ssh
cp /root/.ssh/authorized_keys /home/deploy/.ssh/
chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keys
Неправильные права — классическая причина, по которой вход по ключу молча не работает. SSH игнорирует authorized_keys, в который могут писать другие пользователи.
3. Проверяем, ничего не меняя
Сессию root не закрывайте. В новом терминале:
ssh -p 22 deploy@203.0.113.10
sudo whoami
Подставьте свой IP и порт — на NAT-тарифе это ваш персональный SSH-порт из личного кабинета. Если sudo whoami выводит root, всё в порядке. Если вход не удался, у вас остаётся окно root, чтобы это исправить.
4. Отключаем вход под root
Теперь закрываем дверь. Вместо правки основного конфига создаём небольшой файл-дополнение:
cat > /etc/ssh/sshd_config.d/10-hardening.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
EOF
sshd -t && systemctl reload ssh
sshd -t сначала проверяет синтаксис. Сломанный конфиг плюс reload — ровно так люди и оказываются в консоли. PasswordAuthentication no имеет смысл только после того, как вход по ключу для нового пользователя работает, — а это вы только что проверили.
Откройте ещё один терминал и убедитесь, что root не пускают, а deploy заходит. После этого закройте старую сессию root.
5. По желанию: sudo без пароля для автоматизации
Если скрипту деплоя нужен sudo без запроса пароля, дайте ему ровно это и не больше:
visudo -f /etc/sudoers.d/deploy
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp
Честно говоря, NOPASSWD: ALL соблазнителен, но тогда украденный ключ равен root. Ограничьте правило командами, которые реально выполняет автоматизация.
Если что-то пошло не так
Веб-консоль в личном кабинете не зависит ни от SSH, ни от файрвола. Зайдите через неё, поправьте файл в /etc/ssh/sshd_config.d/, сделайте reload — готово. Весь процесс восстановления мы разобрали в статье как вернуть доступ к заблокированному VPS.
Что дальше
- Полностью перейдите на вход по ключам: аутентификация по SSH-ключу.
- Приглушите шум от перебора паролей: fail2ban.
- Пройдитесь по остальным основам с чек-листом безопасности нового VPS.
Варианты доступа для каждого тарифа описаны в документации по доступу. Даже Nano за $3 заслуживает отдельного пользователя — это самое дешёвое улучшение безопасности из возможных.
Комментарии
Пока нет комментариев. Будьте первым.