我正在尝试使用ProFTPd的MySQLconfiguration来设置FTPlogin到我的服务器。 我有一个SQLNamedQuery用于从数据库获取用户信息(请参阅使用基于用户名的默认主目录设置ProFTPd ),并且作为查询的一部分,我使用%uvariables来插入用户名。 当我尝试连接时,我总是得到login错误。 检查SQL日志文件,似乎login失败,因为%u 没有被通过FTP发送的用户名replace,而是总是被proftpdreplace。 我应该使用另一个variables吗? 为什么不是%u被FTP用户名replace? 当我用MySQL用户表中的用户名replace%u时,我可以连接。
这是我的configuration:
<IfModule mod_sql.c> SQLLogFile /var/log/proftpd/sql.log SQLDefaultUID 2001 SQLDefaultGID 2001 SQLBackend mysql SQLPasswordEngine on SQLAuthTypes sha1 SQLConnectInfo *****@localhost ***** ********** SQLNamedQuery userinfo SELECT "uname, passwd, CONCAT('2001'), CONCAT('2001'), CONCAT('/var/projects/users/', uname) AS homedir FROM users WHERE uname='%u'" SQLUserInfo custom:/userinfo SQLGroupInfo ftpgroups groupname gid members </IfModule>
这里是我的SQL日志文件中的相关行(注意最后的uname='proftpd'位):
query "SELECT uname, passwd, CONCAT('2001'), CONCAT('2001'), CONCAT('/var/projects/users/', uname) AS homedir FROM users WHERE uname='proftpd'"
问题是%u指的是本地用户(在你的情况下是proftpd )。 您应该使用%U (注意大写 U),它指向FTP用户。 请注意ProFTPd SQLUserInfo页上的最后一段,在“另请参见”上方。