2017-08-01 5 views
0

現在はProFTPDのftpプロキシで作業しています。proftpdは、%uをvarに保存してから書き直します。

設定はこのissueとほぼ同じです。

しかし、私たちはユーザー名を使用するのに苦労しています。 ユーザ名でターゲットサーバを隠したい/移動させたいと考えているので、 はユーザ名を書き換えてクリーンアップします。

ここまできれいなユーザー名を使用できます。 LDAP認証を行う。

まだ書き換え前のユーザー名にあったtargetserver文字列がまだ必要です。

する方法上の任意の情報:

  • はそれが書き直される前に、環境変数に、元のユーザー名を保存する
  • についての読み(ProFTPDのノートを使用(ENV変数をと予防にも書き直すことにします)それは何とか見つけて、その上にドキュメント)
  • アクセス元のユーザー名(ない書き換え1)
  • 関連して、ユーザ名とtargetserverを隠し、それを
  • を使用して達成するためにどのように他の情報に失敗しました

大歓迎です。

私たちが間違ったやり方で使っているテクニックや、これまで使っていなかったテクニックがあるかもしれません。

編集:

@Castaglia

については、我々は、元のユーザー名で2に関する情報を持っていると述べました。 ADuser @ RemoteServer。

LDAP認証を確立するADuserを指定します。 RemoteServer情報を使用して、私たちはMySQLから問い合わせを受けた資格を持つリモートサーバに接続します。

私たちが現在苦労しているのは、両方の情報を利用していることです。書き直しを行うと、クリーンなユーザーになりますが、サーバーは緩くなります。

私たちが探しているのは、元の文字列をvarに保存するためのオプションです。それを2回書き直してください。ユーザー名とパスワードを一度にサーバー名に認証し、ユーザーが接続しようとしているサーバーを特定します。

+0

正確には元のユーザー名を使用しようとしていますか? SQLクエリ、または 'ExtendedLog'、または...? – Castaglia

+0

TagetはSQLクエリでそれを使用することになります。ユーザー名部分を取り除き、元のユーザー名にtargeterverを使用する場所。 –

+0

'%U'変数は、クライアントから送られた' USER'コマンドの元の値を提供する必要があります。それでも問題が解決しない場合は、あなたの投稿を更新して、これを使って設定を表示してください。 – Castaglia

答えて

1

私たち(私とダニエル)がそれを解決したのは、利害関係者のためです。

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCondition %m USER 
    RewriteRule ^(.*#)?([0-9A-Za-z]+)(@)?(.*)? $2 
</IfModule> 

<IfModule mod_ldap.c> 
    LDAPServer ... 
    ... 
</ifModule> 

<IfModule mod_sql.c> 
    SQLBackend mysql 
    SQLConnectInfo ... 
    SQLLog USER server_token 
    SQLNamedQuery server_token UPDATE "buffer_token='%{note:mod_rewrite.$4}' WHERE username = '%U'" users 
    SQLAuthenticate off 
    SQLNamedQuery get-url SELECT "concat('ftp://',ftp_username, ':', ftp_password, '@', ftp_servername) FROM users inner join server_user on users.id = user_id inner join servers on servers.id = server_id WHERE username = '%U' and token = buffer_token" 
</IfModule> 

<IfModule mod_proxy.c> 
... 
</IfModule> 
ProxyReverseServers sql:/get-url 
+0

こんにちは、コード全体を貼り付けるのは避けてください。しかし、役に立つ部分を強調し、それをどのように解決したか説明してください。 – Arount

+0

こんにちは@Arount、あなたの提案に感謝します。 Fabianはそれに応じて回答を編集しました。 –

1

あなたが達成したいことを得るためには、以下を試してみてください。

まず、(あなたのUSERコマンドの一部を捕捉するために、少しRewriteRuleを変更例えばSQLクエリの構成で

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCondition %m USER 
    RewriteRule ^(.*#)?([0-9A-Za-z]+)(@)?(.*)? $2 
</IfModule> 

次に、その正規表現のグループを取得するためにノート参照を使用します:ので "のRemoteServer")、

<IfModule mod_sql.c> 
    ... 
    SQLConnectInfo ... PERCONNECTION 
    ... 
    SQLNamedQuery get-url SELECT "concat('ftp://',ftp_username, ':', ftp_password, '@', ftp_servername) FROM users ... WHERE concat(username, '@', token) = '%{note:mod_rewrite.$4}'" 
    ... 
</IfModule> 

%{note:mod_rewrite.$4}表記は「値を補間すると言うことキー 'mod_rewrite。$ 4'の下に保存されたセッションノートのmod_rewriteは、これらのセッションノートでRewriteRuleと一致するグループをスタッシュ/記録します。 $Nは(あなたの例USERコマンドで「ADuser」値であろう)は、第2のグループのための1から始まるインデックス、最初のグループのためのこのよう$1$2、3群用$3などを使用します。

回答をにも更新しました。には、 "PERCONNECTION" SQLConnectInfoポリシーの使用が含まれています。どうして?これは、クライアントがすべての必要な資格情報を提供するまで待つのではなく、クライアントがに接続したときに、mod_sqlモジュールがSQLデータベースに接続するように指示します。 mod_rewriteがキャプチャした正規表現グループについての注釈を隠す方法があるため、これらの注釈はそのコマンドの有効期間中に、つまりの場合はUSERコマンドのみ)のキャプチャされた間だけキャプチャされます。したがって、USERコマンドが処理されたときにを使用すると、%{note:mod_rewrite.$4}の参照が有効になるので、それが設定されています。

希望すると便利です。

+0

これをテストし、更新してください。 –

+0

私の同僚はこの問題を解決しました。私たちはLDAP経由でユーザーを接続し、情報をSQLクエリに転送できるようになりました。 しかし、上記の試みは正しい解決策を見つけるのに大いに役立ちましたが、現状のままでは機能しません。 これは、mysqlクエリーがビルド/実行されるまでに再びメモが空であるためです。だから私たちは、ログイン時にログを書き出し、この情報を後で正しい 'セッション'を決定するために使用するために、名前付きクエリを使用しました。そして最終的に資格とサーバーアドレスを取得します。 –

関連する問題