2007年07月16日

ssh の環境変数を渡す機能を利用した不正ログイン対策について

ssh プロトコルバージョン2では、必要に応じて環境変数を渡すことができるようになっています。幾つかの環境変数はセキュリティ上の問題を引き起こす可能性があるため、デフォルトでは環境変数を受け付けないようになっています。
しかし、例えば以下のように設定すると、 CERBERUS_MAGIC という環境変数を受け渡せるようになります。

# echo AcceptEnv CERBERUS_MAGIC >> /etc/ssh/sshd_config
# echo SendEnv CERBERUS_MAGIC >> /etc/ssh/ssh_config
# service sshd restart
# export CERBERUS_MAGIC="Konyanyachiwala"
# ssh localhost
Last login: Mon Jul 16 19:45:22 2007 from xxx.xxx.xxx.xxx
# echo $CERBERUS_MAGIC
Konyanyachiwala

環境変数という形で任意の追加情報を渡せるということは、ケロちゃんチェックで使うこともできるということを意味しています。例えばログインシェルを

#! /bin/sh
if [ "$CERBERUS_MAGIC" != "Konyanyachiwala" ]
then
    echo "You don't have permission to login."
    exit 1
fi
unset CERBERUS_MAGIC
exec /bin/bash "$@"

のようにして使うこともできるわけです。
上記のようなログインシェルの場合、クライアントは

# export CERBERUS_MAGIC="Konyanyachiwala"
# ssh nonrootuser@example.com

のように予め環境変数を設定してからアクセスする必要があります。そのため、上記のログインシェルが設定されたアカウントは ssh ログイン専用となります。(環境変数が設定されないのでコンソールログインには使えないのです。)
間違えて root ユーザに上記のログインシェルを設定すると痛い目にあいますよ。(笑)

scp や sftp の場合には、1バイト目から scp や sftp プロトコルのデータがやり取りされることを前提としており、サーバとクライアントが同期している必要があるため、ケロちゃんチェックを行うことが困難です。
しかし、環境変数という形を使えば、標準入出力を使うことなくクライアント側からサーバ側にケロちゃんチェックに対応していることを伝達することができます。環境変数の内容は、非対話的な操作による認証を行うためのユーザ認証用データとして使っても、対話的な操作による認証を行う際の scp や sftp プロトコルのデータの始まりを示すためのプリアンブルとして使っても構いません。

posted by 熊猫さくら at 20:28| Comment(0) | TrackBack(0) | Linux
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/4722503
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック