Проверьте, прошел ли вход в систему через SSH через Active Direcory

Я пытаюсь проверить, является ли пользователь, который подключается к серверу linux через SSH, аутентифицируется с помощью Active Directory (Centrify).

Если он использует локальную учетную запись (находится в /etc/passwd ), мне нужно отобразить предупреждение с просьбой использовать его учетную запись Active Directory, а затем снова ввести логин.

Моя первая попытка заключалась в использовании PAM-модуля pam_script внутри /etc/pam.d/login для выполнения скрипта, который проверяет, существует ли текущее имя пользователя в / etc / passwd, когда пользователь входит в систему, отображает предупреждение, если оно найдено, и снова вызывает команду login в login ,

Я добавил следующую строку в /etc/pam.d/login

 session required pam_script.so runas=root 

Эта строка выполняет файл сценария, расположенный в /etc/security/onsessionopen который содержит:

 #!/bin/sh username=$1 if [ $(grep -c '^'$username':' /etc/passwd) = 1 ] then echo "Warning, please user your AD credentials" login fi 

Но тот же сценарий не работал в /etc/pam.d/sshd . При использовании SSH скрипт запускается, но не отображает текст или приглашение для входа.

Есть предположения ? спасибо

4 Solutions collect form web for “Проверьте, прошел ли вход в систему через SSH через Active Direcory”

Используя id относительно легко узнать, подключены ли вы из объявления или локального /etc/passwd . следующим шагом было бы иметь функцию в /etc/profile , которая выдаст предупреждающее сообщение.

Изменение оболочки для соответствующих учетных записей в /etc/passwd будет работать хорошо

Поместите это в (скажем) /usr/local/etc/mustuseadlogin и сделайте его исполняемым:

 #!/bin/sh echo echo "Please log in with AD authentication" >&2 echo sleep 10 exit 0 

Теперь отредактируйте /etc/passwd (в идеале с помощью vipw ) и измените последнее поле для всех затронутых учетных записей как /usr/local/etc/mustuseadlogin . Например,

 roaima:x:1001:1001:I am roaima:/home/roaima:/usr/local/etc/mustuseadlogin 

Удивительное решение для стандартного «входа». К сожалению, я не думаю, что вам удастся добиться такого же поведения, что и для sshd. Это связано с основными процедурами подключения, которые sshd использует при установлении соединения. К тому времени, когда мы получаем до того, как стек PAM (или биты профиля, как и в другом предложении), имя пользователя уже разрешено; как представлено клиентом SSH.

Вот ресурс, который может пролить свет на это: https://serverfault.com/questions/330310/force-ssh-to-prompt-for-user

Учитывая эту информацию, я бы предположил, что идеальным решением может быть использование вашего скрипта (или дополнение / etc / profile), однако для стека sshd; вместо того, чтобы нажимать «login», спать на 10 секунд или что-то делать (чтобы убедиться, что предупреждение видно), а затем закрыть сессию.

Модуль pam_script использует свой статус выхода, чтобы сообщить стек вызовов, что делать. Измените свой код на это, и он будет работать:

 #!/bin/bash username="$1" if [[ root != "$username" ]] && grep -q '^'"$username"':' /etc/passwd then echo "Warning, please user your AD credentials" exit 1 fi exit 0 

Я исключил root из блока. Вы можете настроить тест [[ ... ]] для UID <500 и т. Д. Для применения к вашему сценарию.

  • pam_tacplus.so и sshd: пропустить проверку пользователя?
  • Вопросы безопасности сервера SSH в Интернете
  • Всякий раз, когда ansible вносит изменения в sshd в CentOS7, случайная игра в будущее не может подключаться
  • Как указать задержку входа в ssh
  • Подключиться к удаленному Linux-серверу, который настроен по умолчанию, не настроен на подключение?
  • Разрешающая способность sshd_config не влияет
  • Как заставить sshd прослушивать два порта, но ограничивать один из них одним адресом источника?
  • Почему sshd удалил мой / dev / zero?
  • Не удается исключить пользователя в директиве match в конфигурации SSHD
  • зарегистрировать или ограничить исходный пользователь ssh login
  • Почему моя новая интерактивная проверка cygwin .bashrc не работает?
  • Linux и Unix - лучшая ОС в мире.