服务器架设篇 - CentOS 5.x

第一章、架设服务器前的准备工作

架设服务器前的准备工作

最近更新时间: 2010/07/22

本文数据主要针对 CentOS 5.x 的系统进行说明,而 CentOS 5.x 已经在 2017 年 3 月份正式不再进行维护,事实上,在 2012 年底几乎就不再维护了。 因此,建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。那为何还需要编辑 CentOS 5 的数据呢? 鸟哥只想要做个自己曾经撰写过的文档内容保存而已啰! ^_^!最新文章请前往鸟站首页查阅啰!
很多朋友因为自身或服务单位的需求,总是有架设各种网络服务器的时刻,这个时候大多数的前辈都会推荐他们使用 Linux 做为服务器架设的操作系统。但因为这些朋友很多都没有受过 Linux 操作系统方面的训练,因此总觉得反正都是操作系统,所以 Linux 应该也跟 Windows 差不多吧!那么就硬着头皮使用图形接口去设置好众多的服务器,也有可能参考网络上一些文章, 即使是通过文本接口去设置,也能够很轻松的作好服务器的架设。问题是,这样的一部服务器是很容易被绑架的, 而且,如果网络不通,你如何自行将问题克服 (trouble shooting)?难道出问题只能无语问苍天?所以啰, 除非你只是暂时需要架设网络,可以请朋友或其他信息公司帮你忙,如果你本身就是信息方面的服务提供者, 那鸟哥建议你在进行服务器实务设置之前,看一看这篇,试试看你到底有没有具备网络服务器的设置技能了呢?

1.1 前言: Linux 有啥功能

很多刚接触 Linux 的朋友常常会问的一句话就是:『我学 Linux 就是为了架设服务器,既然只是为了架设服务器,为什么我还要学习 Linux 的其他功能?例如:例行性工作调度、Bash Shell ,又干嘛去认识所有的注册表等等,我又用不到!此外,既然有好用的 Web 接口的 Server 设置软件,可以简单的将网站架设起来,为什么我还要去学习 vim 手动的编辑一些设置档?干嘛还需要去理解服务器的工作的原理?』上面这些话对于刚刚学会架设网站的人来说,真是替他们道出了一个新手的心声啊!不过,对于任何一个曾经有过架设公开网站的朋友来说,上面这些话,真的是会害死人!为什么呢?底下我们就来分析一下。

1.1.1 只想用 Linux 架设服务器需要啥能力?

如果有人问你:『Linux 最强大的功能是什么』?大概大家都会回答『是网络功能啊!』,接下来,如果对方再问:『所以学 Linux 就是为了架设服务器啰?』呵呵!这个问题可就见仁见智啰!说穿了, Linux 其实就是一套非常稳定的操作系统,任何工作只要能在 Linux 这个操作系统上面跑,那他就是 Linux 可以达成的功能之一啰!所以 Linux 的作用实在不止于网络服务器的架设呐。

举例来说,在 Linux 上面开发跨平台的数值模式 (model) 诸如大型的大气仿真模式,由于 Linux 的稳定与完善的资源分配功能,使得在 Linux 上面开发出来的程序运作的又快又稳定。此外,诸如 KDE, GNOME 等漂亮的图形接口,搭配诸如 Open Office 等办公室软件,Linux 立刻摇身一变而成为优秀的办公室桌面电脑了 (Desktop)。此外,Google 制作出专门给手机系统用的 Android 也是以 Linux 为底开发的。所以说,千万不要小看了 Linux 的多样功能呐。

不过,不管怎么说, Linux 的强大网络功能确实是造成 Linux 能够在服务器领域内占有一席之地的重要项目。 既然如此,我们就好好的来探索一下 Linux 的网络世界吧!首先, Linux 到底可以达成哪些网络功能呢?这可就多着咯!不论是 WWW, Mail, FTP, DNS, 或者是 DHCP, NATRouter 等等,Linux 系统都可以达到,而且,只要一部 Linux 就能够达到上面所有的功能了!当然,那是在不考虑网络安全与性能的情况下,你可以使用一部 Linux 主机来达成所有的网络功能。

但是你得要知道,『架站容易维护难』啊!更深一层来说,『维护还好、调试更难啊!』架设一个网站有什么难的?即使你完全没有摸过 Linux ,只要参考鸟哥的书籍或者是网站,而且一步一步照着做,包准你一个下午就可以架设完成五个以上的网络服务了!所以说, 架设服务器有什么难的?但要晓得的是,这样的一个网站,多则三天,少则数小时,立刻就会被入侵了! 此外,被入侵之后,或许可以借由一些工具来帮你将 root 的密码救回来,可惜的是, 这样的一个网站还是有被做为中继站的危险存在的!

另外,如果你使用工具 (例如 Webmin) 却怎么也架设不起来某个网站时,要怎么解决?如果你不懂该 Server 的运作原理与 Linux 系统的调试消息,那么难道只能无语问苍天?不要怀疑这种情况的可能性, 参考一下各大论坛上面的留言就可以很清楚的知道这种情况的存在有越来越明显的趋势呢!

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

Tips 鸟哥 举例来说,鸟哥在 2003 ~ 2005 年跑去当兵了,当兵期间很少碰 Linux 啦!等到退伍后接到的第一个班要带 Linux 国际证照时,几乎所有的指令都在看不起鸟哥 @_@~不过,懂得学习的方法的鸟哥,通过 man 啦,通过 google 啦, 通过以前学习的一些概念啦,遇到问题几乎都可以在一分钟内解决,同学也不会有突然不知所云的困扰!你说, 这样是不是很好呢?

Linux 不是很好学,根据鸟哥过去教学的经验,很多同学在学 Linux 时真是非常的痛苦,不过学完之后, 以前在 Windows 上面遇到的困难却也自然而然的迎刃而解!因为 Linux 训练我们时,是要我们去解决一个发现的问题, 这过程需要很多基础知识的培养,所以学完他之后,你会觉得很多事情都变的很简单而单纯。但如果使用 Windows 的懒人方案,很多问题就不可能了解为啥会发生与为啥可以这样处理了!我们会在下一节分析一下架设服务器的流程, 也会提供相对应的你应该要会的 Linux 技能喔!

1.1.2 架设服务器难不难呢?

不管是 Windows 还是 Linux ,要架设好一部堪称完美的服务器,『基本功课』还是得做的,这包括了:

  1. 基础网络的基本概念,以方便进行联网与设置及调试;
  2. 熟悉操作系统的简易操作:包括登录分析、帐号管理、文书编辑器的使用等等的技巧;
  3. 信息安全方面:包括防火墙与软件更新方面的相关知识等等;
  4. 该服务器协定所需软件的基本安装、设置、调试等,才有办法实作。

而且,每一个项目里面所需要学习的技巧可多着呢!『什么?要学的东西那么多啊!』是啊! 所以,不要以为信息管理人员整天闲闲没事干的呐,大家可是天天在出卖知识的,同时, 还得天天应付随时可能会发生的各种漏洞与网络攻击手法呢!真不是人干的工作~~

这么说的话,架设服务器真的是挺难的喔!事实上,架设服务器其实蛮简单的哩!咦!~怎么又说架设服务器简单了? 不是说架设服务器难吗?呵呵!其实『架设服务器很难』是由于朋友们学习的角度有点偏差的原因啦! 还记得当初进入理工学院的时候,天天在念的东西是基础物理、基础化学、工程数学与流体力学等基础科目, 这些科目花了我们一至两学期的时间,而且内容还很难呐~都是一大堆的理论背不完。 怪了?我们进理工学院是为了求取更高深的知识,那么这些基础知识学了有什么用呐? 呵呵!更高深的知识都是建构在这些基本科目的理论上面的,所以 万一你基础的科目没有读好,那么专业科目里面提到的基本理论怎么可能听的懂?

这样说应该就不难了解了吧!没错!认识操作系统与该操作系统的基本操作,还有那个重要的网络基础, 就是我们在架设服务器前的『基础科目』啦!所以说,在进入 Linux 的服务器世界之前,真的不能够略过网络基础的相关知识,同时, Linux 系统的基本技能也必需要能够理解呐!

好了,或许你还是对于 Linux 系统里面『什么是很重要的知识』不甚了解, 果真如此的话,那么我们就举个简单的例子来说明一下啰!底下列出一般的架设服务器流程, 我们由架设服务器的流程当中,来看一看什么是重要的 Linux 相关技能吧! ^_^。

Tips 鸟哥 在这一章当中,鸟哥不再就 linux 基础指令进行解析,因为在 『鸟哥的 Linux 私房菜 -- 基础学习篇』里面已经详细的介绍过了! 如果持续的介绍指令,简直是浪费篇幅~所以底下仅介绍一个 Linux 基础学习重要性的分析喔!

1.2 基本架设服务器流程

虽然不同的服务器提供的服务并不相同,而且每种服务的原理也不见得都一样,不过,每种服务器由规划、架设到后续的安全维护, 其实整个流程是大同小异的。什么?你不相信啊?为了让你相信,那我们就来一项一项的分析看看吧!

1.2.1 网络服务器成功连接的分析

底下我们就整个服务器的简易架设流程当中来分析一下,以了解为什么了解操作系统的基础对于网站维护是相当重要的呢?首先,到底我们是如何连接到服务器的? 连接到服务器又取得啥咚咚?我们先以底下这张图标来作个简单的说明好了:

网络连接至服务器所需经过的各项环节
图 1.2-1、网络连接至服务器所需经过的各项环节

先来理解一下,到底我们连接到服务器想要得到什么?举例来说,你连接到 Youtube 想要看视频,所以对方就提供视频串流数据给你; 你连到 Yahoo 想要看新闻,所以对方就提供新闻的文本文件给你;你连接到无名小站想要看美女,对方就传图档给你;你连接 Facebook 想要去种田,对方就参考你之前留下来的记录,从数据库里面将你的记录拿出来传给你。看到没有,你连接到服务器,重点在取得对方的数据, 而一般数据的存在就是使用文件啰!那你有没有权限取得?最终与该文件系统的设置有关啦!

上图显示的是:首先,用户端到服务器的网络要能够通,等到用户端到达服务器后,会先由服务器的防火墙判断该连接能否放行, 等到放行之后才能使用到服务器软件的功能。而该功能又得要通过 SELinux 这个细部权限设置的项目后,才能够读取到文件系统。 但能不能读到文件系统呢?这又跟文件系统的权限 (rwx) 有关啦!上述的每个部分都要能够成功,否则就无法顺利读取数据啰。

所以,根据上面的流程我们大概可以将整个连接分为几个部分,包括:网络、服务器本身、内部防火墙软件设置、各项服务设置档、细部权限的 SELinux 以及最终最重要的文件权限。底下就分几个细项来谈谈啰。

  1. 网络:了解网络基础知识与所需服务之通信协定

    既然要架设服务器,首先当然得要了解一下互联网。因为不管是哪种操作系统,若想要与互联网连接,这个网络基础就得了解。 举例来说,『网域』是经常会谈到的概念,当你发现一个设置为 192.168.1.0/255.255.255.0 时,晓得那是什么鬼东西吗? 如果不知道的话,呵呵!绝对无法设置好网站的啦!另外,为何你需要服务器?当然是想要达成某项网络服务。 举例来说,传输文件可以用 FTP,那 WWW 可以传递文件吗?网芳可以传递吗?各有何用处?哪个比较方便? 对于客户或老板来说,我们所设置的服务能否满足他们的需求等等,这都需要了解,否则你将一头雾水啊! 因此这部份你就得要了解:

    • 基本的网络基础知识:包括以太网路硬件与协定、TCP/IP、网络连接所需参数等;
    • 各网络服务所对应的通信协定原理,以及各通信协定所需对应的软件。

  2. 服务器本身:了解架网络服务器之目的以配合主机的安装规划

    想要架设服务器吗?那...架什么服务器?这个服务器要不要对 Internet 开放?这个服务要不要针对客户提供相关帐号? 要不要针对不同的客户帐号进行例如磁盘容量、可活动空间与可用系统资源进行限制?如果要进行各项资源的限制, 那服务器操作系统应该要如何安装与设置?问题很多吧!所以,先了解你要的服务器服务目的之后,后续的规划才能陆续出炉。 不过,如果架站只是为了『练功』而已,呵呵!那就不需要考虑太多了~

  3. 服务器本身:了解操作系统的基本操作

    网络服务软件是需要建置在操作系统上面的,所以基本的操作系统操作就得要了解才行啊!包括软件如何安装与移除? 如何让系统进行例行的工作管理?如何依据服务器服务之目的规划文件系统?如何让文件系统具有未来扩充性 (LVM 之类)? 系统如何管理各项服务之启动?系统的开机流程为何?系统出错时,该如何进行快速复原等等,这都需要了解的呢!

  4. 内部防火墙设置:管理系统的可分享资源

    一部主机可以拥有多种服务器软件的运作,而很多 Linux distributions 出厂的默认值就已经开放很多服务给 Internet 使用了,不过这些服务可能并不是你想要开放的呢。我们在了解网络基础与所需服务的目的之后, 接下来就是通过防火墙来规范可以使用本服务器服务的用户,以让系统在使用上拥有较佳的控管情况。 此外,不管你的防火墙系统设置的再怎么严格,只要是你要开放的服务, 那防火墙对于该服务就没有保护的效果。因此,那个重要的在线更新软件机制就一定要定期进行!否则你的系统将会非常非常的不安全!

  5. 服务器软件设置:学习设置技巧与开机是否自动运行

    刚刚第一点就提到我们得要知道每种服务所能达成的功能,如此一来才能够架设妳所需要的服务的网站。 那妳所需要的服务是由哪个软件达成的?同一个服务可否有不同的软件?每种软件可以达成的目的是否相同? 依据所需要的功能如何设置你的服务器软件?架设过程中如果出现错误,妳该如何观察与调试? 可否定期的分析服务器相关的登录信息,以方便了解该服务器的使用情况与错误发生的原因? 能否通知多个用户进行连接测试,以取得较佳的服务器设置值?所以这里你可能就得要知道:

    • 软件如何安装、如何查找相关设置档所在位置;
    • 服务器软件如何设置?
    • 服务器软件如何启动?如何设置自动开机启动?如何观察启动的端口口?
    • 服务器软件启动失败如何调试?如何观察注册表?如何通过注册表进行调试?
    • 通过用户端进行连接测试,如果失败该如何处理?连接失败的原因是服务器还是防火墙?
    • 服务器的设置修改是否有创建日志?注册表是否有定期分析?
    • 服务器所提供或分享的数据有无定期备份?如何定期自动备份或异地备份?

  6. 细部权限设置:包括 SELinux 与文件权限

    等到你的服务器全部设置妥当,最后你所提供的文件数据权限却是给了『 000 』的权限分数, 那鸟哥很肯定的说,大家都无法读到你所提供的数据啊...!此外,新的 distributions 都建议你要启动 SELinux ,那是什么咚咚? 如果你的数据放置于非正规的目录,那该如何处理 SELinux 的问题?又如何让文件具有保密性或共享性 (文件权限概念ACL 等)?等等,这也都是需要厘清的观念喔!

上述的服务器架设流程中,其实除了第 5 点之外,其他步骤在各服务器设置都需要了解啊!而且都是一样的东西说! 因此,这些基础如果学会了,最终,你只要知道第 5 点里面那个软件的基础设置,你的服务器一下子就可以设置完成啦! 这样说,你是否开始觉得基础学习很重要啊! ^_^

1.2.2 一个常见的服务器设置案例分析

上面讲完后或许你还是不很清楚到底这些技能如何串起来?鸟哥这里提供一个简单的案例来分析一下好了, 这样你应该就比较容易清楚的知道为何需要学习这些咚咚。

  • 网络环境:假设你的环境里面 (不管是家里还是宿舍) 共有五部电脑,这五部电脑需要串接在一起,且都可以对外连接;
  • 对外网络:你的环境只有一个对外的连接方式,这里假设是台湾较流行的 ADSL 或 10M 的光纤这种通过电话线拨接的类型;
  • 额外服务:你想要让这五部电脑都可以上网,而且其中还有一部可以做为网络磁盘机,提供同学或家人作为数据备份与分享之用;
  • 服务器管理:由于你可能需要进行远程管理,因此你这部服务器得要开放连接机制,以让远程电脑可以连接到这部主机来进行维护;
  • 防火墙管理:因为担心这部做为文件分享服务器的系统被攻击,因此你需要针对 IP 来源进行登录权力的控制;
  • 帐号管理:另外,由于同学的数据有隐密与共享之分,因此你还得要提供每个同学个别的帐号, 且每个帐号都有磁盘容量的使用限制;
  • 后端分析:最后,由于担心系统出问题所以你得要让系统自动定期分析磁盘使用量、注册表参数信息等等。

在上述的环境中,你要考虑的东西有哪些呢?依据本小节一开始谈到的六个步骤来分析的话,你可能需要底下这些咚咚喔!

1.2.2-1 了解网络基础

  • 硬件规划

我们想要将五部电脑串接在一块,但是却又只有一个可以对外的连接,此时就得要购买集线器 (hub) 或者是交换器 (switch) 来串接所有的电脑了。但是这两者有何不同?为何 switch 比较贵?我们知道网络线被称为 RJ-45 的网络线, 但网络线材竟然有等级之分,这个等级要怎么分辨?不同等级的线材速度有没有差异?等到这些硬件基础了解之后, 你才能够针对你的环境来进行连接的设计。这部份我们等到下一章再来介绍。

  • 连接规划

由于只有一条对外连接而已,因此通常我们就建议你可以用如下的方式来串接你的网络:

硬件的网络连接示意图
图 1.2-2、硬件的网络连接示意图

通过 IP 分享器,我们的五部电脑就都能够上网了。此时你得要注意,那么能否上网与 Internet 有关, Internet 就是那有名的 TCP/IP 通信协定,而想要了解网络就得要知道啥是 OSI 七层协定。我们也知道能连上 Internet 与所谓的 IP 有关,那么我们内部这五部电脑所取得的 IP 能不能拿来架站?也就是说, IP 有没有不同种类? 如果 IP 分享器突然挂了,那你的这五部电脑能不能连接玩魔兽?这就考虑你的网络参数设置问题了!

  • 网络基础

如果你的同学或家人跑来跟你说,网络不通哩!你直觉会是什么?硬件问题?软件问题?还是啥莫名其妙的问题? 如果你不懂网络基础的 IP 相关参数,包括路由设置以及领域名称系统 (DNS) 的话,肯定不知道怎么进行连接测试的。 所以啰,此时你就会被骂说:『怎么都不懂还想要管理我们家网络』...那时不是很糗吗?所以要学好一些嘛! 这部份就很复杂了,包括 TCP/IP, Network IP, Netmask IP, Broadcast IP, Gateway, DNS IP 等等,都需要理解喔!

了解了这些原理之后,你才能够进行调试 (debug) 的工作,否则,错误一出,你可能就会被骂的臭头的! 最常见的错误中,举例来说,如果你的主机明明就可以使用 ping 这个指令去接触远方的主机 (ping IP),但是就是无法使用 ping hostname 去接触远方的主机,请问,这个原因是什么呢?了解网络基础的朋友一看就知道几乎是 DNS 出问题了,不晓得的朋友就是想破头也得不到答案。既然知道出问题的地方,就能够针对该问题去处理嘛!

网络基础会影响到你的网络设置是否正确,这真的很重要呐,因为,如果你的网络不通,那么即使服务器架设成功了, 别人可以看的到吗?所以说,要架站,真的得对网络基础的部分下一些功夫才行的。关于网络基础这部份我们在基础篇并没有谈过, 所以我们会在下一章网络基础时再详加说明喔!

1.2.2-2 服务器本身的安装规划与架站目的的搭配

如同图 1.2-2 所示,Server 端是在那五部电脑之中,而且 Server 必须要提供针对不同帐号给予网络磁盘机,我们这边会提供网芳 (SAMBA) 这个服务,因为他可以在 Linux/Windows 之间通用之故。 且由于需要提供帐号给用户,以及想到未来的磁盘扩充情况,因此我们想要将 /home 独立出来,且使用 LVM 这个管理模式, 并搭配 Quota 机制来控制每个帐号的磁盘使用量。

所以说,你得知道 Linux 目录下的 FHS (Filesystem Hierarchy Standard) 的规范,否则分区给到错误的目录,会造成无法开机!那为什么要将 /home 独立放入一个分区? 那是因为 quota 仅支持 filesystem 而不支持单一目录啊!好了,如果给你一部全新的主机,那你该如何安装你的系统呢?

实作题-全新安装
请到义守大学( http://ftp.isu.edu.tw/pub/Linux/CentOS/ )或国家高速网络中心( http://ftp.twaren.net/Linux/CentOS/ )下载最新的 Linux 映像档来刻录,并且依据上述的需求安装好你的 Linux 系统 (最重要的其实就是那个分割而已, 其他的动作可以在安装完成后再说) 。
答:
由于 Linux 的安装我们已经在基础篇内的第四章介绍过了,这里我们不再使用图形接口来说明, 仅使用文本说明来介绍你在每个项目应该处理的动作而已。此外,由读者们的回应发现,学习者经常只有一部主机, 因此,这里我们建议您使用 Virtualbox (http://www.virtualbox.org/) 来仿真出一部实体主机,以安装您的测试环境。并请注意, 这部主机将会使用在本书的各个章节测试中。

Virtualbox 的安装与设置请自行参考其官网上面的 Documentation 介绍,这里不再赘言。只是需要注意的是, 若 (1)需要架设网站与上网,建议网络使用桥接模式 (bridge) ,且网络卡类型使用 Intel 的台式机类型即可。 而 (2)磁盘配置建议使用 SATA 类型,且容量请给予 60GB 以上。 (3)内存至少该给予 512MB 以上,最好有 1GB 来测试。 其他的请参考官网文档,或者使用缺省配置即可。当然啦,如果你有独立的实体机器来安装,那就更好了! 不需理会这一小段文本的说明喔。

缺省配置如下:
  • 分割表请依如下方式进行:
    • /  : 3GB
    • /boot: 300MB
    • /usr : 5GB
    • /var : 5GB
    • /tmp : 2GB
    • swap : 1GB
    • /home: 20GB,并且使用 LVM 模式建置,且 LVM 包含全部的剩余磁盘容量。
  • 软件挑选时,请选择缺省安装加上『 Server 』与『 Server-GUI 』项目;
  • 信息安全部分,防火墙选择启动,SELinux 选择强制 (Enforce);
  • 假设 IP 分享器有自动分配 IP 的功能,所以网络参数先选择 DHCP 即可,未来再自己修改。
实际流程大致如下 (鸟哥以 CentOS 5.5 为例说明)
  1. 进入 BIOS ,选择光驱开机,并且将 CentOS 5.5 的 DVD 放入光驱中;
  2. 在启动安装的画面中,出现 boot: 时,直接按 Enter 即可;
  3. 出现『 CD Found 』字样,此时建议可以选择『 Skip 』即可略过;
  4. 在欢迎画面以鼠标点击『 Next 』;
  5. 语系数据可以选择『Chinese(Traditional)(繁体中文);
  6. 键盘格式保留『美式英文』即可;
  7. 第一次使用为分割的磁盘,会出现一个警告为找不到分割表,此时选择『是』即可略过;
  8. 在出现分割时,选择最上方数据为『创建自订的分割模式』,然后按『下一步』;
  9. 按『添加』进入分割画面,将挂载点、容量填写完毕就可以按确定了。画面有点像这样:
    分割的参数下达示意图
    图 1.2-3、分割的参数下达示意图

  10. 持续进行上述的动作,将所有的数据都处理完毕,除了 /home 之外。
  11. 但是 /home 的处理并非如此!妳必须要先添加一个分区, 然后将所有的容量都给这个分区,并选择 LVM ,有点像底下这样:
    分割出 LVM 分区的方式
    图 1.2-4、分割出 LVM 分区的方式"

    接下来回到原本的分割画面后,按下『 LVM 』来创建一个名为 server 的 LVM VG ,并创建 /home 这个 LV 啰! 画面有点像底下这样:
    创建最终的 LVM 的 LV 与 /home
    图 1.2-5、创建最终的 LVM 的 LV 与 /home"

    回到原本的分割画面,最终的显示有点像底下这样,然后请按下『下一步』继续:
    分割的最终结果
    图 1.2-6、分割的最终结果"

  12. 出现开机管理程序,都使用默认值即可,请按『下一步』;
  13. 设置网络设备,通通选择 DHCP 即可!保留默认值不要动,按『下一步』继续;
  14. 缺省时区会出现亚洲/台北,保留默认值,按『下一步』继续;
  15. 出现 root 密码制作,这里我们先设置为 centos 吧!你也可以自行设置;
  16. 在出现软件选择后,保留原本的并添加『Server』与『Server-GUI』两项;
  17. 出现相依性检查完毕后,按『下一步』就开始安装系统了;
  18. 经过一段时间的等待,出现重新开机后,你就重新开机吧!

处理完毕安装之后,再来就是需要设置各项基本防护的要求了。这个要求会在首次登录时进行, 当你首次登录后,应该要设置什么呢?就来处理处理底下的实作题吧:

实作题-全新设置
完成上述的安装动作并且重新安装后,依据本章的设置需求,需要有防火墙以及启动 SELinux , 因此你必须要进行如下的额外设置后,才可以登录系统喔!
答:
事实上这题很简单呢!流程大致如下:
  1. 第一次开机会制作出许多重要的密钥数据,因此第一次开机通常时间比较久,请稍作等待;
  2. 出现欢迎画面后,请按下『下一页』继续;
  3. 防火墙设置请选择『激活』之外,底下的 SSH 方框请将他取消勾选;
  4. 由于有修改过数据,因此会出现一个确认窗口,请按下『是』吧!
  5. 在出现的 SELinux 设置下,请选择缺省的『强制』后,按下一页;
  6. 出现 Kdump 时,保留不要选择,略过这个服务后按下一页;
  7. 出现日期设置,如果没有问题就请按下一页;
  8. 创建用户名的地方,请创建一个帐号:student,全名 student,密码 123456 的帐号,然后按下一页;
  9. 若有声卡会出现音效信息,也请按下一页继续;
  10. 出现其他光盘的部分,没有需要安装其他软件,所以请按『完成』即可
  11. 最终会出现等待登录的画面,那就是设置完毕了!

1.2.2-3 服务器本身的基本操作系统操作

既然我们这部主机得要提供不同帐号来使用他们自己的网络磁盘,因此还需要创建帐号啊,使用磁盘配额 (quota) 等等的。 那么你会不会创建帐号呢?你会不会建置共享目录呢?你能不能处理每个帐号的 Quota 配额呢?如果 /home 的容量不足了, 你会不会放大 /home 的容量呢?有没有办法将系统的磁盘使用情况定期的发送邮件给管理员呢?这些都是基本的维护行为喔! 我们底下就以几个实际例子来练习看看你的基础能力吧!

例题-大量建置帐号
假设我的五个朋友帐号分别是 vbirduser{1,2,3,4,5},且这五个朋友未来想要共享一个目录,因此应该要加入同一个群组,假设这个群组为 vbirdgroup,且这五个帐号的密码均为 password 。那该如何建置这五个帐号?
答:
你可以写一支脚本程序来进行上述的工作喔!
[root@www ~]# vim useradd.sh
#!/bin/bash
groupadd vbirdgroup
for username in vbirduser1 vbirduser2 vbirduser3 vbirduser4 vbirduser5
do
	useradd -G vbirdgroup $username
	echo "password" | passwd --stdin $username
done
[root@www ~]# sh useradd.sh
[root@www ~]# id vbirduser1
uid=501(vbirduser1) gid=502(vbirduser1) groups=502(vbirduser1),501(vbirdgroup) 
context=root:system_r:unconfined_t:SystemLow-SystemHigh
最后利用 id 这个指令来查找看看,是否群组的支持是对的啊!

例题-共享目录的权限
这五个朋友的共享目录建置于 /home/vbirdgroup 这个目录,这个目录只能给这五个人使用,且每个人均可于该目录内进行任何动作! 若有其他人则无法使用 (没有权限),那该如何建置这个目录的权限呢?
答:
考虑到共享目录,因此目录需要有 SGID 的权限才行!否则个别群组数据会让这五个人彼此间无法修改对方的数据的。因此需要这样做:
[root@www ~]# mkdir /home/vbirdgroup
[root@www ~]# chgrp vbirdgroup /home/vbirdgroup
[root@www ~]# chmod 2770 /home/vbirdgroup
[root@www ~]# ll -d /home/vbirdgroup
drwxrws--- 2 root vbirdgroup 4096  7月 13 11:11 /home/vbirdgroup
上面特殊字体的部分就是你需要注意的部分啰!特别注意那个权限的 s 功能喔!

例题-Quota 实作:
假设这五个用户均需要进行磁盘配额限制,每个用户的配额为 2GB (hard) 以及 1.8GB (soft),该如何处理?
答:
这一题实作比较难,因为必须要包括文件系统的支持、quota 数据文件建置、quota 启动、创建用户 quota 信息等过程。 整个过程在基础篇有讲过了,这里很快速的带领大家进行一次吧!
# 1. 启动 filesystem 的 Quota 支持
[root@www ~]# vim /etc/fstab
LABEL=/             /      ext3  defaults                    1 1
/dev/server/server  /home  ext3  defaults,usrquota,grpquota  1 2
LABEL=/tmp          /tmp   ext3  defaults                    1 2
....(底下省略)....
# 因为是要处理用户的磁盘,所以找到的是 /home 这个目录来处理的啊!
[root@www ~]# umount /home; mount -a
[root@www ~]# mount | grep home
/dev/mapper/server-server on /home type ext3 (rw,usrquota,grpquota)
# 做完使用 mount 去检查一下 /home 所在的 filesystem 有没有上述的字眼!

# 2. 制作 Quota 数据档,并启动 Quota 支持
[root@www ~]# quotacheck -avug
quotacheck: Scanning /dev/mapper/server-server [/home] quotacheck: 
....(底下省略)....
# 会出现一些错误的警告信息,但那是正常的!出现上述的字样就对了!
[root@www ~]# quotaon -avug
/dev/mapper/server-server [/home]: group quotas turned on
/dev/mapper/server-server [/home]: user quotas turned on

# 3. 制作 Quota 数据给用户
[root@www ~]# edquota -u vbirduser1
Disk quotas for user vbirduser1 (uid 501):
  Filesystem                 blocks  soft        hard  inodes  soft  hard
  /dev/mapper/server-server      56  1800000  2000000       7     0     0
# 因为 Quota 的单位是 KB ,所以这里要补上好多 0 啊!看的眼睛都花了!

[root@www ~]# edquota -p vbirduser1 vbirduser2
# 持续作几次,将 vbirduser{3,4,5} 通通补上去!

[root@www ~]# repquota -au
*** Report for user quotas on device /dev/mapper/server-server
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User             used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root       --  176212       0       0              5     0     0
student    --      56       0       0              7     0     0
vbirduser1 --      56 1800000 2000000              7     0     0
vbirduser2 --      56 1800000 2000000              7     0     0
vbirduser3 --      56 1800000 2000000              7     0     0
vbirduser4 --      56 1800000 2000000              7     0     0
vbirduser5 --      56 1800000 2000000              7     0     0
# 看到没?上述的结果就是有发现到设置的 Quota 值啰!整个流程就是这样!

例题-文件系统的放大 (LVM)
纯粹假设的,我们的 /home 不够用了,妳想要将 /home 放大到 25GB 可不可行啊?
答:
因为当初就担心这个问题,所以 /home 已经是 LVM 的方式来管理了。此时我们要来瞧瞧 VG 够不够用,如果够用的话, 那就可以继续进行。如果不够用呢?我们就得要从 PV 着手啰!整个流程可以是这样来观察的。
# 1. 先看看 VG 的量够不够用:
[root@www ~]# vgdisplay
  --- Volume group ---
  VG Name               server
  System ID
  Format                lvm2
....(中间省略)....
  VG Size               44.06 GB
  PE Size               32.00 MB
  Total PE              1410
  Alloc PE / Size       625 / 19.53 GB
  Free  PE / Size       785 / 24.53 GB
  VG UUID               RnQYZM-1bXC-hLTg-wT2J-ugHh-LvrH-b0FzmI
# 太棒了!还有 24GB 可以使用!我们只要再增加 5GB 而已!应该是够用的!

# 2. 检查 LV 够用吗:
[root@www ~]# lvdisplay
  --- Logical volume ---
  LV Name                /dev/server/server
  VG Name                server
  LV UUID                zSW5Cd-NfRV-e5lY-95fH-HAv5-02lO-01z8v8
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                19.53 GB
....(底下省略)....
# 看起来,是需要增加容量啰!我们使用 lvresize 来扩大容量吧!

[root@www ~]# lvresize -L 25G /dev/server/server
  Extending logical volume server to 25.00 GB
  Logical volume server successfully resized
[root@www ~]# lvdisplay
  --- Logical volume ---
  LV Name                /dev/server/server
  VG Name                server
  LV UUID                zSW5Cd-NfRV-e5lY-95fH-HAv5-02lO-01z8v8
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                25.00 GB
....(底下省略)....
# 看来确实是扩大到 25GB  啰!开始处理文件系统吧!

# 3. 扩大文件系统
[root@www ~]# resize2fs /dev/server/server
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/server/server is mounted on /home; on-line resizing required
Performing an on-line resize of /dev/server/server to 6553600 (4k) blocks.
The filesystem on /dev/server/server is now 6553600 blocks long.

[root@www ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5             2.9G  305M  2.4G  12% /
/dev/mapper/server-server
                       25G  173M   23G   1% /home
....(其他省略)....
# 可以看到文件系统确实有放大到 25G 喔!这样了解了吗?

做完上面的实作之后,现在你晓得为什么在基础篇的时候,我们一直强调一些有的没有的了吧?因为那些东西在这里都用的上! 如果本章这些题目你都不会,甚至连为什么要作这些东西都不懂的话,那得赶紧回去阅读基础篇,不要再念下去了! 会非常非常辛苦的呦!

1.2.2-4 服务器内部的资源管理与防火墙规划

你可知道本章第一个实作题安装好了你的 Linux 之后,系统到底开放了多少服务呢?这些服务有没有对外面的世界开放监听? 这些服务有没有漏洞或者是能不能进行网络在线更新?这些服务如果没有要用到,能不能关闭?此外, 这些服务能不能仅开放给部分的来源使用而不是对整个 Internet 开放?这都是需要了解的呢。 底下我们就以几个小案例来让你了解一下,到底哪些数据是你必须要熟悉的呢?

例题-不同 runlevel 的服务控管
在目前的 runlevel 之下,取得缺省启动的服务有哪些呢?此外,我的系统根本没有 isdn 与蓝芽设备, 我不想要启动这两个服务的话,该如何处理?
答:
缺省的 runlevel 可以使用 runlevel 这个指令来处理,那我们缺省使用 5 号的 runlevel ,因此你可以这样做:
[root@www ~]# LANG=C chkconfig --list | grep '5:on'
上面指令的输出消息中,会有 isdn 与 bluetooth 两个服务是在启动的状态,如果想要关闭他,可以这样做:
[root@www ~]# chkconfig isdn off
[root@www ~]# chkconfig bluetooth off
[root@www ~]# /etc/init.d/isdn stop
[root@www ~]# /etc/init.d/bluetooth stop

上面提到的仅只是有启动的服务,如果我想要了解到启动监听 TCP/UDP 封包的服务 (网络封包格式下章会谈到),那该如何处理? 可以参考底下这个练习题喔!

例题-查找启动在网络监听的服务
我想要检查目前我这部主机启动在网络端口口监听的服务有哪些,并且关闭不要的程序,该如何进行?
答:
网络监听的端口口分析,可以使用如下的方式分析到:
[root@www ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address   Foreign Address State   PID/Program name
tcp        0      0 127.0.0.1:2208  0.0.0.0:*       LISTEN  2032/hpiod
tcp        0      0 0.0.0.0:738     0.0.0.0:*       LISTEN  1828/rpc.statd
tcp        0      0 0.0.0.0:111     0.0.0.0:*       LISTEN  1796/portmap
tcp        0      0 127.0.0.1:631   0.0.0.0:*       LISTEN  2059/cupsd
tcp        0      0 127.0.0.1:25    0.0.0.0:*       LISTEN  2091/sendmail: acce
tcp        0      0 127.0.0.1:2207  0.0.0.0:*       LISTEN  2037/python
tcp        0      0 :::22           :::*            LISTEN  2050/sshd
udp        0      0 0.0.0.0:57814   0.0.0.0:*               2196/avahi-daemon:
udp        0      0 0.0.0.0:732     0.0.0.0:*               1828/rpc.statd
udp        0      0 0.0.0.0:735     0.0.0.0:*               1828/rpc.statd
udp        0      0 0.0.0.0:5353    0.0.0.0:*               2196/avahi-daemon:
udp        0      0 0.0.0.0:111     0.0.0.0:*               1796/portmap
udp        0      0 0.0.0.0:631     0.0.0.0:*               2059/cupsd
udp        0      0 :::52792        :::*                    2196/avahi-daemon:
udp        0      0 :::5353         :::*                    2196/avahi-daemon:
现在假设我想要关闭 avahi-daemon 这个服务以移除该服务启动的端口口时,应该要如同上题一样, 利用 /etc/init.d/xxx stop 关闭,再使用 chkconfig 去处理开机不启动的行为!不过,因为启动的服务名称与实际指令可能不一样, 我们在 netstat 上面看到的 program 项目是实际软件运行档,可能与 /etc/init.d/ 底下的服务文件名不同,因此可能需要使用 grep 去截取数据, 或者通过那好棒的 [tab] 按键去取得相关的服务文件名才行。
[root@www ~]# /etc/init.d/avahi-daemon stop
[root@www ~]# chkconfig avahi-daemon off

我们常常会开玩笑说,如果对外开放的软件没有更新,那防火墙不过是个屁!所以啦,软件更新是相当重要的。 在 CentOS 内,我们已经有 yum 来进行在线更新了,你当然可以自己利用更改设置档来指定 yum 要去查找的映射站 (mirror site),不过这里鸟哥建议使用缺省的设置值即可,因为系统会主动的判断较近的映射站 (虽然常常会误判), 不需要人工微调啦!

例题-利用 yum 进行系统更新
假设你的网络已经通了,目前你想要处理全系统更新,同时需要每天凌晨 2:15 自动进行全系统更新,该如何作?
答:
全系统更新使用 yum update 即可。但是由于 yum update 需要用户手动输入 y 去确认真的要安装,因此在 crontab 里头处理相关任务时, 就得要使用 yum -y update 了!
[root@www ~]# yum -y update
# 第一次作会进行非常之久!因为系统真的有些数据要更新嘛!还是得等待的!

[root@www ~]# vim /etc/crontab
15 2 * * * root /usr/bin/yum -y update

那个 crontab 文件的处理,以及 crontab -e 的指令应用,内容的写法字段不太一样,请自行参考基础篇的说明去加强学习喔!

在通过了上述的各项设置后,我们的 Linux 系统应该是比较稳定些了,再接着下来,我们要开始来设置资源的保护了! 例如 ssh 这个远程可登录的服务得要限制住可登录的 IP 来源,以及制订防火墙规则流程等。 这部份则是本教学文档后续要着重介绍的部分,留待后面章节再来谈吧!

Tips 鸟哥 程序员所撰写的程序并非十全十美的,所以,总是可能有些地方没有设计好,因此就造成所谓的『程序漏洞』啰。 程序漏洞所造成的问题有大有小,小问题可能是造成主机的当机,大问题则可能造成主机的机密数据外流, 或者主机的操控权被 cracker 取得。在现今网络发达的年代,程序的漏洞问题是造成主机被攻击、入侵的最主要因素之一了。 因此,快速、有效的针对程序漏洞进行修补,是一个很重要的维护课题。

1.2.2-5 服务器软件设置:学习设置技巧与开机是否自动运行

这部份就是整个服务器架设篇的重要内容了!前一小节也曾谈过,在服务器架设部分你得要熟悉相当多的信息, 否则未来维护会显的很麻烦。我们以本章提到的大前提为例,我们想要提供一个网络磁盘机,那么网络磁盘机使用的机制有哪些呢? 常见的除了网页形式的分享磁盘之外,还有常见的网芳以及 Linux 的 NFS 方式 (后面章节都会继续谈到)。

由于假设局域网路内的操作系统大部分是 Windows 好了,因此网芳应该是个比较合理的磁盘分享选择。 那么网芳到底启动了多少个端口口?是如何持续提供网芳数据的?提供的帐号有没有限制?提供的权限该如何设置? 是否可规定谁可登录某些特定目录?针对网芳服务的端口口该如何设置防火墙?如果系统出错该如何查找错误信息? 这个网芳在 Linux 底下要使用什么服务来达成?这都是需要学习的呢!

直接告诉你,网芳的制作在 Linux 底下是由 Samba 这套软件来达成的。Samba 的详细设置我们会在后续章节介绍。 这里要告诉你的是, 架设一个网芳服务器,你应该要会的基础知识有哪些?以及告诉你,你可以背下来的架设流程中, 理论上应该要经过哪些步骤的过程,这样对你未来处理服务器设置时,才会有点帮助啊!

  1. 软件安装与查找

    刚刚我们已经知道网芳需要安装的是 Samba 这套软件,那么该如何查找有没有安装呢?如果没有安装又该如何安装呢? 那就来处理处理。

    例题:
    查出你的系统底下有没有 samba 这套软件,若无,请自行查找与安装该软件
    答:
    已安装的软件可以使用 rpm 去察看看,尚未安装的则使用 yum 功能。所以可以这样进行看看:
    [root@www ~]# rpm -qa | grep -i samba
    samba-3.0.33-3.29.el5_5
    system-config-samba-1.2.41-5.el5
    samba-common-3.0.33-3.29.el5_5
    samba-client-3.0.33-3.29.el5_5
    # 看起来是已经安装成功啰!如果没有看到上述的特殊字体时,就要这样做:
    
    [root@www ~]# yum search samba  <==先查一下有没有相关的软件
    [root@www ~]# yum install samba <==找到之后,那就安装吧!
    
    # 那么如何找出设置档呢?因为我们总是需要修改设置档啊!这样做吧:
    [root@www ~]# rpm -qc samba samba-common
    /etc/logrotate.d/samba
    /etc/pam.d/samba
    /etc/rc.d/init.d/smb
    /etc/samba/smbusers
    /etc/sysconfig/samba
    /etc/samba/lmhosts
    /etc/samba/smb.conf
    /etc/security/pam_winbind.conf
    

  2. 服务器主设置与相关设置

    这部份可就麻烦了!因为你得要了解到,你到底需要的服务是什么,针对该服务需要设置的项目有哪些? 这些设置需要用到什么指令或设置档等等。一般来说,你得要先察看这个服务的通信协定是啥,然后了解该如何设置, 接下来编辑主设置档,根据主设置档的数据去运行相对应的指令来取得正确的环境设置。以我们这里的网芳为例, 我们需要设置工作群组,然后需要设置可以使用网芳的身份为非匿名,接下来就能够开始处理主设置档。 因此你需要有:

    1. 先使用 vim 去编辑 /etc/samba/smb.conf 设置档;
    2. 利用 useradd 创建所需要的网芳实体用户;
    3. 利用 smbpasswd 创建可用网芳的实体帐户;
    4. 利用 testparm 测试一下所有数据语法是否正确;
    5. 检查看看在网芳内分享的目录权限是否正确。

    这些设置都搞定之后,才能够继续进行启动与观察的动作呦!而想要了解更多关于 samba 的相关设置技巧与应用, 除了 google 大神之外, /usr/share/doc 内的文档,以及 man 这个好用的家伙都必须要去阅读一番!

  3. 服务器的启动与观察

    在设置妥当之后,接下来当然就是启动该服务器了。一般服务器的启动大多是使用 stand alone 的模式, 如果是比较少用的服务,如 telnet ,就比较有可能使用到 super daemon 的服务启动类型。我们这里依旧使用 samba 为例, 来瞧瞧如何启动他吧!

    例题:
    如何启动 samba 这个服务呢?并且设置好开机就启动他!
    答:
    想要了解如何启动,得要使用 rpm 去找一下软件的启动方式,然后再去处理启动的行为啰!
    # 先查找一下启动的方式为何:
    [root@www ~]# rpm -ql samba | grep '/etc'
    /etc/logrotate.d/samba
    /etc/pam.d/samba
    /etc/rc.d/init.d/smb   <==所以说是 stand alone 且文件名为 smb 喔!
    /etc/samba/smbusers
    /etc/sysconfig/samba
    
    # 开始启动他!且设置开机就启动喔!:
    [root@www ~]# /etc/init.d/smb start
    [root@www ~]# chkconfig smb on
    
    # 接下来,让我们观察一下有没有启动相关的端口口吧!
    [root@www ~]# netstat -tlunp | grep '[sn]mbd'
    tcp   0   0 0.0.0.0:139          0.0.0.0:*   LISTEN   7893/smbd
    tcp   0   0 0.0.0.0:445          0.0.0.0:*   LISTEN   7893/smbd
    udp   0   0 192.168.201.111:137  0.0.0.0:*            7896/nmbd
    udp   0   0 0.0.0.0:137          0.0.0.0:*            7896/nmbd
    udp   0   0 192.168.201.111:138  0.0.0.0:*            7896/nmbd
    udp   0   0 0.0.0.0:138          0.0.0.0:*            7896/nmbd
    
    最终我们可以看到启动的端口口有 137, 138, 139, 445 喔!

  4. 用户端的连接测试

    接下来就是要找一部机器做为用户端,然后尝试使用本机器提供的网芳功能啊!这样才能够了解设置是对还是错! 相关的用户端连接与服务器提供的服务有关,例如 WWW 服务器就要使用 browser 去测试,网芳当然就得要使用网芳用户端程序啰!这部份也是本服务器篇要讲的基本内容啦!

    但是很多时刻,用户端连接测试不成功并非是服务器设置的问题,很多是用户端使用方式不对! 包括用户端自己的防火墙没开啦,用户端的帐号权限密码等等记错啦等等的,问题很大啦! 总体来说:『教育你的 Client 用户具有最最基础的 Linux 帐号、群组、文件权限等概念,才是一个彻底解决问题的方法』,但这也是最难的部分...

  5. 错误克服与观察注册表

    一般来说,如果 Linux 上面的服务出现问题时,通常会在屏幕上面直接告诉你错误的原因为何,所以你得要注意屏幕消息。 老实说,屏幕消息通常就已经告诉你该如何处理了。如果还不能处理呢?你可以这样处置看看:

    • 先看看相关注册表有没有错误消息,举例来说, samba 除了会在 /var/log/messages 里面列出消息外, 大部分的消息应该是摆放在 /var/log/samba/ 这个目录下的数据,因此你就得先去查阅一番。通常在注册表内的信息, 会比在屏幕上的还要仔细,那你就可以自行处理完毕了;
    • 将消息带入 Google 查找,通常可以解决注册表出现的但是你没有办法克服的问题喔!达成率可达 95% 以上吧!
    • 还是不成功,那就到各大讨论区去发问吧!建议到酷学园 (http://phorum.study-area.org)

    最常出现的其实是 SELinux 的错误啦!此时就得要使用 SELinux 的方法来尝试处理啰! 这也是本服务器篇后续会稍微提到的内容。

经过上面的流程,你就可以知道啦,架设好一部主机需要知道:(1)各个 process 与 signal 的观念;(2)帐号与群组的观念与相关性;(3)文件与目录的权限,这当然包含与帐号相关的特性; (4)套件管理员的学习;(5)BASH 的语法与 shell scripts 的语法,还有那个很重要的 vim 啰!:(6)开机的流程分析,以及记录注册表的设置与分析;(7)还得知道类似 quota 以及链接档等等的概念。要知道的真的很多,而且还是不能省略的步骤喔!

1.2.2-6 细部权限与 SELinux

如果有些特殊的使用情况时,权限设置就是个很重要的因素。举例来说,我们系统上面,现在有 vbirduser{1,2,3,4,5} 以及 student 等帐号,而共享目录为 /home/vbirdgroup。现在, vbirdgroup 的群组想要让 student 这个用户可以进入该共享目录查阅, 但是不能够更改他们原本的数据,你该如何进行呢?你或许可以这样想:

  • 让 student 加入 vbirdgroup 群组即可:但如此一来, student 具有 vbirdgroup 的 rwx 权限,也就可以写入与修改啰, 因此这个方案行不通。

  • 将 /home/vbirdgroup 的权限改为 2775 即可:如此一来 student 拥有其他人的权限 (rx),但如此一来其他所有任何人均拥有 rx 权限,这个方案也行不通。

传统的身份与权限概念就只有上面两种解决方案而已,这下子严重了!我们没有办法针对 student 进行权限设置! 此时就得要使用 ACL 啰~同样这个例子,我们就来实作一下:

例题-单一用户、群组的权限设置 ACL
想要让 student 可以进入 /home/vbirdgroup 进行查找,但不可写入。同时 vbirduser5 在 /home/vbirdgroup 内, 不具有任何权限。
答:
只能使用 ACL 啰!由于安装时缺省格式化就加上 acl 的文件系统功能支持,因此你可以直接处理如下的各项指令。 如果你是使用后来添加的 partition 或 filesystem ,或许得要在 /etc/fstab 内额外增加 acl 控制参数才行喔!
[root@www ~]# setfacl -m u:student:rx /home/vbirdgroup
[root@www ~]# setfacl -m u:vbirduser5:- /home/vbirdgroup
[root@www ~]# getfacl /home/vbirdgroup
# file: home/vbirdgroup
# owner: root
# group: vbirdgroup
user::rwx
user:student:r-x    <==就是这两行,额外的权限参数哩!
user:vbirduser5:---
group::rwx
mask::rwx
other::---
[root@www ~]# ll -d /home/vbirdgroup
drwxrws---+ 2 root vbirdgroup 4096  7月 13 11:11 /home/vbirdgroup

上面说的是正确的权限控制行为。那万一系统管理员不是个东西...不是啦!系统管理员并不知道权限的重要性时, 常常会因为某些特殊需求,就将整个目录设置为 777 的情况!举例来说,如果是一个不怎么想要负责的网管人员, 为了自己方便、大家方便,就将 /home/vbirdgroup 设置为 777 ,这样『大家欢喜』嘛!此时,如果你没有加上任何管理机制, 嘿嘿!这个群组成员工作的成果,通通可以被大家所窃取,真是要命了!

为了预防这种心不在焉的管理员,于是就有了 SELinux 这个玩意儿。SELinux 主要在控制细部的权限, 他可以针对某些进程要读取的文件来设计 SELinux 类别,当进程与文件的类别形态可以相符合时,该文件才能够开始被读取。 如此一来,当你设置文件权限为 777 ,但是因为进程与文件的 SELinux 例行不符,所以没关系的,因为该进程还是读不到该文件! 所以我们在图 1.2-1 才会将 SELinux 的图标绘制到 daemon 与 file permission 中间啊!

事实上 SELinux 还挺复杂的,但是我们如果仅是想要应用而已,那么 SELinux 的处理方式通通可以通过注册表来处置! 所以 SELinux 出现问题的机会非常大,但是解决技巧却很简单!就是通过注册表内的说明去作即可。 详细的作法我们在后续章节再持续说明吧!

1.2.3 系统安全与备份处理

老实说,在鸟哥管理服务器的经验来说,硬件问题要比操作系统与软件问题还来的严重,而人的问题又比硬件问题严重! 举例来说,如果你的老板跟你说:『我要的帐号是 eric ,而且我的密码也要是 eric !这样比较好记嘛!』 你应该要怎么处理呢?『果然需要再教育』!教育谁?教育自己啦!是要忍耐还是要说服老板别这样~好讨厌的感觉吧!

因此,在系统安全方面,首要的工作是通过日常生活的社交活动中,慢慢透露一些资安方面的困扰, 并提供老板一些制订资安规则方面的信息,这样未来比较好鼓吹资安条件的制订。我们就先由严格的密码来建议吧:

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

另外,虽然『防火墙无用论』常常被提及,但是 netfilter (Linux 的内核内置防火墙) 其实仍有他存在的必要。 因此你还是得就要你自己的主机环境来设计专属于自己的防火墙规则,例如上面提到的 SSH 服务中, 你可以仅针对某个局域网路或某个特定 IP 开放连接功能即可啊!

最后,备份是不可忽略的一环。本节开头就讲到了,鸟哥遇过常常莫名其妙自动重开机或系统不稳的,经常都不是被攻击, 而是硬件内部的电子零件老化所造成的系统不稳定...此时,异地备援啦、备用机器的接管理等等的,就很重要啰! 而你总不想要因为硬盘挂点导致数据『害害去』,所以啰,备份就真他X的重要啰!

例题:
系统上比较重要的目录有 /etc, /home, /root, /var/spool/mail 等,你现在想要在每天 2:45am 进行备份,且备份数据存到 /backup 内, 备份的举动使用 tar ,那该如何处理?
答:
鸟哥通常是使用 shell script 来进行备份数据的汇整,范例如下:
[root@www ~]# mkdir /root/bin; vim /root/bin/backup.sh
#!/bin/bash
backdir="/etc /home /root /var/spool/mail"
basedir=/backup
[ ! -d "$basedir" ] && mkdir $basedir
backfile=$basedir/backup.tar.gz
tar -zcvf $backfile $backdir

[root@www ~]# vim /etc/crontab
45 2 * * * root sh /root/bin/backup.sh

无论如何,以现今的网络功能及维护来看,架设一个『功能性强』的主机, 还不如架设一个『稳定且安全的主机』比较好一点!因此,对于主机的安全要求就需要严格的要求啦!就鸟哥的观点来看, 如果你的主机是用来替你赚钱的,例如某些研究单位的大型 Cluster 运算主机, 那么即使架设一个甚至让你觉得很不方便的防火墙系统,都是合理的手段!因为主机被入侵就算了,若数据被窃取,呵呵! 那可不是闹着玩的!

由上面的整个架站流程来看,由规划到安装、主机设置、帐号与文件权限管理、后续安全性维护与管理以及重要的备份工作等等, 必需要每个环节都很清楚,才能够设置出一个较为稳定而可正常工作的服务器。而上面的每一个工作都涉及到相当多的 Linux 基础操作与相关的概念,所以说,想要学架站,真的真的不能省略了 Linux 的基础学习, 这也是为什么我们一再强调 Linux 新手不要一头栽入想要单纯架设服务器的迷思当中呐! 如果你对于上面谈到的几个基础概念不是很清楚的话,那么建议你由底下的两个网站学起:

1.3 自我评估是否已经具有架站的能力

网管人员需要什么能力呢?我想,架几个站跟作一个称职的网管人员, 相差是甚远的!架站,说真的,是一件很简单的事情,看著书本一步一步的作上去,一定可以成功的!但是,很多人都只晓得 『如何架站』却不知到『如何维护一个网站的安全』!基本上, 维护一个已经架设好的网站的正常运作,真的要比架设一个网站难的多了!你得要随时知道你的系统状况, 随时注意是否有新的套件漏洞而去修补他,随时要注意各种服务的注册表案(logfile)以了解系统的运作情况! 得知道发生问题的时候,到底问题点是在哪一个!

比如说当机了,那么你知道当机的原因吗? 即使不知道,也可得需要约略猜得出来才行。而,如果安全出了问题,被入侵了,除了 format + 重装之外,可有办法在不移除系统的情况下修补漏洞? 这些都是网管人员需要学习的,而且,通常都是需要经验的累积才会知道问题的所在! 此外,保持身心的活力以随时注意在线公布的安全防备信息等等!都需要具备的!

此外,最严重的问题是,网管人员其实最需要的是 『道德感与责任感』!你可要晓得你的机器上所有人的隐私都在你的监控之下, 如果你本身就已经有偷窥欲了,可知道这有多可怕吗?另外,如果没有责任感的人作为一个网管, 可能会疯掉,因为不论何时何地,只要是你监控的主机出了问题,嘿嘿嘿嘿,你一定是第一个被想到的人物, 所以,你得随时随地做好可能随时会被召唤回主机跟前的心理准备!

更可笑的是,如果你服务的人群中, 有几个连开机的时候软驱塞了一块不可开机的软碟,导致无法正常开机, 也都会跟你抱怨说『唉呦!你经手的电脑怎么这么烂,动不动就不能开机』的时候, 你得要有容人的雅量,说说冷笑话解解闷吧!总之,网管人员并不是只要会架站就可以了, 『道德感』『责任感』还有『耐心』呵呵!套一句现在人喜欢说的口头禅『这是一定要的啦!』

网管人员是什么? 好久以前看到了报纸的一篇报导, 内容大概是说:台湾的网络管理人员对于『网络安全性防护』的认知不够,或许是防火墙机制创建不完整, 或者是认为黑客不会入侵小型网站,所以在不甚了解的情况下,被所谓的『中东黑客组织』所入侵, 然后以台湾被入侵的电脑为跳板,去攻击宾拉登的仇敌美国,然后引起美国高度的不满。由于台湾的立场有点得罪不得美国 ( 这边不提及政治因素,反正目前的情况是这样。 ) ,所以一接到美国来的抗议信函就很棘手。 这只是一个事件问题,不过这个事件问题也点出了一个重点,就是我们的网络信息可能真的是蛮发达的, 不过,管理网络的人员可能在认知的程度上就有点参差不齐了!网络安全是蛮重要的,只是, 大家常常会忘记他!个人认为,网管是蛮重要的角色,应该不能等闲视之才对。

好了,如果你了解了上面小弟所想要表达的意念之后,来评估看看你是否适合当一个称职的网管人员吧!
  1. 是否具有 Linux 的基础概念
    这当然包含很多部分,例如帐号管理、BASH、权限的概念、Process 与 signal 的概念、简易的硬件与 Linux 相关性 (如 mount)的认识、注册表案的解析、daemon 的认识等等,都需要有一定程度的了解;

  2. 是否具备基础网络知识
    没有网络知识想要架站,那是天方夜谭!请确认你已经熟悉 IP, Netmask, route, DNS, daemon 与 port, TCP 封包的概念等基本知识;

  3. 是否已经身心活化了
    网管人员必须要随时注意网站的相关信息,这包括网站套件的漏洞修补、 网络上公告的网络安全通报等等,还有,得要每日分析主机的注册表, 你是否已经具备了随时注意这些信息的『耐心』呢?

  4. 是否具有道德感与责任感
    如果还是具有一点点的偷窥欲,再加油吧!^_^ ,另外,如果老板想要请你『偷窥』时,请想尽任何方法,让他理解这么做是多么的可笑~

当然,一再强调的,架设一个 Linux 服务器是很简单的,但是维护的工作除了身心已经活化, 并且还要拥有高标准的道德感,否则.....倒站恐怕是可以预见的一个后果.....

1.4 本章习题

  • 如果我有一颗硬盘在 A 主机上面安装了 Linux 之后,拿到另一台配备相同的 B 主机上面去进行开机,结果竟然无法顺利开机,你认为可能的原因是什么?
    不能开机常常是因为找不到根目录的位置,而根目录找不到通常就是磁盘的设备文件名错误所致。目前由于 /etc/fstab 配合 filesystem 都使用 LABEL name ,所以不容易发生这样的情况。但如果你曾经自行手动处理过 /etc/fstab 的话,那就必须要注意磁盘的设备文件名了! 通过修改 /etc/fstab 以及 /boot/grub/menu.lst 或许能够得到方法解决。
  • 一般来说,在 Linux 系统上,用户缺省的家目录在那个目录下?另外,添加一个用户时, 该用户缺省的家目录内容来自那个目录下?
    在 /etc/default/useradd 这个文件里面会规范用户的缺省家目录以及缺省家目录的内容,一般来说,用户缺省家目录在 /home ,至于家目录内的文件则拷贝来源在 /etc/skel 里面。
  • 我以原代码的方式进行一个套件的安装,但是在分析系统的时候,分析程序一直告诉我找不到 cc 这个指令,请问这是什么问题?为何需要 cc ?又,我该如何解决这个问题,好让套件可以顺利的被安装在我的 Linux 上面?
    因为是原代码,所以还需要编译程序来将该原代码编译成为可以在你的 Linux 系统上面跑的 binary 文件,在 Linux 上头缺省的编译程序就是 gcc 这个编译器(compiler)。如果你在安装 Linux 的时候,使用 Linux Installer 缺省的套件选择,那通常会没有安装 gcc 以及 make 等套件,此时,请使用 yum 去处理软件的安装吧!
  • 我发现我的 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 来修订隐藏属性。
  • 你认为一个称职的网管人员应该具备什么能力?
    能力需求相当高,如了(1)操作系统的基础知识(不论是 Linux/Unix/MAC/MS);(2)网络基础的知识;(3)个别 Internet Services 的运作知识之外,还需要(4)身心保持在备战状态,以及(5)具有相当高程度的道德感、责任感与使命感。
  • 我要关掉 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:将一些排版重整,将一些日期方面的数据重整,将课后练习补上来
2010/05/07:将 CentOS 4.x 为底的旧文章移动到 此处
2010/07/22:重新设计服务器安装流程,并且在每个基础数据都加上练习!尤其是全新安装一部 server 以供使用!
其他链接
环境工程模式篇
鸟园讨论区
鸟哥旧站

今日 人数统计
昨日 人数统计
本月 人数统计
上月 人数统计