ホスティング会社がセキュリティを強化したホスティングアカウント、つまり2要素認証を提供しているとします。
複雑なことはありません。2つ目の要素(たとえば、 code.google.com / p / google- authenticator / wiki/ PamModuleInstructionsまたはmotp.sourceforge.net/#6 )を使用してサーバーに1つ以上の認証プラグインオプションを実装し、バインドするだけです。ユーザー。
ほとんどの場合、PAMはFTPサーバーの構成で指定でき、原則として、FTPセキュリティの問題は同じ方法で解決されます。
問題は異なります。 実際には、接続速度、サーバー/ルーター設定、またはFTP接続モードに応じて、一定の時間アクティビティがない場合(または最も不適切な瞬間に中断される場合もある)、FTPセッションが中断される場合があります。 「クラシック」FTPクライアントでは、単純に再度接続するだけで、「パスワードを保存」チェックボックスをオンにするだけです。 2要素認証の場合、これは機能せず、「トークン」からパスワードとコードを非常に頻繁に入力する必要があり、これはエンドユーザーにとって非常に不便です。 システムの入り口で「トークン」を使用する必要があることを何らかの方法でユーザーに納得させることができる場合、ファイルを数回ダウンロードするプロセスでこれを行う必要性を説明することはすでに困難です。
問題を説明したと思います。 次に、エンドユーザーの利便性を高めるという考えを共有します。
FTP一時パスワード生成
実際、原則自体は独創的なものではなく、2段階認証が有効になっているGoogleアカウントに使用されるアプリケーションのパスワードのようなものを提案します。
これを行うには、アプリケーションパスワードを生成するためのWebインターフェースの外観が必要です。 Webインターフェース自体は、2要素認証を使用する場合にのみ使用できます。 ログイン後、ユーザーはFTPパスワードを生成します。このパスワードは、特定の時間および特定のIPアドレスに対してのみアクティブになります(現在のアドレスはデフォルトで提供されます)。 おおよそのインターフェイスは次のようになります。

スクリプトを生成するとき、データはデータベーステーブル(たとえば、MySQL)に入力されます。つまり、ユーザーが指定した時間のユーザー名、IPアドレス、タイムスタンプ、およびインターフェイスでユーザーに表示される生成されたFTPパスワードです。 このFTPパスワードは、FTPアクセスに使用されます。 テーブルは次のようになります。

FTPサーバーの構成
MySQLに結び付けることができるため、PureFTPDを例に取ります。 手順に従って、次のようにPureFTPDを構成します。
MYSQLSocket /tmp/mysql.sock MYSQLUser root MYSQLPassword rootpw MYSQLDatabase pureftpd MYSQLCrypt cleartext MYSQLGetPW SELECT temp_password FROM temp_pass WHERE username="\L" AND IP="\R" AND expires <= UNIX_TIMESTAMP() MYSQLGetUID SELECT Uid FROM users WHERE User="\L" MYSQLGetGID SELECT Gid FROM users WHERE User="\L" MYSQLGetDir SELECT Dir FROM users WHERE User="\L"
構成ファイルは変数を使用します
\ L-ユーザーログイン
\ R-IPアドレスクライアント
それは基本的にそれです。 理想的には、期限切れのパスワードからテーブルをクリアするために、何らかのクラウンスクリプトも必要になります。