web-dev-qa-db-ja.com

同じパスワードで仮想ユーザー名の範囲を構成する

以下のFTP設定が可能かどうかアドバイスしてくれる人がいれば幸いです。このパターンに従う読み取り専用ユーザーの範囲が必要です。

(_[0-9]{15})

例:可能なすべての組み合わせを作成せずに同じパスワードを使用する_012345678901234。ユースケースは次のとおりです。デバイスをプロビジョニングし、FTPを使用して新しいバージョンのファームウェアをダウンロードしています。ログには、ファイルのダウンロードに使用されたユーザー名とパスワードの両方が表示されます。主な目標は、ログにデバイスのシリアル番号を記録することです。

ユーザー名にワイルドカードを指定する方法が見つかりませんでした。現在、匿名アクセスのみが可能ですが、明らかに十分ではありません。

2
ruruskyi

ProFTPDでは、ユーザー名にワイルドカードを指定する簡単な方法はありません。ただし、mod_sqlを使用してユーザーを認証し、ユーザー情報の取得に使用するクエリをカスタマイズできます。

ProFTPDから取得したカスタムクエリの例 docs

SQLAuthenticate users groups usersetfast
SQLUserInfo custom:/get-user-by-name/get-user-by-id/get-user-names/get-all-users
SQLNamedQuery get-user-by-name SELECT "userid, passwd, uid, gid, homedir, Shell FROM users WHERE userid = '%U'"
SQLNamedQuery get-user-by-id SELECT "userid, passwd, uid, gid, homedir, Shell FROM users WHERE uid = %{0}"
SQLNamedQuery get-user-names SELECT "userid FROM users"
SQLNamedQuery get-all-users SELECT "userid, passwd, uid, gid, homedir, Shell FROM users" 

あなたの場合、get-user-by-nameクエリは次のようになります。

SQLNamedQuery get-user-by-name SELECT "'%U', passwd, uid, gid, homedir, Shell FROM users WHERE userid = SUBSTRING_INDEX('%U', '_', 1) AND SUBSTRING_INDEX('%U', '_', -1) RLIKE '_[0-9]{15}'"

これはテスト済みのソリューションではないことに注意してください。これをどのように達成できるかについての1つの可能な方法の単なるアイデア。

2
grekasius