目前使用ProFTPD处理ftp代理。
我们的设置与此issue几乎相同。
但是,我们很难使用用户名。 因为我们想要在用户名中隐藏/传输目标服务器 重写用户名以清理它。
到目前为止,我们可以使用干净的用户名。 进行LDAP身份验证。
然而我们仍然需要重写之前用户名中的targetserver字符串。
有关如何:
的任何信息非常欢迎。
也许有某种技术我们以错误的方式使用或者我们迄今未能使用的技术。
编辑:
关于@Castaglia
据说我们在原始用户名中有2个信息。 ADUser便有@ REMOTESERVER。
与ADuser一起,我们要建立LDAP身份验证。使用RemoteServer信息,我们希望使用从MySQL查询的凭据连接到远程服务器。
我们现在正在努力的是利用这两个信息。通过重写,我们得到一个干净的用户,但松散了服务器。
所以我们要找的是将原始字符串保存到var的某种选项。并重写它2次。一次进入用户字符串以对服务器名称进行一次身份验证,以了解用户想要连接到哪个服务器。
答案 0 :(得分:1)
我认为要获得您想要实现的目标,您可以尝试以下方法。
首先,稍微修改RewriteRule
,以捕获USER
命令的 second 部分(例如“RemoteServer”),因此:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCondition %m USER
RewriteRule ^(.*#)?([0-9A-Za-z]+)(@)?(.*)? $2
</IfModule>
接下来,在SQL查询配置中,使用 note 引用来检索该正则表达式组:
<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
使用基于1的索引,因此第一组使用$1
,
$2
表示第二组(在示例USER
命令中为“ADuser”值),$3
表示第三组, etc 。
我已更新的答案包括使用“PERCONNECTION”SQLConnectInfo
政策。为什么?这告诉mod_sql
模块在客户端连接时连接到SQL数据库,而不是等到客户端提供了所有必要的凭据。由于mod_rewrite
隐藏其关于捕获的正则表达式组的注释的方式,这是必要的:这些注释仅在该命令的持续时间内捕获( ie 在您的情况下,只有USER
命令。因此,我们希望在处理USER
命令时使用配置的SQL语句,因为那时%{note:mod_rewrite.$4}
引用有效。
希望这有帮助!
答案 1 :(得分: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