| 白狐狸 回复于:2004-04-14 23:54:34 |
| 接上面继续:
----------------------------- 数据表格结构 ------------------------------------ Pure-FTPd 非常灵活而且用户信息可以任何形式存储在 SQL 表格中。你仅仅只需要有保存 下列信息的列: - 用户登陆。 - 用户密码,可以以明文、MD5、crypt()或者 MySQL的 password() 等多种格式。 Pure-FTPd 还接受 MySQLCrypt 列的“任何”值。所谓“任何”,指所有的散列函数(除 了明文)都是经过测试过的。 * 推荐:在使用非常老的 C 库的 Solaris 系统上,使用 MySQL MD5 散列函数。在所有其 他系统上,最好使用 crypt()。最好不用非常弱的 password() 函数,它不能移植,且一 般仅在 MySQL 服务器内部帐号使用的。在 MySQL 4.1.0 和以后版本,Pure-FTPd 不再支 持 password() 函数了。 - FTP 用户映射到的系统用户ID(uid)。可以是一个数字或用户名,在运行时查找。 - 系统用户组ID(gid)(数字或非数字)。 - 用户主目录。 这里有一个处理这些东西的简单表格的示例: CREATE TABLE users ( User varchar(16) NOT NULL default '', Password varchar(64) NOT NULL default '', Uid int(11) NOT NULL default '-1', Gid int(11) NOT NULL default '-1', Dir varchar(128) NOT NULL default '', PRIMARY KEY (User) ); 如果你需要使用用户名代替数字的话,可以将 Uid 和 Gid 的数据类型用 char() 代替 int()。 然后,在配置文件 pureftpd-mysql.conf 中,你需要提供 SQL 模板来获取必须的信息。 我们利用前面的例子: MYSQLGetPW SELECT Password FROM users WHERE User="\L" 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 由尝试登陆的用户的用户名代替。 \I 由客户端要求连接到的 IP 地址代替。 \P 由客户端要求连接到的端口号代替。 \R 由客户端连接过来的远端 IP 地址代替。 \D 由远端 IPv4 地址代替,一个长整型的十进制数。 你可以混合所有这些并在不同的表中保存信息。比如:使用 \I,每一个域你可以使用不同 的表,这样 joe@domain1 和 joe@domain2 就是不同的帐号的了。使用 \R,你可以限制一 个特定的IP地址才能使用某个帐号。 请注意,登陆用户名尽包括普通的字符:A-Z , a-z , 0-9 , - , . , _ , 空格 , : , @ 和 ' 。出于安全目的,其他字符是禁止的。 你也可以在你的表格中去掉 uid 和 gid 这两列,而使用缺省的值代替(这样就减少了无 用的查找)。有两个指令对于实现这样的目的是有用的:MYSQLDefaultUID 和 MYSQLDefaultGID。 明显的例子: MYSQLDefaultUID 1000 MYSQLDefaultGID 1000 使用这些指令来覆盖 MYSQLGetUID 和 MYSQLGetGID。 ----------------------------- 每一个用户的设置 -------------------------------- 使用可选的查询,可以为每一个用户设定个人的设置。 - MySQLGetQTAFS 是用户能在其主目录保存的最大的文件数目。 例如: MySQLGetQTAFS SELECT QuotaFiles FROM users WHERE User="\L" - MySQLGetQTASZ 是用户能使用的最大的硬盘空间,以兆(Megabytes)为单位。 例如: MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User="\L" - MySQLGetRatioUL 和 MySQLGetRatioDL 是可选的比率。 例如: MySQLGetRatioUL SELECT ULRatio FROM users WHERE User="\L" MySQLGetRatioDL SELECT DLRatio FROM users WHERE User="\L" - MySQLGetBandwidthUL 和 MySQLGetBandwidthDL 是可选的上传和下载带宽限制。返回值 以 KB/s 为单位。 例如: MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L" MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L" - MySQLForceTildeExpansion 也是另外一个可选特性,开启 "~" 来扩展路径。0 是禁止 (默认值),1 为开启。仅在真实的系统用户与虚拟(MySQL)用户相匹配时才开启。在其 他任何情况下,请不要盲目的开启它。 ------------------------------- 事务 ------------------------------------------ 如果你升级你的表格到支持事务的表格时,你可以配置你的 Pure-FTPd 来利用事务。这样 的话,你就可以保证服务器能完成所有信息的解析,即使你在同时进行更新x作时也是。 开启事务,添加下面一行: MySQLTransactions On 在表格依然是 ISAM 或 MyISAM 格式时不要开启事务。事务仅工作在更新的后端(Gemini, InnoDB,BerkeleyDB...)和目前最新的 MySQL 版本。 ------------------------------ 匿名用户 --------------------------------------- 如果你需要匿名用户连接你的 FTP 服务器,你不需要在 MySQL 中由任何 'ftp' 用户。不 过,你需要在 FTP 服务器中拥有一个系统的 'ftp' 用户。 ----------------------------- ROOT 用户 --------------------------------------- 如果一个 MySQL 用户条目拥有 root (0) 用户ID或者组ID, Pure-FTPd 将拒绝它的登陆。 没有这个预防性质的限制的话,如果你的 MySQL 服务器受到损害或牵连,攻击者就能很容 易的牵连到 FTP 服务器。 安全屏障也被实现来避免因错误的数据类型(例如,binary blobs 代替了plain text)被 SQL 查询获取而产生的坏的牵连。 -Frank DENIS <[email protected]>. |