前書き
SSHは、サーバーにリモートでログインする最も一般的な方法です。 これは、中間者攻撃やリプレイ攻撃からパスワードを保護する暗号化プロトコルです。
ただし、SSHはデータが転送中にのみ保護されることに注意してください。 攻撃者は、キーロガーや戦略的に配置されたカメラを使用するなど、他の手段でSSHパスワードを発見できます。
信頼できるコンピューター(たとえば、自分または会社に属しているコンピューター)を使用し、安全な場所から使用している限り、このような攻撃を心配する必要はありません。 ただし、公共のコンピューターを使用する必要がある場合があります。 このようなシナリオでパスワードを保護するために、FreeBSDにはOne-time Passwords In Everything(OPIE)と呼ばれるセキュリティ機能が付属しています。
このチュートリアルでは、ワンタイムパスワードを生成して使用し、リモートFreeBSDサーバーにログインする方法を学びます。 安全な場所にいるときに1つまたは複数のワンタイムパスワードを事前に生成し、安全性の低い場所からサーバーにアクセスするときに保存しておくことができます。 そうすれば、ワンタイムパスワードが記録されたとしても、攻撃者にとっては有用ではありません。
前提条件
このチュートリアルを実行するには、次のものが必要です。
-
SSH経由でアクセス可能なFreeBSD 10.1サーバー
-
* root への切り替えが許可されているユーザー。 DigitalOceanのデフォルトの freebsd *ユーザーは問題ありません
ステップ1-新しいOPIEユーザーを作成する
リモートサーバーからロックアウトされないようにするには、OPIEで使用する別のユーザーを作成することをお勧めします。
次のように入力して、* root *に切り替えます。
sudo su
ワンタイムパスワードで使用する新しいユーザーを作成するには、次のように入力します。
adduser
ユーザーに関するさまざまな詳細を入力するように求められます。 ユーザー名を* sammy *にします。 パスワードの入力を求められたら、必ず強力なパスワードを入力してください。 他のすべてのプロンプトについては、単に「+ ENTER +」を押してデフォルト値を選択できます。
InteractiveUsername:
Full name:
Uid (Leave empty for default):
Login group [sammy]:
Login group is sammy. Invite sammy into other groups? []:
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]:
Home directory [/home/sammy]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username : sammy
Password : ****
Full Name : My Test User
Uid : 1001
Class :
Groups : sammy
Home : /home/sammy
Shell : /usr/local/bin/zsh
Locked : no
OK? (yes/no):
adduser: INFO: Successfully added (sammy) to the user database.
Add another user? (yes/no):
Goodbye!
「+ yes」と入力して詳細を確認し、別のユーザーを追加するかどうかを尋ねられたら、「+ no 」と入力して「 adduser」を終了します。
これで、元のユーザー(デフォルトの* freebsd *ユーザーまたは通常のsudoユーザー)に切り替えることができます。
exit
この時点で、OPIE以外のsudoユーザーでサーバーにログインする必要があります。
ステップ2-新しいOPIEユーザーとしてログイン
現在のターミナルセッションから、 `+ ssh +`を使用してOPIEユーザーである* sammy *としてログインします。
ssh @localhost
OPIEのセットアップは安全な端末からのみ実行できるため、これは重要です。 `+ rsh `や ` telnet +`などの安全でないプロトコルを使用した場合、OPIEは文句を言います。
手順3-新しいユーザーのOPIEを有効にする
警告
OPIE認証システムにユーザーを追加するには、コマンド「+ opiepasswd 」を使用します。 ` -c +`オプションは、信頼できるコンピューターを使用していて安全な場所にいることをコマンドに伝えます。
opiepasswd -c
秘密のパスフレーズの入力を求められたら、10文字以上のパスフレーズを入力します。 このパスフレーズは、ユーザーのSSHパスワードと同じであってはなりません。 ワンタイムパスワードを生成するには、このパスフレーズが後で必要になります。
コマンドの完全な出力は次のようになります。
InteractiveAdding sammy:
Only use this method from the console; NEVER from remote. If you are using
telnet, xterm, or a dial-in, type ^C now or exit with no password.
Then run opiepasswd without the -c parameter.
Using MD5 to compute responses.
Enter new secret pass phrase:
Again new secret pass phrase:
新しいOPIEシードとランダム化されたパスフレーズを受け取ります。
OutputID OTP key is 499
この出力では、* sammy はユーザー、 499 は_iteration count _、 si5509 *は_seed_です。
-
sammy *がOPIE認証システムに追加されたため、実際のSSHパスワードを使用してログインできなくなりました。 ローカルマシンで新しいターミナルを開き、次のように入力します。
ssh sammy@
次のようなプロンプトが表示されます。
Promptotp-md5 498 zi5509 ext
Password:
ワンタイムパスワードを入力するようになりました。 ワンタイムパスワードはまだ生成されていないため、現時点ではログインできません。 ターミナルを閉じて、* sammy *としてログインしている以前のターミナルに戻ります。
ステップ4-ワンタイムパスワードを作成する
ユーザーがOPIE認証システムに追加されると、499から始まる反復カウント番号とランダムシードがユーザーに関連付けられます。 ワンタイムパスワードを生成するには、これらの値を知る必要があります。
警告
この時点で* sammy *としてログインしている場合は、コマンド `+ opieinfo +`を使用してこれらの値を決定できます。
opieinfo
出力には2つの値が含まれます。 最初はシーケンス番号で、2番目はシードです。
Output498 zi5509
ノートラベル
これらの値を `+ opiekey `コマンドに渡して、ワンタイムパスワードを生成します。 ` opiepasswd `と同様に、 ` opiekey +`も信頼できるコンピューターからのみ実行する必要があります。
opiekey
または、次のように入力することもできます。
opiekey `opieinfo`
OPIEユーザーのパスフレーズを入力するように求められます。 前の手順で選択したパスフレーズを入力します。 このコマンドの出力は次のとおりです。
InteractiveUsing the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
6つの短い単語を含む最後の行は、ワンタイムパスワードです。
新しいターミナルを開いて、もう一度ログインしてみてください。
ssh sammy@
プロンプトは同じままです:
Promptotp-md5 ext
Password:
このプロンプトに表示される数字は、 `+ opieinfo `の出力と、 ` opiekey +`に渡したパラメーターに一致することに注意してください。
これで、パスフレーズを貼り付けるか、手動で入力できます。 長いパスワードを入力し始める前に、間違いを避けるために、「+ ENTER」を押します。 プロンプトが変更され、入力したパスワードが表示されます:
Promptotp-md5 498 zi5509 ext
Password [echo on]:
ここでワンタイムパスワードを入力すると、* sammy *としてサーバーにログインできるようになります。
「+ exit +」と入力するか、ターミナルを閉じて、SSHセッションを終了します。
別のターミナルを開き、新しい接続を確立してみてください。
ssh sammy@
今回は、プロンプトが少し異なります。
Promptotp-md5 zi5509 ext
Password:
ご覧のとおり、シーケンス番号が変更されています。 1つ減りました。 これらの新しい値で `+ opiekey +`を使用して新しいワンタイムパスワードを生成するまで、再度ログインすることはできません。 つまり、このチュートリアルの*ステップ4 *で説明されているプロセスを最初からやり直す必要があります。
ステップ5-複数のワンタイムパスワードを作成する
信頼できるコンピューターに数日間アクセスできないことがわかっている場合は、サーバーに複数回アクセスできるように、複数のワンタイムパスワードが必要になる場合があります。 `+ -n `オプションを指定して ` opiekey +`を実行すると、必要なワンタイムパスワードの数を指定できます。 たとえば、3つのワンタイムパスワードを生成するには、次のように入力します。
opiekey `opieinfo`
Note
出力には、3つのパスワードとそのシーケンス番号が含まれます。
InteractiveUsing the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
ワンタイムパスワードは、 `+ -x +`オプションを使用して16進数形式で生成することもできます。
opiekey -n 3 `opieinfo`
もちろん、パスワードはわかりにくくなります:
InteractiveUsing the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
あなたは今、これらを紙に書き留め、旅行中に紙を持ち歩くことになっています。 次回ログインする必要があるときは、ペーパーを使用して、SSHプロンプトに表示されているシーケンス番号に関連付けられているパスワードを見つけて入力します。 パスワードを使用した後、無効にすることをお勧めします。 言うまでもなく、この論文が間違った手に渡らないようにする必要があります。
紙のすべてのパスワードを使い果たしたら、この手順をもう一度繰り返して、さらにパスワードを生成します。 ただし、498個のパスワードをすべて使い果たし、シーケンス番号がゼロになった場合は、 `+ opiepasswd -c +`を再度呼び出す必要があります。 これにより、ランダムシードとシーケンス番号がリセットされます。
結論
実際の状況では、安全な場所から適切な数のパスワードを事前に準備し、紙に書き留めて、安全でない場所からログインする必要があるときに1つずつ使用する必要があります。 紙を安全に保管してください!
このチュートリアルでは、OPIE認証システムを使用して、信頼できないコンピューターの端末からリモートのFreeBSDサーバーに安全にログインする方法を学びました。 ワンタイムパスワードを生成し、ログインする必要があるたびに使用する方法を学習しました。 この機能は、絶えず移動していて、公共のコンピューターとネットワークを使用せざるを得ない人にとって最も便利です。