『架设服务器』是学习 Linux 的新手最想要进行的工作!但是,不了解 linux 的基础就进行服务器架设,可能会死的很 惨~在这篇文章中,我们会以简单的说明告诉大家为何需要学好 Linux 基础后,才能架设服务器啊!
很多朋友因为自身或服务单位的需求,总是有架设各种网络服务器的时刻,这个时候大多数的前辈都会推荐他们使用 Linux 做为服务器架设的操作系统。但因为这些朋友很多都没有受过 Linux 操作系统操作方面的训练,因此总觉得反正都是操作系统,所以 Linux 应该也跟 Windows 差不多吧!那么就硬着头皮使用图形接口去设置好众多的服务器,也有可能参考网络上一些文章, 即使是通过文本接口去设置,也能够很轻松的作好服务器的架设。问题是,这样的一部服务器是很容易被绑架的, 而且,如果网络不通,你如何自行将问题克服 (trouble shooting)?难道出问题只能无语问苍天?
所以啰,除非你只是暂时需要架设网络服务器,可以请朋友或其他信息公司帮你忙,如果你本身就是信息方面的服务提供者, 那鸟哥建议你在进行服务器实务设置之前,看一看这篇,试试看你到底有没有具备网络服务器的设置技能了呢?
很多刚接触 Linux 的朋友常常会问的一句话就是:『我学 Linux 就是为了架设服务器,既然只是为了架设服务器,为什么我还要学习 Linux 的其他功能?例如:例行性工作调度、Bash Shell ,又干嘛去认识所有的注册表等等,我又用不到!此外,既然有好用的 Web 接口的 Server 设置软件,可以简单的将网站架设起来,为什么我还要去学习 vim 手动的编辑一些设置档?干嘛还需要去理解服务器的工作的原理?』上面这些话对于刚刚学会架设网站的人来说,真是替他们道出了一个新手的心声啊!不过,对于任何一个曾经有过架设公开网站的朋友来说,上面这些话,真的是会害死人!为什么呢?底下我们就来分析一下。
如果有人问你:『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, NAT 与 Router 等等,Linux 系统都可以达到,而且,只要一部 Linux 就能够达到上面所有的功能了!当然,那是在不考虑网络安全与性能的情况下,你可以使用一部 Linux 主机来达成所有的网络功能。
但是你得要知道,『架站容易维护难』啊!更深一层来说,『维护还好、调试更难啊!』架设一个网站有什么难的?即使你完全没有摸过 Linux ,只要参考鸟哥的书籍或者是网站,而且一步一步照着做,包准你一个下午就可以架设完成五个以上的网络服务了!所以说, 架设服务器有什么难的?但要晓得的是,这样的一个网站,多则三天,少则数小时,立刻就会被入侵了! 此外,被入侵之后,或许可以借由一些工具来帮你将 root 的密码救回来,可惜的是, 这样的一个网站还是有被做为中继站的危险存在的!
另外,如果你使用工具 (例如 Webmin) 却怎么也架设不起来某个网站时,要怎么解决?如果你不懂该 Server 的运作原理与 Linux 系统的调试消息,那么难道只能无语问苍天?不要怀疑这种情况的可能性, 参考一下各大论坛上面的留言就可以很清楚的知道这种情况的存在有越来越明显的趋势呢!
所以说,架设服务器之前还是有一些基本的技能需要学会的!而且这些技能是『一旦学会之后,真正是终身受用啊!』只要花一个学期 (三~六个月) 就能学会一辈子可以使用的技能,这个学习的投资报酬率真是太高了! 所以,一开始的学习不要觉得苦,那真的是值得的喔!^_^
Linux 不是很好学,根据鸟哥过去教学的经验,很多同学在学 Linux 时真是非常的痛苦,不过学完之后, 以前在 Windows 上面遇到的困难却也自然而然的迎刃而解!因为 Linux 训练我们时,是要我们去解决一个发现的问题, 这过程需要很多基础知识的培养,所以学完他之后,你会觉得很多事情都变的很简单而单纯。但如果使用 Windows 的懒人方案,很多问题就不可能了解为啥会发生与为啥可以这样处理了!我们会在下一节分析一下架设服务器的流程, 也会提供相对应的你应该要会的 Linux 技能喔!
不管是 Windows 还是 Linux ,要架设好一部堪称完美的服务器,『基本功课』还是得做的,这包括了:
而且,每一个项目里面所需要学习的技巧可多着呢!『什么?要学的东西那么多啊!』是啊! 所以,不要以为信息管理人员整天闲闲没事干的呐,大家可是天天在出卖知识的,同时, 还得天天应付随时可能会发生的各种漏洞与网络攻击手法呢!真不是人干的工作~~
这么说的话,架设服务器真的是挺难的喔!事实上,架设服务器其实蛮简单的哩!咦!~怎么又说架设服务器简单了? 不是说架设服务器难吗?呵呵!其实『架设服务器很难』是由于朋友们学习的角度有点偏差的原因啦! 还记得当初进入理工学院的时候,天天在念的东西是基础物理、基础化学、工程数学与流体力学等基础科目, 这些科目花了我们一至两学期的时间,而且内容还很难呐~都是一大堆的理论背不完。 怪了?我们进理工学院是为了求取更高深的知识,那么这些基础知识学了有什么用呐? 呵呵!更高深的知识都是建构在这些基本科目的理论上面的,所以 万一你基础的科目没有读好,那么专业科目里面提到的基本理论怎么可能听的懂?
这样说应该就不难了解了吧!没错!认识操作系统与该操作系统的基本操作,还有那个重要的网络基础, 就是我们在架设服务器前的『基础科目』啦!所以说,在进入 Linux 的服务器世界之前,真的不能够略过网络基础的相关知识,同时, Linux 系统的基本技能也必需要能够理解呐!
好了,或许你还是对于 Linux 系统里面『什么是很重要的知识』不甚了解, 果真如此的话,那么我们就举个简单的例子来说明一下啰!底下列出一般的架设服务器流程, 我们由架设服务器的流程当中,来看一看什么是重要的 Linux 相关技能吧! ^_^。
虽然不同的服务器提供的服务并不相同,而且每种服务的原理也不见得都一样,不过,每种服务器由规划、架设到后续的安全维护, 其实整个流程是大同小异的。什么?你不相信啊?为了让你相信,那我们就来一项一项的分析看看吧!
底下我们就整个服务器的简易架设流程当中来分析一下,以了解为什么了解操作系统的基础对于网站维护是相当重要的呢?首先,到底我们是如何连接到服务器的? 连接到服务器又取得啥咚咚?我们先以底下这张图标来作个简单的说明好了:
先来理解一下,到底我们连接到服务器想要得到什么?举例来说,你连接到 Youtube 想要看视频,所以对方就提供视频串流数据给你; 你连到 Yahoo 想要看新闻,所以对方就提供新闻的文本文件给你;你连接到无名小站想要看美女,对方就传图档给你;你连接 Facebook 想要去种田,对方就参考你之前留下来的记录,从数据库里面将你的记录拿出来传给你。看到没有,你连接到服务器,重点在取得对方的数据, 而一般数据的存在就是使用文件啰!那你有没有权限取得?最终与该文件系统的设置有关啦!
上图显示的是:首先,用户端到服务器的网络要能够通,等到用户端到达服务器后,会先由服务器的防火墙判断该连接能否放行, 等到放行之后才能使用到服务器软件的功能。而该功能又得要通过 SELinux 这个细部权限设置的项目后,才能够读取到文件系统。 但能不能读到文件系统呢?这又跟文件系统的权限 (rwx) 有关啦!上述的每个部分都要能够成功,否则就无法顺利读取数据啰。
所以,根据上面的流程我们大概可以将整个连接分为几个部分,包括:网络、服务器本身、内部防火墙软件设置、各项服务设置档、细部权限的 SELinux 以及最终最重要的文件权限。底下就分几个细项来谈谈啰。
上述的服务器架设流程中,其实除了第 5 点之外,其他步骤在各服务器设置都需要了解啊!而且都是一样的东西说! 因此,这些基础如果学会了,最终,你只要知道第 5 点里面那个软件的基础设置,你的服务器一下子就可以设置完成啦! 这样说,你是否开始觉得基础学习很重要啊! ^_^
上面讲完后或许你还是不很清楚到底这些技能如何串起来?鸟哥这里提供一个简单的案例来分析一下好了, 这样你应该就比较容易清楚的知道为何需要学习这些咚咚。
在上述的环境中,你要考虑的东西有哪些呢?依据本小节一开始谈到的六个步骤来分析的话,你可能需要底下这些咚咚喔!
我们想要将五部电脑串接在一块,但是却又只有一个可以对外的连接,此时就得要购买集线器 (hub) 或者是交换器 (switch) 来串接所有的电脑了。但是这两者有何不同?为何 switch 比较贵?我们知道网络线被称为 RJ-45 的网络线, 但网络线材竟然有等级之分,这个等级要怎么分辨?不同等级的线材速度有没有差异?等到这些硬件基础了解之后, 你才能够针对你的环境来进行连接的设计。这部份我们等到下一章再来介绍。
由于只有一条对外连接而已,因此通常我们就建议你可以用如下的方式来串接你的网络:
通过 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 所示,Server 端是在那五部电脑之中,而且 Server 必须要提供针对不同帐号给予网络磁盘机,我们这边会提供网芳 (SAMBA) 这个服务,因为他可以在 Linux/Windows 之间通用之故。 且由于需要提供帐号给用户,以及想到未来的磁盘扩充情况,因此我们想要将 /home 独立出来,且使用 LVM 这个管理模式, 并搭配 Quota 机制来控制每个帐号的磁盘使用量。
所以说,你得知道 Linux 目录下的 FHS (Filesystem Hierarchy Standard) 的规范,否则分区给到错误的目录,会造成无法开机!那为什么要将 /home 独立放入一个分区? 那是因为 quota 仅支持 filesystem 而不支持单一目录啊!好了,如果给你一部全新的主机,那你该如何安装你的系统呢?
既然我们这部主机得要提供不同帐号来使用他们自己的网络磁盘,因此还需要创建帐号啊,使用磁盘配额 (quota) 等等的。 那么你会不会创建帐号呢?你会不会建置共享目录呢?你能不能处理每个帐号的 Quota 配额呢?如果 /home 的容量不足了, 你会不会放大 /home 的容量呢?有没有办法将系统的磁盘使用情况定期的发送邮件给管理员呢?这些都是基本的维护行为喔! 我们底下就以几个实际例子来练习看看你的基础能力吧!
例题-大量建置帐号:
假设我的五个朋友帐号分别是 vbirduser{1,2,3,4,5},且这五个朋友未来想要共享一个目录,因此应该要加入同一个群组,假设这个群组为
vbirdgroup,且这五个帐号的密码均为 password 。那该如何建置这五个帐号?
答:
你可以写一支脚本程序来进行上述的工作喔!
[root@localhost ~]# mkdir bin [root@localhost ~]# cd /root/bin [root@localhost bin]# 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@localhost bin]# sh useradd.sh [root@localhost bin]# 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@localhost ~]# mkdir /home/vbirdgroup [root@localhost ~]# chgrp vbirdgroup /home/vbirdgroup [root@localhost ~]# chmod 2770 /home/vbirdgroup [root@localhost ~]# ll -d /home/vbirdgroup drwxrws---. 2 root vbirdgroup 4096 2011-07-14 14:49 /home/vbirdgroup/ # 上面特殊字体的部分就是你需要注意的部分啰!特别注意那个权限的 s 功能喔! |
例题-Quota 实作:
假设这五个用户均需要进行磁盘配额限制,每个用户的配额为 2GB (hard) 以及 1.8GB (soft),该如何处理?
答:
这一题实作比较难,因为必须要包括文件系统的支持、quota 数据文件建置、quota 启动、创建用户 quota 信息等过程。
整个过程在基础篇有讲过了,这里很快速的带领大家进行一次吧!
# 1. 启动 filesystem 的 Quota 支持 [root@localhost ~]# vim /etc/fstab UUID=01acf085-69e5-4474-bbc6-dc366646b5c8 / ext4 defaults 1 1 UUID=eb5986d8-2179-4952-bffd-eba31fb063ed /boot ext4 defaults 1 2 /dev/mapper/server-myhome /home ext4 defaults,usrquota,grpquota 1 2 UUID=605e815f-2740-4c0e-9ad9-14e069417226 /tmp ext4 defaults 1 2 ....(底下省略).... # 因为是要处理用户的磁盘,所以找到的是 /home 这个目录来处理的啊! # 另外,CentOS 6.x 以后,缺省使用 UUID 的磁盘代号而非使用文件名。 # 不过,你还是能使用类似 /dev/sda1 之类的文件名啦! [root@localhost ~]# umount /home; mount -a [root@localhost ~]# mount | grep home /dev/mapper/server-myhome on /home type ext4 (rw,usrquota,grpquota) # 做完使用 mount 去检查一下 /home 所在的 filesystem 有没有上述的字眼! # 2. 制作 Quota 数据档,并启动 Quota 支持 [root@localhost ~]# quotacheck -avug quotacheck: Scanning /dev/mapper/server-myhome [/home] done ....(底下省略).... # 会出现一些错误的警告信息,但那是正常的!出现上述的字样就对了! [root@localhost ~]# quotaon -avug /dev/mapper/server-myhome [/home]: group quotas turned on /dev/mapper/server-myhome [/home]: user quotas turned on # 3. 制作 Quota 数据给用户 [root@localhost ~]# edquota -u vbirduser1 Disk quotas for user vbirduser1 (uid 500): Filesystem blocks soft hard inodes soft hard /dev/mapper/server-myhome 20 1800000 2000000 5 0 0 # 因为 Quota 的单位是 KB ,所以这里要补上好多 0 啊!看的眼睛都花了! [root@localhost ~]# edquota -p vbirduser1 vbirduser2 # 持续作几次,将 vbirduser{3,4,5} 通通补上去! [root@localhost ~]# repquota -au *** Report for user quotas on device /dev/mapper/server-myhome Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 24 0 0 3 0 0 vbirduser1 -- 20 1800000 2000000 5 0 0 vbirduser2 -- 20 1800000 2000000 5 0 0 vbirduser3 -- 20 1800000 2000000 5 0 0 vbirduser4 -- 20 1800000 2000000 5 0 0 vbirduser5 -- 20 1800000 2000000 5 0 0 # 看到没?上述的结果就是有发现到设置的 Quota 值啰!整个流程就是这样! |
例题-文件系统的放大 (LVM):
纯粹假设的,我们的 /home 不够用了,你想要将 /home 放大到 7GB 可不可行啊?
答:
因为当初就担心这个问题,所以 /home 已经是 LVM 的方式来管理了。此时我们要来瞧瞧 VG 够不够用,如果够用的话,
那就可以继续进行。如果不够用呢?我们就得要从 PV 着手啰!整个流程可以是这样来观察的。
# 1. 先看看 VG 的量够不够用: [root@localhost ~]# vgdisplay --- Volume group --- VG Name server System ID Format lvm2 ....(中间省略).... VG Size 4.88 GiB <==只有区区 5G左右 PE Size 4.00 MiB Total PE 1249 Alloc PE / Size 1249 / 4.88 GiB Free PE / Size 0 / 0 <==完全没有剩余的容量了! VG UUID SvAEou-2quf-Z1Tr-Wsdz-2UY8-Cmfm-Ni0Oaf # 真惨!已经没有多余的 VG 容量可以使用了!因此,我们得要增加 PV 才行。 # 2. 开始制作出所需要的 partition 吧!作为 PV 用的! [root@localhost ~]# fdisk /dev/sda <==详细流程我不写了!自己瞧 Command (m for help): p Device Boot Start End Blocks Id System ....(中间省略).... /dev/sda8 1812 1939 1024000 83 Linux <==最后一个磁柱 Command (m for help): n First cylinder (1173-3264, default 1173): 1940 <==上面查到的号码加 1 Last cylinder, +cylinders or +size{K,M,G} (1940-3264, default 3264): +2G Command (m for help): t Partition number (1-9): 9 Hex code (type L to list codes): 8e Command (m for help): p Device Boot Start End Blocks Id System /dev/sda9 1940 2201 2104515 8e Linux LVM <==得到 /dev/sda9 Command (m for help): w [root@localhost ~]# partprobe <==在虚拟机上面得要 reboot 才行! # 3. 将 /dev/sda9 加入 PV,并将该 PV 加入 server 这个 VG 吧 [root@localhost ~]# pvcreate /dev/sda9 [root@localhost ~]# vgextend server /dev/sda9 [root@localhost ~]# vgdisplay ....(前面省略).... VG Size 6.88 GiB <==这个 VG 最大就是 6.88G 啦 ....(中间省略).... Free PE / Size 513 / 2.00 GiB <==有多出 2GB 的容量可用了! # 4. 准备加大 /home,开始前,还是先观察一下才增加 LV 容量较好! [root@localhost ~]# lvdisplay --- Logical volume --- LV Name /dev/server/myhome <==这是 LV 的名字! VG Name server ....(中间省略).... LV Size 4.88 GiB <==只有 5GB 左右,需要增加 2GB 啰 ....(底下省略).... # 看起来,是需要增加容量啰!我们使用 lvresize 来扩大容量吧! [root@localhost ~]# lvresize -L 6.88G /dev/server/myhome Rounding up size to full physical extent 6.88 GiB Extending logical volume myhome to 6.88 GiB <==处理完毕啰! Logical volume myhome successfully resized # 看来确实是扩大到 6.88GB 啰!开始处理文件系统吧! # 5. 扩大文件系统 [root@localhost ~]# resize2fs /dev/server/myhome resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/server/myhome is mounted on /home; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/server/myhome to 1804288 (4k) blocks. The filesystem on /dev/server/myhome is now 1804288 blocks long. [root@localhost ~]# df -h 文件系统 Size Used Avail Use% 挂载点 /dev/mapper/server-myhome 6.8G 140M 6.4G 3% /home ....(其他省略).... # 可以看到文件系统确实有放大到 6.8G 喔!这样了解了吗? |
做完上面的实作之后,现在你晓得为什么在基础篇的时候,我们一直强调一些有的没有的了吧?因为那些东西在这里都用的上! 如果本章这些题目你都不会,甚至连为什么要作这些东西都不懂的话,那得赶紧回去阅读基础篇,不要再念下去了! 会非常非常辛苦的呦!
你可知道本章第一个实作题安装好了你的 Linux 之后,系统到底开放了多少服务呢?这些服务有没有对外面的世界开放监听? 这些服务有没有漏洞或者是能不能进行网络在线更新?这些服务如果没有要用到,能不能关闭?此外, 这些服务能不能仅开放给部分的来源使用而不是对整个 Internet 开放?这都是需要了解的呢。 底下我们就以几个小案例来让你了解一下,到底哪些数据是你必须要熟悉的呢?
例题-不同 runlevel 的服务控管:
在目前的 runlevel 之下,取得缺省启动的服务有哪些呢?此外,我的系统目前不想启动自动网络挂载 (autofs)
机制,我不想要启动该服务的话,该如何处理?
答:
缺省的 runlevel 可以使用 runlevel 这个指令来处理,那我们缺省使用 3 号的 runlevel,因此你可以这样做:
[root@localhost ~]# LANG=C chkconfig --list | grep '3:on'
上面指令的输出消息中,会有 autofs 服务是在启动的状态,如果想要关闭他,可以这样做:
[root@localhost ~]# chkconfig autofs off [root@localhost ~]# /etc/init.d/autofs stop |
上面提到的仅只是有启动的服务,如果我想要了解到启动监听 TCP/UDP 封包的服务 (网络封包格式下章会谈到),那该如何处理? 可以参考底下这个练习题喔!
例题-查找启动在网络监听的服务
我想要检查目前我这部主机启动在网络端口口监听的服务有哪些,并且关闭不要的程序,该如何进行?
答:
网络监听的端口口分析,可以使用如下的方式分析到:
[root@localhost ~]# netstat -tulnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1005/rpcbind tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1224/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1300/master tcp 0 0 0.0.0.0:35363 0.0.0.0:* LISTEN 1023/rpc.statd tcp 0 0 :::111 :::* LISTEN 1005/rpcbind tcp 0 0 :::22 :::* LISTEN 1224/sshd tcp 0 0 ::1:25 :::* LISTEN 1300/master tcp 0 0 :::36985 :::* LISTEN 1023/rpc.statd udp 0 0 0.0.0.0:5353 0.0.0.0:* 1108/avahi-daemon: udp 0 0 0.0.0.0:58474 0.0.0.0:* 1108/avahi-daemon: ....(底下省略)....现在假设我想要关闭 avahi-daemon 这个服务以移除该服务启动的端口口时,应该要如同上题一样, 利用 /etc/init.d/xxx stop 关闭,再使用 chkconfig 去处理开机不启动的行为!不过,因为启动的服务名称与实际指令可能不一样, 我们在 netstat 上面看到的 program 项目是实际软件运行档,可能与 /etc/init.d/ 底下的服务文件名不同,因此可能需要使用 grep 去截取数据, 或者通过那好棒的 [tab] 按键去取得相关的服务文件名才行。 [root@localhost ~]# /etc/init.d/avahi-daemon stop [root@localhost ~]# chkconfig avahi-daemon off |
我们常常会开玩笑说,如果对外开放的软件没有更新,那防火墙不过是个屁!所以啦,软件更新是相当重要的。 在 CentOS 内,我们已经有 yum 来进行在线更新了,你当然可以自己利用更改设置档来指定 yum 要去查找的映射站 (mirror site),不过这里鸟哥建议使用缺省的设置值即可,因为系统会主动的判断较近的映射站 (虽然常常会误判), 不需要人工微调啦!
例题-利用 yum 进行系统更新
假设你的网络已经通了,目前你想要处理全系统更新,同时需要每天凌晨 2:15 自动进行全系统更新,该如何作?
答:
全系统更新使用 yum update 即可。但是由于 yum update 需要用户手动输入 y 去确认真的要安装,因此在 crontab 里头处理相关任务时,
就得要使用 yum -y update 了!
[root@localhost ~]# yum -y update # 第一次作会进行非常之久!因为系统真的有些数据要更新嘛!还是得等待的! [root@localhost ~]# vim /etc/crontab 15 2 * * * root /usr/bin/yum -y update不过这里还是要额外提醒各位喔,如果你的系统有更新过内核 (kernel) 这个软件,务必要重新开机啊!因为内核是在开机时加载的, 一经加载就无法在这次的操作中更改版本的。 |
那个 crontab 文件的处理,以及 crontab -e 的指令应用,内容的写法字段不太一样,请自行参考基础篇的说明去加强学习喔!
在通过了上述的各项设置后,我们的 Linux 系统应该是比较稳定些了,再接着下来,我们要开始来设置资源的保护了! 例如 ssh 这个远程可登录的服务得要限制住可登录的 IP 来源,以及制订防火墙规则流程等。 这部份则是本教学文档后续要着重介绍的部分,留待后面章节再来谈吧!
这部份就是整个服务器架设篇的重要内容了!前一小节也曾谈过,在服务器架设部分你得要熟悉相当多的信息, 否则未来维护会显的很麻烦。我们以本章提到的大前提为例,我们想要提供一个网络磁盘机,那么网络磁盘机使用的机制有哪些呢? 常见的除了网页形式的分享磁盘之外,还有常见的网芳以及 Linux 的 NFS 方式 (后面章节都会继续谈到)。
由于假设局域网路内的操作系统大部分是 Windows 好了,因此网芳应该是个比较合理的磁盘分享选择。 那么网芳到底启动了多少个端口口?是如何持续提供网芳数据的?提供的帐号有没有限制?提供的权限该如何设置? 是否可规定谁可登录某些特定目录?针对网芳服务的端口口该如何设置防火墙?如果系统出错该如何查找错误信息? 这个网芳在 Linux 底下要使用什么服务来达成?这都是需要学习的呢!
直接告诉你,网芳的制作在 Linux 底下是由 Samba 这套软件来达成的。Samba 的详细设置我们会在后续章节介绍。 这里要告诉你的是, 架设一个网芳服务器,你应该要会的基础知识有哪些?以及告诉你,你可以背下来的架设流程中, 理论上应该要经过哪些步骤的过程,这样对你未来处理服务器设置时,才会有点帮助啊!
例题:
查出你的系统底下有没有 samba 这套软件,若无,请自行查找与安装该软件
答:
已安装的软件可以使用 rpm 去察看看,尚未安装的则使用 yum 功能。所以可以这样进行看看:
[root@localhost ~]# rpm -qa | grep -i samba samba-common-3.5.4-68.el6_0.2.x86_64 samba-client-3.5.4-68.el6_0.2.x86_64 samba-winbind-clients-3.5.4-68.el6_0.2.x86_64 # 看起来 samba 主程序尚未被安装啊!此时就要这样做: [root@localhost ~]# yum search samba <==先查一下有没有相关的软件 [root@localhost ~]# yum install samba <==找到之后,那就安装吧! # 那么如何找出设置档呢?因为我们总是需要修改设置档啊!这样做吧: [root@localhost ~]# rpm -qc samba samba-common /etc/logrotate.d/samba /etc/pam.d/samba /etc/samba/smbusers /etc/samba/lmhosts /etc/samba/smb.conf /etc/sysconfig/samba |
例题:
如何启动 samba 这个服务呢?并且设置好开机就启动他!
答:
想要了解如何启动,得要使用 rpm 去找一下软件的启动方式,然后再去处理启动的行为啰!
# 先查找一下启动的方式为何: [root@localhost ~]# rpm -ql samba | grep '/etc' /etc/logrotate.d/samba /etc/openldap/schema /etc/openldap/schema/samba.schema /etc/pam.d/samba /etc/rc.d/init.d/nmb /etc/rc.d/init.d/smb <==所以说是 stand alone 且文件名为 smb, nmb 两个! /etc/samba/smbusers # 开始启动他!且设置开机就启动喔!: [root@localhost ~]# /etc/init.d/smb start [root@localhost ~]# /etc/init.d/nmb start [root@localhost ~]# chkconfig smb on [root@localhost ~]# chkconfig nmb on # 接下来,让我们观察一下有没有启动相关的端口口吧! [root@localhost ~]# netstat -tlunp | grep '[sn]mbd' tcp 0 0 :::139 :::* LISTEN 1484/smbd tcp 0 0 :::445 :::* LISTEN 1484/smbd udp 0 0 0.0.0.0:137 0.0.0.0:* 1492/nmbd udp 0 0 0.0.0.0:138 0.0.0.0:* 1492/nmbd最终我们可以看到启动的端口口有 137, 138, 139, 445 喔! |
经过上面的流程,你就可以知道啦,架设好一部主机需要知道:(1)各个 process 与 signal 的观念;(2)帐号与群组的观念与相关性;(3)文件与目录的权限,这当然包含与帐号相关的特性; (4)软件管理员的学习;(5)BASH 的语法与 shell scripts 的语法,还有那个很重要的 vim 啰!:(6)开机的流程分析,以及记录注册表的设置与分析;(7)还得知道类似 quota 以及链接档等等的概念。要知道的真的很多,而且还是不能省略的步骤喔!
如果有些特殊的使用情况时,权限设置就是个很重要的因素。举例来说,我们系统上面,现在有 vbirduser{1,2,3,4,5} 以及 student 等帐号,而共享目录为 /home/vbirdgroup。现在, vbirdgroup 的群组想要让 student 这个用户可以进入该共享目录查阅, 但是不能够更改他们原本的数据,你该如何进行呢?你或许可以这样想:
传统的身份与权限概念就只有上面两种解决方案而已,这下子严重了!我们没有办法针对 student 进行权限设置! 此时就得要使用 ACL 啰~同样这个例子,我们就来实作一下:
例题-单一用户、群组的权限设置 ACL
想要让 student 可以进入 /home/vbirdgroup 进行查找,但不可写入。同时 vbirduser5 在 /home/vbirdgroup 内,
不具有任何权限。
答:
只能使用 ACL 啰!由于安装时缺省格式化就加上 acl 的文件系统功能支持,因此你可以直接处理如下的各项指令。
如果你是使用后来添加的 partition 或 filesystem ,或许得要在 /etc/fstab 内额外增加 acl 控制参数才行喔!
[root@localhost ~]# useradd student [root@localhost ~]# passwd student [root@localhost ~]# setfacl -m u:student:rx /home/vbirdgroup [root@localhost ~]# setfacl -m u:vbirduser5:- /home/vbirdgroup [root@localhost ~]# getfacl /home/vbirdgroup # file: home/vbirdgroup # owner: root # group: vbirdgroup # flags: -s- user::rwx user:vbirduser5:--- user:student:r-x <==就是这两行,额外的权限参数哩! group::rwx mask::rwx other::--- [root@localhost ~]# ll -d /home/vbirdgroup drwxrws---+ 2 root vbirdgroup 4096 2011-07-14 14:49 /home/vbirdgroup |
上面说的是正确的权限控制行为。那万一系统管理员不是个东西...不是啦!系统管理员并不知道权限的重要性时, 常常会因为某些特殊需求,就将整个目录设置为 777 的情况!举例来说,如果是一个不怎么想要负责的网管人员, 为了自己方便、大家方便,就将 /home/vbirdgroup 设置为 777 ,这样『大家欢喜』嘛!此时,如果你没有加上任何管理机制, 嘿嘿!这个群组成员工作的成果,通通可以被大家所窃取,真是要命了!
为了预防这种心不在焉的管理员,于是就有了 SELinux 这个玩意儿。SELinux 主要在控制细部的权限, 他可以针对某些进程要读取的文件来设计 SELinux 类别,当进程与文件的类别形态可以相符合时,该文件才能够开始被读取。 如此一来,当你设置文件权限为 777 ,但是因为进程与文件的 SELinux 例行不符,所以没关系的,因为该进程还是读不到该文件! 所以我们在图 1.2-1 才会将 SELinux 的图标绘制到 daemon 与 file permission 中间啊!
事实上 SELinux 还挺复杂的,但是我们如果仅是想要应用而已,那么 SELinux 的处理方式通通可以通过注册表来处置! 所以 SELinux 出现问题的机会非常大,但是解决技巧却很简单!就是通过注册表内的说明去作即可。 详细的作法我们在后续章节再持续说明吧!
老实说,在鸟哥管理服务器的经验来说,硬件问题要比操作系统与软件问题还来的严重,而人的问题又比硬件问题严重! 举例来说,如果你的老板跟你说:『我要的帐号是 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@localhost ~]# 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@localhost ~]# vim /etc/crontab 45 2 * * * root sh /root/bin/backup.sh |
无论如何,以现今的网络功能及维护来看,架设一个『功能性强』的主机, 还不如架设一个『稳定且安全的主机』比较好一点!因此,对于主机的安全要求就需要严格的要求啦!就鸟哥的观点来看, 如果你的主机是用来替你赚钱的,例如某些研究单位的大型 Cluster 运算主机, 那么即使架设一个甚至让你觉得很不方便的防火墙系统,都是合理的手段!因为主机被入侵就算了,若数据被窃取,呵呵! 那可不是闹着玩的!
由上面的整个架站流程来看,由规划到安装、主机设置、帐号与文件权限管理、后续安全性维护与管理以及重要的备份工作等等, 必需要每个环节都很清楚,才能够设置出一个较为稳定而可正常工作的服务器。而上面的每一个工作都涉及到相当多的 Linux 基础操作与相关的概念,所以说,想要学架站,真的真的不能省略了 Linux 的基础学习, 这也是为什么我们一再强调 Linux 新手不要一头栽入想要单纯架设服务器的迷思当中呐! 如果你对于上面谈到的几个基础概念不是很清楚的话,那么建议你由底下的两个网站学起:
网管人员需要什么能力呢?我想,架几个站跟作一个称职的网管人员, 相差是甚远的!架站,说真的,是一件很简单的事情,看著书本一步一步的作上去,一定可以成功的!但是,很多人都只晓得 『如何架站』却不知到『如何维护一个网站的安全』!基本上, 维护一个已经架设好的网站的正常运作,真的要比架设一个网站难的多了!你得要随时知道你的系统状况, 随时注意是否有新的软件漏洞而去修补他,随时要注意各种服务的注册表案(logfile)以了解系统的运作情况! 得知道发生问题的时候,到底问题点是在哪一个!
比如说当机了,那么你知道当机的原因吗? 即使不知道,也可得需要约略猜得出来才行。而,如果安全出了问题,被入侵了,除了 format + 重装之外,可有办法在不移除系统的情况下修补漏洞? 这些都是网管人员需要学习的,而且,通常都是需要经验的累积才会知道问题的所在! 此外,保持身心的活力以随时注意在线公布的安全防备信息等等!都需要具备的!
此外,最严重的问题是,网管人员其实最需要的是 『道德感与责任感』!你可要晓得你的机器上所有人的隐私都在你的监控之下, 如果你本身就已经有偷窥欲了,可知道这有多可怕吗?另外,如果没有责任感的人作为一个网管, 可能会疯掉,因为不论何时何地,只要是你监控的主机出了问题,嘿嘿嘿嘿,你一定是第一个被想到的人物, 所以,你得随时随地做好可能随时会被召唤回主机跟前的心理准备!
更可笑的是,如果你服务的人群中, 有几个连开机的时候软驱塞了一块不可开机的软碟,导致无法正常开机, 也都会跟你抱怨说『唉呦!你经手的电脑怎么这么烂,动不动就不能开机』的时候, 你得要有容人的雅量,说说冷笑话解解闷吧!总之,网管人员并不是只要会架站就可以了, 『道德感』『责任感』还有『耐心』呵呵!套一句现在人喜欢说的口头禅『这是一定要的啦!』
网管人员是什么? 好久以前看到了报纸的一篇报导, 内容大概是说:台湾的网络管理人员对于『网络安全性防护』的认知不够,或许是防火墙机制创建不完整, 或者是认为黑客不会入侵小型网站,所以在不甚了解的情况下,被所谓的『中东黑客组织』所入侵, 然后以台湾被入侵的电脑为跳板,去攻击宾拉登的仇敌美国,然后引起美国高度的不满。由于台湾的立场有点得罪不得美国 ( 这边不提及政治因素,反正目前的情况是这样。 ) ,所以一接到美国来的抗议信函就很棘手。 这只是一个事件问题,不过这个事件问题也点出了一个重点,就是我们的网络信息可能真的是蛮发达的, 不过,管理网络的人员可能在认知的程度上就有点参差不齐了!网络安全是蛮重要的,只是, 大家常常会忘记他!个人认为,网管是蛮重要的角色,应该不能等闲视之才对。
好了,如果你了解了上面鸟哥所想要表达的意念之后,来评估看看你是否适合当一个称职的网管人员吧!当然,一再强调的,架设一个 Linux 服务器是很简单的,但是维护的工作除了身心已经活化, 并且还要拥有高标准的道德感,否则.....倒站恐怕是可以预见的一个后果.....