APP下载

为班级搭建Ftp网络空间

2010-12-29陈广庆张文峰

中小学信息技术教育 2010年12期


  当前我国的中小学几乎都以班级为单位进行教育教学活动,学生在校期间以班级为单位的各种活动会积累下来大量的资料(如:教师的教学课件、班级活动照片、视频等)。随着电脑及数码产品的普及,这些资料大都以数字化的形式记录下来。从当前的中小学实际情况来看,班级数字化资料的存储很不科学,有的保存在学校信息中心,有的存储在班主任的电脑里,有的甚至存储在学生或班级的电脑里。这些珍贵的资料随着时间的流逝很可能会丢失。即便是不丢失,由于存储的零散和不规范,资料的再利用极其不方便。从另一个角度来看,学生在校期间积累下来的教育教学和活动资料,无论对于学生、教师还是对于学校而言都是非常珍贵的。针对这种情况,学校利用校园网为每个班级建立了长期存储Ftp网络空间。通过Ftp网络空间,一方面提供了比较规范的存储;另一方面也方便通过网络进行共享和再利用,收到了较好的效果。下面把我们的做法介绍给同行,希望能起到抛砖引玉的作用。
  一、资料的组织和分类
  资料的拥有者是班级,但是中小学的班级是随着年级增长而变化的,如:入学时是高一(1)班,那么次年就是高二(1)班了,所以资料的组织要舍弃年级的变化。经过慎重考虑,最终我们找到了不变量,那就是学生的入学时间,如:2010年入学的一班,入学时间“2010年”和“一班”都是定值,因此我们用入学时间和班级数来组织资料。
  至于班级资料的分类,我们把这个权利交给了班级自己来管理,因为资料的上传和使用都是班级的相关人员——教师和学生。
  最终的资料组织结构即Ftp空间的目录结构如下图所示。
  二、权限控制
  由于班级相关用户的数量较多,变化较大,为了方便资料上传,我们允许用户以匿名身份上传。为避免上传资料混乱,我们只允许匿名用户把相关资料上传至相关的具体班级目录下。出于安全考虑,不允许匿名用户修改文件和删除文件,而且只允许匿名用户在校园网内上传,并且在服务器端做详细日志(即哪台电脑、在什么时间、上传了哪些文件、上传到了哪个目录)。另外,为了便于资料的再利用,我们允许内网匿名用户浏览和下载所有资料。如有需要,允许外网匿名或认证用户浏览和下载部分资料。
  已上传的资料,难免有删除、修改、归档等需求。我们设置了一个或多个管理员认证账号,这些账号分配给网络管理员使用,用来管理各个班级的资料。如果班级有修改、删除资料等需求时必须联系相关的管理员来完成相关操作。
  三、技术实现
  为了满足上面提及的种种需求,经过筛选和实践,最终我们选择了Linux操作系统和Pure-FTPd来实现该Ftp网络服务。之所以选择Linux和Pure-FTPd,首先是因为该组合能轻松满足我们的各种需求,更为重要的是这些软件是开源免费的,可以免费从网络上获得,并且合法使用,同时这些软件安全性又非常高。
  1.安装Pure-FTPd
  首先到Pure-FTPd官网(http://www.pureftpd.org/project/pure-ftpd)去下载最新版Pure-FTPd软件的源代码,然后进行编译安装。Linux下需要安装gcc编译环境。安装主要步骤如下。
  第一步,在Linux下创建一个用户和组供Pure-FTPd使用。执行如下命令:
  groupaddpure-ftpd
  useradd -gpure-ftpd-d/var/empty-s/etcpure-ftpd
  第二步,编译和安装。执行如下命令:
  ./configure--with-everything
  makeinstall-strip
  用--with-everything参数进行编译安装后的Pure-FTPd就完全能满足我们的所有需求了。
  第三步,启动Pure-FTPd服务。执行如下命令:
  /usr/local/sbin/pure-ftpd &
  如果能正常启动,并且服务器端21端口正在监听,那么就证明Pure-FTPd安装成功了。此时匿名用户就可以访问Ftp服务了。但是此时的服务离我们的需求还差得很远,需要对其进一步进行配置。
  2.配置Pure-FTPd
  为了方便管理,我们采取配置文件的方式运行Pure-FTPd。首先将源码包中的pure-ftpd.conf配置文件拷贝到Linux操作系统/etc目录下。然后用源文件包中自带的pure-config.pl脚本调用该配置文件来运行Pure-FTPd即可。下面我们对pure-ftpd.conf进行编辑。
  第一步,允许匿名用户上传和下载。配置参数及说明如下:
  NoAnonymousno //允许匿名用户连接该Ftp。
  AnonymousCantUploadno //允许匿名用户上传文件。
  AntiWarezno //允许匿名用户上传的文件被下载。
  AnonymousCanCreateDirsyes//允许匿名用户创建目录,让匿名用户上传文件夹。
  第二步,创建管理员账号。首先,我们需要创建一个Linux系统用户。root权限下执行如下命令:
  groupadd ftpgroup
  useradd -g ftpgroup -d /dev/null -s /etc ftpuser
  通过上面的命令,我们创建了一个Linux系统用户组叫ftpgroup,并且创建了一个隶属于该组的Linux系统用户ftpuser。在此基础上,我们创建隶属于Pure-FTPd的虚拟管理员用户,之所以创建虚拟用户,是出于安全和便利的双重考虑。因为虚拟用户只属于Ftp,这样的用户对于Linux系统来说更安全,同时虚拟用户针对Pure-FTPd的配置更加灵活。我们创建一个隶属于我们刚刚创建的系统账号ftpuser的叫admin的虚拟Ftp管理员账号,执行如下命令:
  pure-pw useradd admin -u ftpuser -d /home/cftp
  其中-d/home/cftp指明admin的宿主目录为/home/cftp。在创建过程中需要为admin账号输入密码,输入两次完全一致的密码就可以了。要想使我们刚刚创建的admin用户为Pure-FTPd所接受并生效,我们还需执行如下命令:
  pure-pw mkdb
  在pure-ftpd.conf配置文件中加入如下配置信息:
  PureDB /etc/pureftpd.pdb
  至此,一个虚拟管理员账号创建完毕。同理,我们也可以创建多个这样的账号,分配给不同的部门来管理班级Ftp。需要注意的是这些虚拟账号的宿主目录都应该是/home/cftp,因为cftp文件夹是所有目录的根目录。
  第三步,使管理员账号和匿名账号协同工作。由于管理员和匿名账号的工作目录是相同的,而它们对相同目录的操作权限又是不同的,所以怎么让它们协同工作是我们要处理的关键问题。
  首先,需要解决宿主目录的归属问题。由于所有的虚拟管理员账号都隶属于系统账号ftpuser及其组ftpgroup,那么这些账号的宿主目录/home/cftp应该归属于ftpuser用户和ftpgroup组。根据我们的需求分析,只允许匿名账号把文件上传到相应的班级文件中,那么班级文件夹应该归属于系统账号Ftp及其所在的组Ftp。当前匿名用户可以对班级目录进行上传和下载操作了,但是由于班级目录归属系统账号Ftp,所以虚拟管理员账号还不能对班级文件夹目录进行完全控制操作,如:可以删除匿名上传的文件而对上传的文件夹却不能删除。这时就需要我们来解决宿主目录的权限问题。处理宿主目录的归属,我们首先对cftp目录执行如下命令:chown R ftpuser:ftpgroup cftp,再对所有班级目录执行如下命令:chown ftp:ftp *。
  
  其次,需要解决宿主目录的权限问题。该问题的核心就是允许管理员账号对班级文件目录进行完全操作,特别是能够对匿名账号上传上来的文件夹进行完全控制操作。经过反复试验,我们找到了一个较好的解决办法,那就是使匿名账号同组(Ftp组)账号有权对匿名上传上来的文件夹进行读写执行操作,然后再把虚拟管理员账号追加到Ftp组。要达到此目的,需要修改pure-ftpd.conf的Umask参数为133:002,其中002就能够满足我们要到达的目的。在Linux系统下执行如下命令:usermod a-G ftp ftpuser,这样虚拟管理员账号即在ftpgroup组也在Ftp组,也就具有了Ftp组用户的所有权限。
  第四步,做好日志。由于上传是完全开放的,为了避免恶意上传,必须做好上传日志,一旦发现恶意上传,能够找到相关责任人,并在全校进行通报批评。严格详尽的日志也是对管理员的一个约束,避免恶意删除等操作。对pure-ftpd.conf进行如下配置:
  VerboseLogyes//记录所有客户端的操作命令。
  AltLogclf:/var/log/pureftpd.log //做类似Apache格式的日志。
  至此,Pure-FTPd的主要配置基本完成。
  附pure-ftpd.conf的完整配置信息:
  ChrootEveryoneyes
  BrokenClientsCompatibilityno
  MaxClientsNumber200
  Daemonize yes
  MaxClientsPerIP 8
  VerboseLogyes
  DisplayDotFiles no
  AnonymousOnly no
  NoAnonymous no
  SyslogFacilityftp
  DontResolve yes
  MaxIdleTime 15
  PureDB/etc/pureftpd.pdb
  AnonymousCanCreateDirsyes
  AntiWarez no
  Bind172.16.1