Hack and / - 正确命令,错误服务器

作者:Kyle Rankin

当我刚开始从事系统管理工作时,我只需要追踪几台机器。记住哪些服务器执行哪些功能相对容易(主要是因为一两台机器几乎完成了所有工作)。如果服务器出现问题,我立即知道它会影响到什么。

无论好坏,现在我的职位变得更加复杂。当您亲自管理数十或数百台机器时,很难记住所有事情。当服务器宕机时,您可能不再知道哪些服务受到影响或应该通知谁。除此之外,还有可怕的在错误的服务器上运行正确命令的错误。我认为每个系统管理员都至少在错误的终端中输入过halt, rm -rf或其他一些破坏性命令(问问我的老老板比尔就知道了)。

在本专栏中,我将讨论一些我发现可以帮助您跟踪服务器的方法。虽然我不能保证您永远不会在错误的服务器上输入命令,但我可以说,随着您的环境增长到数百台服务器,这些技术将帮助您在您的大脑遗忘的地方继续下去。

每日消息

每日消息 (motd) 是您每次登录到系统命令行时看到的欢迎消息。例如,这是我的旧 Debian 服务器之一上的每日消息

Linux napoleon 2.6.20-1-k7 #1 SMP Tue Apr 24 22:37:29 UTC 2007 i686

The programs included with the Debian GNU/Linux system are free 
software; the exact distribution terms for each program are 
described in the individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
No mail.

像这样的消息非常通用,因此很容易认为它们是理所当然的并置之不理。毕竟,在这个例子中,我已经知道操作系统、主机名和内核版本(Linux,napoleon,2.6.20-1-k7)。但是,您可以扩展此信息,并列出您想要的任何内容。

每日消息在名为 /etc/motd 的文件中进行管理。它是一个简单的文本文件,因此您可以修改它以说出您想要的任何内容,尽管您需要将其限制为可以容纳在标准控制台屏幕上的内容。请注意,在现代基于 Debian 的系统上,/etc/motd 文件在某种程度上是动态的,因此您需要修改 /etc/motd.tail。

那么,您如何利用此文件呢?许多注重安全的管理员在此文件中添加了特殊的使用条款,以注明他们的系统是私有的,不允许未经授权的访问。在这种情况下,motd 的作用类似于“禁止通行”标志,因此如果有人黑入系统,执法部门可以帮助证明攻击者已被告知这是一个私有系统。

虽然您可能希望或不希望在您的 motd 中添加“禁止通行”标志,但您可以向 motd 添加许多其他内容,以使您作为管理员的生活更轻松。例如,您可以添加一套关于服务器的简短文档,包括服务器的功能、如果机器出现问题要联系的其他组,甚至是可以存储自定义文件的任何特殊位置。这样,当您登录时,您得到的可能不是枯燥的默认 motd,而是更像这样的内容

Linux napoleon 2.6.20-1-k7 #1 SMP Tue Apr 24 22:37:29 UTC 2007 i686

Welcome to Napoleon. 
Local services: DNS, DHCP, Internal Wiki (http://wiki.example.net)

DNS config: /etc/bind, /var/named.
DHCP config: /etc/dhcpd.conf
Wiki files: /var/www/wiki

Support team: root@example.net, wikiadmin@example.net

您甚至可能希望使用 motd 向系统上的普通用户传递有用的提示。例如,假设您的用户使用 vim 查看日志文件。在某些系统上,vim 会在 /tmp 中存储您打开的任何文件的完整副本。虽然对于小型文本文件来说这很好,但是当您的用户打开 1GB+ 的 Apache 日志时,您的 /tmp 空间会很快填满,并且您会一次又一次地收到页面通知。一种解决方案可能是在您的 motd 中添加一个温和的提醒,建议使用 less 而不是 vim 来读取大型文本文件。

调整后的 Shell 提示符

另一种帮助您记住您在哪个服务器上的好方法是调整您的 shell 提示符。如果您是一位注重安全的优秀管理员,并且仅在必要时才成为 root 用户,那么一个快速提示是将 root 提示符设置为不同的颜色(如红色),使其突出显示并提醒您,您所做的一切都具有 root 权限。

对于自定义 shell 提示符,有很多不同的品味,因此您可能需要调整它以适合您的偏好。此外,我假设您将使用大多数系统现在倾向于默认使用的 bash shell,因此您应该编辑的文件是 /root/.bashrc。提示符中显示的内容由 PS1 环境变量定义,因此如果您好奇它默认设置为多少,只需键入

root@napoleon:~# echo $PS1
\u@\h:\w\$

在这个例子中,您有一个非常基本的提示符,其中列出了当前用户 (\u)、@ 符号、主机名 (\h)、冒号、当前工作目录 (\w) 和 # 符号(如果我是 root 用户),否则为 $ 符号 (\$)。在我的示例系统上,当我以 root 用户身份登录时,它看起来像root@napoleon:~#当我以 root 用户身份登录时。

有很多其他方法可以调整提示符,如果您好奇,可以在 bash 手册页中找到可以用于提示符的完整别名列表——只需搜索 PS1。

因为我专注于提示符的着色,而不是必须更改格式,所以我主要将提示符保持原样。有很多种方法可以为提示符着色,但我发现最简单的方法是预先在环境变量中定义一些您想要使用的潜在颜色,然后您可以将它们分配给 PS1 变量,而不会因所有转义字符而眼花缭乱。打开 /root/.bashrc,如果 PS1 已经定义,请在其上方添加以下行

NORMAL=`tput sgr0 2> /dev/null`
BOLD=`tput bold 2> /dev/null`
RED="\[\033[31m\]"
GREEN="\[\033[32m\]"
BLUE="\[\033[34m\]"
GREY="\[\033[1;30m\]"
PURPLE="\[\033[0;35m\]"

现在所有颜色都已定义,我可以简单地使用默认设置定义 PS1,只是在它周围加上这些颜色设置

PS1 = "$RED\u@\h:\w\$$NORMAL"

一旦您将更改保存到 .bashrc,下次您登录时,您会注意到您的提示符已着色。现在您可以花一下午的时间使用不同的颜色和符号组合调整提示符,就像我第一次发现它时所做的那样。为不同类型的服务器使用不同的提示符配色方案甚至可能是有价值的。

DNS TXT 记录

前两种方法的问题之一是您必须登录到机器才能获取有关它的信息。这引出了我最喜欢的组织服务器的方式之一,DNS TXT 记录。大多数人可能熟悉 DNS A 记录(它将主机名映射到 IP 地址),并且可能熟悉 CNAME 和 PTR 记录(它分别将一个主机名映射到另一个主机名,并将 IP 地址映射到主机名),但许多管理员不知道(或不使用)TXT 记录。 TXT 记录本质上允许您将文本分配给特定的主机名。如果您为您的机器拥有内部 DNS 基础设施,您可能已经为您的所有服务器设置了 A 记录。如果您也添加 TXT 记录,这将为您提供一个很好的集中位置来记录每台服务器的功能,这种方式可以从网络上的任何机器查询。

为了演示如何使用 TXT 记录,让我们假设我正在使用标准的 BIND 服务器进行 DNS,这是定义三个主机(napoleon、snowball 和 major)的 A 记录的文件的一小部分

napoleon    IN   A   192.168.1.6
snowball    IN   A   192.168.1.7
major       IN   A   192.168.1.8

我要做的就是在我拥有的任何 A 记录下方添加一个新的 TXT 记录,其中列出这些服务器的功能

napoleon    IN   A   192.168.1.6
napoleon    IN   TXT "DNS, DHCP, Internal wiki"
snowball    IN   A   192.168.1.7
snowball    IN   TXT "Primary Internal File Server" 
major       IN   A   192.168.1.8
major       IN   TXT "Failover Internal File Server" 

一旦我保存更改并重新加载 BIND,TXT 记录就可以使用了。下次我挠头想知道 snowball 是做什么的时,我只需要发出 dig 查询

$ dig snowball.example.net TXT +short
"Primary Internal File Server"

请注意,我对 dig 使用了 +short 选项。这样,我只返回 TXT 记录的内容,而不是 dig 通常给我的大量数据。这不仅使我更容易缩小到我想要的信息,而且还使其成为添加到其他程序的方便的小单行代码。我甚至可以看到一些精明的管理员调整他们的 shell 提示符或 motd,使其包含此值。

再次强调,使用 TXT 记录来记录此信息的优点在于,它将信息放在一个您控制的中心位置,并且您通常在添加主机时必须修改它。如果您将其用于面向外部的 DNS 主机,请务必小心——您可能不一定希望将所有服务器信息广播给互联网上的每个人。

Kyle Rankin 是旧金山湾区的高级系统管理员,也是许多书籍的作者,包括 O'Reilly Media 出版的 Knoppix HacksUbuntu Hacks。他目前是 North Bay Linux Users' Group 的总裁。

加载 Disqus 评论