自从 0.99.2 版本开始, pure-ftpd 就开始支持虚拟用户。虚拟用户方式十分类似 /etc/passwd ,将用户的相关信息,如口令、姓名、 uid 、目录等,存入文件。但是该文件只适用于 FTP 。

这意味着,可以为 FTP 设置虚拟用户,而不需要在系统中添加系统用户。同时,可以为这些用户单独设置配额、ratio 、带宽等限制。很多虚拟用户可以共享同一个系统用户的属性,因此建议为这些虚拟用户单独创建一个系统用户,从而方便管理。

1 .简介

首先,可以在系统中添加相应的用户和组,如 ftpuser 和 ftpgroup 。如:

groupadd ftpgroup
useradd -g ftpgroup -d /dev/null -s /etc ftpuser

可以使用 ”pure-pw” 来创建虚拟用户。虚拟用户的信息以每个用户一行的方式存放在相应的文件中,其格式如下所示:

<account>:<password>:<uid>:<gid>:<gecos>:<home directory>:<upload 

bandwidth>:<download bandwidth>:<upload ratio>:<download ratio>:<max number 

of connections>:<files quota>:<size quota>:<authorized local IPs>:<refused 

local IPs>:<authorized client IPs>:<refused client IPs>:<time 

restrictions>

其中,除了帐号、口令、 uid 、 gid 和 home 目录之外,其它的可以是空值。

2 .创建一个用户

接下来,我们来创建一个新的用户。 pure-pw 的语法规范如下:

pure-pw useradd <login> [-f <passwd file>] -u <uid> [-g <gid>]
-D/-d <home directory> [-c <gecos>]
[-t <download bandwidth>] [-T <upload bandwidth>]
[-n <max number of files>] [-N <max Mbytes>]
[-q <upload ratio>] [-Q <download ratio>]
[-r <allow client host>[/<mask>][,<allow client host>[/<mask>]]...]
[-R <deny client host>[/<mask>][,<deny client host>[/<mask>]]...]
[-i <allow local host>[/<mask>][,<allow client host>[/<mask>]]...]
[-I <deny local host>[/<mask>][,<deny local host>[/<mask>]]...]
[-y <max number of concurrent sessions>]
[-z <hhmm>-<hhmm>] [-m]

假设我们要创建 joe 这样一个虚拟用户,则可以使用如下命令:

pure-pw useradd joe -u ftpuser -d /home/ftpusers/joe

其中, -u 将虚拟用户 joe 同系统用户 ftpuser 关联在一起。 -d 参数使 joe 只能访问其 home 目录。而如果想让他访问整个文件系统,可以用 -D 选项。

这时,如果 pure-ftpd 启动时加入 -j(–createhome) 选项,则不需要创建 /home/ftpuser/joe 目录。系统会在该用户第一次登陆时自动创建。

-z 选项运用用户在一天当中指定的时间段连接服务器。如 -z 0900-1800 ,则该用户只能在上午 9 点到晚上 6 点之间连接服务器。

-r 选项或 -R 选项,可以限制用户从指定 IP 和掩码连入服务器

-y ,用户同一时间的并发连接数。 ’’ 或者 0 意味着不限制

-f ,默认虚拟用户的信息会被存放在 /etc/pureftpd.passwd 文件中,通过该选项可以改变该文件的位置。

用户的口令会根据系统对加密方式的支持情况,选择一个最安全的方式进行加密。

3 .更改一个用户

同 pure-pw adduser 唯一不同的是,使用 pure-pw usermod 不是创建一个用户,而是更改已经存在用户的某些属性。

重置某些属性的语法如下:

pure-pw usermod <user> -n '' :禁用文件配额

pure-pw usermod <user> -N '' :禁用文件大小配额

pure-pw usermod <user> -q '' -Q '' :禁用 ratio

pure-pw usermod <user> -t '' :禁用下载带宽限制

pure-pw usermod <user> -T '' :禁用上传带宽限制

pure-pw usermod <user> <-i,-I,-r or -R> '' :禁用 IP 过滤

pure-pw usermod <user> -z '' :禁用时间段约束

pure-pw usermod <user> -y '' :禁用并发数限制

4 .删除一个用户

删除一个用的命令语法是:

pure-pw userdel <login> [-f <passwd file>] [-m]

这时,用户的信息会被从指定的 passwd 文件中删除,但是用户的 home 目录会被保留,需要手工删除。

5 .改变用户口令

更改一个用户口令的语法是:

pure-pw passwd <login> [-f <passwd file>] [-m]

6 .显示用户信息

/etc/pureftpd.passwd 文件中记录的信息不方便用户的阅读,因此 pure-ftpd 提供了显示用户信息的命令。其语法是:

pure-pw show <login> [-f <passwd file>]

7 .提交更改

可以通过上面提到的命令,或者以手工方式对 /etc/pureftpd.passwd 文件进行修改,从而创建、修改和删除一个虚拟用户信息。但是,只有提交这些更改时, pure-ftpd 访问才能生效。

提交更改,意味着系统会根据 /etc/pureftpd.passwd (或者指定的其它文件)来创建一个 pure-ftpd 可读的二进制格式的文件 /etc/pureftpd.pdb 。通常,通过下面的命令:

pure-pw mkdb

可以通过 /etc/pureftpd.passwd 文件自动创建 /etc/pureftpd.pbd 文件。但是,如果需要指定特定的文件,可以通过下面的方式来实现:

pure-pw mkdb /etc/accounts/myaccounts.pdb -f /etc/accounts/myaccounts.txt

这时,没有必要去重启 pure-ftpd 服务,对虚拟用户进行的更改可以更新。同时,也可以通过 -m 选项,在对/etc/pureftpd.passwd 文件进行修改的时候自动进行提交。

8 .打开对虚拟用户的支持

使得 pure-ftpd 支持虚拟用户,需要在编译的时候加入选项 –with-puredb 。这时,可以通过在启动服务是的 ’-l’ 参数来设置。如:

/usr/local/sbin/pure-ftpd -j -lpuredb:/etc/pureftpd.pdb &

可以在后台,以自动创建虚拟用户 home 目录,用 puredb 的方式来支持虚拟用户。

9 .转换系统用户

可以通过如下命令,将系统用户转换为虚拟用户:

pure-pwconvert

如果以 root 用户运行该命令,系统用户的口令一并被转入虚拟用户配置文件。如:

pure-pwconvert >> /etc/pureftpd.passwd

10 .环境变量

默认的情况下,如果指定了环境变量 PURE_PASSWDFILE ,则虚拟用户的 passwd 文件位置由该变量的值指定。否则,默认是 /etc/pureftpd.passwd 。用样, PURE_DBFILE 环境变量用来指定 pdb 文件的位置。默认是/etc/pureftpd.pdb 。