Вопрос или проблема
У меня есть серверная среда, для которой единственными способами входа являются SSH или локальный терминал в дата-центре. Я настроил это так, чтобы конкретный пользователь мог входить только с помощью ключа, а не пароля (что явно отключено). У этого пользователя также нет установленного пароля.
Из-за того, что этому пользователю необходимо делать на сервере, я предоставил доступ к sudo без пароля, используя (в файле sudoers):
username ALL=(ALL) NOPASSWD: ALL
Очевидно, это может быть проблемой безопасности. Мне нужно убедиться, что пользователь не может войти на сервер никакими способами, кроме SSH, используя наши защищенные SSH-ключи. Все SSH-входы очень хорошо защищены и ограничены определенным IP-адресом, так что в сочетании с входом на основе ключей это безопасно (насколько это возможно). Я хочу устранить возможность входа через наш дата-центр, чтобы убедиться, что пользователь не может войти оттуда, а только через SSH.
Как мне предотвратить эти несанкционированные попытки доступа?
Вы можете установить пароль для пользователя, состоящий из 30 и более случайных символов (некоторые из которых практически невозможно ввести), чтобы предотвратить входы, не связанные с SSH.
Хотя это не остановит пользователя от изменения пароля через SSH, а затем использования терминала дата-центра для прямого доступа.
Я всегда считал более надежным решением установить хэш пароля (в /etc/shadow) на недопустимое значение. Я обычно использую строку %%NP%%. Это эффективно отключает аутентификацию по паролю для этого пользователя и предотвращает любые попытки брутфорса пароля. Учитывая, что ни один ввод в алгоритм хеширования пароля никогда не совпадет с хэшом в файле shadow, это чрезвычайно безопасно.
Для Linux вы можете вместо (или дополнительно к) вышеуказанному установить параметры управления доступом в /etc/security/access.conf. В этом файле есть несколько примеров, которые должны удовлетворить ваши требования. Один из недостатков этого подхода в том, что вы можете очень легко заблокировать корневой доступ к входу из консоли, что является очень плохой идеей в случае чрезвычайной ситуации.
Вы можете добавить следующую строку в /etc/security/access.conf
, чтобы отключить любой локальный вход:
-:ALL:LOCAL
Замените ALL
на имя пользователя, если хотите заблокировать только одного пользователя.
Ответ или решение
Чтобы гарантировать, что доступ к вашему серверу осуществляется исключительно через SSH с использованием ключей, необходимо предпринять несколько шагов для устранения всех других методов входа, включая локальный доступ в дата-центре. Вот полное решение данной проблемы:
-
Настройка пользователя:
- Убедитесь, что у пользователя, которому требуется доступ, не установлен пароль:
sudo usermod -p '*' username
- Это установит недопустимый хэш пароля, что предотвратит вход с помощью пароля.
- Убедитесь, что у пользователя, которому требуется доступ, не установлен пароль:
-
Изменение параметров SSH:
- В файле конфигурации SSH, который обычно находится по пути
/etc/ssh/sshd_config
, убедитесь, что только ключи SSH разрешены:PasswordAuthentication no ChallengeResponseAuthentication no
- Перезапустите SSH-сервер, чтобы изменения вступили в силу:
sudo systemctl restart sshd
- В файле конфигурации SSH, который обычно находится по пути
-
Настройка контроля доступа:
- Рассмотрите возможность использования файла конфигурации
/etc/security/access.conf
, чтобы ограничить локальный доступ. Добавьте строку:-:ALL:LOCAL
- Это отключит доступ для всех пользователей через консоль. Если вы хотите ограничить доступ только для конкретного пользователя, укажите его имя вместо
ALL
.
- Рассмотрите возможность использования файла конфигурации
-
Дополнительные меры безопасности:
- Убедитесь, что root-пользователь остался с возможностью входа через консоль для устранения проблем в случае необходимости:
+:root:LOCAL
- Также можно установить брандмауэр (например,
iptables
илиufw
) для разрешения только определенных IP-адресов, с которых может быть выполнен SSH-вход.
- Убедитесь, что root-пользователь остался с возможностью входа через консоль для устранения проблем в случае необходимости:
-
Проверка конфигурации:
- После внесения всех изменений протестируйте конфигурацию, чтобы убедиться, что доступ к серверу невозможен ни через локальный терминал, ни через другие методы, кроме SSH с использованием ключей.
- Вы можете проверить статус служб и настройки с помощью:
sudo systemctl status sshd
- Разумно проверить также логи аутентификации, чтобы убедиться, что не происходят запрещенные попытки входа:
sudo tail -f /var/log/auth.log
Следуя приведенным выше шагам, вы сможете значительно повысить уровень безопасности вашего сервера, гарантируя, что доступ осуществляется только через SSH с использованием ключей, что сводит к минимуму риск несанкционированного доступа.