鸟哥的 Linux ADSL 私房菜


架站之前所需的技能分析
最近更新日期:2003/09/06
 
很多的朋友常常会问的一句话就是:『我学 Linux 就是为了架站,既然只是为了架站,为什么我还要学习 Linux 的其它功能!?例如:例行性工作排程、Bash 这个文字接口的 Shell 、干嘛去认识所有的登录档等等,我又用不到!此外,既然 Webmin 这个好用的 Web 接口的 Server 架设软件这么简单就可以将网站架设起来,为什么我还要去学习 vi 手动的去编辑一些设定档?干嘛还需要去理解他的原理?』上面这些话对于刚刚学会架设网站的人来说,真是替他们道出了一个新手的心声!不过,对于任何一个曾经有过架设公开网站的朋友来说,上面这些话,真的是会害死人~要知道,『架站容易维护难』啊!更深一层来说,『维护还好、除错更难啊』 架设一个网站有什么难的?即使您完全没有摸过 Linux ,只要参考 VBird 的书籍或者是网站,而且一步一步照着做,包准您一个下午就可以架设完成五个以上的网站了!所以说,架站有什么难的?!但是,要晓得的是,这样的一个网站, 多则三天,少则数小时,立刻就会被入侵了!此外,被入侵之后,或许可以藉由一些工具来帮您将 root 的密码救回来,可惜的是,这样的一个网站还是有被做为中继站的危险存在的!此外,如果您使用工具 (例如 Webmin) 却怎么也架设不起来某个网站时,要怎么解决?如果您不懂该 Server 的运作原理与 Linux 系统的除错讯息,那么难道只能无语问苍天?不要怀疑这种情况的可能性,参考一下 BBS 上面的留言就可以很清楚的知道这种情况的存在有越来越明显的趋势呢!所以说,架站之前还是有一些基本的技能需要学会的!而且这些技能是『一旦学会之后,真正是终身受用啊!只要花一个学期(三~六个月)就能学会一辈子可以使用的技能,这个学习的投资报酬率真是太高了所以,一开始的学习不要觉得苦,那真的是值得的喔! ^_^
 
前言
基本架站流程
  :了解网络基础
  :了解架站的目的
  :Linux 安装硬盘规划
  :了解欲架设的网站服务原理
  :服务的套件安装、漏洞修补、套件升级...
  :主机设定、启动、观察与除错
  :客户端设定、观察与除错
  :安全性设定
  :服务日志、登录文件与备份管理
  :小结语
自我评估是否已经具有架站的能力
课后练习

前言:
    如果有人问您:Linux 最强大的功能是什么』?大概大家都会回答『是网络功能啊!』,接下来,如果对方再问:『所以学 Linux 就是为了架站啰?』呵呵!这个问题可就见仁见智啰!说穿了, Linux 其实就是一套非常稳定的操作系统,那么任何工作只要能在 Linux 这个操作系统上面跑,那他就是 Linux 可以达成的功能之一啰!所以 Linux 的作用实在不止于网络服务器的架设吶。举例来说,在 Linux 上面开发跨平台的程序 ( program ) 诸如大型的数值模式,由于 Linux 的稳定与强大的资源分配功能,使得在 Linux 上面开发出来的程序运作的又快又稳定。此外,诸如 KDE, GNOME 等漂亮的图形接口,搭配诸如 Open Office 等办公室软件,Linux 立刻摇身一变而成为优秀的的办公室桌面计算机了 ( Desktop )。所以说,千万不要小看了 Linux 的多样功能吶。
     
    不过,不管怎么说, Linux 的强大网络功能确实是造成 Linux 能够在服务器领域内占有一席之地的重要项目。既然如此,我们就好好的来探索一下 Linux 的网络世界吧!首先, Linux 到底可以达成哪些网络功能呢?这可就多着咯!不论是 WWW, Mail, FTP, DNS, 或者是 DHCP, NAT 与 Router 等等,Linux 系统都可以达到,而且,只要一部 Linux 就能够达到上面所有的功能了!当然,那是在不考虑网络安全与效能的情况下,您可以使用一部 Linux 主机来达成所有的网络功能。
     
    哇!Linux 有那么多的功能啊!那么我可以轻轻松松的就架设好一部以 Linux 为操作系统的服务器吗?!』呵呵!很可惜,答案是『』!您无法轻松的就完成一部『堪称完美』的服务器架设,而是必需要很用心,并且学习很多相关的概念与操作方法后,才能够架设好一部完美的服务器。什么?!要很用心啊!使用 Windows 随随便便就可以架设好好几个服务器了,那么我干嘛要花时间去学习 Linux 来架设服务器呢?
     
    唉!这真是伤脑筋吶!『谁说使用 Windows 架设服务器就很简单』的?!就鸟 哥的感觉来说,架设 Windows 服务器一点也不轻松。为什么呢? (1) 首先,在尚未进入服务器设定之前,您必需就『授权模式』进行深入的研究,因为,不同的使用者数量将会影响到您的服务器的『价格!』,光是这一点,就可能让 我一个头两三个大了~因为,玩工程的,对于『价格』这东西,总是缺乏一点概念啊~好了,经过了授权模式的洗礼之后, (2) 再来进入到服务器的设定方面,呵呵!这个部分可就容易的多了吧?!没错,确实是按几下鼠标按钮就可以架设好一两个服务器了。不过,『万一』该服务器架设完 成后,并不符合您当初的要求时该怎么办?不会发生这样的事情吗?!当然会发生啦!因为 Windows 为了达成所谓的『亲和性与便利性』,所以在您的设定过程中,他会『很亲和的自动帮您加入某些参数』,不过可惜的是,这些参数并不见得适合每个人,所以有时 候您必需要自行修改这些设定值。偏偏 Windows 服务器大部分的设定档都是一些特殊格式,您无法使用简易的文书编辑器去修改~ (3) 再者,更遗憾的是,如果服务器设定出了点小问题,总是无法达成您的要求,设定也都看过了,那么要如何除错呢?!如果您没有网络的基本概念,以及 Windows 相关的登录档案管理技巧,呵呵!即使 Windows 在设定上做了很多的简化,我想,您依旧无法设定出适合您自己的服务器的啦!
     
    所以说,不管是 Windows 还是 Linux ,其实,要架设好一部堪称完美的服务器,『基本功课』还是得做的,这包括了:
     
    1. 该操作系统的简易操作,以及登录分析、账号管理、文书编辑器的使用等等的技巧;
    2. 网络的基本概念;
    3. 防火墙方面的相关知识等等。
     
    而且,每一个项目里面所需要学习的技巧可多着呢!『什么?要学的东西那么多啊?!』是啊!所以,不要以为信息管理人员整天闲闲没事干的吶,大家可是天天在出卖知识的,同时,还得天天应付随时可能会发生的各种漏洞与网络攻击手法呢!真不是人干的工作~~
     
    这么说的话,架站真的是挺难的喔!事实上,架站其实蛮简单的哩!咦!~怎么又说架站简单了?不是说架站难吗?呵呵!其实『架站很难』是由于朋友们 学习的角度有点偏差的原因啦!还记得当初进入理工学院的时候,天天在念的东西是基础物理、基础化学、工程数学与流体力学等基础科目,这些科目花了我们一至 两学期的时间,而且内容还很难吶~都是一大堆的理论背不完。怪了?我们进理工学院是为了求取更高深的知识,那么这些基础知识学了有什么用吶?!呵呵!更高 深的知识都是建构在这些基本科目的理论上面的,所以,万一您基础的科目没有读好,那么专业科目里面提到的基本理论怎么可能听的懂?!这样说应该就不难了解了吧?!没错!认识操作系统与该操作系统的基本操作,还有那个重要的网络基础,就是我们在架站前的『基础科目』啦!所以说,在进入 Linux 的服务器世界之前,真的不能够略过网络基础的相关知识,同时, Linux 系统的基本技能也必需要能够理解吶!
     
    好了,或许您还是对于 Linux 系统里面『什么是很重要的知识』不甚了解,果真如此的话,那么我们就举个简单的例子来说明一下啰!底下列出一般的架站流程,我们由架设服务器的流程当中,来看一看什么是重要的 Linux 相关技能吧! ^_^。(注:在这一章当中,鸟哥不再就 linux 基础指令进行解析,因为在『鸟哥的 Linux 私房菜 -- 基础学习篇』里面已经详细的介绍过了!如果持续的介绍指令,简直是浪费篇幅~所以底下仅介绍一个 Linux 基础学习重要性的分析喔!)

基本架站流程:
    虽然不同的 Server 提供的服务并不相同,而且,每种服务的原理也不见得都一样,不过,每种服务器由规划、架设到后续的安全维护,事实上,整个流程是大同小异的。所以,底下我们就整个服务器的简易架设流程当中,来分析一下,为什么了解操作系统的基础对于网站维护是相当重要的呢
     
    首先,先来分析一下,如果要架设一个网站时,架设的基础流程是怎样的一回事。大致的流程有点像底下这样:
     
    1. 了解网络基础 :

    2. 既然要架设网站,如果对于网站最最基本的网络基础知识无法具备的话,那么.....当然无法管理好网站啦!举个例子来说,不论何种操作系统,常常会使用到所谓的『网域』的概念,当您发现一个设定为 192.168.1.0/255.255.255.0 时,晓得那是什么鬼东西吗?!如果不知道的话,呵呵!绝对无法设定好的啦!
       
    3. 了解架站的目的:

    4. 想要架站,架什么站!?架这个站后,要不要对 Internet 开放?要不要提供什么服务给其它外面 (指 Internet 上的用户 ) 的使用者?提供这些服务时,需不需要做限制 ( 例如限制使用者可以使用的硬盘空间或网页、邮件的最大容量 )?如果要做限制时,需要怎么样选购您的主机硬件?要进行这些规划时,都需要知道架站的目的呢。不过,如果架站只是为了『练功』而已,呵呵!那就不需要考虑太多了~
       
    5. Linux 安装硬盘规划

    6. 好了,不论您的网站规模有多大,只要是对 Internet 开放的网站,几乎一定都需要硬盘的啊!因为网站的资料需要有地方可以储存吶!那么您要如何选购硬盘,还有,硬盘应该进行怎样的分割 ( Partition ) 比较好?举个例子来说,如果您想要架设邮件主机,那么硬盘应该如何规划呢?给您猜~
       
    7. 了解欲架设的网站服务原理

    8. 这个与刚刚第一点有点类似!也是属于基本原理方面啦!举个例子来说,当您晓得了 Mail Server 的运作原理,自然就比较容易架设成功,此外,也比较容易进行除错!
       
    9. 服务的套件安装、漏洞修补、套件升级...

    10. 好不容易决定了硬盘的规划,并且 partition 与 Linux 这个操作系统都安装好了,接下来自然就是安装我们所想要架设的服务器软件啦!例如:如果要架设 Mail Server ,那么 Sendmail 或者是 Postfix 这两个邮件服务器软件就配上用场啦!咦!有两种邮件服务器软件啊?呵呵!当然不止~邮件软件可多的很呢!那我要选择哪一个邮件服务器软件?需要考虑安全 性、架设的便利性、以及执行的效能与稳定性等等!呵呵!累了吧!
       
    11. 主机设定、启动、观察与除错

    12. 在完成了 Linux 安装,并且将服务器软件安装好了之后,再来当然就是设定啰!这个部分就是我们常常看到的一些文件说的比较多的部分啦!在主机的设定当中,其实设定项目并不难,了不起都是照着文件设定就可以了!不过,由于每个人的主机环境不一样( 例如安装的套件版本啦, Linux distribution 的不同啦, 编译器的不同啦,这些都是主机环境的一环! ),所以,同样的一份设定在不同的机器上,嘿嘿,可能不会一定百分之百能执行的吶!这个时候,观察主机的登录文件与相关的讯息,并加以进行错误克服 ( debug ) 的动作可就相当的重要了呢!这也是大家常常会忽略的部分。
       
    13. 客户端设定、观察与除错

    14. 这部份也是需要的,因为有的服务器需要客户端也进行设定才行!例如邮件主机加上身份认证功能时,就需要在客户端上面设定好身份认证的确认啰!
       
    15. 安全性设定

    16. 网络安全是很重要的,问题是,要怎么样达成网络安全的相关设定呢?有哪些档案、套件、指令与数据可以查寻?
       
    17. 服务日志、登录文件与备份管理

    18. 呵呵!毕竟没有人敢说『我的网络是绝对安全的,我的硬件是绝对没有问题的!』既然如此的话,备份就成了重要的课题了!问题是,如何备份呢?使用什么指令来备份?使用什么媒体来备份?需不需要手动来备份?还是交给系统自行每日、每周自动备份?!这都是挺重要的!
       
    整个服务器的架设流程大概就如同上面所提的几个步骤啰!那么每个步骤底下与 Linux 系统基本操作有关的数据有哪些呢?我们就分项目来谈一谈吧!
     

    了解网络基础
     
    既然是要架设网站,那么网站最基本的知识,就是那个OSI 七层协议,至少就需要了解一下啰!虽然只是一个 OSI 七层协议,但这里面包含了:
       
    还有我们最关心的,网络频宽到底是由哪一个设备所限制,以及在局域网络内的布线该如何配置。哇!说 起来好像很麻烦!其实只要稍微深入了解一下基本的原理,就可以约略的厘清您一些网络概念了。这对于您未来架设防火墙以及维护网站,尤其是发生问题后的问题 认定与除错,都有很大的关系吶!事实上,不论您是使用什么操作系统来架设您的网站,这个网络基础的部分都是一定要了解的!通常不了解网络基础的朋友,在架 设网站的时候,最容易发生一些基础设定的错误了!所以,这部份的学习千万不能省略啊!
     
    对于网络基础的问题当中,一个最常见的经典案例是,『192.168.1.0/24』是什么东西? 呵呵!这东西代表的是一个『网域』,这个网域起始到结束的 IP 范围是多少您看得出来吗?!这种表示方法在各种服务器的架设中很常见到,如果您不了解的话,呵呵!当然无法进行服务器的架设啰 ( 注:各种操作系统均会出现这样的设定值喔 )。还有,如果您的主机明明就可以使用 ping 这个指令去接触远方的主机 ( ping IP ),但是就是无法使用 ping hostname 去接触远方的主机,请问,这个原因是什么呢?了解网络基础的朋友一看就知道几乎是 DNS 出问题了,不晓得的朋友就是想破头也得不到答案~其实这个概念说难不难,但是至少一定得需要学习过吶!而且,这些知识在您学会之后,未来再接触到其它不同 的操作系统时,呵呵!可让您学习的过程『顺畅无比』吶!因为那是最最基本的理论,各个操作系统都是建构在这些网络基础上面,所以,当您换了另外一套作业系 统后,基本上,只有指令的下达方式不一样而已,基本原理是一样的吶!所以说,学习的过程当然会顺畅到底啰! ^_^。
     
    而且,网络基础会影响到您的网络设定是否正确,这真的很重要吶,因为,如果您的网络不通,那么即使服务器架设成功了,别人可以看的到吗?!所以说,要架站,真的得对网络基础的部分下一些功夫才行的。关于网络基础这部份的介绍我们会在下一章网络基础时再详加说明喔!
     

    了解架站的目的
     
    架站的目的与您的主机规划是一体两面的!因为我们必需要了解主机未来的用途与使用的客户端数目,才能够开始选择硬件与分配网络频宽,并且规划我们的 Linux 系统啊!所以说,了解架站目的是很重要的!举几个例子来说好了:
       
    由上面的例子来看,不同功能的主机在硬件配备与软件规划上面是不一样的!所以,在进行 Linux 主机的规划之前,建议一定要了解这个主机的功能,甚至最好还能预设一些未来可能加入的功能规划呢!那我怎么知道我的主机要有什么样的功能?又什么样的功能 可以满足我的需求呢?这当然是需要经验的!呵呵!这又得要回到刚刚前一个主题啰!至少需要了解到网络的基础,这样就能够知道您应该架设什么样的网站啦!举 个例子来说,如果您只是想要让 Linux 达成频宽分享而已,那么 Router 或者是 NAT 的设定即可满足的需求,万一您还需要了解每个使用者经常使用的网站,那么最好就是搭配 Proxy 以及分析软件来分析。然而 NAT 不需要很好的硬件配备即可达成,Proxy 如果要效能好一点,就必需要比较高档的硬件来搭配~咦!我怎么知道的?这当然是鸟哥已经较为熟悉每种服务所使用的硬件状态与他的服务原理啊。所以啰!在主机的规划之前,务必要先了解主机的架设目的喔!
     
    那么这部份与 Linux 基础有何关系?!关系大了!
     
    1. 必需熟悉 Linux 的档案配置与架构:

    2. 例如 /boot 放置的是开机核心数据、 /usr 放置的是预设的系统程序以及原始文件与一些 man page 、/home 是一般身份用户的预设家目录所在、 /var 则是登录档、暂存盘、邮件信箱档案等放置的目录、/tmp 是任何人皆可使用的暂存目录等等,您必需要熟悉 Linux 各个目录的用途,这样在未来进行硬盘的规划时,才能够符合需求!举例来说,因为磁盘配额 ( Quota ) 仅能针对整个 partition 来动作,而如果您想让每个使用者有两种 quota 数值 ( 例如每人拥有邮件 20MB 以及 WWW 10MB 的硬盘空间 ) ,就必需要预设针对 /home 与 /var/spool/mail 规划出两个独立的 partition 才行啊!当然啦,使用连结档 ( link file ) 也是一个可行的方案,不过,您就得要预留一些硬盘空间来预备使用吶!
       
    3. 硬盘的代号:

    4. 硬盘的代号真的是挺重要的,因为在 Linux 底下,每一个装置都以档案来表示的!因此,您必需要了解到硬盘与排线的接法对于硬盘在 Linux 系统中的代号的关系。例如:
       
       
      Master
      Slave
      IDE 1
      /dev/hda
      /dev/hdb
      IDE 2
      /dev/hdc
      /dev/hdd
       
      上面的磁盘代号只与 IDE 接口的装置有关,什么是 IDE 接口啊!就是目前所谓的 Ultra DMA 66/100/133 的硬盘啊,或者是光驱与刻录机,这些装置均可直接以主机板上面的 IDE 排线接在一起说。不过,万一您使用的不是 IDE 装置呢?例如 SCSI 接口的硬盘!那么就得由 /dev/sda 开始算起了!同时,目前很常见的 USB 接口的随身碟或者是 USB 的外接式硬盘,他的代号也是 /dev/sda 开始算起喔!除了这些基本概念外,在硬盘的 partition ( 分割 ) 部分,例如第一个 IDE 插槽的硬盘分割成为五个分割槽,此时,您必需要了解什么是 Primary 与 Extended 及 Logical 等磁盘分割槽的概念才行!必需清楚的知道一个硬盘最多只能有一个 Extended ,而 Primary + Extended 最多只能有四个!至于 Logical 则是由 Extended 再分割出来的,由于 1-4 号是保留给 Primary 与 Extended 分割槽的,因此,第一个由 Extended 分割出来的 Logical 代号则为 /dev/hda5 (注意:这里举例的是第一个 IDE 的 Master 硬盘接法 )。这些部分在『鸟哥的 Linux 私房菜 -- 基础学习篇』有详细的说明,如果您还是不了解,可得赶紧回去翻一翻啊!因为这很重要的!
       
    还不止此吶,上面这些动作的判断尚包含了:Linux 系统档案的树状目录、档案所在目录的搜寻方法、磁盘配额 ( Quota ) 的设定、文书编辑器 vi 的使用、核心的编译技巧、硬盘的安装与维护等等,所以啰,基础的文件还是需要阅读过的吶!
     

    Linux 安装硬盘规划
     
    OK!了解了架站目的,也知道硬件应该是如何搭配之后,接下来,自然就是安装 Linux distribution 了!到底选择哪一套 distribution 好呢?是 Red Hat/Mandrake/SuSE 还是.....这个时候您就必需要清楚的了解到 Linux 其实就是一个『Kernel』啰!而目前的 Kernel 最常用的还是 2.4 这个版本,如果您使用较旧的 Linux distribution 例如 Red Hat 6.x 时,那么 Kernel 版本是较为早期的 2.2 版,这个时候,在新版的 2.4 核心上面开发出来的防火墙软件就无法在 Red Hat 6.x 的系统上面动作了!另外,函式库也不相同啊!所以说,选择 Linux distribution 时,必需要知道该 distribution 的核心版本才好。一般来说,我们会建议大家不要使用太冷门的 distribution ,因为,支持度可能会比较不够好!所以,目前较为推荐的还是 Red Hat 与 Mandrake 这两套 distributions 吶。
     
    选择了 distribution 后,当然要开始安装了!安装的第一个要件就是刚刚上个步骤的规划,因为上面提过了,所以这里我们就不再谈规划的工作了。规划完成之后,再来就是整个安装的流程了。安装流程最重要的大概有三个地方:
     
    1. 硬盘的 partition 与挂载:

    2. 除了硬盘的代号需要特别留意之外,当然磁盘分割也不能不清楚啊!磁盘分割方面,需要学习的有 fdisk 这个重要的分割程序。在分割完成之后,接下来就需要格式化硬盘啦!格式化就需要了解 mke2fs 这个指令的用法了!再来,格式化完成后,就需要与挂载点 ( 目录咯! ) 搭配来挂载!挂载使用的指令为 mount 。而挂载前,想要检查一下该 partition 有没有问题,就需要使用 fsck 来检测,另外,记得啊!使用 fsck 时,要被检查的 partition 请务必给他卸载啊( 使用 umount )。还有还有,如果要让某些 partition 在开机的时候就自动挂载,要记得写入 /etc/fstab 当中,或者是将指令完整的写到 /etc/rc.d/rc.local 当中。哇!这么多指令怎么看的懂?!呵呵!这时又得要知道 man 这个好用的指令的!这部份硬盘的管理真的很重要的!不要忽略了!
       
    3. 套件的选择与安装:

    4. 好了,将硬盘整理好之后,终于要将 Linux 安装上来了!这个时候请特别留意,因为 Linux 提供了图形接口与文字接口的预设登入 ( run level ),事实上,图形接口挺容易造成系统的资源损耗,因此服务器上面较少使用图形接口喔!所以,通常鸟哥都是不安装图形接口的套件的啦!再来,为了未来的升级 与重新安装套件的便利性,所以,在选择套件时,请务必将底下几个套件选择进来: 因为 make 与 gcc 是编译套件所必需要的软件,至于 kernel source 或 kernel header 则是一些驱动程序在编译时会使用到的一些函式库或系统数据,这些东西对于桌上型计算机并不很重要,因此在各大 distribution 的预设套件上面『都没有安装』,所以,您必需要自行挑选啊!这些套件通常都会放在 Software develop 或者 Utility 的项目当中,请仔细的选择喔!
       
    5. 开机的设定 ( Grub/Lilo ) :

    6. 在我们进入系统之前,主机会先读取 BIOS 的信息,然后会读取第一块硬盘的主要开机扇区 ( Master Boot Recorder, MBR ),这个动作是为了让我们的主机了解数据格式,以顺利的将系统的数据读取进来啊!而在这个 MBR 上面的程序,就被称为开机管理程序了!在 Linux 上面主要的开机管理程序有 Grub 与 Lilo 这两支,他们的运作方式有点不太相同! LILO 是直接将所有的信息都给他写入 MBR 里面,所以如果您设定完成设定档 /etc/lilo.conf 之后,还得将 LILO 重新安装到 MBR 当中。至于 Grub 则是使用类似指向 ( point ) 的功能,将开机信息导向设定文件 /boot/grub/menu.lst 当中!这两个管理程序各有优缺点,可依照个人喜好来选择安装。另外,其实我们的主机是可以达成所谓的『多重开机』的系统的!也就是一部主机上面可以有多个操作系统,包括 Windows 与多个 Linux 。如果要达成多个系统在同一部主机上面的话,您又得要必须了解 MBR 与 Super Block 的异同点才行!这都是需要学习的呢!
       
    真的很不容易喔!安装一部好的 Linux 主机,最大的重点就在于硬盘的 partition 了!硬盘分割的考虑会影响到您的主机未来的扩充性与实用性,还有『安全性!』呢!所有的种种都需要有一定程度的 Linux 概念才行吶!
     

    了解欲架设的网站服务原理
     
    事实上,了解每种服务的运作原理,对于您未来在进行除错 ( debug ) 是相当的有用的啊!而且,在主机的规划上面也会有一定程度的帮助。举例来说好了,在 Linux 上面很有名气的档案服务器 SAMBA ,他的运作原理主要是 NetBIOS over TCP/IP ,而如果您了解最原始的 NetBIOS 是无法跨网域的,亦即无法跨路由器 ( Router ) 的,那么就比较容易了解为何 Windows 的网络上的芳邻显示的计算机数量只有局域网络内部这么多而已!另外,如果您熟悉 FTP 的运作模式时,才有可能会了解『被动式』与『主动式』联机对于 FTP 主机的设定其实是『大有关系』的!或许在这里您完全不晓得鸟哥在谈些什么 ( 因为这些基础知识在后续的章节才会陆续的提及啊!这里还没有讲到啦! ) ,只不过,请大家先有个概念,理解服务 ( Services ) 的运作流程,将有助于您未来的架设与维护喔!所以,这一部份也不要忽略了!
     
    这还只是各个服务器的服务原理呢!如果是在 Linux 上面运作呢?!那么您至少就得要了解『什么是 daemon ?』而 daemons 的形式有所谓的 stand alone 以及 super daemon 的管理!这两种形式有什么差别?!每种 daemon 管控的 port number 是否相同?如果需要更改 daemon 的 port number ,应该要改 /etc/services 这个档案,您是否了解如何去修改?还有还有,除了服务器才需要的 daemon 之外,其实我们 Linux 主机里面本来就有很多 daemon 存在,例如几乎一定要存在的 crond, syslogd, atd 等等,这都是需要了解的基本知识!
     

    服务的套件安装、漏洞修补、套件升级...
     
    好了,假设您已经将网络硬件配置搞定了,主机也规划好了,并且也已经可以连上 Internet 了,此外,也已经知道了该服务器的服务原理,那么再来当然就是:『我的主机上面是否有我要架设的服务器软件了?』举个例子,如果我问的 Linux 主机上面有没有 Apache 这个 WWW 服务器的软件呢?!聪明的管理员大概已经想到了使用 RPM 来寻找,而如果不是使用 RPM 来管理软件的系统管理员,也会立刻想到 locate, find, which 等等的指令来搜寻相关的档案或指令,例如 Apache 的主要设定档是 httpd.conf ,那么只要找到该档案,就能够了解是否已经安装了这个套件~因此,立刻使用 locate httpd.conf 即可发现啦!
     
    好了,假设您的主机并没有安装 Apache 这个套件,那么您要如何安装呢?这个时候就需要考虑到『套件管理员』这咚咚了!目前 Linux 上面的套件管理员大多使用 RPM 与 Tarball 这两个咚咚!使用 RPM 最大的优点是方便管理!因为所有的档案与信息都有纪录,所以在搜寻、升级、反安装上面都相当的容易!不过,却也因为相依属性的问题常常导致新手无法立刻进入状况!此外,RPM 有版本方面的问题,不同的 Linux distribution 上面的 RPM 还不能互相挪用吶!呵呵!真是苦恼~
     
    如果您对于 RPM 的相依属性有相当大的反感程度,那么使用原始码 ( source code ) 来进行编译则是一个不错的思考方向。在系统上面能够执行的档案属于 Binary (二进制文件) ,那么这些 binary 是怎么来的呢?!我们以 Linux 常见的 binary 制作方法:使用 gcc 来编译的动作来说明好了。要制作 binary file 之前,首先就必须要撰写程序代码,这些程序代码大多是以文书编辑器编辑而成的 ASCII 格式档案,这就是通称的『Source code』咯。然后这些程序代码必需要经过编译器 ( compiler ) 编译成为我们的系统认识的 binary 可执行档才行!在编译的过程中,可能还会使用到很多的函式库 ( library ) 呢!需要注意的是,目前 linux 上常见的编译器就有 gcc, g77 等,您的原始码必须要针对这些编译器的语法进行撰写才行!
     
    一般来说,当套件释出时,大多采用原始码的方式释出的,但是因为原始码所占用的档案空间比较大,因此常常会加以压缩之后,才放上网站上供人下载, 那就是所谓的 Tarball 了!因此,您必须要了解 tar, gzip, bzip, compress 等指令的用法才能够解开 Tarball 的档案!此外,由于 Tarball 是原始码,因此您还必须要有 compiler 以及相关的 make 与 Kernel 相关的函式库,才能够成功的将这个套件给他编译成为可以在您的系统上面跑的 binary file !使用 Tarball 的安装方式,最大的优点是具有弹性!您可以将套件安装在任何您想安装的目录,还可以自行加入一些额外的参数来设定该套件呢!不过,还是有缺点的啦!那就是 当平台不一样时,可能由于某些函式库无法找到,或者是使用者的基本知识不足,就无法成功的将 Tarball 编译成功!另外,用 Tarball 安装时,某些特殊的套件很难进行反安装的动作吶!造成升级与移除上的困扰!
     
    反正 RPM 与 Tarball 是各有优缺点啦,我个人比较偏向于使用系统预设的 RPM 来进行服务器的设定,不过,由于并非每个 Linux distributions 都适合某个套件的 RPM 参数,所以,这个时候我就会开始考虑使用 Tarball 了!无论如何,既然您要架设服务器,就必须要有该服务器的套件在您的系统上面,那么学习上面这两个套件管理员,是必要的动作!
     
    漏洞修补的重要性:很多的新手在架设好了服务器之后,就以为『万事 OK 』了!所以就不再继续的监视网络上面公布的套件漏洞信息!事实上这是很危险的!因为目前由于 Internet 的发达,网络的危险性其实是越来越严重的!稍一不小心,您的主机可能就会立刻的『中标』。为了随时修补漏洞,您应该要熟悉如何进行套件的升级!一般来说,使用 RPM 安装的套件就以 RPM 的方式来升级,使用 Tarball 的话,比较麻烦,需要先移除后再进行升级!无论如何,套件的升级是系统管理员经常要进行的工作!
     

    主机设定、启动、观察与除错
     
    在所有的前置作业都完成之后,终于可以来到『主机设定』的地方了!所以您看看,要设定一部堪称完美的主机,前置作业就得学会这么多的基础功夫吶!并不简单喔!好好的用功学习吧!主机的设定大致的流程是这样的:
     
    1. 找出设定档:

    2. 主机设定第一个步骤就是需要『找到主要设定档』,因为不论您使用的是 RPM 还是 Tarball,由于都是同一个套件,所以设定档的档名是不变的!举例来说, Apache 的设定档档名都是 httpd.conf ,而 SAMBA 的设定档档名都是 smb.conf ,您必须找到该设定档之后才能够进行设定啊!所以,熟悉 locate, rpm, find, grep 等指令就显的很重要了!
       
    3. 编辑设定档:

    4. 既然要设定,当然就需要编辑啦!既然要编辑,那么 Unix Like 标准的文书处理器 vi 是否学会了呢?! vi 是学 Linux 过程中相当重要的一课!如果不会 vi ,那么学习 Linux 之路就会显的跌跌撞撞呢!此外,设定档的内容该如何编辑呢?例如 httpd.conf 里面有些虚拟主机的设定项目,要如何设定吶?!要了解这里面的设定项目,您就必须要学会使用 man, info 等指令,也需要知道套件的文件数据 ( documentation ) 放置在我们系统的 /usr/share/doc 里面说!如果您知道如何快速的查阅设定项目,那么设定文件的编辑对您而言,就简单的很吶!
       
    5. 启动服务器:

    6. 设定完成服务器的设定档之后,再来就是需要启动服务器啦!而且,如果您在服务器启动之后进行设定档的修改,也需要重新启动服务器才行喔!要启动服务器,您就必须要了解什么是 daemons ,而 daemons 又有 super daemon, stand alone 两种模式,在 Linux 预设的路径当中, stand alone 的服务在 /etc/rc.d/init.d/* 这个目录当中,而里面的档案是以 BASH shell script 写成的,所以除了了解 daemon 之外,您还必须要熟悉 shell script 的相关语法才行!另外,如果是 super daemon 的话,必须知道启动服务器的设定档会放置 /etc/xinetd.d 里面,启动的话,则是重新启动 /etc/rc.d/init.d/xinetd 这个 super daemon 才行!
       
      万一您的服务器软件是以 Tarball 安装的,那么启动的时候可能是直接执行 binary file ,如此一来,就没有 shell script 帮助您启动、关闭、重新读取设定档等服务器启动的动作!当真如此的话,您就必须要以程序 (process) 与讯号 (signal) 的方法使服务器动作了!这部份您就必须要熟悉 ps, top, kill 以及 signal number 的意义等等!很重要的吶,尤其是当您想要将目前某个联机中断时, netstat 配合 kill 的用法是很重要的。
       
    7. 观察启动的状态:

    8. 虽然似乎已经启动了服务器,但是启动后的服务器就一定能够正常的运作吗?!如何观察他是否正常的运作呢!?首先,您就必须要具有 PID 的概念,利用 netstat 观察 PID 与 port number 的讯息,来观察服务器是否正确的在工作呢?!还有,任何系统信息都会记录到登录文件 (log files) 里面去,所以,启动完服务器后,到该服务器的登录档当中察看一下信息,是相当正确的一个行为!例如启动 DNS 之后,虽然观察 port 确定有启动,但是其实服务器可能是不正常的启动,此时就必须要观察 /var/log/messages 的内容来判定 DNS 的设定是否正确说~
       
      而既然要观察登录文件,那么 linux 主机上面控制登录文件的 syslogd 这个 daemon 就不能不知道啊!您必须要了解 syslogd 的设定档在 /etc/syslog.conf ,并且可以搭配 logrotate 来进行登录档的轮替!
       
    9. Server 与 Client 的权限问题:

    10. 好了,服务器已经正常的启动了!观察所有的状态也都没有问题!那么我总可以对 Client 进行正确的服务了吧?!『错!』您还尚未考虑到『权限』的概念吶!举个例子来说,架设过 WWW 主机的朋友大概都知道如果需要开放个人家目录的首页时,将该使用者的家目录设定权限为 755 是必须的!因为如此一来,启动 Apache 程序 owner 才能够进入该目录进行浏览的动作!
       
      为了要了解权限的概念,您必须至少具有 UID, GID 等 Linux 系统上面的账号概念,而每个账号的特殊参数在 /etc/passwd 与 /etc/shadow 也是必须要知道的!此外,每个档案或目录具有十个属性的特征也是最基础的观念,真的重要吶这一部分!而如果要让使用者管理系统的话,身份转换成为系统管理员 (root) 也是必须的!如此您就必须要教育使用者了解 su 及 sudo 的用法!再来,为了预防系统被破坏,适时的减少 SUID 与 SGID 等特殊权限的 binary file 则显的相当的重要!咦!这些东西都不懂~不要架站喔! ^_^
       
    11. 设定开机启动该服务器:

    12. 终于将服务器设定好,启动正确,对于 Client 端的权限与服务也设定妥当,再来就是要进行一开机就将服务器加载内存的动作了。如何进行这个动作呢?在 Red Hat 与 Mandrake 有 chkconfig 可以辅助, Red Hat 更有 ntsysv 可以达成简单的设定!然而,如果是其它的 Linux distributions 呢?那么就得了解正常的开关机程序,这里面包含了 Run Level 的观念,Run Level 的读取档案在 /etc/inittab 里头呢!还得要了解 /etc/rc.d/ 里面的目录与 /etc/rc.d/rc.local 这个档案的用途才行!一般来说,我们使用 Tarball 的套件想要在开机时就启动,都会藉由 /etc/rc.d/rc.local 这个档案来达成!呵呵!很重要吧!
       
    经过上面的流程,您就可以知道啦,架设好一部主机需要知道:(1)各个 process 与 signal 的观念;(2)账号与群组的观念与相关性;(3)档案与目录的权限,这当然包含与账号相关的特性;(4)套件管理员的学习;(5)BASH 的语法与 shell scripts 的语法,还有那个很重要的 vi 啰!:(6)开机的流程分析,以及记录登录文件的设定与分析;(7)还得知道类似 quota 以及连结档等等的概念。要知道的真的很多,而且还是不能省略的步骤喔!
     

    客户端设定、观察与除错
     
    一般来说,目前的服务器大多只要针对 Server 设定好即可, Client 端我们不太需要去管理的。不过,某些特殊的套件,例如 SSH, Mail, SAMBA, NAT 等等,就必须要连同 client 的权限与设定一起包含进去设定呢!如果您是一个系统管理员的话,那么『教育 Client 端的使用者,正确的使用网络与主机提供的服务』就是一个相当重要的工作了!
     
    最常发生的错误在于 Client 端架设了『个人防火墙』,这部份相当的恼人~那我怎么知道 Client 端的服务要求被防火墙给他中断呢?这当然可以由 Server 以 netstat 来简略的检查,当然,到 Client 端视查一下使用者的使用习性与操作系统,也是一个可行的方案。不过,总体来说,教育您的 Client 使用者具有最最基础的 Linux 账号、群组、档案权限等概念,才是一个彻底解决问题的方法说!尤其是 Client 端的使用者在使用类似 SAMBA (网络芳邻) 进行数据存取时,最容易发生权限观念这样的错误了!
     
    总之,系统管理员对于 Client 端的使用者还是有一定程度的责任与义务的,至少我们要进行好教育的任务!
     

    安全性设定
     
    前面说过,网络的安全有越来越需要注意的趋势。所以,架设一个相对安全的网站是很重要的!那么如何架设好一个相对安全的网站呢?您至少需要有这样的概念:
     
    1. 严格规范使用者的密码设定规则:

    2. 最容易被入侵的手段就是『猜密码』了!例如 SSH 如果对 Internet 开放的话,您又没有将 root 的登入权限关闭,那么对方将可能以 root 尝试登入您的 Linux 主机,这个时候对方最重要的步骤就是猜出您 root 的密码了!如果您 root 的密码设定成『1234567』哈哈!想不被入侵都很难~所以当然需要严格的规范使用者密码的设定了!那么如何规范严格的密码规则呢?可以藉由(1)修改 /etc/login.defs 档案里面的规则,以让使用者需要每半年更改一次密码,且密码长度需要长于 8 个字符呢!(2)利用 /etc/security/limits.conf 来规范每个使用者的相关权限,让您的 Linux 可以较为安全一点点~(3)利用 pam 模块来额外的进行密码的验证工作。
       
    3. 利用 Super daemon 与 TCP Wrappers 管理服务权限:

    4. 如果您使用 xinetd 这个 super daemon ,或者是直接使用 tcp wrappers 的函式库,那么您将可以直接使用 /etc/hosts.allow 以及 /etc/hosts.deny 来管理是否能够登入系统的某个 daemon 的权限!在 hosts.allow(deny) 里面,能够限制的有 IP, 网段, 网域等等的设定,如此一来,可以让您的 daemon 提供有限的信任网域,毕竟是安全一些的!
       
    5. 利用 netfilter 防火墙:

    6. 除了 /etc/hosts.allow(deny) 之外,利用防火墙机制 iptables 来设定您的主机单机防火墙是很重要的!如果您的核心是 2.4.xx 版本的话(利用 uname 查询核心版本),防火墙机制为 iptables ,如果是 2.2.xx 的话,则是使用 ipchains 。如果不是因为特殊需求的话,目前我们大概都会建议大家使用 iptables 这个机制,因为不但设定较为简单,而且功能更为强大!
       
    7. 持续进行套件修补:

    8. 让我们做一个简单的想法:『架设了防火墙,是否就安全无虞了』?如果您的答案为『是』,那么仔细的观察一下底下的说法吧!如果您的主机有开放 WWW 也就是 port 80 ,既然要开放 port 80 ,当然防火墙就必须要开放 Client 登入。也就是说,虽然您架设了防火墙,可以抵挡非 port 80 以外的联机,不过,不论来自何方的联机,只要连接到您的 port 80 ,那么该联机就会予以通过!好啦,万一这个 www 软件被侦测出有漏洞的话,由于您的 port 80 是允许大家登入的,结果呢?呵呵!当然别人就可以利用 WWW 的漏洞成功的入侵您的主机了!这样说可以理解为什么系统管理员需要常常更新套件以修补漏洞了吧?! ^_^
     
    无论如何,以现今的网络功能及维护来看,架设一个『功能性强』的主机,还不如架设一个『稳定且安全的主机』比较好一点!因此,对于主机的安全要求就需要严格的要求啦!就鸟哥的观点来看,如果您的主机是用来替赚钱的,例如某些研究单位的大型 Cluster 运算主机,那么即使架设一个甚至让您觉得很不方便的防火墙系统,都是合理的手段!因为主机被入侵就算了,数据被窃取,呵呵!那可不是闹着玩的!
     

    服务日志、登录文件与备份管理
     
    除了安全性之外,主机也可能因为硬件问题或者是人为使用不当而产生错误讯息等问题!这些讯息会放置在 /var/log 里面,不过,还是得视 syslogd 这个 daemon 的设定档 /etc/syslog.conf 的设定而定喔!这些登录文件的信息是相当重要的,他可以记录曾经发生过的事情,如果再经由系统管理原自行写的分析软件,那么就可以很轻松的管理好主机了!也可以在最短的时间内发现主机的可能漏洞呢!不可说不重要啊!
     
    我们常常说主机的服务越单纯越好,原因是什么呢?如果哪一天我们发现主机的登录文件有点问题,要来进行入侵管道的查询,万一主机的服务过多,很难追查出到底是哪一个 daemon 造成主机的问题啊!如果主机的服务很单纯,分析登录档也会比较轻松呢!此外,系统管理员最好有制作工作日志的习惯,可以让您未来管理主机比较容易快速的进入状况!此外,要良好的管理主机,利用主机的工作排程(crontab)也是很重要的喔!
     
    当然啦,主机随时的给他备份是一个很良好的行为,要怎么备份呢?!您必须要了解主机的相关信息,例如邮件主机,您可能就得备份 /etc 与 /home 及 /var/spool/mail 等目录,而如果是 WWW 主机,就得找到 WWW 主页的目录,才能进行备份吶!要用什么工具呢?可以选择 tar 或者是 cpio 等工具,当然,您还得配合备份的媒体,例如抽取式硬盘啊、可烧录光盘啊等等的媒体说!
     

    小结语
     
    由上面的整个架站流程来看,由规划到安装、主机设定、账号与档案权限管理、后续安全性维护与管理以及重要的备份工作等等,必需要每个环节都很清楚,才能够设定出一个较为稳定而可正常工作的服务器。而上面的每一个工作都涉及到相当多的 Linux 基础操作与相关的概念,所以说,想要学架站,真的真的不能省略了 Linux 的基础学习这也是为什么我们一再强调 Linux 新手不要一头栽入想要单纯架设服务器的迷思当中吶!如果您对于上面谈到的几个基础概念不是很清楚的话,那么建议您由底下的两个网站学起:
       
    在这一本书当中,我并没有再花篇幅再继续介绍一些 Linux 的基础指令以及相关的设定,这一本书本来就定位在已经具有 Linux 知识的朋友的工具书,所以,对于尚未接触过 Linux 的朋友来说,这部份其实并不适合您!建议您还是得要重头学起吶!若想要一本 Linux 基础知识的工具书在手边,也可以考虑鸟哥前一本着作『鸟哥的 Linux 私房菜 -- 基础学习篇』喔!( 好像有点老王卖瓜了喔! ^_^ )大家加油的啦!

自我评估是否已经具有架站的能力
    由前一节的内容介绍中,不难知道要架设一个堪称完美的网站,得事前花诺大的心力来培养您自己的『能力』才行!说实在的,架站实在不能贪图『便利』,因为越是『便利自己』就越是『便利 Cracker 的入侵』啊!此外,上面谈到的都属于技术层面的部分喔!要有架站的能力,不只有『技术』就可以了喔!还需要其它心理层面的辅助呢! @_@ 咦!搞什么~架站还需要心理层面的因素?我们是在玩心理战是吧?!
     
    这里要请您特别注意的一点是,如果您架了一个网站,一般来说,您自然就是系统管理员 (root) 的身份了。而要晓得的是,在 Linux 系统当中, root 具有『至高无上』的权力,他可以进行任何系统的设定,也可以察看任何使用者的档案或邮件或什么机密文件等等的,还可以让使用者寄出、寄入的邮件都送一份到自己的信箱去!所以,如果身为 root ,还拥有『极高度的偷窥欲望』时,那么您的 user 岂不是毫无秘密可言?换个角度来想,如果您是一般的 user ,而您的 root 却拥有很高的偷窥欲,我想,您应该也不见得会有多快乐吧?!就好像在家里被人家装了针孔式摄影机一样,感觉绝对不可能太好!所以,要成为 root 之前,您必须做好心理建设,那就是拥有相当高水平的『道德感』。
     
    一般来说,网管人员需要什么能力呢?我想,架几个站跟作一个称职的网管人员,相差是甚远的!架站,说真的,是一件很简单的事情,看着书本一步一步的作上去,一定可以成功的!但是,很多人都只晓得『如何架站』却不知到『如何维护一个网站的安全』!基本上,维护一个已经架设好的网站的正常运作,真的要比架设一个网站难的多了!得要随时知道的系统状况,随时注意是否有新的套件漏洞而去修补他,随时要注意各种服务的登录档案(logfile)以了解系统的运作情况!得知道发生问题的时候,到底问题点是在哪一个!比如说当机了,那么知道当机的原因吗?!即使不知道,也可得需要约略猜得出来才行。而,如果安全出了问题,被入侵了,除了format + 重灌之外,可有办法在不移除系统的情况下修补漏洞?!这些都是网管人员需要学习的,而且,通常都是需要经验的累积才会知道问题的所在!此外,保持身心的活力以随时注意在线公布的安全防备信息等等!都需要具备的!
     
    此外,最严重的问题是,网管人员其实最需要的是『道德感与责任感』!可要晓得的机器上所有人的隐私都在的监控之下,如果您本身就已经有偷窥欲了,可知道这有多可怕吗?!另外,如果没有责任感的人作为一个网管,可能会疯掉,因为不论何时何地,只要是监控的主机出了问题,嘿嘿嘿嘿,一定是第一个被想到的人物,所以,给随时随地做好可能随时会被召唤回主机跟前的心理准备!更可笑的是,如果服务的人群中,有几个连开机的时候软盘机塞了一块不可开机的软盘,导致无法正常开机,也都会跟抱怨说『唉呦!您经手的计算机怎么这么烂,动不动就不能开机』的时候,得要有容人的雅量,说说冷笑话解解闷吧!总之,网管人员并不是只要会架站就可以了,『道德感』『责任感』还有『耐心』呵呵!套一句现在人喜欢说的口头禅『这是一定要的啦!』
     
    那么网管人员是什么? 前一阵子看到了报纸的一篇报导,内容大概是说:台湾的网络管理人员对于『网络安全性防护』的认知不够,或许是防火墙机制建立不完整,或者是认为黑客不会入 侵小型网站,所以在不甚了解的情况下,被所谓的『中东黑客组织』所入侵,然后以台湾被入侵的计算机为跳板,去攻击宾拉登的仇敌美国,然后引起美国高度的不 满。由于台湾的立场有点得罪不得美国 ( 这边不提及政治因素,反正目前的情况是这样。 ) ,所以一接到美国来的抗议信函就很棘手。这只是一个事件问题,不过这个事件问题也点出了一个重点,就是我们的网络信息可能真的是蛮发达的,不过,管理网络 的人员可能在认知的程度上就有点参差不齐了!网络安全是蛮重要的,不过,大家常常会忘记他!个人认为,网管是蛮重要的角色,应该不能等闲视之才对。
     
    好了,如果您了解了上面小弟所想要表达的意念之后,来评估看看您是否适合当一个称职的网管人员吧!
     
    1. 是否具有 Linux 的基础概念:这当然包含很多部分,例如账号管理、BASH、权限的概念、Process 与 signal 的概念、简易的硬件与 Linux 相关性 (如 mount)的认识、登录档案的解析、daemon 的认识等等,都需要有一定程度的了解;
    2. 是否具备基础网络知识:没有网络知识想要架站,那是天方夜谭!请确认您已经熟悉 IP, Netmask, route, DNS, daemon 与 port, TCP 封包的概念等基本知识;
    3. 是否已经身心活化了:网管人员必须要随时注意网站的相关信息,这包括网站套件的漏洞修补、网络上公告的网络安全通报等等,还有,得要每日分析主机的登录文件,您是否已经具备了随时注意这些信息的『耐心』呢?
    4. 是否具有道德感与责任感:如果还是具有一点点的偷窥欲,再加油吧!^_^ ,另外,如果老板想要请您『偷窥』时,请想尽任何方法,让他理解这么做是多么的可笑~
     
    当然,一再强调的,架设一个 Linux 服务器是很简单的,但是维护的工作除了身心已经活化,并且还要拥有高标准的道德感,否则.....倒站可能是可以预见的一个后果.....

课后练习:
架站之前所需的技能分析

2003/07/30:第一次完成日期!
2003/08/19:加入了课后练习,这个课后练习我不打算提供解答了!因为看到这一篇之后,读者应该可以很轻松的回答上面的问题才对。如果您无法回答上面的问题.....不要怀疑,赶紧回去参考 Linux 基础篇!
2003/09/06:加入课后练习的参考用解答

2003/ 07/30以来统计人数


Designed by VBird during 2001-2004.  Aerosol Lab.