LPI Linux 认证/基础网络配置
(LPIC-2 版本 4.5)
权重 3
描述: 候选人应该能够配置一个网络设备,使其能够连接到本地、有线或无线和广域网。本目标包括能够在单个网络(包括 IPv4 和 IPv6 网络)内的各种子网之间进行通信。
关键知识领域
- 配置和操作以太网网络接口的实用程序
- 配置无线网络。
术语和实用程序
ip
ifconfig
route
arp
iw
iwconfig
iwlist
getty 是你用于拨号连接的程序。你不需要它进行拨号连接。除了显示登录提示符外,它还有助于接听电话。最初,getty 用于从哑终端登录计算机。它今天的主要用途是登录 Linux 控制台。有几种不同的 getty 程序,但其中一些在拨号连接时与调制解调器配合良好。getty 程序通常在启动时启动。它必须从 /etc/inittab 文件中调用。在这个文件中,你可能会发现一些你需要稍微编辑的示例。希望这些示例适合你电脑上安装的 getty 版本。
有四种不同的 getty 程序可供选择,这些程序可与调制解调器用于拨号连接:mgetty、uugetty、getty_em 和 agetty。以下小节将简要概述它们。agetty 是四者中最弱的,它主要用于直接连接的文本终端。mgetty 支持传真和语音邮件,而 Uugetty 不支持。据称 mgetty 缺少 uugetty 的一些功能。getty_em 是 uugetty 的简化版本。因此,mgetty 可能是你最好的选择,除非你已经熟悉 uugetty(或难以获取 mgetty)。这些 getty 程序的语法不同,因此请确保在 /etc/inittab 中检查你是否对使用的任何 getty 使用了正确的语法。
为了查看电脑上关于各种 getty 的文档,请使用“locate”命令。键入:locate "*getty*"(包括引号可能会有帮助)。请注意,许多发行版只将该程序称为 getty,即使它实际上可能是 agetty、uugetty 等。但如果你阅读手册页(键入:man getty),它可能会显示它是哪个 getty。这应该是路径为 /sbin/getty 的 getty 程序。
Getty 在登录后“退出”(并且可以重新生成)
登录后,你将注意到(通过使用“top”、“ps -ax”或“ptree”)getty 进程不再运行。它发生了什么?为什么如果你的 shell 被杀死,getty 会再次重启?原因如下:在你输入用户名后,getty 会获取它并调用 login 程序,告诉它你的用户名。getty 进程被 login 进程替换。login 进程会询问你的密码,检查它,并启动密码文件中指定的任何进程。这个进程通常是 bash shell。如果是这样,bash 会启动并替换 login 进程。请注意,一个进程替换另一个进程,并且 bash shell 进程最初是作为 getty 进程启动的。这将在下文中解释。
现在,在 /etc/inittab 文件中,getty 应该在被杀死后重新生成(重启)。它在调用 getty 的行上说明了这一点。
示例:来自 /etc/inittab 的 getty 条目 S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102
但是,如果 bash shell(或 login 进程)被杀死,getty 就会重新生成(重启)。为什么?好吧,login 进程和 bash 都是 getty 的替代品,并继承了其前任建立的信号连接。实际上,如果你观察细节,你将注意到替换进程将具有与原始进程相同的进程 ID。因此,bash 在某种程度上是伪装成 getty,具有相同的进程 ID 号。如果 bash 被杀死,就像 getty 被杀死一样(即使 getty 已经不再运行)。这会导致 getty 重新生成。
当一个人注销时,该串行端口上的所有进程都会被杀死,包括 bash shell。如果调制解调器的 DCD 电压下降发送了一个挂起信号到串行端口(如果已启用),这也可能发生。注销或 DCD 下降都会导致 getty 重新生成。可以通过手动杀死 bash(或 login)来强制 getty 重新生成,方法是在“top”中按 k 键等,或使用“kill”命令。你可能需要使用信号 9(它不能被忽略)来杀死它。
说明的循环
init - spawns -> getty -- starts -> login - starts --> shell \ / \---------------<< returns control to <<------------/
你可以通过名称开头的减号来识别登录 shell。
示例:ps 输出(已过滤)walter 32255 0.0 0.7 4012 1772 pts/36 Ss 14:53 0:00 -bash
mgetty 是作为 uugetty 的替代品编写的,uugetty 在 mgetty 出现之前就已存在很长时间。两者都用于调制解调器,但 mgetty 更好(除非你已经承诺使用 uugetty)。Mgetty 也可用于直接连接的终端。除了允许拨号登录外,mgetty 还提供传真支持和自动 PPP 检测。当 mgetty 正在等待传入电话呼叫时,它允许拨号出去。有一个名为 vgetty 的辅助程序,它处理某些调制解调器的语音邮件。mgetty 文档很好(除了语音邮件)。要自动启动 PPP,必须编辑 /etc/mgetty/login.conf 以启用“AutoPPP”你可以在 http://www.leo.org/~doering/mgetty/ 和 http://alpha.greenie.net/mgetty/ 找到有关 mgetty 的最新信息。
getty_ps 包含两个程序:getty 用于控制台和终端设备,uugetty 用于调制解调器。格雷格·汉金斯(Serial-HOWTO 的前作者)使用 uugetty,因此他关于 uugetty 的著作包含在这里。请参阅 Uugetty。
这是 uugetty 的简化版本。它是在 Vern Hoxie 完全对 getty_ps 和 uugetty 所需的复杂支持文件感到困惑后编写的。它是 Vern Hoxie 通过 ftp 从 scicom.alphacdc.com/pub/linux 提供的串行端口实用程序和信息的集合的一部分。该集合的名称是 serial_suite.tgz。
本小节已经很长时间了,因为作者尝试使用 agetty 进行拨号连接。agetty 看似很简单,因为没有初始化文件。但是当我尝试使用它时,它会在没有 CD 信号的情况下打开串行端口。然后,它在建立连接之前将登录提示符和 /etc/issue 文件发送到调制解调器,处于 AT 命令状态。调制解调器认为所有这些都是 AT 命令,如果它包含任何“at”字符串(偶然),它很可能会对你的调制解调器配置文件产生不利影响。回显战争可能会开始,其中 getty 和调制解调器会来回不断地发送相同的字符串。如果你遇到这种情况,你可能会看到“重新生成得太快”错误消息。为了防止这种情况,你需要禁用调制解调器的所有回显和结果代码(E0 和 Q1)。此外,使用 agetty 的 -i 选项来防止发送任何 /etc/issue 文件。
如果你在调制解调器端口启动 getty,几秒钟后发现该端口运行的是登录进程而不是 getty,这意味着一个虚假的用户名已从调制解调器发送到 agetty。为了防止这种情况发生,我必须在调制解调器中保存我的拨入配置文件,以便它在开机时生效。另一个保存的配置文件用于拨出。然后,任何使用调制解调器的拨出程序必须在其初始化字符串中使用 Z、Z0 或 Z1 来初始化调制解调器进行拨出(通过加载保存的拨出配置文件)。如果配置文件 1 用于拨入,则使用 Z1 加载它,等等。如果你想稍后监听拨入,则需要将调制解调器重置为拨入配置文件。并非所有拨出程序都可以在退出时执行此重置操作。
因此,虽然 agetty 可以在你正确设置调制解调器硬件中的拨入配置文件的情况下正常工作,但它可能最适合虚拟控制台或终端而不是调制解调器。如果 agetty 正在运行用于拨入,则没有简单的方法拨出。当有人第一次拨入 agetty 时,他们应该按下回车键以获取登录提示符。Debian 发行版中的 agetty 只是名为 getty。
关于 mingetty 和 fbgetty
[edit | edit source]mingetty 是一个小型 getty,只能用于显示器(通常的控制台),因此你不能将其与调制解调器一起用于拨入。fbgetty 与上述相同,但支持帧缓冲器。
基本网络配置
为 PPP 配置 PAP/CHAP 身份验证
如果你要连接的服务器需要 PAP 或 CHAP 身份验证,请编辑你的 PPP 选项文件并添加以下行
# # force pppd to use your ISP user name as your 'host name' during the authentication process name <your ISP user name> # you need to edit this line # # If you are running a PPP *server* and need to force PAP or CHAP uncomment the appropriate # one of the following lines. Do NOT use these is you are a client connecting to a PPP server (even if # it uses PAP or CHAP) as this tells the SERVER to authenticate itself to your machine (which # almost certainly can't do - and the link will fail). #+chap #+pap # # If you are using ENCRYPTED secrets in the /etc/ppp/pap-secrets file, then uncomment the # following line. Note: this is NOT the same as using MS encrypted passwords as can be # set up in MS RAS on Windows NT. #+papcrypt
基本网络配置 使用 MSCHAP
Microsoft Windows NT RAS 可以设置为使用 CHAP(挑战/握手身份验证协议)的变体。在你的 PPP 源代码包中,你会找到一个名为 README.MSCHAP80 的文件,其中讨论了这一点。
你可以通过为 pppd 启用调试来确定服务器是否正在使用此协议请求身份验证。如果服务器请求 MS CHAP 身份验证,你会看到类似于以下的行
rcvd [LCP ConfReq id=0x2 <asyncmap 0x0> <auth chap 80> <magic 0x46a3>]
这里的重要信息是 auth chap 80。为了使用 MS CHAP,你需要重新编译 pppd 以支持它。有关如何编译和使用此变体的说明,请参阅 PPP 源文件中的 README.MSCHAP80 文件中的说明。
请注意,目前此代码只支持连接到 MS Windows NT 服务器的 Linux PPP 客户端。它不支持设置使用 MSCHAP80 身份验证的 Linux PPP 服务器。
PAP/CHAP 密钥文件
[edit | edit source]如果你使用 pap 或 chap 身份验证,则还需要创建密钥文件。它们是
/etc/ppp/pap-secrets /etc/ppp/chap-secrets
它们必须由用户 root 拥有,root 组拥有,并且具有 740 的文件权限以确保安全。关于 PAP 和 CHAP 的第一个要点是它们旨在对计算机系统进行身份验证,而不是用户。什么?有什么区别?我听到你在问。好吧,一旦你的计算机与服务器建立了 PPP 连接,你系统上的任何用户都可以使用该连接 - 不仅仅是你。这就是为什么你可以使用 PPP 设置连接两个 LAN(局域网)的 WAN(广域网)链路。
PAP 可以(并且对于 CHAP 来说确实需要)双向身份验证 - 这意味着每个计算机都需要有效的用户名和密钥来验证另一台参与的计算机。但是,这不是大多数提供拨号 PPP PAP 身份验证连接的 PPP 服务器的操作方式。
话虽如此,你的 ISP 可能已经给你提供了用户名和密码,允许你连接到他们的系统,然后连接到互联网。你的 ISP 并不关心你计算机的名称,因此你可能需要使用你 ISP 提供的用户名作为你计算机的名称。这可以通过使用 name 用户名选项来完成 pppd。因此,如果你要使用 ISP 提供的用户名,请在你的 /etc/ppp/options 文件中添加以下行
name your_user name_at_your_ISP
到你的 /etc/ppp/options 文件。从技术上讲,你应该真正使用 name our_user name_at_your_ISP 用于 PAP,但 pppd 足够智能,可以在需要使用 PAP 时将 name 解释为 user。使用 name 选项的优点是它也适用于 CHAP。
由于 PAP 用于验证计算机,因此从技术上讲,你还需要指定远程计算机名称。但是,由于大多数人只有一个 ISP,因此你可以在密钥文件中使用通配符 (*) 作为远程主机名。还值得注意的是,许多 ISP 运营多个调制解调器库,这些库连接到不同的终端服务器 - 每个服务器都有不同的名称,但可以通过单个(旋转)拨号号码访问。因此,在某些情况下,很难提前知道远程计算机的名称,因为这取决于你连接到的终端服务器!基本网络配置
PAP 密钥文件
[edit | edit source]/etc/ppp/pap-secrets 文件看起来像
# Secrets for authentication using PAP # client server secret acceptable_local_IP_addresses
这四个字段用空格分隔,最后一个字段可以为空(这就是你想要为从 ISP 获取动态和可能静态 IP 分配所做的)。假设你的 ISP 给了你一个用户名 fred 和密码 flintstone,你将在 /etc/ppp/options[.ttySx] 中设置 name fred 选项,并按如下方式设置你的 /etc/ppp/pap-secrets 文件
# Secrets for authentication using PAP # client server secret acceptable local IP addresses fred * flintstone
这表示对于本地机器名称 fred(我们已经告诉 pppd 使用它,即使它不是我们的本地机器名称)以及任何服务器,都使用密码(密钥) flintstone。请注意,我们不需要指定本地 IP 地址,除非我们必须强制使用特定的本地静态 IP 地址。即使你尝试这样做,它也不太可能起作用,因为大多数 PPP 服务器(出于安全原因)不允许远程系统设置他们要获得的 IP 号码。
CHAP 密钥文件
[edit | edit source]这要求你拥有相互身份验证方法 - 也就是说,你必须允许你的机器验证远程服务器,并且远程服务器验证你的机器。
因此,如果你的机器是 fred,远程服务器是 barney,你的机器将设置 name fred remotename barney,而远程机器将在他们各自的 /etc/ppp/options.ttySx 文件中设置 name barney remotename fred。
fred 的 /etc/chap-secrets 文件看起来像
# Secrets for authentication using CHAP # client server secret acceptable local IP addresses fred barney flintstone barney fred wilma
对于 barney 来说
# Secrets for authentication using CHAP # client server secret acceptable local IP addresses barney fred flintstone fred barney wilma
特别注意,两台机器都必须有双向身份验证的条目。这允许本地机器验证自己对远程服务器,以及远程服务器验证自己对本地机器。
处理多个 PAP 身份验证连接
[edit | edit source]一些用户有多个服务器,他们使用 PAP 连接到这些服务器。只要你在要连接的每台机器上都有不同的用户名,这就不成问题。
但是,许多用户在他们连接到的两台(或更多台 - 甚至所有)系统上都有相同的用户名。这就会在正确选择 /etc/ppp/pap-secrets 中的适当行时出现问题。
正如你所料,PPP 提供了一种克服此问题的机制。PPP 允许你使用 remotename 选项为连接的远程(服务器)端设置“假定名称”。
假设你使用用户名 fred 连接到两个 PPP 服务器。你将在你的 /etc/ppp/pap-secrets 中设置以下内容
fred pppserver1 barney fred pppserver2 wilma
现在,要连接到 pppserver1,你将在你的 ppp-options 中使用 name fred remotename pppserver1,而对于 pppserver2,则使用 name fred remotename pppserver2。
由于你可以使用 file filename 选项选择要与 pppd 一起使用的 ppp 选项文件,因此你可以设置一个脚本来连接到你的每个 PPP 服务器,正确选择要使用的选项文件,从而选择正确的 remotename 选项。
关键术语、文件和实用程序
/sbin/route /sbin/ifconfig PAP, CHAP, PPP /etc/*
练习
[edit | edit source]