认证目标2.05 考虑添加命令行工具

你可能想添加几个命令行工具以帮助系统管理员管理各种Linux系统。本书后面将使用这些工具来确保各种服务器正常操作。虽然最好用Evolution和Thunderbird这样的e-mail客户端测试像Postfix这样的服务,但是像telnet、nmap和mutt等命令可以用在命令行窗口远程检查这些服务。在Red Hat考试时,可以用这些工具测试、诊断和解决系统问题,所需要的时间不过相当于下载一个复杂的工具,如Evolution。虽然ssh命令可以实现远程访问GUI工具,但是与这类工具进行通信可能会非常耗时。

从管理角度而言,我们感兴趣的工具有:

● telnet和nmap可以验证对开放端口的远程访问。

● mutt作为一个e-mail客户端可以验证一个email服务器的功能。

● elink作为Web浏览器,它确保Web服务是可以访问的。

● 在命令完成后可以用lftp访问FTP服务器。

2.5.1 用telnet检查端口

telnet命令其实非常强大。任何对明文客户端存在的安全风险有所了解的人都对telnet命令有所顾忌。用telnet登录到远程服务器的用户确实以明文的方式传递他们的用户名、口令和其他命令。只要有一个像Wireshark的协议分析器,任何人都很容易读取这些数据。

但是telnet的作用远不止这些。当它在本地运行时,它可验证一个服务的运行。例如,下面这个命令验证了本地系统的vsFTP运行情况:

        $ telnet localhost 21
        Trying 127.0.0.1...
        Connected to localhost.
        Escape character is '^]'.
        220(vsFTPd 3.0.2)

“转义字符(Escape Charater)”是Ctrl键和右方括号(]))同时按下来的字符。在屏幕上输入这个命令组合会出现telnet>提示符。在这个提示下用quit命令可以退出。

        ^]
        telnet> quit

通常情况下甚至不用执行Escape Character就可以退出telnet提示符窗口,只需要输入quit命令即可。

如果vsFTP没有运行或者如果它的通信端口不是21,则会看到如下响应:

        Trying 127.0.0.1...
        telnet: connect to address 127.0.0.1: Connection refused

如果系统没有安装防火墙,则利用远程系统也会得到相同的结果。但是如果防火墙阻止了21端口的通信,则会看到类似于下面的信息:

        telnet: connect to address 192.168.122.50: No route to host

有些服务(如Postfix电子邮件服务器)默认情况下只接受来自本地的连接。此时,不管有没有防火墙,当我们连接一个远程系统时都会看到“连接被拒绝”的消息。

2.5.2 用nmap检查端口

nmap命令是一个功能强大的端口扫描工具。正因为如此,nmap开发者的网站上有这样的描述:“当nmap命令使用不正确时,nmap很可能会使(但是很少发生)使用者遇到ISP的起诉、解雇、驱逐、监禁或屏蔽”。尽管如此,它已包含在标准RHEL 7库中。因此它的合法使用已得到Red Hat的支持。用nmap命令可以快速确定在本地和在远程打开的服务。例如,如图2-20的nmap localhost命令检测到并列出那些正在本地系统上运行的服务。

图2-20 在本地应用端口扫描程序

但与此相反,如果从远程系统上执行端口扫描,则看起来似乎只有一个端口是打开的。这说明此服务器上的防火墙起作用。

        Starting Nmap 6.40(http://nmap.org)at 2015-02-02 09:52 PST
        Nmap scan report for server1.example.com(192.168.122.50)
        Host is up(0.027s latency).
        Not shown: 999 filtered ports
        PORT   STATE SERVICE
        22/tcp open  ssh

2.5.3 配置e-mail客户端

对于参加Red Hat考试的考生来说,GUI email客户端的配置过程应该是易如反掌的。但是,对于命令行email客户端,事情就不是这样,命令行客户端常用来测试Postfix和Sendmail等标准e-mail服务器的功能。例如,当一个服务器配置为邮局协议(Post Office Protocol, POP)电子邮件服务器时,或者此邮件服务器用几乎无所不在的POP3版本发送邮件时,可以用下面的命令进行检查:

        # mutt -f pop://username@host

GUI的e-mail客户端对读者来说很容易,因此本节的其余部分重点介绍命令行的email客户端。

1.命令行电子邮件

测试本地邮件系统的一个方法是使用内置的命令行mail实用工具。它提供了一个简单的基于文本的接口。邮件系统把每个用户的邮件保存在与每个用户名相关的/var/mail目录中。用mail实用工具阅读邮件的用户也可以回复、转发或删除相关的信息。

当然可以用其他任何邮件阅读程序,如mutt或者GUI Web浏览器自带的邮件管理程序测试自己的邮件系统。其他邮件阅读程序把信息保存在不同的目录。如果在本地系统上已启动简单邮件传输协议(Simple Mail Transfer Protocol, SMTP)服务器,则像mutt和mail这样的邮件阅读程序可以用来发送信息。

mail命令有两个基本用法。第一个是先输入邮件主题,然后是邮件内容,完成后按Ctrl+D。将邮件发送出去,mail实用工具返回到命令行。下面是一个例子:

        $ mail michael
        Subject: Test Message
        Text of the message
        EOT
        $

也可以把一个文件以邮件的文本内容的方式重定向到另一个用户。例如,下面的命令把/etc/hosts的副本发送给server1上的root用户,邮件主题名为“hosts file”。

        $ mail -s 'hosts file' < /etc/hosts root@server1.example.com

2.阅读邮件信息

默认情况下,mail系统不会为某个用户打开,除非在相应的文件中有邮件。当mail系统打开后,用户就会看到新邮件和已经阅读邮件的列表。如果已经为某个账户打开mail系统,可以输入邮件的编号并按下回车键。如果没有输入参数直接按回车键,则mail实用工具会认为要阅读下一个还没阅读的邮件。为删除一个邮件,可以在邮件后面使用d命令,或用d#删除编号为#的邮件。

或者,在本地的/var/mail目录里,在用户指定的文件里读取邮件内容。这个目录里的文件都是按相应的用户名命名的。

2.5.4 文本和图形浏览器的使用

Linux包含了多个图形化浏览器。访问普通网站或安全网站要用相应的协议,即超文本传输协议(Hypertext Transfer Protocol, HTTP)或超文本传输协议安全(Hypertext Transfer Protocol, Secure, HTTPS)。任何Linux用户都会使用图形化浏览器。

也许你并不是总能访问GUI,特别是不能从远程系统访问GUI。任何情况下,基于文本的浏览器速度比较快。在Red Hat Linux中,标准的基于文本的浏览器是ELinks。当ELinks程序包安装后,可以用它在命令行打开任何想要访问的网站。例如,图2-21说明了elinks http://www.google.com命令的结果。

图2-21 ELinks浏览器

为退出ELinks程序,只需要按下Esc键进入菜单栏,然后按下F | X并接受提示信息,即可退出ELinks浏览器。另一种方法是使用Q快捷键来退出ELinks程序。

如果需要配置一个Web服务器,最容易的办法是确保它只用简单的文本主页,不需要HTML代码。例如,可以在home.html中添加以下文本:

        This is my home page

然后就可以运行elinks home.html命令在ELinks浏览器中浏览这段文本。如果已经在第1章介绍的/var/www/html/inst目录中建立一个Apache文件服务器,也可以通过以下命令,用elinks命令查看复制到此服务器上的文件:

        $ elinks http://192.168.122.1/inst

2.5.5 用lftp访问URL

最初的FTP客户端软件都是一个简单的命令行,它是提供了简单高效的接口的面向文本的客户端应用程序。大多数Web浏览器提供一个图形接口,也可以用作FTP客户端。

任何FTP客户端允许用户查看目录树和文件。把ftp当作客户端是很容易的一件事。我们可以用ftp命令连接到像ftp.redhat.com这样的服务器,如下所示:

        # ftp ftp.redhat.com

但是在这个客户端需要输入用户名和口令。输入用户名anonymous,输入e-mail地址作为口令,就可以访问Red Hat FTP服务器,但如果用户偶然输入一个真实的用户名和口令,这些数据将会用明文格式发送,在此网络上任何碰巧使用网络分析器应用程序的人都可以看到这些数据。奇怪的是,在标准的RHEL 7安装中竟然没有安装ftp命令客户端程序。

这只是lftp优于ftp的一个理由。它会自动尝试匿名登录而不会要求用户输入用户名或口令。此外,它还支持命令补全(Command Completion)功能,该功能有助于访问带有长名称的文件和目录。

当然,大多数FTP客户端都存在安全风险,因为它们都以明文形式传送数据。但是,只要此命令仅限于用于对公开服务器的匿名访问,则风险可以最小化。归根结底,当我们用lftp命令从公共服务器下载Linux软件包时,不大可能会暴露任何私人信息。当然,这类客户端存在其他安全风险,但是Red Hat开发人员一直在努力使客户端保持最新。

如果可以接受风险,则可以用lftp命令登录FTP服务器,而这些FTP服务器允许使用用户名和口令。用户michael可以用下面的命令登录到这样一个服务器:

        $ lftp ftp.example.org -u michael

在lftp客户端可以执行很多不同的命令,如图2-22所示。其中一些命令在表2-5中描述。

图2-22 lftp中的命令

表2-5 标准lftp客户端命令

与Telnet会话相似,几乎所有可以在FTP提示符后执行的命令都运行在远程主机上。我们也可以在FTP提示符后执行常用的shell命令,只需要在命令前面加一个感叹号(!)。

表中列出的只是lftp命令的一个子集。如果用户记不起某个命令的用法,输入help cmd就可以得到这个命令的详细说明。