Linux系统运维的重要原则和方法详解

企业Linux系统的运维成为目前企业关注的重点。做为一种优秀的开源网络操做系统,如何充分利用Linux的工具并使用相应的方法来提升运维效率是很是重要的工做。在第一篇文章中,咱们介绍了运维相关的4个应用工具的使用和实战,本文做为该专题的第二篇文章,将着重介绍运维过程当中的重要原则和方法,包括如何避免产生问题以及如何解决系统问题的内容,觉得企业Linux的实际运维提供有益参考。node

Need to Know I:系统管理员与系统用户加强沟通算法

做为一个系统管理员的主要职责之一是与系统用户通讯。当为维修系统而停机时,当上线一类新软件以及发布用户如何访问新的系统打印机时,须要发布公告。甚至能够开始充当一个地方小报的角色,让用户知道新员工、RIF、生日、公司野餐信息等。shell

不一样的通讯有不一样的侧重点。例如,在两个月内的公司野餐的信息与将在五分钟内关闭系统的消息的敏感度是不同的。为了知足这些不一样的需求,Linux 提供了不一样的通讯方式。下面的列表描述和对比了最经常使用的方法。这些方法一般会提供给全部用户,除了当天消息一般只为具备 root 权限的用户保留外。缓存

有以下工具(实用程序)能够加强系统管理员与系统用户的通讯和沟通。安全

Write:使用 write 实用程序能够与在本地系统上登陆的用户进行通讯。例如,可使用它来要求用户中止运行拖慢系统的程序,该用户可能会回复说:他将在三分钟内完成。用户还可使用 write 来要求系统管理员挂载磁带或恢复文件。write 发送的消息可能不会出如今图形环境中。bash

IM:Empathy IM(Internet 消息 ; live.gnome.org/Empathy)实用程序使用 Google Talk、MSN、IRC、AIM、Facebook、雅虎、ICQ 以及其它协议,支持文本、语音、视频聊天和文件传输。使用时,可点击主菜单:Applications?Internet?Empathy Internet Messaging。IM 常见于许多工做场所,能够用它来联系 Red Hat 支持。服务器

Wall:wall(write all)实用程序能够有效地与全部登陆用户即时通讯。此实用程序从标准输入得到输入,工做方式很像 write,只不过用户不能使用 wall 来只写回你一我的。当要关闭系统或在其它危机状况下,可以使用 wall。没有登陆的用户将没法获得消息。只有在危机状况下才可使用 root 权限的用户身份运行 wall; 它会中断任何人在作的任何工做。wall 发送的消息可能不会出如今图形环境中。网络

Email:电子邮件用于与一个或多个系统和 / 或远程用户进行不太紧急的通讯。发送邮件后,你必须愿意等待每一个用户来阅读它。电子邮件可用于提醒忘了注销的用户,他们的账单已逾期,或他们使用了太多的磁盘空间。与经过 write 收到的消息相反,用户能够轻松地永久存储经过电子邮件接收的消息记录,所以他们能够随时跟踪重要的细节。举例来讲,使用电子邮件告知用户一个新的复杂操做过程,以便每一个用户均可以保留一份信息副本,以供参考。session

当日消息:用户每次在文本环境中登陆时会看到当日消息,而当他们打开终端仿真器窗口时则不会看到。必要时,能够编辑 /etc/motd 文件以更改此消息。当日消息能够提醒用户将要进行的按期保养、新的系统功能或程序的更新信息。 运维

Need to Know II:运维过程当中可能产生的问题

即便是经验丰富的系统管理员也会犯错误,固然新的系统管理员犯的错误会更多。虽然能够经过细心阅读以及遵循软件文档的指示来下降出问题的可能性,但不少事情仍然会出问题。一个列表无论多长,都不多是全面的,由于天天都会产生新的问题。本节将介绍一些常见技能,以免问题的出现。

第一,执行按期备份:对一个系统管理员来讲,没有什么比永远丢失重要信息更痛苦。若是本地系统支持多用户,有最近的备份多是防止公共谴责的惟一保障。若是是单用户系统,当丢失一块硬盘或误删文件时,有最近的备份也确定使你快乐。

第二,阅读和遵循指示 :软件开发人员提供了文档。即便已经安装了软件包,也要再次仔细阅读说明书。它们可能已有所改变,或者你可能记得不对。软件更改比书的修订更快速,所以没有任何说明书能够作到万无一失。因此,须要寻找最新的在线文档进行参考。/usr/share/doc 目录中有许多实用程序、库和软件包的相关信息。

当指示不明确时,须要寻求帮助:若是指示彷佛不明确,尝试找到明确的指示。

最后,在关键文件中删除或误输信息:一个确定会给本身带来恶梦的方式是执行命令。也许没有其它命令会使 Linux 系统无用的如此之快。惟一的办法是从安装介质启动以恢复已安装的系统,并从最近的备份中恢复丢失的文件。虽然这个例子描述的是一个极端的状况,许多文件都是系统正常运做的关键。删除这些文件之一或在其中的文件中误输信息,都几乎能够确定会形成问题。例如若是直接编辑 /etc/passwd 文件,在某个字段中输入错误信息会致使一个或多个用户没法登陆。此外,不要在 rm – rf 中使用包含通配符的参数,输入命令后要暂停一下并阅读它,而后才按回车键。仔细检查所作的一切,在对关键文件进行编辑以前必定要为其制做一份副本。尤为值得注意:rm 与通配符一块儿使用时要当心。当必须在 rm 命令中使用包含通配符的参数(如 *)时,指定 i 选项以使 rm 在删除每一个文件以前进行提示。或者,能够以相同的参数使用 echo 命令,以查看哪些文件将被删除。当使用 root 权限时,这种检查就显得尤其重要。 

方法:运维过程当中的实际问题解决方法

系统管理员的责任是保持系统安全和顺利运行。当用户遇到问题时,一般会找管理员帮助其回到正轨。本节建议的方法能够保持用户满意度和系统最佳性能。

“十步法”为用户解决没法登陆问题

当用户没法在系统上登陆时,根源多是用户错误或系统的软硬件故障。下面的十个步骤能够帮助肯定问题所在。

第一步:检查 /var/log 中的日志文件。/var/log/messages 文件收集系统错误、来自守护进程的消息以及其它重要信息。它可能会代表问题的缘由或更多症状。另外,检查系统控制台。有时系统问题相关的消息不写入 /var/log/messages 中(例如一个完整的磁盘),而是显示在系统控制台上。

第二步:肯定是否只有一个用户或一个用户的终端 / 工做站有问题或者是否问题更广。

第三步:肯定该用户没有打开其 CAPS LOCK 键。

第四步:确保该用户的主目录存在,而且在 /etc/passwd 文件中有对应于该用户的条目。验证该用户拥有其主目录和启动文件,而且它们是可读的(并且该用户对其主目录有可执行权限的状况下)。确认在 /etc/passwd 中的该用户登陆 shell 条目是准确的,而且存在指定的 shell。

第五步:若是用户忘记了本身的密码,则更改该用户的密码。

第六步:检查该用户的启动文件(.profile、.login、.bashrc 等)。该用户可能已对这些文件之一进行了编辑,并引入了禁止登陆的语法错误。

第七步:检查终端或终端与计算机之间的数据线。尝试关闭终端或显示器,而后再从新打开。

第八步:当问题彷佛比较广时,检查可否从系统控制台登陆。确保系统未在单用户模式。若是没法登陆,系统可能已崩溃,须要从新启动它,并执行任何须要的恢复步骤。

第九步:使用 df 来检查整个文件系统。若是 /tmp 文件系统或该用户的主目录已满,登陆有时会以意想不到的方式失败。在某些状况下,可能可以登陆到文本环境,但不能登陆到图形环境。用户登陆时启动的应用程序没法建立临时文件,或没法更新用户主目录中的文件时,登陆过程自己可能会终止。

第十步:若是用户经过网络链接登陆,须要从新启动该用户尝试使用的服务(例如 ssh)。并请确保两个系统上的时钟是同步的。当使用 HTTPS、ssh、LDAP 尤为是 kerberos 等加密登陆方法时,时钟设置的时间不一样可能会致使登陆失败。还要请确保 DNS 正常工做。一些网络服务与名称解析的相关性比较强,包括反向查找(即名称解析问题会致使拖慢经过 ssh 的链接)。 

加快系统运行速度

当系统因为不明缘由运行缓慢时,也许是用户注销时没有关闭进程。此问题的表现包括很长的响应时间和很大的系统负荷,如使用 w 或 uptime 所示的数据大于 1.0。最好运行 top 以迅速找到流氓进程。使用 ps – ef 可列出全部进程。在 ps – ef 输出中要找的内容是大量的 TIME 列。例如,若是 Firefox 进程的 TIME 字段超过 100.0,这一进程有可能运行不正常。然而,若是该用户正在执行大量的 Java 工做,而且已经登陆很长时间,这个值就多是正常的。检查 STIME 字段以查看该进程启动的时间。若是该进程的运行时间比用户登陆在线的时间还长,最好终止它。

当用户遇到问题,并在没有通知任何人的状况下离开无人值守的终端时,最好终止该用户拥有的全部进程。若是用户在控制台上运行 GUI,终止启动桌面环境的进程或窗口管理器自己。还要继续查找包括 gnome-session、startkde 或其它以 wm 结尾的进程名。一般窗口管理器既是第一个也是最后一个要运行的进程,并在用户注销时退出。若是终止窗口管理器不起做用,可尝试终止 X 服务器进程,这个进程一般列为 /usr/bin/Xorg。若是上述操做失败,当以该用户身份登陆时,经过执行 kill – 15 – 1 命令或等效的 kill – TERM – 1 命令,能够终止用户拥有的全部进程。使用– 1 替换进程 ID 以告诉 kill 来给该用户拥有的全部进程发送信号。例如,做为 root 能够输入如下命令:

 

 # su zach -c 'kill -TERM -1'

 

若是不能终止全部进程(有时 TERM 没法终止进程),可使用 KILL 信号(– 9)。下面这行必定会终止 Zach 拥有的全部进程,但不太友好:

 

 # su zach -c 'kill -KILL -1'

 

若是不包含 su zach – c,这个命令将关闭系统。

掌握和查找打开的文件

lsof(列出打开的文件)实用程序会显示打开的文件名。其选项仅显示某些进程,只有一个进程的某些文件描述符,或只有某些网络链接(网络链接使用文件描述符,就像普通文件同样,lsof 也显示这些)。使用 ps – ef 肯定了可疑进程后,输入如下命令:

 

 # lsof -s -p pid 

 

用可疑进程的进程 ID 替换 PID,lsof 会显示 PID 进程打开的文件描述符列表。– s 选项显示全部打开文件的大小,– p 选项则容许指定感兴趣的进程 PID 号(若是组合这些选项,则 lsof 不会运行)。文件大小信息用于肯定该进程是否打开了一个很是大的文件。若是是这样,须要联系该进程的全部者,或者在必要状况下终止该进程。– rn 选项表示每 n 秒从新显示一次 lsof 的输出。

保留机器日志以备审计

机器日志包含如表 1 所示的信息,能够帮助查找和修复系统问题。它用于记录日志中每一个条目的日期和时间。避免仅把日志保留在计算机上,当系统关闭时,这将是最有用的。同时保留详细描述用户问题的电子邮件。一种策略是把邮件保存到你能够读取的单个文件或文件夹中。另外一种方法是设立邮件别名,以便用户有问题时能够发送邮件到别名。这个别名就能够将邮件转发给你,还能够在归档文件中存储副本。

表 1 机器日志的分类

如下是 /etc/aliases 文件中条目的例子,能够设置这种类型的别名:

 

 trouble: admin,/var/spool/mail/admin.archive 

 

发送到 trouble 别名的电子邮件将被转发到 admin 用户,并同时存储到 /var/spool/mail/admin.archive 文件中。 

保持系统的运行安全

没有任何使用拨号线路或公共访问终端的系统是绝对安全的。不过,能够经过常常更改 root 密码并选择难以猜想的密码的方式,使系统尽量安全。不要告诉任何绝对不须要知道 root 密码的人。还能够鼓励系统用户选择高难度密码,并按期对其进行更改。

密码

默认状况下,Fedora/RHEL 上的密码使用 MD5 哈希,这使得它们比使用 DES 加密的密码更难以破解。固然若是加密的密码很容易让人找到或猜到,则差异不大。system-config-authentication 实用程序容许指定一个本地密码哈希算法,可选择高级选项选项卡,并从 Password Hashing Algorithm 下拉框选择。

一个难以猜想的密码是别人认为不可能选择的密码。不要使用字典中的字、亲人、宠物、朋友的名字或外语单词。一个好的策略是选择一个短语,包含一些标点符号(例如,在它们之间放置 ^)、大小写混合,并用数字替换一些单词的字母。一个好密码的示例是 C&yGram5(candygrams)。理想状况下,可使用 ASCII 字符的随机组合,可是这将很难记住。

可使用几种密码破解程序,以找到选择弱密码的用户。这些程序的工做原理是反复哈希字典、短语、姓名和其它来源中的单词。若是哈希密码与程序的输出相匹配,则该程序发现了用户的密码。两个破解密码的程序是 crack(crack包)和 john(www.openwall.com/john;john 包)。这些和许多其它程序以及安全性提示能够从 CERT(www.cert.org,Computer Emergency Response Team 计算机应急反应小组)得到。

破解一个好密码须要大量的计算能力。密码破解程序通常首先看大写字母、小写字母和数字组成的字符集。当添加符号时,他们必须作更多的工做来破解密码。此外,密码越长,破解须要的计算能力就越多。密码足够长以便更难被破解,又要足够短以便容易记住。8-20 个字符一般是一个很好的长度。密码中要包含几个如 #、@ 和 % 这样的符号。若是时间太长以致于没法破解你的密码,作破解工做的人或机器就可能会转移到容易破解的账户上。

Setuid 文件

确保只有具备 root 权限的用户才能够写入包含 root 拥有程序的文件,并运行在 setuid 模式(例如,passwd 和 su)。另外,确保用户不会把运行在 setuid 模式的程序以及 root 拥有的程序转移到挂载系统上。这些程序能够被用来绕过系统的安全性。防止用户拥有 setuid 文件的一项技术是使用 nosuid 标志来挂载,能够在 fstab 文件中的标志部分进行设置。

BIOS

许多机器中的 BIOS 能够提供必定程度的保护,防止未经受权的人试图修改 BIOS 或从新启动系统。设置 BIOS 时,能够查找 Security 部分。你也许能够添加一个 BIOS 密码。若是依赖 BIOS 密码,在锁定计算机的状况下,使用主板上的跳线,一般很容易复位 BIOS 密码。

root 的日志文件和邮件

用户常常给 root 和 postmaster 发送电子邮件来与系统管理员通讯。若是没有把 root 的邮件转发给本身,记得按期检查 root 的邮件。使用 su 执行系统管理任务时,将不会收到到达 root 的提醒邮件。可是,可使用 su – c ‘ mail – u root ’命令来查看 root 的邮件。

按期检查系统日志文件以发现问题证据。一些重要文件包括 /var/log/messages,其中记录了操做系统和一些应用程序的错误;/var/log/secure,其中包含了与系统安全性有关的消息 ; /var/log/maillog,其中包含邮件系统的错误;/var/log/cron,其中包含 crond 的消息。

logwatch 实用工具(logwatch 包)是一个用 Perl 编写的报表编写器,可发送有关日志文件的电子邮件报告。默认状况下,/etc/cron.daily/0logwatch 天天运行这个脚本并把其输出邮发给 root。 更多信息参阅 logwatch 手册页和脚本自己。

监控磁盘使用状况

系统可能早晚会用完磁盘空间。所以不要填满一个分区。当一个分区至少有 5 %至 30 %的剩余空间时,Linux 写入文件的速度会明显加快。若是一个分区的已使用空间超过其最大最优磁盘空间,就会下降系统性能。

碎片

当一个文件系统已满时,它会变得支离破碎。这相似于 DOS 碎片的概念,但这几乎是不明显的并一般罕见于现代 Linux 文件系统上,由于 Linux 文件系统的设计是耐碎片的。若是不把文件系统填满,可能永远也不用担忧碎片问题。若是文件系统上没有空间了,则根本没法写入。

要检查文件系统碎片,要卸载该文件系统,并在其上运行 fsck; 在 ext二、ext3 和 ext4 文件系统上使用– f 选项。 fsck 的输出包括一个文件系统碎片百分数。经过备份能够整理文件系统,首先使用 mkfs 作一个干净的空映像,而后恢复文件系统。使用哪一个工具来执行备份和恢复并不重要。

报告

Linux 提供了几个程序,能够报告谁正在使用哪些文件系统的多少磁盘空间。能够参考 du、quota 和 df 手册页以及 find 实用程序手册页中的– size 选项。除了这些实用程序,还可使用磁盘配额系统管理磁盘空间。 

快速增加的文件

增长文件系统上的可用空间量的四大策略是:压缩文件、删除文件、增大基于 LVM 的文件系统以及压缩目录。一些文件(如日志文件和临时文件)随着时间的推移会不可避免地增加。例如,核心转储文件占用了大量的空间,但不多须要。此外,用户偶尔运行的程序可能会意外产生巨大的文件。做为系统管理员,必须按期审查这些文件,使其不至失控。

若是一个文件系统很快耗尽空间(如在一个小时内,而不是几个星期或几个月内),首先弄清楚空间耗尽的缘由。可以使用 ps – ef 命令来肯定用户是否已经建立了失控的进程,而且生成了巨大的文件。评估 ps 的输出时,可寻找一个消耗了大量 CPU 时间的进程。若是这样的进程正在运行,并建立了大文件,那该文件将持续增加以至须要不断腾出空间。若是删除了这个巨大的文件,其占用的空间并不会被释放,除非终止该进程。此时须要尝试联系运行该进程的用户,并要求他终止该进程。若是联系不到该用户,请使用 root 权限本身终止该进程。

此外,还能够截断大的日志文件而不是删除它,虽然也可使用 logrotate 来更好地处理这个常见状况。例如,若是因为系统守护进程的错误配置,使得 /var/log/messages 文件变得很是大,可使用 /dev/null 来截断它:

 

 # cp /dev/null /var/log/messages 

 

 

 # cat /dev/null > /var/log/messages

 

或无须派生新进程 ,

 

# : > /var/log/messages

 

若是删除 /var/log/messages,必须从新启动 rsyslogd 守护进程。若是不从新启动 rsyslogd,将不会释放文件系统上的空间。

当没有任何进程消耗磁盘空间,而容量逐渐被用光时,就要找到不须要的文件,并将其删除。在删除以前可使用 cpio、dump 或 tar 归档这些文件。能够安全地删除大部分已有几天不曾访问的 core 文件。如下命令行可执行这项功能,而不删除必要的 core 文件(如 /dev/core):

 

 # find / -type f -name core|xargs file|grep 'B core file'|sed 's/:ELF.*//g'|xargs rm -f

 

find 命令列出全部名为 core 的普通文件,并将该列表发送到 xargs,xargs 在列表中的每一个文件上运行 file。file 实用程序显示一个字符串,其中包含 B core file(建立的核心转储文件)这类须要删除的文件。grep 命令从文件中过滤掉任何不包含此字符串的行。最后 sed 删除冒号后的一切,使全部留在行上的只是 core 文件的路径名 ; 而后 xargs 删除该文件。

为了腾出更多的磁盘空间,可仔细审查 /tmp 和 /var/tmp 目录中的旧临时文件并删除。对 /var/mail、/var/spool 和 /var/log 中的磁盘使用状况保持跟踪。

删除目录中未使用的空间

包含太多文件的目录一般效率不高。ext二、ext3 或 ext4 文件系统上的目录在哪一点上变得效率不高的缘由不尽相同,但部分取决于它包含的文件的长度。最佳作法是保持目录相对较小。一个目录中最好包含较少的文件而不是几百个文件(或目录),多达数千个文件一般是很很差的作法。此外,Linux 为常常访问的文件使用了缓存机制,以加速从文件名查找其 inode 的进程。这种缓存机制仅支持最多 30 个字符的文件名,因此一般要避免访问文件名很是长的文件。当一个目录变得太大时,一般能够将其分解成几个较小的目录,将其内容移动到那些新目录。移动完该目录内容后,要确保删除原来的目录。

由于 Linux 目录不会自动收缩,删除目录中的文件也不会收缩该目录,即便它释放了全部的磁盘空间。所以,要删除未使用的空间,并使目录比较小,必须把全部文件复制或移动到一个新目录,并删除原目录。

下面的过程可删除未使用的目录空间。首先从大目录中删除全部不须要的文件,而后建立一个新的空目录,接下来把全部剩余文件从旧的大目录移动或复制到新的空目录中。记住不要忘了复制隐藏的文件。最后删除旧目录,并命名新目录。

 

# mkdir /home/max/new# mv /home/max/large/* /home/max/large/.[A-z]* /home/max/new# rmdir /home/max/large# mv /home/max/new /home/max/large
相关文章
相关标签/搜索