Разрешить root для входа через ssh только с аутентификацией на основе ключей

49

У меня есть некоторые сомнения по поводу некоторых конфигураций сервера SSH /etc/ssh/sshd_config. Я хочу следующее поведение:

  1. Аутентификация с открытым ключом - это единственный способ аутентификации как root (без аутентификации по паролю и т. Д.)
  2. Обычные пользователи могут использовать оба (пароль и аутентификация с открытым ключом)

Если я поставлю PasswordAuthentication noсвою первую точку удовлетворен, но не второй. Есть способ установить PasswordAuthentication noтолько для root?

mavillan
источник

Ответы:

79

Вы можете сделать это с помощью PermitRootLoginдирективы. Из sshd_configсправочной страницы:

Указывает, может ли root войти в систему с помощью ssh (1). Аргумент должен быть «да», «без пароля», «только для принудительных команд» или «нет». По умолчанию «да».

Если для этого параметра установлено значение «без пароля», аутентификация по паролю отключена для пользователя root.

Следующее выполнит то, что вы хотите:

PasswordAuthentication yes
PermitRootLogin without-password
jordanm
источник
1
Я попробовал это в Debian и проверил service ssh restartна сервере, а затем на клиенте, с которым пытался подключиться без ключа ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no root@hostи действительно не смог войти с паролем, но смог с ключом для пользователя root.
Бастиан
Да, но если вы просто сделаете это вместо этого, то вы можете войти с паролем: ssh -o PreferredAuthentications=password root@hostне особо безопасный imho
geoidesic
2
В 2019 году это «PermitRootLogin prohibit-password», старый без пароля является устаревшим псевдонимом.
vbraun
10

Вы можете использовать Matchблоки для настройки некоторых параметров аутентификации пользователя или группы, IP-адреса или имени хоста источника соединения.

PasswordAuthentication yes
PermitRootLogin yes

Match User root
PasswordAuthentication no
Жиль "ТАК - перестань быть злым"
источник
3
Мне удалось заблокировать меня с моего сервера SSH, делая это.
Ричард Метцлер
Это кажется лучшим способом, если вы не хотите, чтобы запрос пароля отображался для пользователя root.
Лев
Это также заблокировало меня. Я думаю, что это может быть в неправильном порядке ...
Гэри
4

У меня есть еще более строгий подход к предоставлению привилегий root на моем сервере, что может быть интересно для таких параноиков, как я. Будьте осторожны в том, что вы делаете и в каком порядке, иначе вы можете получить систему, к которой у вас нет прав root.

  • Создайте определенную группу sugroup, членам которой будет разрешено стать пользователем root и разрешить только аутентификацию по ключу для этой группы, поместив следующие строки в конце sshd_confid:

Match Group sugroup

PasswordAuthentication no

  • Поместите команду auth required pam_wheel.so group=sugroupв /etc/pam.d/su. Это может быть уже там, и вам просто нужно раскомментировать. Это запрещает root-доступ всем пользователям, не входящим в sugroup.
  • Выберите надежный пароль root :)
  • Проверьте, работает ли ваш новый метод аутентификации, и только если:
  • Запретить прямой вход в систему через ssh с помощью PermitRootLogin noin /etc/ssh/sshd_config.

При использовании этой конфигурации необходимо использовать ключ аутентификации и пароль, чтобы стать пользователем root. Я настроил свой сервер следующим образом, так как я предпочитаю не иметь прямого корневого доступа через ssh, независимо от способа аутентификации.

xwst
источник