−25%

на годовую оплату Windows, до 31.10. К тарифам

EQVPS

Как создать sudo-пользователя на VPS и перестать работать под root

Создаём пользователя с sudo на Ubuntu или Debian, даём ему SSH-ключ, проверяем и отключаем вход под root — в таком порядке, что заблокировать себя не выйдет.

Почти каждый новый 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.

Что дальше

Варианты доступа для каждого тарифа описаны в документации по доступу. Даже Nano за $3 заслуживает отдельного пользователя — это самое дешёвое улучшение безопасности из возможных.

Частые вопросы

Почему бы не остаться под root?

Всё, что запускается от root, может сломать систему целиком, включая опечатку. К тому же боты первым делом подбирают имя 'root', и запрет входа под ним убирает самую популярную цель. Отдельный пользователь с sudo даёт паузу перед каждой привилегированной командой и журнал того, что выполнялось.

А если я себя заблокирую?

Воспользуйтесь веб-консолью в личном кабинете. Она работает, даже когда SSH сломан или файрвол вас не пускает, — можно зайти и поправить sshd_config. Именно поэтому нового пользователя проверяют до того, как закрыть сессию root.

Стоит ли разрешать sudo без пароля?

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

На Debian нет команды sudo. Почему?

Минимальные образы Debian не всегда её включают. Установите её под root командой 'apt install -y sudo', затем добавьте пользователя в группу sudo.

Какой порт SSH использовать?

Тот, что указан в личном кабинете. На тарифах с выделенным IP — порт 22 на вашем адресе, на NAT-тарифах — ваш персональный SSH-порт.

Комментарии

Пока нет комментариев. Будьте первым.

Оставить комментарий

Комментарии проходят модерацию перед публикацией.