Archive for 2006年8月25日


网站类项目商业计划书模板

  网站类项目商业计划书

  目录

  报告目录

  第一部分 摘要(整个计划的概括)

  (文字在2-3页以内)
  一. 项目简单描述(目的、意义、内容、运作方式)
  二. 市场目标概述
  三. 项目优势及特点简介
  四. 利润来源简析
  五. 投资和预算
  六. 融资方案(资金筹措及投资方式)
  七. 财务分析(预算及投资报酬)

  第二部分 综述

  第一章 项目背景

  一. 项目的提出原因
  二. 项目环境背景
  三. 项目优势分析(资源、技术、人才、管理等方面)
  四. 项目运作的可行性
  五. 项目的独特与创新分析

  第二章 项目介绍

  一. 网站建设宗旨
  二. 定位与总体目标
  三. 网站规划与建设进度
  四. 资源整合与系统设计
  五. 网站结构/栏目板块
  六. 主要栏目介绍
  七. 商业模式
  八. 技术功能
  九. 信息/资源来源
  十. 项目运作方式
  十一. 网站优势(资源/内容/模式/技术/市场等)
  十二. 无形资产
  十三. 策略联盟
  十四. 网站版权
  十五. 收益来源概述
  十六. 项目经济寿命

  第三章. 市场分析

  一. 互联网市场状况及成长
  二. 商务模式的市场地位
  三. 目标市场的设定
  四. 传统行业市场状况(网站市场资源的基础)
  五. 市场定位及特点(消费群体、消费方式、消费习惯及影响市场的主要因素分析市场规模、市场结构与划分,特定受众等
  六. 市场成长(网站PageView与消费者市场)
  七. 本项目产品市场优势(对于特定人群的市场特点的省事、省时、省力、省钱等)
  八. 市场趋势预测和市场机会
  九. 行业政策

  第四章 竞争分析

  一. 有无行业垄断
  二. 从市场细分看竞争者市场份额
  三. 主要竞争对手情况

  第五章 商业实施方案

  一. 商业模式实施方案总体规划介绍
  二. 营销策划
  三. 市场推广
  四. 销售方式与环节
  五. 作业流程
  六. 采购、销售政策的制定
  七. 价格方案
  八. 服务、投诉与退货
  九. 促销和市场渗透(方式及安排、预算)
    1. 主要促销方式
    2. 广告/公关策略、媒体评估
    3. 会员制等
  十. 获利分析
  十一. 销售资料统计和销售纪录方式,销售周期的计算。
  十二. 市场开发规划,销售目标(近期、中期),销售预估(3-5年)销售额、占有率及计算依据

  第六章 技术可行性分析

  一. 平台开发
  二. 数据库
  三. 系统开发
  四. 网页设计
  五. 安全技术
  六. 内容设计
  七. 技术人员
  八. 知识产权

  第七章 项目实施

  1. 项目实施构想(公司的设立、组织结构与股权结构)
  2. 网站开发进度设计与阶段目标
  3. 营销进度设计与阶段目标
  4. 行政管理部门的建立、职工的招募和培训安排
  5. 项目执行的成本预估

  第八章 投资说明

  一. 资金需求说明(用量/期限)
  二. 资金使用计划(即用途)及分期
  三. 项目投资构成和固定资产投资的分类
  四. 主要流动资金构成
  五. 投资形式(贷款/利率/利率支付条件/转股-普通股、优先股、任股权/对应价格等)
  六. 资本结构
  七. 股权结构
  八. 股权成本
  九. 投资者介入公司管理之程度说明
  十. 报告(定期向投资者提供的报告和资金支出预算)
  十一. 杂费支付(是否支付中介人手续费)

  第九章 投资报酬与退出

  一. 股票上市
  二. 股权转让
  三. 股权回购
  四. 股利

  第十章 风险分析与规避

  一. 政策风险
  二. 资源风险
  三. 技术风险
  四. 市场风险
  五. 内部环节脱节风险
  六. 成本控制风险
  七. 竞争风险
  八. 财务风险(应收帐款/坏帐/亏损)
  九. 管理风险(含人事/人员流动/关键雇员依赖)
  十. 破产风险

  第十一章 管理

  一. 公司组织结构
  二. 现有人力资源或经营团队
  三. 管理制度及协调机制
  四. 人事计划(配备/招聘/培训/考核)
  五. 薪资、福利方案
  六. 股权分配和认股计划

  第十二章 经营预测

  一. 网站经营
    1.访问人数成长预测
    2.会员增长预测
    3.行业联盟预测
  二. 销售数量、销售额、毛利率、成长率、投资报酬率预估及计算依据

  第十三章 财务可行性分析

  一. 财务分析说明

  二. 财务数据预测
    1. 收入明细表
    2. 成本费用明细表
    3. 薪金水平明细表
    4. 固定资产明细表
    5. 资产负债表
    6. 利润及利润分配明细表
    7. 现金流量表

  三. 财务分析指标

  反映财务盈利能力的指标
   a. 投资回收期(Pt)
   b. 投资利润率
   c. 投资利税率
   d. 不确定性分析

  第三部分 附录

  一. 附件
  1. 主要经营团队名单及简历
  2. 专业术语说明
  3. 企业形象设计/宣传资料(标识设计、说明书、出版物、包装说明等)

  二. 附表
    1. 市场受众分析(人群分布/数量等)表
    2. 互联网成长状况表
    3. 主要设备清单
    4. 互联网市场调查表
    5. 预估分析表
    6. 各种财务报表及财务预估表

  *计划书须用电脑打出,隔行打印且页面采用宽边;标题用较大的粗体字小标题用黑体字;各大章节分页,正文须注明页码。

1. FTP 原理

FTP Transfer Protocol 件传输协议的缩写,在RFC 959中具体说明。

FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道。

控制通道:控制通道是和FTP服务器进行沟通的通道,连接FTP,发送FTP指令都是通过控制通道来完成的。

数据通道:数据通道是和FTP服务器进行文件传输或者列表的通道。

FTP协议中,控制连接均有客户端发起,而数据连接有两种工作方式:PORT方式和PASV方式

PORT模式(主动方式)

FTP 客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口(一个大于1024的端口)接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。

PASV模式(被动方式)

在建立控制通道的时候和PORT模式类似,当客户端通过这个通道发送PASV 命令的时候,FTP server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server 将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接传送数据。

如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,这一点非常关键,如果设置错了,那么客户将无法连接。

2. VSFTPD

vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux, BSD, Solaris, HP-UX 以及 IRIX 上面。它支持很多其他的 FTP 服务器不支持的特征。比如: 非常高的安全性需求 带宽限制 良好的可伸缩性 创建虚拟用户的可能性 IPv6支持 中等偏上的性能 分配虚拟 IP 的可能性 高速

vsftpd 的名字代表"very secure FTP daemon", 安全是它的开发者 Chris Evans 考虑的首要问题之一。在这个 FTP 服务器设计开发的最开始的时候,高安全性就是一个目标。

一个例子就是 vsftpd 是在 chroot 模式下工作的,chroot 模式就是为程序(这里就是 vsftpd 了)单独指定一个新的目录,它也就不能访问那个目录之外的程序和文件了 — 所以这也称为“被锁上的”。一个可能被潜在的攻击者破坏的 FTP 服务器将被从系统的其他部分独立开来,从而避免了更大的损失。

由于有了如此多的特性,其中 FTP 服务的安全性应该是最重要的,vsftpd 比其他 FTP 服务器更加优越。WU-FTPD http://www.wu-ftpd.org/ 在这里可以被视作一个反面的例子,因为它在过去的几年中出现了太多的安全缺陷。

3. VSFTPD的基本配置 3.1 安装

源代码安装

详细参阅:http://www.vsftpdrocks.org/source/

下载源代码

wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-1.2.1.tar.gz

解压

tar zxvf vsftpd-1.2.1.tar.gz

进入源代码目录

cd vsftpd-1.2.1

编译

make

创建用户

如果不存在 nobody用户,请创建

useradd nobody

创建目录

vsftpd 需要 /usr/share/empty 目录,如果不存在,请创建:

mkdir /usr/share/empty

安装

make install

复制配置文件到/etc目录

cp vsftpd.conf /etc

以独立方式启动vsftpd服务

/usr/local/sbin/vsftpd &

3.2 使用Debian的方式安装

        # aptitude update
        # aptitude install vsftpd( 2.0.5)

4. 配置文件说明 /etc/vsftpd.conf

vsftpd的主配置文件 /etc/ftpusers 记录不允许访问FTP服务器的用户名单管理员可以把一些对系统安全有威胁的敏感账户记录在这个文件中,以免对系统造成威胁

        # /etc/ftpusers: list of users disallowed FTP access. See ftpusers(5).

        root
        daemon
        bin
        sys
        sync
        games
        man
        lp
        mail
        news
        uucp
        nobody

/etc/vsftpd.user_list

此文件与userlist_file 选项有关, 也可通过userlist_file选项指定其他文件, 默认为/etc/vsftpd.user_list,设置userlist_enable=YES时方可生效, 默认(userlist_deny=YES)指定不能访问服务器的用户列表,如设定userlist_deny=NO,则FTP服务器仅允许此列表中的用户访问。

/etc/init.d/vsftpd

vsftpd的启动脚本

/var/log/vsftpd.log

vsftpd的日志文件

4.1 配置相关内容参阅:

        man vsftpd.conf

或参阅:我翻译的VSFTPD.CONF联机手册 http://etony.9966.org/doc/other/vsftpd-man-zh.html
4.2 系统的启动与停止

启动服务

        /etc/init.d/vsftpd start

重启服务

        /etc/init.d/vsftpd restart

停止服务

        /etc/init.d/vsftpd stop

也可以使用 rcconf 工具设置vsftpd 服务是否在系统引导时启动
5. 配置示例

一个示例文件

        # 以独立模式启动
        listen=YES


        #同时允许200客户端连入,每个IP最多允许4个进程
        max_clients=200
        max_per_ip=4

        允许匿名访问,只有下载权限。 禁止本地(系统)用户登录
        # Access rights
        anonymous_enable=YES
        local_enable=NO
        write_enable=NO
        anon_upload_enable=NO
        anon_mkdir_write_enable=NO
        anon_other_write_enable=NO


        # 禁止匿名用户下载具有全局读取权限的文件,目录中的用户和组信息列取时都显示为 "ftp".
        #被动模式下,服务器端口范围限制在50000~60000

        anon_world_readable_only=YES
        connect_from_port_20=YES
        hide_ids=YES
        pasv_min_port=50000
        pasv_max_port=60000

        # 生成详细的上载和下载日志,禁止使用"ls -R"命令,

        xferlog_enable=YES
        ls_recurse_enable=NO
        ascii_download_enable=NO
        async_abor_enable=YES


        # 以节省资源模式运行(针对 Linux 2.4 内核),
        #远程客户端最大 FTP 命令间隔超过120秒,或空闲的数据连接超过300秒,都将被断开
        #匿名客户端允许的最大数据传输速率50000b/s
        one_process_model=YES
        idle_session_timeout=120
        data_connection_timeout=300
        anon_max_rate=50000

6. 为VSFTPD配置虚拟用户(文本方式) 6.1 创建虚拟与用户数据库

1. 创建loguser.txt,格式如下:

                userid
                pass
        

比如我创建两个用户:tony 密码为tonypass,etony密码为etonypass 则loguser.txt的内容如下:

                tony
                tonypass
                etony
                etonypass
        

2. 安装数据库生成工具:

                # aptitude install  libdb3-util
        

3. 生成数据库:

                # db_load -T -t hash -f loguser.txt /etc/vsftpd_login.db
        

4. 设置数据库文件的访问权限:

                # chmod 600 /etc/vsftpd_login.db
        

6.2 配置PAM文件

修改/etc/pam.d/vsftpd 内容如下:

        auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
        account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

6.3 为虚拟用户创建本地系统用户

        useradd -d /home/ftpsite virtual
        mkdir /home/ftpsite
        chown virtual.virtual /home/ftpsite
        ls -ld /home/ftpsite
        drwxr-sr-x 2 virtual virtual 48 2006-08-18 05:48 /home/ftpsite

在目录下创建一些内容

        echo "etony's vsftpd server" > /home/ftpsite/msg

        chown virtual.virtual /home/ftpsite/msg

6.4 创建/etc/vsftpd.conf

根据需要创建/etc/vsftpd.conf,但要确保含有一下设置:

        anonymous_enable=NO
        local_enable=YES
        write_enable=NO
        anon_upload_enable=NO
        anon_mkdir_write_enable=NO
        anon_other_write_enable=NO
        chroot_local_user=YES
        guest_enable=YES
        guest_username=virtual
        listen=YES
        listen_port=21
        pasv_min_port=30000
        pasv_max_port=30999

6.5 启动vsftpd

        /etc/init.d/vsftpd start|restart

6.6 测试

        $ lftp localhost -u tony,tonypass
        lftp tony@localhost:~> ls
        -rw-r--r--    1 1001     1001           22 Aug 17 21:49 msg
        lftp tony@localhost:/> exit
        $ lftp localhost -u tony,tonyp
        lftp tony@localhost:~> ls
        ls: Login failed: 530 Login incorrect.

7. 为VSFTPD配置虚拟用户(数据库方式) 7.1 安装MySQL数据库

        # aptitude install  mysql-server  libpam-mysql

当前MySQL数据库版本为5.0.24-1 libpam-mysql 0.6.2-1

        tonybox:/var/log# mysql -u root
        Welcome to the MySQL monitor.  Commands end with ; or g.
        Your MySQL connection id is 7 to server version: 5.0.22-Debian_4-log

        Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

        mysql>
        mysql>
        mysql> create database vsftpd;
        Query OK, 1 row affected (0.04 sec)

        mysql> use vsftpd
        Database changed
        mysql> create table users(name char(20), passwd char(20));
        Query OK, 0 rows affected (0.02 sec)

        mysql> insert into users values('tony',password('passtony'));
        Query OK, 1 row affected (0.02 sec)

        mysql> insert into users values('etony',password('passetony'));
        Query OK, 1 row affected (0.01 sec)

 mysql>grant select,insert on vsftpd.users to vsftpduser@localhost identified by 'vsftpdpass';
 Query OK, 0 rows affected (0.02 sec)

7.2 创建用户

        tonybox:/var/log# mysql -u vsftpduser -p
        Enter password:
        Welcome to the MySQL monitor.  Commands end with ; or g.
        Your MySQL connection id is 10 to server version: 5.0.22-Debian_4-log

        Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

        mysql> use vsftpd
        Reading table information for completion of table and column names
        You can turn off this feature to get a quicker startup with -A

        Database changed

        mysql> select * from users;
        +----+-------+------------------+
        | id | name  | passwd           |
        +----+-------+------------------+
        |  1 | tony  | 2351315b1bd1bd58           |
        |  2 | etony | 59c0cde4781fb0be |
        +----+-------+------------------+
        2 rows in set (0.00 sec)


        mysql>

7.3 配置PAM文件

修改/etc/pam.d/vsftpd 内容如下:

   auth required /lib/security/pam_mysql.so user=vsftpduser passwd=vsftpdpass host=localhost 
db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2 account required /lib/security/pam_mysql.so user=vsftpduser passwd=vsftpdpass host=localhost
db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2

crypt 的值

        0: 在数据库中明文存储
        1: 使用crypt()函数加密存储
        2: 使用MySQL PASSWORD()函数加密存储

7.4 测试

        tonybox:~# lftp localhost -u etony,passetony
        lftp etony@localhost:~> ls
        -rw-r--r--    1 1001     1001           22 Aug 17 21:49 msg
        lftp etony@localhost:/>

注:

与mysql-server-5.0对应的libpam-mysql由于使用的PASSWORD()函数与服务器端使用的PASSWORD()不匹配, 故无法实现密码加密,仅可实现在数据库中明文存储ftp用户密码。 mysql-server-4.1 与 libpam-mysql( 0.5.0-6)可以实现在数据库中使用加密存储ftp用户密码

8. FAQ

http://www.vsftpdrocks.org/faq/ 中文版参阅:http://wolfg.iblog.cn/index.phpp=ViewArticle$articleId=50969

Q) 为什么设置了chroot_local_user=YES后,符号链接(symlink)就不起作用了呢? A) 这是chroot()这种安全机制如何工作的结果。可选地,看一下硬连接(hard links),或者,你用的是"现代的"Linux,看一下强大的"mount –bind"命令。

Q) 求助!我得到了"refusing to run with writable anonymous root"错误信息。 A) vsftpd是不允许"危险(不安全)"的配置的。出现这个错误信息的原因通常是ftp的家(home)目录的属主权限不正确。 家(home)目录的属主不应该是ftp用户自己,而且ftp用户也不能有写的权限。解决的方法是: chown root  ftp; chmod -w  ftp

Q) 求助!上传或其他"写"命令都报"500 Unknown command.". A) 默认情况下"写"命令(上传和建新目录等)都是被禁止的. 这是一种安全的方法. 要允许写命令需要在配置文件/etc/vsftpd.conf中加入write_enable=YES.

Q) 求助!上传后的文件权限是-rw——-。 A1) 根据上传用户是本地用户还是匿名用户,修改local_umask或anon_umask选项。例如,设置anon_umask=022指定匿名上传的文件权限为-rw-r–r–。注意,22前面的0不能少。 A2) 也可以看看vsftpd.conf的man帮助中的新选项file_open_mode。

1. 概述

NFS(Network File System)是一种分布式文件系统,允许网络中的安装不同操作系统的计算机间共享文件和外设,所以它的通讯协定设计与主机及作业系统无关. 它是由SUN公司于1984年推出,使得可以本地机一样的使用另一台联网计算机的文件和外设。NFS在文件传送或信息传送过程中依赖于RPC协议。NFS的当前版本是V4(RFC3010)

RPC, 远程过程调用 (remote procedure call) 是能使客户端执行其他系统中程序的一种机制。由于使用 RPC 的程序不必了解支持通信的网络协议的情况,因此 RPC 提高了程序的互操作性。常用于分布式客户端/服务器模型, 发出请求的程序是客户程序,而提供服务的程序是服务器。RFC1831

2. 安装 2.1 环境描述:

网络环境:

        NFS server: 192.168.102.47
        NFS client: 192.168.102.15
        NFS client: 192.168.102.61

软件版本

        nfs-common              5-20 
        nfs-kernel-server       1.0.9-5 
        portmap                 1.0.9-5

2.2 安装:

服务器端安装

在Debian系统下安装NFS是相当简单的,在NFS服务器上执行下面的命令即可

        # aptitude install  nfs-common nfs-kernel-server portmap

在客户端则需要安装:

        # aptitude install  nfs-common portmap

2.3 服务的启动与停止

启动服务

        # /etc/init.d/nfs-kernel-server start

停止服务

        # /etc/init.d/nfs-kernel-server stop

重启服务

        # /etc/init.d/nfs-kernel-server restart

3. 服务器端配置 3.1 创建共享目录

        # mkdir /home/share
        # chown nobody.nogroup /home/share

3.2 创建或修改/etc/exports 配置文件

这个文件的内容非常简单,每一行由抛出路径,客户名列表以及每个客户名后紧跟的访问选项构成:

        [共享的目录] [主机名或IP(参数,参数)] 

其中参数是可选的,当不指定参数时,nfs将使用默认选项。默认的共享选项是 sync,ro,root_squash,no_delay。

当主机名或IP地址为空时,则代表共享给任意客户机提供服务。

当将同一目录共享给多个客户机,但对每个客户机提供的权限不同时,可以这样:

        [共享的目录] [主机名1或IP1(参数1,参数2)] [主机名2或IP2(参数3,参数4)]

下面是一些NFS共享的常用参数:

        ro                      只读访问 
        rw                      读写访问 
        sync                    所有数据在请求时写入共享 
        async                   NFS在写入数据前可以相应请求 
        secure                  NFS通过1024以下的安全TCP/IP端口发送 
        insecure                NFS通过1024以上的端口发送 
        wdelay                  如果多个用户要写入NFS目录,则归组写入(默认) 
        no_wdelay               如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。 
        hide                    在NFS共享目录中不共享其子目录 
        no_hide                 共享NFS目录的子目录 
        subtree_check           如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认) 
        no_subtree_check        和上面相对,不检查父目录权限 
        all_squash              共享文件的UID和GID映射匿名用户anonymous,适合公用目录。 
        no_all_squash           保留共享文件的UID和GID(默认) 
        root_squash             root用户的所有请求映射成如anonymous用户一样的权限(默认) 
        no_root_squas           root用户具有根目录的完全管理访问权限 
        anonuid=xxx             指定NFS服务器/etc/passwd文件中匿名用户的UID 
        anongid=xxx             指定NFS服务器/etc/passwd文件中匿名用户的GID 

配置文件/etc/exports内容如下:

        $ cat /etc/exports

        /home/share 192.168.102.15(rw,sync) *(ro)

配置说明: 对192.168.102.15赋予读写权限,其他机器仅有只读权限。

3.3 重启NFS服务

        # /etc/init.d/nfs-kernel-server restart

3.4 在客户机上查看NFS的资源共享情况

        # showmount -e 192.168.102.47

        Export list for 192.168.102.47:
        /home/share (everyone)

3.5 使用mount命令即可挂栽共享资源

在客户机 192.168.102.15 上加载共享资源

        # mount 192.168.102.47:/home/share /mnt

        # cd /mnt
        
        # echo '12345'> 123

即可发现对服务器共享目录可写

        # umount /mnt

在客户机 192.168.102.61 上加载共享资源

        # mount 192.168.102.47:/home/share /mnt

        # cd /mnt

        # ls
        123

        # touch 321

        touch: cannot touch `321': Permission denied

        # echo '123455' >123

        -bash: 123: Permission denied

即可发现对服务器共享目录只有读取权限,

这与我们在服务器端的权限设置是相符的。

是不是我们每次修改了配置文件都需要重启nfs服务呢? 这个时候我们就可以用exportfs命令重新扫描/etc/exports文件,来使改动立刻生效。

比如:

        # exportfs -au 卸载所有共享目录

        # exportfs -rv 重新共享所有目录并输出详细信息

exportfs 命令有软件包 nfs-kernel-server 提供,详细的 exportfs 命令说明请查看:

        man exportfs

当完成资源共享, 我们如何知道发布了哪些权限呢?这时我们可以查看 /var/lib/nfs/etab 文件,它是有 exportfs 命令根据 /etc/exports 生成的。

        # cat /var/lib/nfs/etab

        /home/share     192.168.102.15(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,
no_all_squash,subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534) /home/share *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,
subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)

现在我们来查看服务器上有关NFS服务器启动了哪些端口:

        tonybox:/home/share# lsof -i|grep rpc
        portmap   1931 daemon    3u  IPv4   4289       UDP *:sunrpc
        portmap   1931 daemon    4u  IPv4   4290       TCP *:sunrpc (LISTEN)
        rpc.statd 3206  statd    3u  IPv4   7081       UDP *:1029
        rpc.statd 3206  statd    6u  IPv4   7072       UDP *:838
        rpc.statd 3206  statd    7u  IPv4   7085       TCP *:1031 (LISTEN)
        rpc.mount 3483   root    6u  IPv4   7934       UDP *:691
        rpc.mount 3483   root    7u  IPv4   7937       TCP *:694 (LISTEN)

4. 安全问题: 4.1 Iptables 防火墙

如果我们的NFS服务器在防火墙后边,则需要在防火强策略中加入如下策略:

   -A INPUT -p tcp -m state --state NEW -m multiport --dport 111,2049,4001,32764:32767 -j ACCEPT
   -A INPUT -p udp -m state --state NEW -m multiport --dport 111,2049,4001,32764:32767 -j ACCEPT

4.2 使用 /etc/hosts.allow和/etc/hosts.deny 控制客户端的访问

/etc/hosts.allow和/etc/hosts.deny这两个文件是tcpd服务器的配置文件,tcpd服务器可以控制外部IP对本机服务的访问。这两个配置文件的格式如下:

        #服务进程名:主机列表:当规则匹配时可选的命令操作

        server_name:hosts-list[:command]

/etc/hosts.allow控制可以访问本机的IP地址,/etc/hosts.deny控制禁止访问本机的IP。如果两个文件的配置有冲突,以 /etc/hosts.deny为准。下面是一个/etc/hosts.allow的示例:

        ALL:127.0.0.1         #允许本机访问本机所有服务进程

        smbd:192.168.0.0/255.255.255.0     #允许192.168.0.网段的IP访问smbd服务

ALL关键字匹配所有情况,EXCEPT匹配除了某些项之外的情况,PARANOID匹配你想控制的IP地址和它的域名不匹配时(域名伪装)的情况。

比如,在服务器的 /etc/hosts.deny 文件作如下设置:

        # cat /etc/hosts.deny

        portmap:192.168.102.15

然后在客户机192.168.102.15上加载共享目录

        #  mount 192.168.102.47:/home/share /mnt
        mount to NFS server '192.168.102.47' failed.

我们发现现在已经无法加载共享目录的。

5. 资源使用

除了使用mount的命令手动挂栽共享资源,还可以使用其他方法实现共享资源的自动挂栽:

5.1 启动时自动挂栽

修改客户机的 /etc/fstab文件,加入类似如下行:

        192.168.102.47:/home/share      /mnt    nfs     rsize=8192,wsize=8192,timeo=14,intr

重启客户机,即可实现系统启动时自动挂栽共享资源

5.2 使用 autofs 实现资源挂栽

autofs 使用 automount 守护进程来管理你的挂载点,它只在文件系统被访问时才动态地挂载它们。 autofs 查询主配置文件 /etc/auto.master 来决定要定义哪些挂载点。然后,它使用适用于各个挂载点的参数来启动 automount 进程。主配置中的每一行都定义一个挂载点,然后用单独的配置文件定义在该挂载点下要挂载的文件系统。

安装 autofs

        # aptitude  install autofs

修改/etc/auto.master文件, 加入如下内容:

        /mnt      /etc/auto.nfs

创建 /etc/auto.nfs 文件内容如下:

        nfs -rw,soft,intr,rsize=8192,wsize=8192 192.168.102.47:/home/share

这样,每当您进入 /mnt/nfs 目录时,系统都会尝试将服务器的共享资源挂栽到该目录上。应当注意nfs目录是由 automount 动态地创建的,它不应该在客户机器上实际存在。

        tonybox2:/# cd /mnt
        tonybox2:/mnt# ls
        tonybox2:/mnt# cd nfs
        tonybox2:/mnt/nfs# ls
        123
        tonybox2:/mnt/nfs# ls -l
        total 4
        -rw-r--r-- 1 nobody nogroup 6 2006-08-22 07:50 123
        tonybox2:/mnt/nfs#

如果修改了/etc/auto.master主配置文件,则需要运行

        #/etc/init.d/autofs reload

对其进行重新加载