Странное поведение при аутентификации по паролю SSH для каждого пользователя

Что вы используете в качестве основы для своего образа Docker (, то есть что находится в строке FROM)?

Многие базовые образы Docker начинаются с минимальной установки существующего дистрибутива (, например. alpine, debian, ubuntu, centos и т. д. ), а затем вы добавляете в него все необходимые пакеты.

Если ваш базовый образ не включает cronпо умолчанию, установите его в свой файл Dockerfile с помощью соответствующего инструмента пакета дистрибутива (, например. apt-get install cron), а затем настройте его, как в любой другой системе -, например. добавив запись в системный файл crontab, например /etc/crontab, или перетащив исполняемый скрипт в /etc/cron.d.

В некоторых случаях cronможет быть установлен, но отключен. Вам нужно изменить сценарий запуска вашего контейнера, чтобы он запускался crond. Это не то же самое, что использовать команду RUN в Dockerfile (, предназначенную для запуска команд во время процесса сборки контейнера, а не при запуске каждого контейнера ). Детали того, как это сделать, зависят от используемого базового изображения.

2
18.01.2020, 21:31
1 ответ

Если вы посмотрите на источник nix здесь , вы увидите, что они используют passwordAuthentication для установки правила PAM. Эффективно:

security.pam.services.sshd.unixAuth = <passwordAuthentication>;

Я не могу придумать, как отключить PAM в конфигурации sshd [примечание 2] , модуль nix жестко кодирует -в «UsePAM yes» вверху файла. Вместо этого мы можем переопределить этот параметр, чтобы PAM принял ваш пароль.

services.openssh.enable = true;
services.openssh.permitRootLogin = "no";
services.openssh.passwordAuthentication= false;
services.openssh.challengeResponseAuthentication = false;
services.openssh.extraConfig = "
    Match User bootstrap
    PasswordAuthentication yes
    Match All
";
security.pam.services.sshd.unixAuth = pkgs.lib.mkForce true;

Пояснение:

PAM — это служба, доступная в большинстве систем Linux, которая, помимо прочего, выполняет аутентификацию пользователей. Его можно настроить для аутентификации различными способами. Из справочника параметров NixOS:

security.pam.services.<name?>.unixAuth
   Description:   Whether users can log in with passwords defined in /etc/shadow.
   Default value: true

Строка challengeResponseAuthentication необходима для действительного предотвращения входа в систему с использованием пароля, так как challengeResponseAuthentication и passwordAuthentication относятся к двум различным режимам входа в систему на основе «пароля», и они включаются/отключаются независимо друг от друга.

Примечание :, если вы забыли использовать mkForce (или что-то подобное ), Никс будет орать на тебя:

error: The option `security.pam.services.sshd.unixAuth' has conflicting definitions, in `/nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/services/networking/ssh/sshd.nix' and `/etc/nixos/configuration.nix'.

Примечание 2:Некоторые (возможно все, параметры IDK )openssh нельзя изменить после того, как они были установлены в файле конфигурации. Последующие определения того же значения игнорируются. Таким образом, ввод «UsePAM no» внутри вашего extraConfig не имеет никакого эффекта, так как «UsePAM» уже имеет значение «yes» в верхней части конфигурации sshd _.

Примечание 3:NixOS v20.03.1619 (Мархур ), OpenSSH _8.2p1

Если у кого-то есть более конкретная информация о том, как работает конфигурация PAM, sshd или NixOS, укажите это в комментариях, и я добавлю ее в ответ.

2
28.04.2021, 23:25

Теги

Похожие вопросы