SSHでログインしたユーザーがActive Direcoryに合格していることを確認してください。

SSHでログインしたユーザーがActive Direcoryに合格していることを確認してください。

SSHを介してLinuxサーバーに接続しているユーザーがActive Directory(Centrify)を使用して認証されていることを確認しようとしています。

彼がローカルアカウント(場所/etc/passwd)を使用している場合は、Active Directoryアカウントを使用するように警告し、再度ログインするように求められます。

私の最初の試みは、PAMモジュールpam_scriptを使用して、ユーザーがログインした/etc/pam.d/loginときに現在のユーザー名が/ etc / passwdにあることを確認し、見つかった場合は警告を表示し、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

ただし、SSHを使用しても同じシナリオが発生します/etc/pam.d/sshd。スクリプトは実行されますが、テキストまたはログインプロンプトは表示されません。

どんなアイデアがありますか?ありがとう

答え1

広告を介して接続されているかローカルに接続されているかを確認するのは比較的使いidやすいです/etc/passwd。次のステップは、/etc/profile警告メッセージをエクスポートする機能を備えています。

答え2

問題のアカウントシェルを変更することをお勧めし/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

答え3

標準の「ログイン」に最適なソリューションです。残念ながら、「sshd」を使用して同じ動作を実行する幸運はあまりないと思います。これは、接続の確立時に sshd が使用する基本的な接続プロセスによるものです。 PAMスタック(または他の提案と同様に構成ファイルのビット)に達すると、ユーザー名はすでにSSHクライアントによって送信されました。

これについて詳しく説明するリソースは次のとおりです。https://serverfault.com/questions/330310/force-ssh-to-prompt-for-user

この情報を考慮すると、理想的な解決策はスクリプト(または/ etc / profileを追加)に固執することですが、「sshd」スタックの場合は「ログイン」を押すのではなく10秒間スリープ状態にすることです。何か(警告が表示されることを確認するために)セッションを閉じます。

答え4

モジュール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などのテストを調整して、自分のシナリオに適用できます。

関連情報