鸟哥的 Linux 私房菜
目录 | Linux 基础篇 | Linux 服务器篇 | Linux 企业应用篇 | 安全管理
     
 
最近更新日期:2006/06/06
很多刚接触 Linux 的朋友常常会问的一句话就是:‘我学 Linux 就是为了搭建服务器,既然只是为了搭建服务器,为什么我还要学习 Linux 的其他功能?例如:例行性工作排程、Bash Shell 、干嘛去认识所有的登录档等等,我又用不到!此外,既然有好用的 Web 介面的 Server 搭建软件,可以简单的将网站搭建起来,为什么我还要去学习 vi 手动的去编辑一些设定档?干嘛还需要去理解他的原理?’ 上面这些话对于刚刚学会搭建网站的人来说,真是替他们道出了一个新手的心声啊! 不过,对于任何一个曾经有过搭建公开网站的朋友来说,上面这些话,真的是会害死人

要知道,‘搭建服务器容易维护难’啊!更深一层来说,‘维护还好、除错更难啊!’ 搭建一个网站有什么难的?即使您完全没有摸过 Linux ,只要参考鸟哥的书籍或者是网站,而且一步一步照着做, 包准您一个下午就可以搭建完成五个以上的网站了!所以说,搭建服务器有什么难的? 但是,要晓得的是,这样的一个网站,多则三天,少则数小时,立刻就会被入侵了! 此外,被入侵之后,或许可以藉由一些工具来帮您将 root 的密码救回来,可惜的是,这样的一个网站还是有被做为中继站的危险存在的!此外,如果您使用工具 (例如 Webmin) 却怎么也搭建不起来某个网站时,要怎么解决?如果您不懂该 Server 的运作原理与 Linux 系统的除错讯息,那么难道只能无语问苍天?不要怀疑这种情况的可能性,参考一下 BBS 上面的留言就可以很清楚的知道这种情况的存在有越来越明显的趋势呢!

所以说,搭建服务器之前还是有一些基本的技能需要学会的!而且这些技能是‘一旦学会之后,真正是终身受用啊!’ 只要花一个学期(三~六个月)就能学会一辈子可以使用的技能,这个学习的投资报酬率真是太高了! 所以,一开始的学习不要觉得苦,那真的是值得的喔!^_^


大标题的图示前言
如果有人问你:‘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, NATRouter 等等,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 相关技能吧! ^_^。
Tips:
在这一章当中,鸟哥不再就 linux 基础指令进行解析,因为在 ‘鸟哥的 Linux 私房菜 -- 基础学习篇’里面已经详细的介绍过了! 如果持续的介绍指令,简直是浪费篇幅~所以底下仅介绍一个 Linux 基础学习重要性的分析喔!
鸟哥的图示

大标题的图示基本搭建服务器流程:
虽然不同的 Server 提供的服务并不相同,而且每种服务的原理也不见得都一样, 不过,每种服务器由规划、搭建到后续的安全维护,其实整个流程是大同小异的。 所以,底下我们就整个服务器的简易搭建流程当中来分析一下, 为什么了解作业系统的基础对于网站维护是相当重要的呢

首先,先来分析一下,如果你要搭建一个网站时,搭建的基础流程是怎样的一回事。大致的流程有点像底下这样:
  1. 了解网络基础 :
    既然要搭建网站,如果对于网站最基本的网络基础知识无法具备的话, 那么.....当然无法管理好网站啦!举个例子来说,不论何种作业系统, 常常会使用到所谓的‘网络’的概念,当您发现一个设定为 192.168.1.0/255.255.255.0 时,晓得那是什么鬼东西吗? 如果不知道的话,呵呵!绝对无法设定好网站的啦!

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

  3. Linux 安装硬碟规划
    好了,不论您的网站规模有多大,只要是对 Internet 开放的网站,几乎一定都需要硬碟的啊!因为网站的资料需要有地方可以储存呐! 那么您要如何选购硬碟?还有,硬碟应该进行怎样的分割 (Partition) 比较好?举个例子来说,如果您想要搭建邮件主机,那么硬碟应该如何规划呢?给您猜~

  4. 了解欲搭建的网站服务原理
    这个与刚刚第一点有点类似,也是属于基本原理方面啦!举个例子来说,当您晓得了 Mail Server 的运作原理,自然就比较容易搭建成功,此外,也比较容易进行除错!

  5. 服务的套件安装、漏洞修补、套件升级...
    好不容易决定了硬碟的规划,并且 partition 与 Linux 这个作业系统都安装好了,接下来自然就是安装我们所想要搭建的服务器软件啦!例如:如果要搭建 Mail Server ,那么 Sendmail 或者是 Postfix 这两个邮件服务器软件就派上用场啦!咦! 有两种邮件服务器软件啊?呵呵!当然不止~邮件软件可多的很呢!那我要选择哪一个邮件服务器软件? 需要考虑安全性、搭建的便利性、以及执行的效能与稳定性等等!呵呵!累了吧!

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

  7. 用户端设定、观察与除错
    这部份也是需要的,因为有的服务器需要用户端也进行设定才行!例如邮件主机加上身份认证功能时, 就需要在用户端上面设定好身份认证的确认啰!

  8. 安全性设定
    网络安全是很重要的,问题是,要怎么样达成网络安全的相关设定呢? 有哪些文件、套件、指令与资料可以查寻?

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


小标题的图示了解网络基础
既然是要搭建网站,那么网站最基本的知识,就是那个 OSI 七层协定,至少就需要了解一下啰!虽然只是一个 OSI 七层协定,但这里面包含了:
  • 硬体与设备的等级与好坏:例如网络线有哪些等级?CAT 5 是目前常见的 RJ-45 接头的网络线等级,为什么要选择这种网络线?啊什么是 RJ-45 的接头?如果这个都不知道的话,那么要如何自己将所有的电脑接起来呢? 呵呵!很难吧!所以,这种基本的硬体配备的选择需要有一定程度的认知喔;

  • TCP/IP 与封包的概念:例如 IP, Netmask, Broadcast 的概念与书写的格式等;

  • 路由 (route):您的资料封包是如何传送到 Server 上的呢?资料在 Internet 上面是怎么跑的呢?!

  • 领域名称系统 (Domain Name System, DNS ): 常常会听到‘主机名称’吧!是否我自己设定一个主机名称,大家就可以通过 Internet 连接到我的主机了?当然不是!还需要透过上层 DNS 主机的授权喔!那么如何授权?

  • 各种网络设备的选择与搭配:例如什么是 Hub/Switch ?该如何选择?以及什么是下行/上行 2M/128Kbits ?什么是平行线与跳线等等;
还有我们最关心的,网络频宽到底是由哪一个设备所限制,以及在区域网络内的布线该如何配置。 哇!说起来好像很麻烦!其实只要稍微深入了解一下基本的原理,就可以约略的厘清您一些网络概念了。 这对于您未来搭建防火墙以及维护网站,尤其是发生问题后的问题认定与除错,都有很大的关系呐! 事实上,不论您是使用什么作业系统来搭建您的网站,这个网络基础的部分都是一定要了解的! 通常不了解网络基础的朋友,在搭建网站的时候,最容易发生一些基础设定的错误了! 所以,这部份的学习千万不能省略啊!

对于网络基础的问题当中,一个最常见的经典案例是: ‘192.168.1.0/24’是什么东西?呵呵!这东西代表的是一个‘网络’, 这个网络起始到结束的 IP 范围是多少您看得出来吗?这种表示方法在各种服务器的搭建中很常见到, 如果您不了解的话,呵呵!当然无法进行服务器的搭建啰 ( 注:各种作业系统均会出现这样的设定值喔 )。还有,如果您的主机明明就可以使用 ping 这个指令去接触远方的主机 (ping IP),但是就是无法使用 ping hostname 去接触远方的主机,请问,这个原因是什么呢?了解网络基础的朋友一看就知道几乎是 DNS 出问题了,不晓得的朋友就是想破头也得不到答案~

其实这些概念说难不难,但是至少一定得需要学习过呐! 而且,这些知识在您学会之后,未来再接触到其他不同的作业系统时,可让您学习的过程‘顺畅无比’呐! 因为那是最最基本的理论,各个作业系统都是建构在这些网络基础上面,所以,当您换了另外一套作业系统后, 基本上只有指令的下达方式不一样而已,基本原理是一样的呐!所以说,学习的过程当然会顺畅到底啰! ^_^。

而且,网络基础会影响到您的网络设定是否正确,这真的很重要呐,因为,如果您的网络不通, 那么即使服务器搭建成功了,别人可以看的到吗?所以说,要搭建服务器,真的得对网络基础的部分下一些功夫才行的。 关于网络基础这部份的介绍我们会在下一章网络基础时再详加说明喔!


小标题的图示了解搭建服务器的目的
搭建服务器的目的与您的主机规划是一体两面的!因为我们必需要了解主机未来的用途与使用的用户端数目, 才能够开始选择硬体与分配网络频宽,并且规划我们的 Linux 系统啊!所以说,了解搭建服务器目的是很重要的!举几个例子来说好了:

  • 如果我们的主机是学校单位提供同学们邮件与 WWW 个人网页的功能,而全校有 5000 多位同学,那么硬体应该如何选择?还有,如果需要对每个同学进行网页空间与邮件容量的限制时, 硬碟又该如何分割
  • 在这个例子当中,您必需要了解邮件与 WWW 个人网页的资料所放置的目录在哪里?而由于主机有进行硬碟的容量限制,因此, quota 的原理与设定的技巧就不能不知道啦!此外,既然是搭建服务器嘛!申请一个‘合法’的主机名称就显的相当的重要,另外, DNS 里面的 MX 标志对于邮件主机的用途也需要特别去了解呢!

  • 如果我们的主机仅提供研究室不到十个人的服务,且服务仅开放文件服务器 (File Server) ,那么硬体又该如何选择,此外,是否需要注册一个合法的主机名称呢?
  • 因为仅开放文件服务器,那么这部主机应该是在内部了,所以,当然就不是很需要一个合法的主机名称了! 不过,因为仍然有对区域网络提供文件服务器的功能,因此,硬碟的容量也不能太小,此外, 为避免未来使用者的抱怨,也需要预留空间来进行 quota 与增加硬碟等工作呢!

  • 如果我们的主机主要的目的是进行数值模式的运算 (就是有点像是超级电脑在算军事或者天文物理现象的模式), 那么应该要考虑的是否反而就是在系统安全性与资料传输的速率上面?
  • 当然啦!这样的一个系统最主要的目的就在于‘稳定性’与‘速度’上面了!因此,您就需要了解 核心 (Kernel) 的编译技巧, 此外,由于不同的套件在设计最佳化的时候,通常都使用较为常见的 Linux distribution ,因此,对于 Linux distribution 的选择可又重要的多了呢!

    由上面的例子来看,不同功能的主机在硬体配备与软件规划上面是不一样的!所以,在进行 Linux 主机的规划之前,建议一定要了解这个主机的功能,甚至最好还能预设一些未来可能加入的功能规划呢! 那我怎么知道我的主机要有什么样的功能?又什么样的功能可以满足我的需求呢?这当然是需要经验的! 呵呵!这又得要回到刚刚前一个主题啰!至少需要了解到网络的基础, 这样就能够知道您应该搭建什么样的网站啦!

    举个例子来说,如果您只是想要让 Linux 达成频宽分享而已,那么 Router 或者是 NAT 的设定即可满足你的需求, 万一您还需要了解每个使用者经常使用的网站,那么最好就是搭配 Proxy 以及分析软件来分析。然而 NAT 不需要很好的硬体配备即可达成,Proxy 如果要效能好一点,就必需要比较高档的硬体来搭配~咦!我怎么知道的? 这当然是鸟哥已经较为熟悉每种服务所使用的硬体状态与他的服务原理啊。 所以啰!在主机的规划之前,务必要先了解主机的搭建目的喔!

    那么这部份与 Linux 基础有何关系?!关系大了!
    1. 必需熟悉 Linux 的文件配置与架构:

      例如 /boot 放置的是开机核心资料、 /usr 放置的是预设的系统程序以及原始档与一些 man page 、/home 是一般身份用户的预设家目录所在、 /var 则是登录档、暂存档、 邮件信箱文件等放置的目录、/tmp 是任何人皆可使用的暂存目录等等,您必需要熟悉 Linux 各个目录的用途, 这样在未来进行硬碟的规划时,才能够符合需求!

      举例来说,因为磁碟配额 (Quota) 仅能针对整个 partition 来动作,而如果您想让每个使用者有两种 quota 数值 (例如每人拥有邮件 20MB 以及 WWW 10MB 的硬碟空间) ,就必需要预设针对 /home 与 /var/spool/mail 规划出两个独立的 partition 才行啊!当然啦,使用连结档 (link file) 也是一个可行的方案,不过, 您就得要预留一些硬碟空间来预备使用呐!

    2. 硬碟的代号:

      硬碟的代号真的是挺重要的,因为在 Linux 底下,每一个装置都以文件来表示的! 因此,您必需要了解到硬碟与排线的接法对于硬碟在 Linux 系统中的代号的关系。例如:

       MasterSlave
      IDE 1/dev/hda/dev/hdb
      IDE 2/dev/hdc/dev/hdd

      上面的磁碟代号只与 IDE 介面的装置有关,什么是 IDE 介面啊!就是目前所谓的 Ultra DMA 66/100/133 的硬碟啊,或者是光碟机与烧录机,这些装置均可直接以主机板上面的 IDE 排线接在一起说。还有,目前主流的硬碟已经变成 SATA 介面了,这种 SATA 介面可以模拟成为 IDE 介面,因此,您的 IDE 装置还可能具有 /dev/hde, /dev/hdf 等等呢! 若是使用 SATA 介面的话,那么该硬碟的代号就可能变成 /dev/sda 之类的档名。

      不过,万一您使用的不是 IDE 装置呢?例如 SCSI 介面的硬碟!那么就得由 /dev/sda 开始算起了!同时,目前很常见的 USB 介面的随身碟或者是 USB 的外接式硬碟,他的代号也是 /dev/sda 开始算起喔!除了这些基本概念外,在硬碟的 partition (分割) 部分,例如第一个 IDE 插槽的硬碟分割成为五个分割槽,此时,您必需要了解什么是 Primary 与 Extended 及 Logical 等磁碟分割槽的概念才行!必需清楚的知道一个硬碟最多只能有一个 Extended ,而 Primary + Extended 最多只能有四个!至于 Logical 则是由 Extended 再分割出来的。

      每一颗硬碟分割出来的 partition 代号为 /dev/hd[a-d][1-63] ,亦即原本的硬碟代号后面加上一组数字就是了。 举例来说, IDE1 的 Master 的第一个 partition 即是: /dev/hda1 , 由于 1-4 号是保留给 Primary 与 Extended 分割槽的,因此,第一个由 Extended 分割出来的 Logical 代号则为 /dev/hda5 (注意:这里举例的是第一个 IDE 的 Master 硬碟接法)。这些部分在‘鸟哥的 Linux 私房菜 -- 基础学习篇’ 有详细的说明,如果您还是不了解,可得赶紧回去翻一翻啊!因为这很重要的!
    还不止此呐,上面这些动作的判断尚包含了: Linux 系统文件的树状目录文件所在目录的搜寻方法磁碟配额 (Quota) 的设定文书编辑器 vi 的使用核心的编译技巧硬碟的安装与维护等等,所以啰, 基础的文件还是需要阅读过的呐!


    小标题的图示Linux 安装硬碟规划
    OK!了解了搭建服务器目的,也知道硬体应该是如何搭配之后,接下来,自然就是安装 Linux distribution 了!到底选择哪一套 distribution 好呢?是 Fedora/SuSE/Mandriva 还是.....这个时候您就需要清楚的了解到 Linux 其实就是一个‘Kernel’啰!而目前 (2007/01) 的 Kernel 最常用的就是 2.6 这个版本,如果您使用较旧的 Linux distribution 例如 Red Hat 9 时,那么 Kernel 版本是较为早期的 2.4 版,这个时候,在新版的 2.6 核心上面开发出来的各种类软件就无法在 Red Hat 9 的系统上面动作了, 而且,不同核心的函式库也不相同啊! 所以说,选择 Linux distribution 时,需要知道该 distribution 的核心版本才好。

    一般来说,我们会建议大家不要使用太冷门的 distribution ,因为,支援度可能会比较不够好!所以,目前较为推荐的还是台湾地区比较多人使用的 Red Hat 系统 (Red Hat/Fedora/CentOS 均是 Red Hat 系统),以及操作介面良好的 SuSE , 还有 Mandriva 也不错啊!

    选择了 distribution 后,当然要开始安装了!安装的第一个要件就是刚刚上个步骤的规划, 因为上面提过了,所以这里我们就不再谈规划的工作了。规划完成之后,再来就是整个安装的流程了。 安装流程最重要的大概有三个地方:
    1. 硬碟的 partition 与挂载:

      除了硬碟的代号需要特别留意之外,当然磁碟分割也不能不清楚啊!磁碟分割方面,需要学习的有 fdisk 这个重要的分割程序。 在分割完成之后,接下来就需要格式化硬碟啦!格式化就需要了解 mke2fs 这个指令的用法了! 再来,格式化完成后,就需要与挂载点 (目录咯!) 搭配来挂载!挂载使用的指令为 mount。 而挂载前,想要检查一下该 partition 有没有问题,就需要使用 fsck 来检测,另外,记得啊!使用 fsck 时,要被检查的 partition 请务必给他卸载啊 (使用 umount)。

      还有还有,如果要让某些 partition 在开机的时候就自动挂载,要记得写入 /etc/fstab 当中,或者是将指令完整的写到 /etc/rc.d/rc.local 当中。哇!这么多指令怎么看的懂?呵呵!这时又得要知道 man 这个好用的指令的! 这部份硬碟的管理真的很重要的!不要忽略了!

    2. 套件的选择与安装:

      好了,将硬碟整理好之后,终于要将 Linux 安装上来了!这个时候请特别留意,因为 Linux 提供了图形介面与文字介面的预设登入 (run level), 事实上,图形介面挺容易造成系统的资源损耗,因此服务器上面较少使用图形介面喔! 所以,通常鸟哥都是不安装图形介面的套件的啦!再来,为了未来的升级与重新安装套件的便利性, 所以,在选择套件时,请务必将底下几个套件选择进来:

      • make
      • gcc
      • kernel-source 及 (或) kernel-header 及 (或) kernel-devel

      因为 make 与 gcc 是编译套件所必需要的软件,至于 kernel-devel 则是一些驱动程序在编译时会使用到的一些函式库或系统资料, 这些东西对于桌上型电脑并不很重要,因此在各大 distribution 的预设套件上面‘都没有安装’, 所以,您需要自行挑选啊!这些套件通常都会放在 Software develop 或者 Utility 的项目当中,请仔细的选择喔!

    3. 开机的设定 ( Grub/Lilo ) :

      在我们进入系统之前,主机会先读取 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 的话,比较麻烦, 需要先移除后再进行升级!无论如何,套件的升级是系统管理员经常要进行的工作!

    目前各大版本的 Linux distributions 都有释出线上自动更新的机制,包括 Red Hat 的 up2date, CentOS/Fedora 的 yum, SuSE 的 YOU,以及 Debian 的 APT 等等,都值得您花时间去学习的, 因为可以让您的主机变的更加的安全喔!
    Tips:
    程序设计师所撰写的程序并非十全十美的,所以,总是可能有些地方没有设计好, 因此就造成所谓的‘程序漏洞’啰。程序漏洞所造成的问题有大有小, 小问题可能是造成主机的当机,大问题则可能造成主机的机密资料外流, 或者主机的操控权被 cracker 取得。在现今网络发达的年代, 程序的漏洞问题是造成主机被攻击、入侵的最主要因素之一了。 因此,快速、有效的针对程序漏洞进行修补,是一个很重要的维护课题。
    鸟哥的图示

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

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

    2. 编辑设定档:

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

    3. 启动服务器:

      设定完成服务器的设定档之后,再来就是需要启动服务器啦! 而且,如果您在服务器启动之后进行设定档的修改,也需要重新启动服务器才行喔! 要启动服务器,您就必须要了解什么是 daemons ,而 daemons 又有 super daemon, stand alone 两种模式,在 Linux 预设的路径当中, stand alone 的服务在 /etc/init.d/* 这个目录当中,而里面的文件是以 BASH shell script 写成的,所以除了了解 daemon 之外,您还必须要熟悉 shell script 的相关语法才行!另外,如果是 super daemon 的话,必须知道启动服务器的设定档会放置 /etc/xinetd.d 里面,启动的话,则是重新启动 /etc/init.d/xinetd 这个 super daemon 才行!

      万一您的服务器软件是以 Tarball 安装的,那么启动的时候可能是直接执行 binary file ,如此一来,就没有 shell script 帮助您启动、关闭、 重新读取设定档等服务器启动的动作!当真如此的话,您就必须要以 程序 (process) 与讯号 (signal) 的方法使服务器动作了!这部份您就必须要熟悉 ps, top, kill 以及 signal number 的意义等等!很重要的呐,尤其是当您想要将目前某个连线中断时, netstat 配合 kill 的用法是很重要的。

    4. 观察启动的状态:

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

    5. Server 与 Client 的权限问题:

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

    6. 设定开机启动该服务器:

      终于将服务器设定好,启动正确,对于 Client 端的权限与服务也设定妥当, 再来就是要进行一开机就将服务器载入记忆体的动作了。如何进行这个动作呢?在 Red Hat/SuSE/Mandriva 有 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. 严格规范使用者的密码设定规则:
      ‘猜密码’仍是一个不可忽视的入侵手段!例如 SSH 如果对 Internet 开放的话,您又没有将 root 的登入权限关闭,那么对方将可能以 root 尝试登入您的 Linux 主机, 这个时候对方最重要的步骤就是猜出您 root 的密码了!如果您 root 的密码设定成‘1234567’哈哈!想不被入侵都很难~ 所以当然需要严格的规范使用者密码的设定了!那么如何规范严格的密码规则呢?可以藉由 (1)修改 /etc/login.defs 文件里面的规则,以让使用者需要每半年更改一次密码,且密码长度需要长于 8 个字元呢!(2)利用 /etc/security/limits.conf 来规范每个使用者的相关权限,让您的 Linux 可以较为安全一点点~(3)利用 pam 模组来额外的进行密码的验证工作。

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

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

    4. 持续进行套件修补:
      让我们做一个简单的想法:‘搭建了防火墙,是否就安全无虞了’? 如果您的答案为‘是’,那么仔细的观察一下底下的说法吧!如果您的主机有开放 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 服务器是很简单的,但是维护的工作除了身心已经活化, 并且还要拥有高标准的道德感,否则.....倒站可能是可以预见的一个后果.....


    大标题的图示课后练习:
    • 请简述进行网站搭建前,应该具备何种基本技能?
      1. Linux 系统操作上,至少需要了解帐号管理、文件属性与权限、程序与资源管理、 硬体如硬碟之挂载与软件套件之安装如RPM套件管理员等等,而 vi 与 Shell 亦是不可忽略之基本技能,更重要者,日志的管理以及系统服务的原理(如 stand alone 与 super deamon 服务启动的方式差异等)亦需同时厘清,以方便未来搭建网站时除错的技巧;
      2. 在网络的基础知识上,TCP/IP 的观念以及路由的概念相当的重要,此外,DNS 的概念也很重要。
      3. 在心态的调整上面,系统管理员需要的道德感以及使命感需要较高的标准。
    • 如果我有一颗硬碟在 A 主机上面安装了 Linux 之后,拿到另一台配备相同的 B 主机上面去进行开机,结果竟然无法顺利开机,您认为可能的原因是什么?
    • 由于配备相同,所以排除硬体的问题,不过,考虑到 IDE 排线与 partition 的代号,以及 /etc/fstab 的对应,所以应该是由于 IDE 插槽放置错误所致(Linux 系统下,每个 IDE 插槽对应的 partition 名称皆不相同喔!)。此外, 上次不正常关机也可能造成硬碟损害而无法开机成功!
    • 一般来说,在 Linux 系统上,使用者预设的家目录在那个目录下?另外,新增一个使用者时, 该使用者预设的家目录内容来自那个目录下?
    • 在 /etc/default/useradd 这个文件里面会规范使用者的预设家目录以及预设家目录的内容,一般来说,使用者预设家目录在 /home ,至于家目录内的文件则复制来源在 /etc/skel 里面。
    • 磁碟配额 ( quota ) 能否针对某个特定的目录进行限制?Quota 有什么较为特殊的使用限制?
    • Quota 目前仅能针对整个 partition 进行限额配置,如果该特定目录是一个 partition 那就可以进行 quota 设定,否则无法针对特定目录!此外, Quota 除了特定目录以及需要 ext2, ext3 等磁碟格式才支援之外,也需要核心的支援喔!
    • 在 Linux 系统下,要寻找一个档名为 vbird.document 的文件,可以使用什么指令进行搜寻? 又,如果要寻找在一天内更动过的文件,又该如何进行?
    • 如果是执行档可以使用 which command 来搜寻,如果是文件,就必须要使用 locate vbird.document 或 whereis vbird.document 或 find / -name vbird.document 。如果要找到一天内更动过的文件,可以使用 find 配合参数,如:‘ find / -ctime 1’。
    • 在 Linux 系统中,常见的套件管理员有 RPM 与 Tarball ,请分别说明这两个套件管理员的优缺点。
    • RPM 套件管理员在安装套件的时候,会将该套件的文件名称、套件功能与讯息等等资讯记录于 /var/lib/rpm 目录内,由于有这些套件的资本资讯,因此在系统内很容易进行 RPM 的升级、安装、移除等动作。不过,由于 RPM 文件之间的相依性相当的强,因此常常会有版本不合或者是欠缺某样前驱套件的问题发生。

      至于 Tarball 则是原始码,使用者可以自行设定套件的编译参数,以符合自己的 Linux 平台。此外,由于 Tarball 是原始码,因此需要在您的系统上面进行编译,编译的过程中需要 gcc, make, 以及 kernel-devel 等套件,还有您所想要安装的套件所需要的前驱套件也同时需要先安装后,才能进行 Tarball 的安装。注意,几乎每个 Tarball 以 tar 程序解开后,在新增的目录下均会有 README 以及 INSTALL 文件,请务必先查阅过后才进行编译工作。
    • 如果我下载了一个档名为 httpd-2.0.52.tar.gz 的文件,一般来说,这个文件代表的意义为何?我该如何让这个文件能够在我的 Linux 系统上面安装?
    • 由于附档名是 .tar.gz 或者是 .tgz 的文件,所以可以认定该文件为一个 Tarball 的文件。至于档名的配置方面,httpd 为套件名称,2.0.52 则通常为该套件的版本名称了!那如何安装?由于该文件为 httpd 这个套件,且格式为 Tarball ,所以您必须要:
      1. 系统上面务必具有 tar, make, gcc 等相关的编译套件;
      2. 使用 tar 解开 httpd-2.0.52.tar.gz 之后,务必进入该目录内读取 REAME 或/与 INSTALL 文件,以了解是否还需要其他的相关套件的搭配安装;
      3. 以 ./configure --help 查阅一下是否有相关可以加入或者取消的编译内容;
      4. 使用 make 读取 Makefile 来编译程序;
      5. 使用 make install 来安装程序!
    • 我以原始码的方式进行一个套件的安装,但是在分析系统的时候,分析程序一直告诉我找不到 cc 这个指令,请问这是什么问题?为何需要 cc ?又,我该如何解决这个问题,好让套件可以顺利的被安装在我的 Linux 上面?
    • 如前面几个题目所说的,因为是原始码,所以还需要编译程序来将该原始码编译成为可以在您的 Linux 系统上面跑的 binary 文件,在 Linux 上头预设的编译程序就是 gcc 这个编译器(compiler)。如果您在安装 Linux 的时候,使用 Linux Installer 预设的套件选择,那通常会没有安装 gcc 以及 make 等套件,此时,请拿出您的原版光碟,以 mount 指令挂载后,使用 RPM 将一个一个相关的套件安装即可(过程会蛮复杂的!)^_^
    • 我发现我的 Linux 系统怪怪的,似乎有什么不知名的程序在记忆体当中跑,我该如何将这个不知名的程序捉出来,并且将他移除?
    • 如果要捉出程序(process)的话,可以使用 ps -aux 或者是直接输入 top 来查询 process 的 ID (PID),找到 PID 号码后,再以 kill -9 PID 来删除该程序即可。
    • 我总是无法编辑某个文件,您认为应该是什么问题造成的?那又要怎么解决?
    • 无法编辑某个文件,可以先使用 file 这个指令来查询一下该文件的格式,例如想察看 /etc/shadow 的格式,可以下达: ‘file /etc/shadow’,如果是文字档,却还是无法编辑,那么最可能发生的原因就是‘权限’的问题了。可以使用 ls -l filename 察看文件权限,再以 chmod 或 chown 来修订该文件的权限。此外,该文件也可能含有隐藏属性,可以使用 lsattr filename 查阅,再以 chattr 来修订隐藏属性。
    • 什么是 UID 与 GID ?UID 有哪些等级?
    • 在 Linux 系统下,使用者与群组其实都是以‘ID(数字)’的格式来设定的,所以使用者与群组其实都是 UID 或 GID (User ID 与 Group ID),Linux 对于文件权限也都是使用 UID/GID 来分辨。不过人类习惯使用文字来记忆,所以才会有 /etc/passwd 与 /etc/group 来转译 ID 与 User 及 Group 之间,这也才会发生为何在 Internet 上面捉下来的 Tarball 解开之后,往往会有文件拥有人与群组为数字的型态,因为您 Linux 系统上面的 /etc/passwd 与 /etc/group 没有相关的对应文字说。至于 UID 的等级主要有两种,分别是超级管理员(root),其 UID 为 0,其他非为 0 的 UID 基本上身份是相同的!不过 Linux 通常会将小于 500 的 UID 保留给系统使用。
    • 使用者的家目录参数、UID、GID以及其他相关参数,还有密码文件,放置在哪些文件里面?
    • 放置在 /etc/passwd 与 /etc/shadow 当中。当然还有 /etc/login.defs 喔!
    • 您认为一个称职的网管人员应该具备什么能力?
    • 能力需求相当高,如了(1)作业系统的基础知识(不论是 Linux/Unix/MAC/MS);(2)网络基础的知识;(3)个别 Internet Services 的运作知识之外,还需要(4)身心保持在备战状态,以及(5)具有相当高程度的道德感、责任感与使命感。
    • 我要启动一个系统预设的 Service,请问我可能可以由执行或修改哪些目录底下的文件来启动?
    • 如果是 stand alone 的服务,可以经由 /etc/rc.d/init.d/* 里面的文件,如 /etc/rc.d/init.d/syslog start;
      如果是 Super daemon 的服务,就必须(1)先到 /etc/xinetd.d 或者是 /etc/inetd.conf 修改相关文件或参数; (2)以 /etc/rc.d/init.d/xinetd restart 来启动。
    • 我要关掉 cron 这个服务,应该怎么关掉他?如果正常的方法无法关闭这个服务,可以使用什么方法来关闭?
    • 因为 cron 是一个 stand alone 的服务,所以可以使用 /etc/rc.d/init.d/cron stop 来关闭;如果还是无法正常关闭,可以使用 ps -aux | grep cron 捉出该程序的 PID ,然后以 kill -9 PID 来关闭。
    • 如果一开机就要执行某个程序,应该要将该程序写入那个文件里面?
    • 可以直接在 /etc/rc.d/rc[run-level].d 里面加入 S 开头的文件,不过,更简单的作法是直接将该程序写入 /etc/rc.d/rc.local ,不过,请注意该程序必须要具有可执行的权限,且 rc.local 也必须要是可执行喔!

    2003/07/30:第一次完成日期!
    2003/08/19:加入了课后练习,如果您无法回答上面的问题.....不要怀疑,赶紧回去参考 Linux 基础篇!
    2003/09/06:加入课后练习的参考用解答
    2006/02/07:将原本的旧文移到此处
    2006/06/06:将 SATA 介面的硬碟代号再次做个修订!目前 SATA 的格式有分两种呢!
    2007/01/02:将一些排版重整,将一些日期方面的资料重整,将课后练习补上来

     
         
    中国存储网 ChinaStor.com排版整理
    原文作者鸟哥,主页,更多Linux学习资料在线看:Linux系统管理员手册 - Linux命令大全 - Linux调用大全- Linux专栏 - 国产Linux