ioFTPD以性能高效著称,引申自FreeBSD下的glFTPd,连目录都很linux,我们姑且认为它是从glFTPd移植过来的吧。最近有一个项目需要用到FTP服务器,而且要求是免费的,于是我就找了它,研究了一个星期,终于有些收获,写出来跟CU的兄弟共享。
我认为一个基本的ioFTPD最重要的部分还是权限的管理,而且这部分也比较难理解,网上没有一篇文档是详细介绍该方面的,所以本文就针对ioFTPD的权限控制做一个讲解。
我使用的版本是去http://www.inicom.net/forum/forumdisplay.php?f=38下载的V6.2.1,该版本集成了一个图形管理界面和生成服务的工具,比官方的5.8.5r要好用一些(官方已经将其开源,由公众来主导后续版本的开发和维护)
ioFTPD的文件系统由vfs、文件夹属性、用户权限这三个部分组成,它们之间是互相关联的。
一、vfs
vfs是虚拟文件系统的意思,每个ioFTPD进程均需要有一个虚拟的根文件系统才能正常启动,ioFTPD启动的时候会去读取..\etc\default.vfs这个文件,所以需要在这里定义一个虚拟的根文件系统。以下简称“虚拟根目录”。
假设你希望D:\ftpdata作为你的虚拟根目录,可以这么写:
[..\etc\default.vfs]
….
"D:\ftpdata" /
...
物理路径需要用双引号括起来(单字节)
另外,你的music和movie这两个目录不再ftpdata这个目录中,又希望希望能让用户下载,可以将这两个文件夹映射到根目录之下。
"D:\movie" /movie
"D:\music" /music
这样用户登录到ftp后,就可以看到ftpdata这个目录里面的内容以及movie和music这两个目录了。
为了便于下面的描述让我们先来看看一个实际FTP服务器的文件夹组织结构
D:\ftpdata
D:\ftpdata\Incoming
D:\ftpdata\Incoming\alice
D:\ftpdata\Incoming\bob
D:\ftpdata\Download
二、文件夹属性
ioFTPD有一个默认的系统管理帐号:ioFTPD,它属于ioFTPD这个组。如果在操作系统中直接在虚拟根目录下创建文件夹,那么默认的子文件夹将继承父文件夹的属性,包括属主和组。也就是说Incoming和download的属主和组均是ioFTPD,如下图所示:
ioFTPD的文件夹属性仿照了*nix的文件系统,通过3位数字的组合来标识该文件夹的不同操作权限。
下面是ioFTPD v6.2.1中ioFTPD.ini对操作权限的解释:
# drwxr-xr-x 2 user group
# -rwxrwxr-x 1 user group
# ^^ ^ ^
# || | |
# || | --- permissions for everyone
# || ------ permissions for people in the same group as the file
# |--------- permissions for the owner of the file
# ---------- d for directory, - for file, l for symbolic link
#
# r = means you can read the file
# w = means you can delete/write to the file
# x = for directories means you can enter the directory.
#
# To get the numeric representation of the permission just add up the octal
# bits for each trio of permissions for owner,group, or other...
# 421
# rwx = 7
# rw- = 6
# r-x = 5
# r-- = 4
每个文件夹的默认权限通过..\system\ioFTPD.ini来配置
…
Default_Directory_Attributes =755 0:0
Default_File_Attributes =644 0:0
….
先分析一下download这个目录,因为这个目录的目的就是让公共用户下载,所以它需要设置为所有人可读,可进入目录,而755最后的那个5标识让所有人可读,可进入,满足了该目录的要求。亦即匿名用户也可以访问,下载。
再看Incoming这个目录,不是所有人都有权限上传文件,否则很快就会有人利用该FTP做临时的网络硬盘,甚至被利用来做盗版数据的分发途径。所以必须限制该文件夹的读写权限。
