- 论坛徽章:
- 0
|
【转贴】PureFTPd 系列中文文档之 README.MySQL
接上面继续:
----------------------------- 数据表格结构 ------------------------------------
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(12 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 <j@pureftpd.org>;. |
|