Вопрос из обсуждения. Небольшой сервер: вход по SSH только ключами (PasswordAuthentication no), ключ RSA-4096. Администратора смутило, что sudo в сессии не спрашивает пароль, и он спросил, всё ли в порядке и нужно ли ещё что-то закрывать.
Что ответили участники (подтверждено автором).
- Запретить вход root по SSH.
PermitRootLogin noв/etc/ssh/sshd_config(илиprohibit-password, если root нужен для автоматизации только по ключу). Вход root это самая перебираемая цель, а действия из-под root не привязываются к человеку в журнале. Задания cron от root после этого работают как прежде: они не зависят от входа. - sudo без пароля это особенность образа некоторых систем (файл в
/etc/sudoers.d/сNOPASSWD). На сервере с одним администратором и входом только по ключу риск ограничен: у того, кто украл ключ, всё равно есть доступ. Но пароль наsudoзащищает от случайных команд и от сценариев, где сессию перехватили физически. УбратьNOPASSWDиз файла вsudoers.d(черезvisudo -f), задать пользователю пароль. - Алгоритм ключа.
ed25519вместо RSA-4096: короче, быстрее, без известных слабых мест, поддерживается всеми современными клиентами. Генерироватьssh-keygen -t ed25519 -a 64, добавить на сервер, убедиться во входе, удалить старый ключ изauthorized_keys.
Полный минимум для сервера с публичным адресом (sshd_config):
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 20
AllowGroups sshusers
X11Forwarding no
После правки sshd -t и systemctl reload ssh, проверка входа во второй сессии. Проверить /etc/ssh/sshd_config.d/: пакетные файлы там могут включать пароли обратно (в новых Ubuntu есть такой для cloud-init).
Что даёт больше всего. Ключи вместо паролей закрывают перебор. Запрет root и отдельные учётные записи дают трассируемость. Ограничение по адресам и fail2ban уменьшают шум. Второй фактор для sudo или SSH (pam_google_authenticator, аппаратные ключи) следующий шаг для серверов, где утечка ключа критична.
Что не надо делать. Не менять порт «для безопасности» как единственную меру; не отключать журналирование sshd; не давать NOPASSWD: ALL сервисным учётным записям (только конкретные команды).
Параметр описан в документации OpenSSH.