[OpenBSD]

[索引] [第七章 - 键盘与显示控制] [第九章 - 转到OpenBSD]

8 - 常见问题


目录


8.1 - 我忘记root密码了, 我现在该怎么办?

重新获得root的基本步骤是启动至单用户模式, 挂载有关分区(/ 和 /usr), 运行passwd(1)命令修改root密码, 然后重新启动您就可以正常登录了。

详细过程:

如果这不是一台个人使用的计算机, 您可能需要通过sudo(8)命令让一些人(信任的)可以运行root权限的命令。

"等一下, 这也太容易了!但这看起来好像不是很安全!" 如果任何攻击者可以物理地接触您的系统, 无论是OS或计算机, 那他已经获胜了, 还有一些方法可以让使用者登录至单用户模式时必须输入密码(详细请参看ttys(5)), 或者在i386/amd64去除系统启动时的停顿(详细请参看boot.conf), 但是这里特别提醒您一下, 您的这类小技俩可以被轻松破解(例如从软盘或光盘启动, 然后编辑或替换password文件), 当然您也可以尝试禁止从软盘或光盘启动或采取其它方式保护您的密码文件, 但是这样的话人家仍然可以从您的计算机上拆下硬盘。设置这些管理障碍并非真正意义上的安全, 如果您不能防止别人物理接触您的系统, 那您实际上就没有什么安全可言。

说明:许多"远程管理"系统提供了很多等同于用户可以物理接触系统的功能, 这一点您应该考虑到。如果攻击者通过一个办法能使用控制台就不能说您的系统是安全的, 攻击者可以插入一个虚拟软盘然后强制重新启动计算机, 这就好像他们可以物理接触您的系统一样, "远程管理"系统看起来并非像OpenBSD系统那样安全……

8.2 - X无法启动, 显示许多错误信息

X 错误的一个常见原因就是sysctl(8)的选项machdep.allowaperture, OpenBSD上这个选项默认是关闭的, 这也许是您的问题所在。

您应该编辑 /etc/sysctl.conf 并设置machdep.allowaperture=2(或 1, 根据您的平台), 它允许X下次启动后访问xf86(4)的aperture驱动, 如果您最初在安装OpenBSD时, 当系统问您"您是否需要运行X系统"的时回答了"y", OpenBSD会自动开启这个选项。

在alpha, amd64, i386, macppc 和 sparc64 平台上OpenBSD需要激活aperture驱动以便访问视频板。其它的平台使用一个安全的方法来处理显示系统, 并不需要这样(或它们的内核中没有)。如果您并不打算在您的系统上运行X, 我们建议您不启用aperture驱动。

更多关于如何使用X的信息, 在系统的 /usr/X11R6/README文件上有详细描述。

8.3 - 我能在OpenBSD上使用"L" 语言吗?

您会发现常用的程序设计语言已经包含在基本系统内(这里指在baseXX.tgz 和 compXX.tgzxitong 系统组件内), 或者包含在packages and ports system内。这里建议您在系统创建时选择安装包含您所需语言的组件或软件包, 而不是从源码创建。对一些编译器来说, 从源码构建需要占用大量的系统资源, 而且通常情况下您并不需要这样做, 除非您有特殊的要求或没有相关的软件包可供直接安装。

下面是不同语言的编译器一览表, 您可以寻找您需要的语言并可以查询它们是否有问题或使用限制。其中一些程序设计语言仅能在某些平台上应用, 您也可以在ports树下运行"make serch key=……"命令得到查询结果, 您可以注意在哪些"平台"上可以运行, 或者也可以检查port的Makefile目录。如果是后一种情况, 查找包含ONLY_FOR_ARCHS, NOT_FOR_ARCHS, BROKEN, 等的行。

说明:为了便于使用, 此表按字母顺序排列, 不按语言种类划分。并非所有可在OpenBSD上使用的语言全列在表中, 如果您发现表中有任何错误和问题, 别客气, 告诉我们。
LanguageWhere?Notes
Awk base44.tgz, awk(1)
lang/gawk GNU awk
C, C++ comp44.tgz, gcc(1) The C/C++ compilers in the base system have been audited and they have several security enhancements (e.g. ProPolice) enabled by default. Please see gcc-local(1) for details. They will also emit warnings when using unsafe functions such as sprintf(), strcpy(), strcat(), tmpnam(), etc. Note that most platforms use gcc 3.3.5, but some still use 2.95.3.
C, C++ lang/gcc These compilers have not gone through the security audit and do not contain security enhancements like those in the base system. The compilers are renamed egcc, eg++, etc. to avoid confusion with their counterparts in the base system.
Caml lang/ocaml Objective Caml
COBOL lang/open-cobol
Erlang lang/erlang
Fortran comp44.tgz, g77(1) Only Fortran 77 support.
lang/gcc Fortran 95 is also supported by egfortran in gcc 4.0 and above. This new compiler is available as a subpackage (g95) of gcc.
Haskell lang/ghc
lang/nhc98
Java devel/jdk Sun JDK - no packages available; see build instructions below.
lang/classpath essential core class libraries for Java
lang/kaffe
lang/jikes Fast compiler, works well. This needs a "run-time jar", the bytecode version of all the standard API.
devel/eclipse Large IDE; works with Sun JDK
Lisp lang/clisp
Lua lang/lua Additional Lua libraries and auxiliary utilities are available in the ports tree.
Perl base44.tgz, perl(1) Many Perl modules are available in the ports tree, so search there first before installing modules from CPAN.
PHP www/php4 Plenty of subpackages are available for different PHP modules.
www/php5
Prolog lang/swi-prolog SWI-Prolog environment.
Python lang/python Other ports are using Python 2.5 by default.
Ruby lang/ruby
Scheme lang/chicken
lang/scheme48
lang/scm
shells/scsh
Smalltalk lang/squeak
Tcl lang/tcl

构建Sun JDK

因为Sun的限制性SCSL许可, OpenBSD 不能包含它的JDK的二进制包。这就意味着您不得不从ports树构建它, 注意这个构建过程需要占用大量的内存。

JDK树位于ports树的devel/jdk子目录。您可以选择不同的版本, 每个版本位于自己的子目录内。当您输入make命令后, 您会看到一条信息要求您手工从Sun的网站上获取源代码, 您需要预先在Sun的网站上注册并同意他们的使用许可才有可能下载他们的源代码, 这也是为什么ports框架不能自动下载源代码的原因。

一旦您下载了分发的文件和补丁包, 把它们拷贝到/usr/ports/distfiles目录下, 而且您需要在您的系统上安装X, 然后开始在ports的子目录内构建它。

JDK需要运行一个Java 2编译器作为辅助程序来构建, 为了满足这个要求, 从OpenBSD 4.0开始, ports中的JDK 1.5采用了kaffe, 它允许JDK 1.5分别运行在i386或amd64平台上, 并大大节省了的构建时间。

老版本的JDK仍需要一个Linux版本的JDK。OpenBSD仅提供i386平台上的Linux模拟, 所以老版本的JDK仅可以在i386平台上构建, ports框架会安装所需文件并设置kern.emul.linux=1。更多的信息, 请参看用户手册compat_linux(8)的有关部分, 还有 FAQ 9 – 在OpenBSD上运行Linux二进制文件。 注意Linux模拟仅在构建JDK时需要, 它可以帮助构建一个OpenBSD系统本地的JDK, OpenBSD的JDK并不需要运行在Linux模拟环境下

经过N小时后, 构建过程结束了, 您接下来做make install来安装JDK。

如果在运行中出现错误提示, 诸如 "Could not reserve enough space for object heap", 尝试通过使用shell内置的ulimit命令(使用 –d参数)放宽对程序的内存使用限制。

其它开发工具

还有许多其它的开发工具包含在基本系统或作为packages和ports中。我们这里仅举几个例子:

8.4 - 什么是ports 树?

请参看 FAQ 15, 应用ports

8.5 - 什么是packages?

请参看 FAQ 15, 软件包管理

8.6 - 我可以用Ports 或Packages上的软件吗?

请参看 FAQ 15.

8.8 - 如果在启动时没有接上软驱我还能使用它吗?

您需要在设定fdc(4)上设置0x20特征位以便将内核设置成即使在硬件扫描时没有发现软驱也认为软驱已经连接在系统上了。这通过用User Kernel Config 或 config(8) 改变您的内核来实现。

# config -e -f /bsd
OpenBSD 4.5 (GENERIC) #1749: Sat Feb 28 14:51:18 MST 2009
    deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
Enter 'help' for information
ukc> change fd*
254 fd* at fdc0 drive -1 flags 0x0
change [n] y
drive [-1] ? ENTER
flags [0] ? 0x20
254 fd* changed
254 fd* at fdc0 drive -1 flags 0x20
ukc> q
Saving modified kernel.
#

8.9 - OpenBSD 启动引导器 (i386, amd64 specific)

当您启动您的OpenBSD系统时, 会注意到boot提示符;

boot>

对多数人来说, 这时您不必做任何事情, 如果您不在这里输入命令系统将自动启动, 但有时系统出现错误或因为需要特殊的功能, 您早晚会用到。开始前, 您应该从头阅读boot(8)的用户手册, 这里我将回顾一下引导过程最常用的命令。

开始时, 如果没有命令输入, 启动程序将自动尝试启动 /bsd, 如果失败了, 启动程序将尝试启动 /obsd, 如果又失败了, 启动程序将再尝试 /bsd.old 。您也可以通过手动输入一个指定的内核:

boot> boot hd0a:/bsd
这将启动位于BIOS识别出的第一块硬盘上的"a"分区上的名为bsd的内核文件。 或
boot> b /bsd

这里有一份您可以使用的OpenBSD内核启动时的参数清单:

这些参数的输入格式是f: boot [ image [-acds]]

更详尽的说明在 boot(8)'s man page.

8.10 - S/Key

S/Key是一个"一次性密码认证系统"。S/Key对那些数据传输过程中不能使用加密通道保护其认证凭据的人来说很有用处, 这里所指的加密通道是像以ssh(1)方式建立的连接。

警告: 一次性密码认证系统仅保护认证信息, 它不能防止网络上的窃听者获取你的私人信息, 此外, 如果如果你要访问一个加密的系统A, 我们建议您从一个可信的系统B对A进行访问, 这样做的目的是确保没有人可以通过记录你的键盘击键或捕捉、伪造你的终端上的输入输出信息进入系统A。

S/Key系统将用户输入的加密短语通过安全的哈希算法生成一个一次性序列密码以应对来自服务器的询问。这个系统安全的前提是用户的加密短语没有通过网络进行传输。因次必须通过一个安全通道进行用户加密短语的初始化或更改, 例如通过 ssh(1)或控制台。

OpenBSD的S/Key系统运行时可以采用不同算法的单向哈希函数:

建立 S/Key - 第一步

首先必须保证存在一个 /etc/skey 目录。如果你没有这个目录, 用超级用户的身份创建它, 简单地键入如下命令就可以了:

# skeyinit -E

一旦该目录存在, 就可以初始化你的 S/Key 了。你必须使用skeyinit(1) 初始化你的S/Key, 因为 skeyinit(1) 会问你 S/Key 的加密短语, 所以你必须如上所述通过一个安全通道运行它! skeyinit(1)程序也会提醒你这样做。运行skeyinit(1)时, 首先要求你输入password, 这个password就是你登陆系统所用的密码。一旦你的密码被认可, 接下来要求你输入 S/Key 的加密短语——secret passphrase, 这个secret passphrase不是你的系统登陆密码。你的加密短语至少要含有10个字符。我们建议你使用包含几个单词的容易记忆的短语作为加密短语, 下面是一个添加用户的例子:

$ skeyinit
Reminder - Only use this method if you are directly connected
           or have an encrypted channel.  If you are using 
           telnet, exit with no password and use skeyinit -s.
Password:  <---这里输入你的系统登陆密码
[Adding ericj with md5]
Enter new secret passphrase:  <---这里输入你的加密短语
Again secret passphrase:      <---这里再次输入你的加密短语
ID ericj skey is otp-md5 100 oshi45820
Next login password: HAUL BUS JAKE DING HOT HOG

这里特别重要的一行是 ID ericj skey is otp-md5 100 oshi45820 。它给用户提供了很多的信息。 下面是这一小段各部分的含义及其重要性:

但是这里更重要的是你的一次性密码。你的一次性密码包含6个短英语单词, 它们和空格组合在一起就是你的一次性密码。 这个skeyinit输出的一次性密码不能用来登陆(这里有关于第一个一次性密码使用的论述, 请参看 skeyinit(1)). 为了成功登陆, 一个一次性密码必须与登陆过程中 skey(1) 的计算值一致, 下一小节将告诉你怎样做。

实战 S/Key 登陆

现在skey已经初始化, 你就准备登陆了。 这里有一个例子是使用 S/Key 登陆的过程。要使用 S/Key 登陆清在你的用户名后面加上 :skey

$ ftp localhost
Connected to localhost.
220 oshibana.shin.ms FTP server (Version 6.5/OpenBSD) ready.
Name (localhost:ericj): ericj:skey
331- otp-md5 96 oshi45820
331 S/Key Password:  <--这里输入 S/Key的password
230- OpenBSD 4.4 (GENERIC) #1021: Tue Aug 12 17:16:55 MDT 2008
230-
230- Welcome to OpenBSD: The proactively secure Unix-like operating system.
230-
230- Please use the sendbug(1) utility to report bugs in the system.
230- Before reporting a bug, please try to reproduce it with the latest
230- version of the code.  With bug reports, please try to ensure that
230- enough information to reproduce the problem is enclosed, and if a
230- known fix for it exists, include that as well.
230-
230 User ericj logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quit
221 Goodbye.

注意我在我的用户名后面加上了":skey", 这是告诉ftpd我想使用 S/Key 认证登陆。有时读者可能已经注意到了我的序列号变成了 otp-md5 96 oshi45820 , 这是因为到目前为止我已经用 S/Key 登陆过几次了。 但是你怎样产生你自己的一次性密码呢? 是这样, 为了计算你的一次性密码, 你需要知道你正在使用的序列号和你的key 。 可能像你现在想的, 你怎么能记得正在使用序列号是多少呢?

实际上当你登陆时, 登陆过程在屏幕显示里包含了一行有用的信息, 你可以用它当场在另一台可信的计算机上通过一个安全通道生成一个一次性密码, 你只需拷贝这行并粘贴到shell的命令行中:

otp-md5 96 oshi45820 

当你输入完你的加密短语后, 你的一次性密码会被打印在屏幕上, 然后以可以拷贝-粘贴到 S/Key Password 提示符那里去登陆。 并非仅使用 otp-md5 一种哈希类型, skey(1) 命令也交替使用其它哈希类型。

如果你已经登入并且想为下一次登陆生成一个新的一次性密码, 请使用 skeyinfo(1), 它会告诉你下次登陆需要使用什么。例如这里, 我为自己将来登陆生成另一个一次性密码。 (记住, 我是通过一个安全通道进行这些操作的)。

$ skeyinfo
95 oshi45820

一个更好的方法是使用 skeyinfo -v, 它可以合适地生成一个命令以便在shell中运行, 例如:

$ skeyinfo -v
otp-md5 95 oshi45820

所以, 生成下一个S/Key的一次性密码最简单的方法是只要:

$ skeyinfo -v
Reminder - Do not use this program while logged in via telnet.
Enter secret passphrase:   <--这里输入加密短语
NOOK CHUB HOYT SAC DOLE FUME

注意上面的小点。(译者注:键盘左上角的波浪线那个键)

我可以确认你们中的很多人没有条件总使用加密连接或信任的本地计算机来生成这些密码, 然而用不安全的连接产生这些密码是不可行的, 所以怎样才能一次创建多个'一次性密码'呢? 你可以将你需要产生的密码数量提供给 skey(1) , 然后这些密码会打印在屏幕上, 这样你就可以随便带这他们去哪里了。

$ otp-md5 -n 5 95 oshi45820
Reminder - Do not use this program while logged in via telnet.
Enter secret passphrase:   <--这里输入加密短语
91: SHIM SET LEST HANS SMUG BOOT
92: SUE ARTY YAW SEED KURD BAND
93: JOEY SOOT PHI KYLE CURT REEK
94: WIRE BOGY MESS JUDE RUNT ADD
95: NOOK CHUB HOYT SAC DOLE FUME 

这里注意一下, 尽管面顺序输出的, 但是密码的顺序是自下而上的, 因为是从100到1倒着数的。

在ssh(1)和telnet(1)中使用S/Key

在ssh(1)和telnet(1)中使用S/Key 和在FTP中使用很相似——你只需在你的用户名后面附加上":skey", 例如:

$ ssh -l ericj:skey localhost
otp-md5 98 oshi45821
S/Key Password: SCAN OLGA BING PUB REEL COCA
Last login: Thu Apr  7 12:21:48 on ttyp1 from 156.63.248.77
OpenBSD 4.4 (GENERIC) #1021: Tue Aug 12 17:16:55 MDT 2008
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code.  With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
You have mail.
$

8.12 - OpenBSD支持SMP吗?
(均衡多个处理器)

OpenBSD在OpenBSD/i386, OpenBSD/amd64, OpenBSD/mvme88k, 及OpenBSD/sparc64 (包含 UltraSPARC T1 处理器) 平台上支持SMP。

您可以在安装系统时选择一个单独的内核"bsd.mp", 我们建议您在用它做系统默认内核(改名为bsd)前先测试一下用它可否启动。

我们期待将来可以在更多的平台上提供对SMP的支持, 在多数其余平台上OpenBSD可以运行SMP, 但只有一个处理器起作用。一个例外就是SPARC平台--OpenBSD/sparc必须移除额外的MBus模块系统才能启动。

8.13 - 有时我使用tty设备时出现I/O错误。

You need to use /dev/cuaXX for connections initiated from the OpenBSD system, the /dev/ttyXX devices are intended only for terminal or dial-in usage. While it was possible to use the tty devices in the past, the OpenBSD kernel is no longer compatible with this usage.

From cua(4):

For hardware terminal ports, dial-out is supported through matching device nodes called calling units. For instance, the terminal called /dev/tty03 would have a matching calling unit called /dev/cua03. These two devices are normally differentiated by creating the calling unit device node with a minor number 128 greater than the dial-in device node. Whereas the dial-in device (the tty) normally requires a hardware signal to indicate to the system that it is active, the dial-out device (the cua) does not, and hence can communicate unimpeded with a device such as a modem. This means that a process like getty(8) will wait on a dial-in device until a connection is established. Meanwhile, a dial-out connection can be established on the dial-out device (for the very same hardware terminal port) without disturbing anything else on the system. The getty(8) process does not even notice that anything is happening on the terminal port. If a connecting call comes in after the dial-out connection has finished, the getty(8) process will deal with it properly, without having noticed the intervening dial-out action.

8.14 - OpenBSD中可以使用哪些浏览器?

基本系统内包含了一个基于文本的浏览器Lynx, 它支持ssl。其它的浏览器包含在ports tree中(排名不分先后):

图形(X)浏览器

控制台(字符模式)浏览器

您可以在packages collection中找到这些浏览器, 安装ports树后, 如上所述的浏览器位于/usr/ports/www/目录。其中大部分已经预编译并可以在FTP serversCD-ROM上获得。大部分图形浏览器的程序代码很长, 需要花费很久的时间下载及编译, 我们强烈建议使用已经编译好的packages。

8.15 - 如何使用mg编辑器?

Mg是一个包含在OpenBSD内的Emacs风格微型文字编辑器, 微型意思就是它很小巧(Emacs很庞大!), 请阅读包含在mg(1)源代码中的用户手册及演示

注意因为mg是一个小的类Emacs工具, 它仅具有类似Emacs17的文本编辑功能, 而没有Emacs的其它功能。(例如:邮件和其它新特性, 以及Lisp, C++, Lex, Awk, Java模式等)

8.16 - ksh(1) 看起来不读取我的.profile!

有两个原因可能使ksh(1)忽略用户的.profile文件:

8.17 - 为什么我修改后的/etc/motd又被重写了?

/etc/motd文件在系统每次启动时会被自动重新编辑, 除了第一个空行及有关系统内核版本的信息予以保留外, 其它信息一概被替换掉。如果您想编辑这个文件, 请确保将您输入的内容放在这个空行下面, 这样可以避免每次系统启动 /etc/rc 编辑 /etc/motd文件时自动删除您输入的内容。

(译者注:如果您不想让系统显示内核版本信息, 就把 /etc/rc 文件内的以下内容注释掉:

# mg /etc/rc

把下面部分全部注释掉系统就不会每次启动重新修改motd信息了,

# patch /etc/motd
  if [ ! -f /etc/motd ]; then
  install -c -o root -g wheel -m 664 /dev/null /etc/motd
  fi
  T=`mktemp /tmp/_motd.XXXXXXXXXX
  if [ $? -eq 0 ]; then
  sysctl -n kern.version | sed 1q >; $T
  echo "" >;>; $T
  sed '1, /^$/d' < /etc/motd >;>; $T
  cmp -s $T /etc/motd || cp $T /etc/motd
  rm -f $T
  fi
这样您就可以随心所欲地编辑自己的motd信息了。)

8.18 - 为什么www.OpenBSD.org运行在Solaris上?


尽管没有开发者认为这有什么特别的关联性, 但是这个问题在邮件列表上被反复问及, 在这里我们做个答复:www.openbsd.org和OpenBSD的主要ftp站点放在加拿大艾博塔大学的一台SUN服务器上, 所有这些服务器隶属于一个大型的SUN系统, 这个SUN系统有巨大的储存空间和带宽。目前OpenBSD的使用的这台服务器允许我们使用这些带宽, 这就是为什么主力站点存放在这里的原因。很多OpenBSD的镜像站点运行在OpenBSD系统上, 但是这些站点全不能确保提供如此大的带宽, 所以开放团队决定把主力站点放在艾博塔大学的SUN服务器上。

(译者注:这看来又是一个历史问题了, 我在复制英文网页的时候还有这一段, 但是目前的OpenBSD网站上已经没有这一段了, 查了一下netcraft, 似乎从09年1月开始OpenBSD已经使用了自己的平台, 目前的OS是"NetBSD/OpenBSD", web服务器是apache, 但是为了让读者了解一些OpenBSD的历史, 我保留这段文字, 当初FAQ出现以上文字也就是说在邮件列表上这个问题已经被有意或无意地提问过无数次了。)


8.20 - X中的抗锯齿与TrueType字体

请看这里

8.21 - OpenBSD支持日志文件系统吗?

不, OpenBSD不支持日志文件系统。我们用一个被称为Soft Updates的不同机制达到类似的效果。请参阅FAQ 14 - Soft Updates

8.22 - 反向dns或为什么我登陆需要这样长的时间?

许多OpenBSD的新用户有过这样的经历, 就是启用ssh, ftp, telnet等服务时, 登录时间往往延迟了两分钟, 同样这种情况也发生在使用一个代理, 例如FTP代理, 或者通过工作站上的sendmail往外发送邮件时。

这些通常全是反向DNS的问题, dns提供域名服务, dns将域名比如"www.openbsd.org"转换成数字格式的IP地址, dns的还有一项功能就是将IP地址转换回域名, 这称作"反向dns"。

为了提供更好的记录, OpenBSD对所有连接系统的计算机用多种方式进行反向dns查询, 这些方式包括ssh, ftp, telnet, sendmailftp-proxy 等。很遗憾, 有些情况下这些发起连接的计算机并没有提供正确的反向dns条目。

一个这样的例子:

用户搭建一个OpenBSD系统作为家庭局域网的防火墙和网关, 用NAT方式使所有的内部计算机使用一个外部IP地址, 内部计算机还可能用这个OpenBSD系统作为出站邮件中继。内网计算机按照安装指南进行配置, 似乎一切全井井有条, 但只有一件事例外——无论何时内部计算机以任何方式连接OpenBSD主机都要延误2分钟才能连上。

到底发生什么事情了:

在一个网关的NAT后面的工作站只有一个未注册的(内网)地址192.168.1.35, 工作站用户通过网关使用ssh, ssh客户端让用户输入用户名和密码, 然后把它们发给网关。网关使用反向DNS寻找192.168.1.35以便确定是谁连接它, 问题是192.168.0.0网段是属于内网的IP地址, 所以正常配置的DNS服务器知道这些地址并不存在, 这种情况下, 有的DNS服务器会很快返回一条错误信息, 获得信息后OpenBSD假定无法获得此IP地址的更多信息(译者注:这里指反向DNS, 也就是通过IP的获得所属域名), 并且马上放弃这种尝试并允许用户登陆。但是还有一些DNS服务器不会反馈任何信息, 这种情况下您就会发现您的计算机只能等着OpenBSD反复尝试进行反向DNS解析, 直至询问超时(两分钟)才会允许用户登陆。所以这种情况下有些ftp代理和ftp客户端会因为设置的尝试时间小于OpenBSD的反向DNS的尝试时间(两分钟), 所以看起来ftp代理无法正常工作。

这看起来很烦人, 幸好, 这个问题不难解决。

通过 /etc/hosts 进行修改:

最简单的解决办法是在内部网的所有工作站上建立 /etc/hosts 文件, 并且确保让 /etc/resolv.conf 文件用"lookup file bind"指定先从本地的/etc/hosts文件进行寻找解析结果, 如果/etc/hosts没有指定, 就再用 /etc/resolv.conf 文件中的指定的"nameserver" 进行解析。

您的 /etc/hosts 文件看起来像这样:

::1 localhost.in.example.org localhost
127.0.0.1 localhost.in.example.org localhost
192.168.1.1 gw.in.example.org gw
192.168.1.20 scrappy.in.example.org scrappy
192.168.1.35 shadow.in.example.org shadow  

您的 resolv.conf 文件看起来像这样:

search in.example.org 
nameserver 24.2.68.33
nameserver 24.2.68.34
lookup file bind 

还有一种情况是用户可能会说"我是使用DHCP自动分配内网的IP地址, 我怎么处理 /etc/hosts 文件?" , 简单得很, 实际您只需将DHCP服务器可能分配的动态IP地址和静态设备全放到 /etc/hosts 文件里就好了:

::1 localhost.in.example.org localhost
127.0.0.1 localhost.in.example.org localhost
192.168.1.1 gw.in.example.org gw
192.168.1.20 scrappy.in.example.org scrappy
192.168.1.35 shadow.in.example.org shadow
192.168.1.100 d100.in.example.org d100
192.168.1.101 d101.in.example.org d101
192.168.1.102 d102.in.example.org d102
         [... snip ...] 
192.168.1.198 d198.in.example.org d198
192.168.1.199 d199.in.example.org d199  

上面这个例子中, 我假设您的DHCP服务器自动分配的IP段是从192.168.1.100到192.168.1.199, 并且在文件的头部加上了定义的静态设备IP。

如果您的路由器使用DHCP进IP地址分配, 您还会发现一个问题——dhclient 每次租约到期时将会自动删除/etc/resolv.conf 文件中的"lookup file bind"这行。这可以通过把"lookup file bind"这行放进 /etc/resolv.conf.tail 这个文件来解决。

通过使用本地DNS服务器来进行修正

这个讨论超出了本文的范围, 但是基本的技巧就是您安装一个自己喜欢的DNS服务器, 设置它进行所有局域网内的正向和反向DNS解析, 并且让您局域网内的计算机(包括路由器)使用它作为DNS服务器。

8.23 - 为什么OpenBSD网页不遵循HTML4/XHTML标准?

我们精心地设计了当前的网页风格, 使它可以适应从4.0以后版本的绝大多数浏览器。如果在老的浏览器上不能正确浏览这些HTML4或者XHTML标准的网页, 那么我们不准备将网页修改成严格遵循HTML4或者XHTML标准的样式, 因为这并非是我们优先考虑的内容;我们欢迎新技术, 但是建议您把精力用于完善代码或使原来的网页锦上添花, 而不是让已经存在的网页去适应什么新标准。

8.24 - 为什么我的时钟误差了20多秒?

当您使用rdate(8)来同步NTP服务器时会发现您的时间与本地时间有20多秒的误差。

导致这种情况的原因是UTC(协调世界时, 基于天文观察)时间和TAI(国际原子时间, 基于原子钟)时间之间的差异。为了补偿地球自转的变化, UTC加入了闰秒, 但是TAI无法调整, 正是加入的闰秒导致了这一差异。如果需要了解更多的信息请在互联网上搜寻"leap seconds UTC TAI"

解决这个问题很简单, 在绝大多数国家您如果用 rdate(8) 加上 "-c" 参数并使用 /usr/share/zoneinfo/right/ 下的一个时区将会得到标准时间。例如, 您在德国, 您可以使用如下命令:

# cd /etc && ln -sf /usr/share/zoneinfo/right/CET localtime
# rdate -ncv ptbtime1.ptb.de
如果在其他国家, 请自行调整。

8.25 - 为什么我的时钟误差了几个小时?

默认情况下, OpenBSD假设您的时钟是是与UTC(协调世界时)同步的而非本地时间, 如果您的计算机上安装了多个操作系统可能会引起一些问题。

许多其它的操作系统也可以按照这样配置以避免引起问题。

如果您无法将计算机时钟设定成UTC, 您可以用config(8)修改OpenBSD的时间模式, 例如, 让OpenBSD使用US/Eastern(美国东部标准时间, 比UTC晚5小时, 也就是300分钟):

# config -ef /bsd
OpenBSD 4.4 (GENERIC) #1021: Tue Aug 12 17:16:55 MDT 2008
    deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
Enter 'help' for information
ukc> timezone 300
timezone = 300, dst = 0
ukc> quit
Saving modified kernel.  
更详尽的信息请参看options(4)中选项 "TIMEZONE=value"。

一般情况下, 安装时已经设定了时区, 如果您需要更改时区, 您可以在 /usr/share/zoneinfo 文件里创建一个适当的符号链。例如:将新的本地时间设定为EST5EDT:

# ln -fs /usr/share/zoneinfo/EST5EDT /etc/localtime

也可以参考:

[索引] [第七章 - 键盘与显示控制] [第九章 - 转到OpenBSD]


[back]www@openbsd.org
$OpenBSD: faq8.html, v 1.211 2009/02/05 21:20:55 sthen Exp $