SSHログインの元のユーザーを記録および/または制限することは可能ですか?
たとえば、
user1@server1
server2
でログインしてくださいuser2
。
またでuser3@server1
ログインしてください。server2
user2
user1
「ソースユーザー」とは、以上を意味しますuser3
。
user1@server1
どのセッションがによって開始され、どのセッションがによって開始されたかを追跡できるようにしたいですuser3@server1
。
その目的は、複数のユーザーがこのuser2
アカウントを使用してサーバー2などのプロセスを管理できるようにすることです。 (これはセキュリティに影響を与えることを知っていますが、問題の一部はこれらのトラップの程度を評価することです。)
マニュアルページに記載されているように、.NETsshd_config(5)
の設定オプションをsshd
使用してAllowUsers
特定のユーザーにアクセスを制限することができますsshd_config
。
ユーザーを許可
このキーワードの後には、スペースで区切られたユーザー名パターンのリストが続きます。指定した場合、これらのパターンのいずれかに一致するユーザー名のみがログインを許可されます。ユーザー名のみが有効で、数値のユーザーIDは認識されません。デフォルトでは、すべてのユーザーはログインが許可されます。パターンがUSER @ HOST形式の場合は、USERとHOSTを別々に確認して、特定のホスト上の特定のユーザーへのログインを制限します。許可/拒否ディレクティブは、DenyUsers、AllowUsers、DenyGroup、最後にAllowGroupsの順序で処理されます。
ただし、USER
上記のマニュアルページで指定されている内容は、ターゲットシステムのユーザー名を説明しているようです(server2
例では)。
AllowUsersオプションをに設定してこれをテストした結果、->でログインできることがわかりuser2@server1
ました。 user1@server1
user2@server2
また、ログには元のユーザーが表示されないようです。
これは ->/var/log/secure
でログインした後の RHEL6 のログです。user1@server1
user2@server2
11月17日 16:14:59 server2 sshd[28349]: /proc/self/oom_score_adjを0に設定
11月17日 16:14:59 server2 sshd[28349]: 10.1.2.3 ポート 36508 で接続
11月17日 16:14:59 server2 sshd[28349]: 一致する RSA キーが見つかりました: aa:bb:cc:dd:ee:ff:gg:..
11月17日 16:14:59 server2 sshd[28350]: 10.1.2.3 ポート 36508 ssh2 で user2 の公開鍵が遅延しました。
11月17日 16:14:59 server2 sshd[28349]: 一致する RSA キーが見つかりました: aa:bb:cc:dd:ee:ff:gg:..
11月17日 16:14:59 server2 sshd[28349]: 10.1.2.3 ポート 36508 ssh2 で user2 の公開鍵を受け入れます。
11月17日 16:14:59 server2 sshd[28349]: pam_unix(sshd:session): (uid=0) でユーザー user2 のセッションを開く
11月17日 16:14:59 server2 sshd[28349]: ユーザーサブプロセスの pid は 28351 です。
では、方法はないだろうか?
sshd
(a)SSH接続を実行しているソースユーザーを追跡するためにロギングまたは動作を変更しましたか?
(b) ソースユーザーに基づいて接続を制限するように sshd を制限しますか?
ベストアンサー1
短い答えは「いいえ」です。サーバーは、サーバー側の観点から有効なログインを許可します。
ただし、必要なものを達成するためのいくつかの考えられる解決策があります。次の事項がお客様の要件を満たしていることをテストして確認します。
ノートこれは「一般」ユーザーにとっては十分であり、クライアントも制御する必要があります。経験豊富なユーザーは、CLIENTUSER
以下に使用する変数を偽にする方法を見つけるでしょう。
AcceptEnv
次のディレクティブを使用して、/etc/ssh/sshd_config
CLIENTUSERという変数を許可できます。
AcceptEnv CLIENTUSER
次のステップは、ユーザーがログインシェルのコマンドを使用して強制的にログインできるようにすることです。たとえば、次のようになります。
ForceCommand /bin/bash -l
sshd サービスを再起動し、/etc/profile に以下を追加します。
if [ -z "$CLIENTUSER" ] || [ "$CLIENTUSER" != "user3" ] && [ ! -z "$SSH_CLIENT" ]
then
echo 'Client logon not allowed'
logout
fi
上記のコマンドは、変数を送信しないか、および値が異なる変数をCLIENTUSER
送信するすべてのCLIENTUSER
クライアントをログアウトしますuser3
。
次のクライアントコマンドラインを使用してこれをテストできます。
$ ssh user2@host
Client logon not allowed
$ CLIENTUSER=user3 ssh -o "SendEnv CLIENTUSER" user2@host
user2@host $
ご覧のとおり、CLIENTUSER
これはコマンドラインを介して簡単に偽造できます。これを防ぐには、次のように追加します。顧客` / etc /設定ファイル:
declare -r CLIENTUSER="$USER"
CLIENTUSER
ユーザーが変数の値を変更しようとすると、次のエラーが発生します。
bash: CLIENTUSER: readonly variable