/etc 目录包含启动类Unix系统所需的基本配置信息。每当我被一个不熟悉的系统拖累时,我做的第一件事就是扩大范围等。从初级系统管理员到中级系统管理员的最快方法是阅读 /etc 和相关手册页。是的,全部。是的,这是很多阅读。理解 /etc 意味着你理解系统是如何连接在一起的。随着你成为一名系统管理员,你无论如何都会零碎地获取这些信息,所以你最好采取更简单的方法,从一开始就掌握工具包的这一部分。
我在最重要的章节中讨论了许多 /etc 文件,例如第7章的 /etc/services 和第10章的 /etc/fstab。此外,一些文件只具有历史意义,或者正在逐渐被删除。本章涵盖了其他地方不太适合的重要 /etc 文件。
不同的类Unix系统使用不同的 /etc 文件。在许多情况下,这些文件只是从原始BSD重命名或重构文件。例如,我第一次遇到IBM AIX系统时,我去寻找BSD风格的 /etc/fstab 。它不在那里。经过一番搜索,我找到了 /etc/filesystems ,这是一个IBM特定的 /etc/fstab 。显然,IBM认为以 filesystem table 的缩写命名的文件令人困惑,因此他们重命名了该文件。知道这些信息存在于 /etc 中的某个地方,知道它显然不在哪些文件中,大大缩短了我的搜索时间。
即使是完全不同的FreeBSD系统也有几乎相同的 /etc 目录。虽然一些附加程序在此处插入自己的文件,但您可以预期某些文件会出现在您遇到的每个FreeBSD系统上。
请记住,/etc 是FreeBSD的核心,对这些文件的更改可能会损坏或破坏您的系统。虽然必须手动恢复加密的文件系统可以将一个足够的系统管理员变成一个相当好的系统管理员,但这是实现这一目标最不愉快的方法之一。
此文件允许您为新用户配置默认值。详见第9章。
已经不在了
此文件允许您配置系统范围内(system-wide)的电子邮件转发。我们将在第20章中介绍它。
FreeBSD能够通过 automounter 守护进程amd(8)
根据需要自动挂载和卸载NFS文件系统。然而,automountainer守护进程非常古老,在很大程度上已被 autofs(5)
和 automountd(8)
所取代。自动挂载主要用于工作站,所以我们不会深入探讨。
已经不在了
auto_master 文件配置FreeBSD的现代自动挂载服务。它允许您配置挂载选项,确定自动挂载的文件系统应保持挂载多长时间,等等。有关详细信息,请参阅 auto_master(5)
、autofs(5)
和 automountd(8)
。
FreeBSD包含一个自动黑名单守护进程 blacklistd(8)
,与fail2ban和类似程序相当。与 libblacklist(3)
链接的程序可以指示 blacklistd(8)
在防火墙处阻止入侵主机。我们在第19章中配置了blacklistd(8)
。
FreeBSD支持蓝牙,这是一种短程无线通信标准。与802.11不同,蓝牙专为短距离但高级别的服务而设计,如语音通信。这本书是关于服务器的,所以我们不会介绍蓝牙,但你应该知道,如果你愿意,你的FreeBSD笔记本电脑可以连接到你的蓝牙手机并连接到互联网。
Capsicum安全系统允许程序员为他们的软件添加沙盒和安全功能。/etc/casper 目录包含示例 capsicum(4)
配置。
已经不在了
cron(8)
守护进程允许用户安排任务。示例和详细信息见第20章。
/etc/csh.* 文件包含csh和tcsh的系统范围默认值。当用户使用这两个shell中的任何一个登录时,shell会执行它在 /etc/csh.login 中找到的任何命令。同样,当用户注销时,将执行 /etc/csh.logout 。您可以将常规shell配置信息放置在 /etc/csh.cshrc 中。
每个shell配置都容易出错,您必须为任何其他shell保持相同的设置。我建议将必要的环境变量放入登录类中(请参阅第188页的“限制系统使用”)。
内核调试器配置实用程序 ddb(8)
读取 ddb.conf 以获取指令。我们将在第24章中使用它来准备小型系统上的内核崩溃转储。
设备守护进程 devd(8)
以管理可拆卸硬件而闻名,如USB、PCCard和Cardbus设备。当你将USB网卡插入笔记本电脑时,devd(8)
会注意到它的到来,并启动相应的系统进程,根据 /etc/rc.conf 配置该卡。更一般地说,它是一个状态更改守护进程,可以对链接打开/关闭事件做出反应,通知你CPU过热,处理挂起/恢复事件等等。我们在第13章中简要讨论了 devd(8)
,但如果你认为你需要在服务器上编辑 /etc/devd.conf ,你可能做错了什么。
FreeBSD通过 devfs(5)
管理设备节点,devfs是一个虚拟文件系统,在硬件启动、出现和消失时动态提供设备节点。更多信息请参见第13章。
许多操作系统为您提供非常基本的DHCP客户端配置,无法对其进行微调或自定义;你要么使用它,要么不使用。在大多数情况下,一个空的 /etc/dhclient.conf 文件可以为您提供完整的DHCP客户端功能,但它不会在所有情况下都正常工作。也许你的网络遇到了问题,或者你正在参加一个会议,在这个会议上,一些脚本小子认为设置第二个DHCP服务器并通过他的机器路由每个人的流量是很有趣的,这样他就可以捕获密码。
你的服务器最好不要通过DHCP配置(除非它是无盘的),所以我们不会深入探讨这个问题。但是,您应该知道,您可以配置FreeBSD的DHCP客户端功能。
曾几何时,硬盘是稀有而奇特的生物,只有少数品种。在 /etc/disktab 中,您可以找到许多不同类型磁盘的低级描述,从360KB软盘到松下60MB笔记本电脑硬盘。(是的,笔记本电脑配有60MB硬盘,我们很高兴拥有它们。)
如今,此文件主要用于可移动介质,如1.44MB软盘和zip磁盘。虽然我在第13章中描述了格式化闪存驱动器,但此文件包含格式化其他可移动媒体所需的描述。如果你想在LS 120磁盘或zip驱动器上放置一个文件系统,你可以在条目的开头找到必要的标签。
只有当您有多个相同的硬盘驱动器,并且希望以完全相同的方式进行分区和格式化时,编辑 /etc/disktab 才有用。如果你需要自己输入,请阅读 disktab(5)
。
Dragonfly邮件代理(Dragonfly Mail Agen t—— DMA)将其配置存储在 /etc/dma/ 中。我们在第20章讨论DMA。
freebsd-update(8)
在为服务器获取二进制更新时使用此文件。详见第18章。
有关文件系统表 /etc/fstab 的讨论,请参阅第10章。
FTP守护进程 ftpd(8)
使用这些文件来确定谁可以通过FTP访问系统,以及在成功连接后他们有什么访问权限。除非你运行的是大型FTP站点,否则你应该使用 sftp(1)
。
第9章详细介绍了将用户分配到组的痛苦细节。
某些软件希望每个主机都有一个通用的唯一ID或UUID。如果你在真实的硬件上运行,这个UUID会被烧录到主板上,可以通过 kenv(8)
访问。虚拟主机可以从软件生成UUID。 /etc/hostid 文件包含该UUID。
此文件包含主机到IP的映射,如第8章所述。
/etc/hosts.allow 文件控制谁可以访问使用TCP Wrappers支持编译的守护进程。在第19章中了解它。
r-service(rlogin
、rsh
等)使用 /etc/hosts.equiv 文件让受信任的远程系统登录或在本地系统上运行命令,而无需提供密码甚至登录。此文件中列出的主机被假定已在受信任的系统上执行了用户身份验证,因此本地系统不必费心重新验证用户。
这种公然的信任在友好的网络上非常方便,就像让曼哈顿联排别墅的门不上锁一样,这样你每次回家都不用费力地掏出门钥匙。没有友好的网络。一个心怀不满的员工可以通过这项服务在很大程度上摧毁一个公司网络,而一台使用r服务的机器对于第一个路过的脚本孩子来说几乎是一块狗肉。事实上,/etc/hosts.equiv 及其相关服务甚至让那些认为可以安全使用它的顶尖安全专家都感到头疼。我建议将此文件留空,甚至可能使其不可变(见第9章)。
/etc/hosts.lpd 文件是 /etc 中最简单的文件之一。此处列出的主机,每个都在自己的行上,可以打印到此机器控制的打印机上。虽然您可以使用主机名,但这会使DNS问题阻碍打印,因此请使用IP地址。
与大多数其他配置文件不同, /etc/hosts.lpd 不接受网络号或网络掩码;您必须列出各个主机名或IP地址。
我们在第20章中将FreeBSD配置为打印机客户端。
inetd(8)
处理不经常运行的较小守护进程的传入网络连接。请参阅第20章中关于inetd的部分。
FreeBSD的链接器允许您用一个共享库替换另一个。我们将在第17章讨论这个问题。
此文件包含由 tzsetup(8)
配置的本地时区数据。这是一个二进制文件,你不能用普通工具编辑它。tzsetup(8)
实际上是从 /usr/share/zoneinfo 的子目录复制此文件。如果您的时区发生了变化,您需要升级FreeBSD以获取新的时区文件,然后重新运行 tzsetup(8)
以正确配置时间。
我们在第20章讨论时间。
locate(1)
查找给定名称的所有文件。例如,要查找 locate.rc ,请输入以下内容:
xxxxxxxxxx
# locate locate.rc
/etc/locate.rc
/usr/share/examples/etc/locate.rc
/usr/src/usr.bin/locate/locate/locate.rc
/var/db/etcupdate/current/etc/locate.rc
您将看到一个名为 locate.rc 的文件可以在四个地方找到:在主 /etc 目录、系统示例目录、系统源代码和 etcupdate(8)
保留的副本中。
作为 periodic(8)
每周运行的一部分(见第21章),FreeBSD系统扫描其磁盘,构建其发现的所有内容的列表,并将该列表存储在数据库中。列表构建程序 locate.updatedb(8)
从 /etc/locate.rc 获取设置。此文件中的以下变量都会改变 locate.updatedb(8)
构建locate数据库的方式:
TMPDIR
包含 locate.updatedb(8)
使用的临时目录,默认为 /tmp。如果 /tmp 中的空间不足,请将此路径更改为有更多空间的位置。FCODES
变量更改数据库本身的位置,但这会影响FreeBSD的其他部分,这些部分希望在默认位置找到该数据库。为奇怪的结果做好准备,特别是如果您将旧的locate数据库保留在 /var/db/locate.database 的默认位置。SEARCHPATHS
变量给出了要开始构建数据库的目录。默认为/,整个磁盘。要仅索引磁盘的一部分,请在此处设置该值。PRUNEPATHS
列出了您不想索引的目录。这默认排除传统上只包含短期文件的临时目录。FILESYSTEMS
变量列出了要索引的文件系统类型。默认情况下,locate.updatedb(8)
只索引UFS(FreeBSD)和ext2fs(Linux)文件系统。列出NFS(见第13章)文件系统是一个坏主意:所有服务器同时索引文件服务器将成为网络或文件服务器的瓶颈。您可以通过使用 /etc/login.access 和 /etc/login.conf 来控制谁可以登录您的系统,以及这些用户可以访问哪些资源。有关说明,请参阅第9章。
/etc/mail 的大部分内容都专用于Sendmail。两个例外是 aliases(5)
文件和mailer.conf(5)
。我们将在第20章中讨论这两个问题。
虽然FreeBSD使用大多数 .rc 文件来启动系统,但 /etc/mail.rc 文件用于配置 mail(1)
。
FreeBSD允许您通过 /etc/mail/mailer.conf 选择任何您喜欢的邮件服务器程序,如第20章所述。
制作或编译程序就是将源代码构建成机器语言。我们将在第17章中详细讨论构建软件。 /etc/make.conf 包含控制构建过程如何工作的设置,允许您设置直接影响软件构建的选项。记住,您添加到 make.conf 中的任何内容都会影响系统上构建的所有软件,包括系统升级。这可能会导致升级失败。 make.conf 中的许多选项仅对开发人员有用。
如果您有兴趣设置仅影响系统升级的选项,请使用 /etc/src.conf 。
以下是 make.conf 中设置的一些常见功能。这里设置的任何值都需要与 make(1)
使用的语法相同的语法。如果你坚持要优化软件构建,请按照 make.conf(5)
或软件文档中的示例进行操作。不过,最重要的是,不要跟 make
混在一起。
此选项指定用于构建非内核程序的优化设置。许多其他类Unix操作系统建议使用特定的编译器标志(compiler flags —— CFLAGS
)编译软件。在FreeBSD上,这种做法是不被鼓励的。需要编译器标志的系统组件已经在软件配置中指定了,而附加软件则单独设置了该配置。虽然人们可能会推荐CFLAGS的其他设置,但FreeBSD项目不支持自定义选项。
一般来说,FreeBSD代码被认为是开箱即用的最正确的编译。添加编译器选项唯一能做的就是降低性能。如果你构建FreeBSD或带有非标准标志的端口时遇到问题,请删除这些标志并重新构建。
COPTFLAGS
优化仅用于构建内核。同样,默认值以外的设置可以构建一个无法工作的内核。
CXXFLAGS
告诉编译器在构建C++代码时要使用什么优化。使用 CXXFLAGS
时,请务必使用+=语法,以便将说明添加到软件中指定的说明中。我之前关于 CFLAGS
所说的一切同样适用于 CXXFLAGS
。
此文件包含所有用户帐户的机密核心信息,如第9章所述。保护它。
当用户登录时,会向他们显示每日消息(message of the day —— motd)文件。您可以在此文件中放置系统通知或其他您希望shell用户看到的信息。/etc/login.conf 中的 welcome
选项(见第9章)可以将用户指向不同的motd文件,因此您可以为每个登录类设置单独的消息。
mtree(1)
使用根据预定义标准设置的权限构建目录层次结构。/etc/mtree 目录存储FreeBSD基本系统的标准。FreeBSD升级过程使用mtree记录来正确安装系统。如果损坏了基本系统中的文件或目录权限,可以使用 mtree(1)
将其还原为默认值。虽然你通常不需要编辑这些文件,但如果你对系统处理得太多,它们可能会很有用。无盘系统使用这些文件来构建基于内存的 /var 文件系统。我们将在第19章中使用这些信息来检查系统安全性。
如果你习惯于SVR4衍生的操作系统,你可能会在 /etc/netconfig 中配置网络的各个部分。然而,FreeBSD仅将此文件用于RPC代码。我提到这一点只是为了防止老Solaris认为这里的变化会对他们有所帮助。
此shell脚本是专门为在单用户模式下启动网络而设计的。出于多种原因,使网络处于单用户模式非常有用,从挂载NFS共享到连接到远程计算机以验证配置。只需运行 /etc/netstart 。在完全多用户模式下,此脚本无效。【实际上在普通模式下这个脚本也是有效的】
此shell脚本不适合人类使用;相反,其他网络配置脚本使用本文定义的子程序来支持常见功能。
此文件配置日志文件的轮换和删除。更多信息请参见第21章。
nscd(8)
服务缓存名称服务查找的结果以优化系统性能。如果您正在运行LDAP,这很有用,但对于主机名查找,最好运行本地缓存解析器。
FreeBSD的Windows文件共享挂载系统使用 /etc/nsmb.conf 来定义对Windows系统的访问,如第13章所述。
第8章和第20章介绍了名称服务交换(Name Service Switching)。
在主机上保持正确的时间可以简化。好吧,一切。时间守护进程 ntpd(8)
使用这些文件,如第20章所示。
One time Passwords In Everything(OPIE)是从S/Key衍生出来的一次性密码系统。虽然仍在少数地方使用,但它不再很受欢迎。如果你感兴趣,可以阅读 opie(4)
。在很大程度上,OPIE已被Kerberos、Google Authenticator和其他PAM插件等系统所取代。
Pluggable Authentication Modules ( 可插拔身份验证模块 —— PAM) 允许系统管理员使用不同的身份验证、授权和访问控制系统。如果您使用的是Kerberos、LDAP或其他集中式身份验证系统,则需要配置PAM。不幸的是,PAM本身就占据了整本书。如果你被困在PAM附近的任何地方,请允许我推荐我的书《PAM Mastery》(倾斜风车出版社,2016)。
此文件包含用户可见的帐户信息。我们在第9章中讨论密码文件。
此脚本启动和停止可移动网卡,如Cardbus卡和USB以太网。它的名字只是历史遗留下来的,当时唯一可用的卡是PC卡。在大多数情况下,devd(8)
会根据需要运行此脚本,如第13章所述。
系统的定期维护作业会向root用户发送那些烦人的邮件,这些作业由 periodic(8)
运行,它只运行存储在 /etc/periodic 和 /usr/local/etc/periodical 中的shell脚本。这些脚本中的每一个都可以在 /etc/periodic.conf 中启用或禁用。
periodic(8)
每天、每周或每月运行程序。每组程序都有自己的设置,例如,每日程序与每月程序分开配置。这些设置由 /etc/periodic.conf 中的条目控制。虽然我们只显示了每日脚本的示例,但您会发现每周和每月脚本的设置非常相似。
如果您希望状态电子邮件发送给root以外的用户,请在此处列出该用户的姓名。除非你有一个专门阅读定期电子邮件的用户,否则最好保留默认设置,并将root的电子邮件转发到你阅读的帐户。如果你愿意,你也可以给出一个文件的完整路径,甚至让 newsyslog(8)
旋转周期性日志(见第19章)。
将此设置为 YES
时,每日消息将包括所有成功检查的信息。
当设置为 YES
时,每日消息包括其运行的命令的一般信息。
当设置为 YES
时,每日消息包括有关它试图运行但无法运行的周期性命令的信息。这些消息通常是无害的,涉及您的系统不支持或不包含的子系统。
您可以定义自己的脚本,作为每日、每周和每月 periodic(8)
作业的一部分运行。这些默认值为 /etc/daily.local 、/etc/weekly.local 和 /etc/monthly.local ,但您可以将它们放置在任何您喜欢的位置。
/etc/periodic 的每日、每周和每月子目录中的每个脚本在文件顶部都有一个简短的描述,大多数脚本在 /etc/defaults/periodic.conf 中都有配置选项。快速浏览这些脚本,寻找您感兴趣的内容。启用的默认值在大多数情况下都是合理的,但您可以通过 /etc/periodic.conf 中的简单设置启用额外的功能。例如,如果您使用基于GEOM的磁盘功能,您会发现每日GEOM状态消息很有用。由于我在这里列出的任何东西在我交付这份手稿之前都会过时,更不用说在这本书到达你手中之前了,我不会详细介绍各种剧本。
我们将在第19章介绍PF数据包过滤器的基础知识。
PF的一个鲜为人知的特性是,它能够通过操作系统发送的数据包来识别操作系统。 /etc/pf.os
文件包含不同操作系统的TCP指纹,允许您编写防火墙规则,例如“向FreeBSD用户显示我的真实主页,但向Windows用户显示一个建议他们使用真实操作系统的页面。”有关更多信息,请参阅 pf.os(5)
。我鼓励你仔细阅读这个文件,哪怕只是为了了解所有这些网络堆栈的行为有何不同。
调制解调器用户可以将远程调制解调器的电话号码存储在 /etc/phone 中,将其别名化,这样他们就可以直接键入 home
而不是完整的电话号码。然而,只有 tip(1)
和 cu(1)
使用这个文件,所以它并不像你想象的那么有用。
Portsnap为端口树(ports tree)提供更新,如第18章所述。
FreeBSD支持带有 ppp(8)
的出站调制解调器。阅读手册页了解更多信息。
此文件包含打印机配置信息。在类Unix系统上打印可能非常复杂,尤其是使用各种各样的打印机。然而,让你的FreeBSD机器将打印作业发送到打印服务器并不难。我们在第20章讨论这个话题。
/etc/profile 文件包含 /bin/sh shell的默认帐户配置信息,与csh和tcsh用户的 /etc/csh.* 非常相似。每当 /bin/sh 用户登录时,他都会继承此文件中的内容。用户可以用自己的 .profile 覆盖 /etc/profile 。Bash和其他sh派生程序也使用此文件。
虽然tcsh是标准的FreeBSD shell,但sh和派生程序(尤其是bash)非常受欢迎。保持 /etc/profile 和 /etc/csh.login 中的设置同步,以方便将来进行故障排除,或者更好的是,在登录类中设置必要的环境变量(见第9章),以便它们影响用户需要的任何shell。
在第7章中,我们讨论了网络协议。/etc/protocols 文件列出了您可能遇到的各种网络协议。请记住,TCP或UDP端口号与协议号不同。
这是 /etc/passwd 文件的数据库版本。它包含有关用户帐户的公共信息,如第9章所述。
每当您的系统启动到可以执行userland命令的程度时,它都会运行shell脚本 /etc/rc 。此脚本装载所有文件系统,启动网络接口,配置 devfs(5)
,查找和编目(catalogs)共享库,并执行设置系统所需的所有其他任务。我们在第4章讨论了FreeBSD启动系统。
不同的系统具有截然不同的启动任务。具有三个48端口串行卡的终端服务器的工作方式与web服务器完全不同。FreeBSD将每个启动进程隔离到一个单独的shell脚本中,以满足特定的需求,而不是一个处理每个任务的单片 /etc/rc 脚本。
此外,您可以在 /etc 下直接找到一些脚本,例如 /etc/rc.firewall 和 /etc/rc.initdiskless 。在当前的创业系统出现之前的几年里,这些脚本就被分开了,并保留在它们的历史位置上,因为移动它们没有任何好处。
无线网卡受不同监管规则的约束,具体取决于它们在世界各地的使用情况。这些卡读取 regdomain.xml 以了解它们可能使用的频率以及允许传输的强度。编辑此内容,风险自负。
此文件包含用于通过串行线连接到远程系统的机器可读配置。今天,只有当您将系统用作串行客户端时,这才有意义——例如,如果您想连接到串行控制台。我们将在第4章讨论串行控制台。
此文件允许您设置名称服务器、域搜索顺序和更多DNS客户端设置。详见第8章。
Remote Procedure Calls (远程过程调用 —— RPC) 是一种在远程计算机上执行命令的方法。与TCP/IP非常相似,RPC有服务和端口号,/etc/rpc 包含这些服务及其端口号的列表。最常见的RPC消费者是NFS,在第13章中进行了讨论。
此目录包含 audit(8)
安全实用程序的配置信息。
此文件包含网络服务及其相关TCP/IP端口的列表。我们在第7章讨论了 /etc/services 。
此文件包含所有合法用户shell的列表,如第9章所述。
在 /etc/skel/ 中,您将找到被复制到新用户帐户的shell点文件。
FreeBSD包含一个基本的SNMP实现,我们将在第20章中讨论。
此文件包含用户密码文件 /etc/master.passwd 的机密数据库。所有不光彩的细节见第9章。
此文件包含从源代码构建FreeBSD的机器指令。它与 make.conf 类似,仅用于源代码树。不过,/etc/make.conf 中设置的值也会影响从源代码构建FreeBSD;区别在于 /etc/src.conf 只影响FreeBSD的构建,而不影响端口和包。有关所有升级需求,请参阅第18章。
在 /etc/SSH 中配置Secure Shell软件套件(SSH)。这包括客户端 ssh(1)
和服务器 sshd(8)
。第20章涉及sshd(8)
。
FreeBSD包括OpenSSL加密软件。第19章讨论了一些基本用途和配置。/etc/ssl 目录包含大部分OpenSSL信息。
此文件包含有关在引导过程中设置哪些内核sysctls的信息。见第6章。
此文件控制哪些数据进入系统日志以及这些日志的存储位置。见第21章。
此文件包含不同终端类型的设置和功能。在终端有几十种不同类型,供应商几乎每天都会发布新终端的时代,了解这个文件至关重要。然而,现在世界已经基本上将vt100作为标准,默认配置几乎适用于所有人。
termcap文件是指向 /usr/share/misc/termcap 的符号链接。此文件在单用户模式下可能不可用。FreeBSD提供 /etc/termcap.small 文件,以单用户模式提供终端信息。
此文件包含所有系统终端设备(包含命令提示符的窗口)。这个名字是终端是物理电传打字机时代的遗物,但今天大多数用户使用telnet或SSH生成的虚拟终端。
我们将在第23章中使用此文件设置串行登录。
FreeBSD附带了Unbound DNS客户端。配置信息位于 /etc/unbound/ 中。第20章介绍了如何将Unbound设置为本地DNS解析器。
这不是一个重要的文件,但当我费力地挖掘它的功能时,你就可以了解它了。如果这个文件存在,FreeBSD的计时例程已经确定硬件的CMOS时钟保持的时间不是协调世界时(UTC)。如果文件丢失,CMOS时钟将设置为其他时间。它记录在 adjkerntz(8)
中。
FreeBSD的ZFS使用此目录存储NFS集成信息。我们在第13章讨论NFS。
如果你能遍历所有 /etc ,你会比大多数系统管理员准备得更好。现在,让我们为您的服务器添加一些软件。