6

Я пытаюсь настроить sshd, чтобы сделать некоторые интересные вещи на выделенном сервере. (То есть, не беспокойтесь о том, почему я задаю такой странный вопрос; я просто экспериментирую, чтобы понять, как я могу злоупотреблять OpenSSH.)

Я бы хотел, чтобы пользователь мог войти в систему под вымышленным именем. Например:

$ ssh joeschmoe@crazysshserver.com

где в системе нет пользователя (UNIX) с именем joeschmoe .

Когда они подключатся, я бы хотел, чтобы они вошли в систему как пользователь, который существует, с именем guest , и что-то в среде настроено на joeschmoe так что я знаю, как они вошли в систему.

Можно ли разделить понятия UNIX-пользователь и ssh-пользователь?

3 ответа3

2

Я работал над довольно похожим случаем. В моем случае я решил реализовать это как аутентификацию на основе хоста. Вам просто нужно понять, где вы должны создать пользователя, и лучшее место - вызов getpwnam, реализованный в переключателе служб имен. По моему мнению, невозможно реализовать создание пользователя в PAM, я думаю, что SSH требует сведения о пользователе, прежде чем он фактически вызовет модули PAM, однако это может зависеть от типа аутентификации.

Мой пост в блоге, описывающий, как это сделать с помощью аутентификации на основе хоста и войти под тем же именем пользователя: https://funinit.wordpress.com/2018/01/29/host-based-ssh-as-sso/
Проект Github с сервисной библиотекой NSS, реализующей getpwnam соответствующим образом: https://github.com/cinek810/libnss-pool

Если вы хотите зарегистрировать каждого в качестве гостя, вы можете проверить другую библиотеку NSS (ato означает «все к одному»):https://github.com/donapieppo/libnss-ato

2

Если вы хотите разрешить всем пользователям вход в систему, вы можете пропустить проверку пароля и создать учетную запись для них при первой попытке входа в систему:

  1. Установите libpam-script . Например:

    sudo apt-get install libpam-script

  2. В разделе auth /etc/pam.d/sshd замените pam_unix.so на pam_script.so . Некоторые дистрибутивы Linux автоматически сделают это изменение для вас. Например, в Ubuntu 14.04 pam_script.so будет добавлен в /etc/pam.d/common-auth который включен в /etc/pam.d/sshd .

  3. Создайте /usr/share/libpam-script/pam_script_auth со следующим содержимым:

    #!/bin/bash adduser $PAM_USER --disabled-password --quiet --gecos "" exit 0

  4. Сделайте скрипт исполняемым через:

    chmod +x /usr/share/libpam-script/pam_script_auth

  5. Будь счастлив.

0

К сожалению, невозможно сделать то, что хочет ОП. Недавно я изучал то же самое, и обнаружил, что OpenSSH всегда будет использовать имя пользователя, которое вводит пользователь, игнорируя любые изменения имени пользователя, которые PAM может попытаться ввести. Если этот пользователь не существует в /etc /passwd, OpenSSH не позволит ему войти в систему, так как он не может искать некоторые важные части информации (включая UID, GID и оболочку входа в систему).

Ссылка:https://www.redhat.com/archives/pam-list/2009-January/msg00004.html

Одна альтернатива - создать пользователя на лету на этапе аутентификации PAM, как Дэвид описал в своем ответе. Я проверил это решение и нашел его работоспособным. Поскольку UID, как правило, 32-разрядные, у вас их не будет. Тем не менее, я предполагаю, что производительность системы может становиться все медленнее и медленнее, поскольку файлы /etc /passwd и /etc /shadow становятся все длиннее и длиннее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .