27 lines
1.8 KiB
Markdown
27 lines
1.8 KiB
Markdown
# Запретить SSH-вход под root
|
||
|
||
**Приоритет:** средний
|
||
|
||
`playbook-system.yml:34` переопределяет дефолт роли на
|
||
`security_ssh_permit_root_login: "yes"` → `PermitRootLogin yes`. Это управляет
|
||
**только** тем, пускать ли root по SSH, и не имеет отношения к паролю: вход по
|
||
паролю уже запрещён отдельной директивой `PasswordAuthentication no` (дефолт роли
|
||
`security_ssh_password_authentication: "no"`, не переопределён). То есть брутфорса
|
||
пароля тут нет — остаётся то, что root **явно разрешён к входу по ключу**.
|
||
|
||
Почему всё равно стоит закрыть:
|
||
|
||
- **Наименьшие привилегии.** Ansible ходит под непривилегированным `major` с
|
||
`become` (`production.yml`/`timeweb.yml`), root-логин для деплоя не нужен вовсе.
|
||
- **Defense-in-depth.** Если `PasswordAuthentication` когда-нибудь вернётся в
|
||
`yes` (правка, `Match`-блок, чужая роль), `PermitRootLogin yes` тут же откроет
|
||
root по паролю. `prohibit-password` держит root key-only независимо.
|
||
|
||
Рекомендация: поставить `"no"` (root по SSH недоступен, деплой под `major` не
|
||
страдает). Если нужен аварийный вход root по ключу — `"prohibit-password"`.
|
||
|
||
Из sec-ревью (fable, 2026-07-13); мотивировка уточнена после проверки конфига.
|
||
|
||
Связано: playbook-system.yml, production.yml, timeweb.yml,
|
||
galaxy.roles/geerlingguy.security.
|