8.9. 其他配置:时间同步、记录、共享近用…

本节列出的细目对希望精通 GNU/Linux 系统配置极有帮助。这里只列出简要的内容,详情仍需参阅文档。

8.9.1. 时区

基本 符号链接

符号链接是一种指向另个文件的指针。近用时,被指向的文件就被打开。移除链接不会删除指向的文件。同样的,没有自的授权,而是使用目标本身的授权。最后,可以用于任何类型的文件:文件夹、特殊文件 (网络插座、具名管道、设备文件等)、甚至另个符号链接。

ln -s *target* *link-name* 命令添加一个符号链接,命名为 link-name,指向 target

若目标不存在,则链接算是 “破损” 且其近用送回错误消息指示目标文件不存在。若链接指向另个链接,该链接又指向其前任链接,则该等链接的 “链” 形成 “循环”。在这种情况下,近用循环内的任一链接也会得到特定的错误 (“过多层的符号链接”);经过若干循环后核心放弃它。

初始安装时经由 tzdata 软件包配置时区。dpkg-reconfigure tzdata 命令以交互方式修改时区。其配置内容保存在 /etc/timezone 文件。在 /usr/share/zoneinfo 文件夹内映射的文件复制在 /etc/localtime 文件内;此文件包括使用日光节约时间的国家。

暂时变更时区,可使用 TZ 环境变量,它的优先次序在缺省的配置档之前:

  1. $

说明 系统时钟,硬件时钟

电脑内有两个时间来源。主板有个硬件时钟,称为 “CMOS 时钟”。这个时钟不准,近用的速度慢。操作系统核心有自己的系统时钟,以自己的方式 (可能由时间服务器协助,见 第 8.9.2 节 “时间同步”) 保持时间的正确。此系统时钟较为准确,尤其是不需经由硬件变量就能近用。然而,系统时钟只存在于内存,开机就归零,不像 CMOS 时间钟,有电池支持,不受重新开机或暂停下仍能 “存活”。因此,开机时,由 CMOS 时钟设置系统时钟,关机时更新 CMOS 时钟 (若被不当调整就能修正它)。

实务上有个问题,因为 CMOS 时钟只是个计数器,未含时区信息。有几个方式选择其解释方式:系统以世界标准时间 (UTC,旧称 GMT),或当地时间看待。虽然可以简单切换,但却颇为复杂:它的偏移值不是常数。系统无法判断偏移值的正确性,尤其在时区交接。总是在世界标准时间与时区信息之间重组本地时间,建议使用 CMOS 时间为世界标准时间。

不幸的是,窗口系统缺省的配置忽视此建议;仍以 CMOS 时钟为本地时间,启动时猜测时区的变动。只要运行单一的窗口系统,就没有问题。可是,电脑经常安装多个系统 (“双重开机” 配置或在虚拟机运行其他系统),混乱就免不了,无法决定正确的时间。必须保留窗口系统的前提下,应把 CMOS 时钟配置成 UTC (把机码 HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal 设置为 “1” 做为 DWORD),或使用 Debian 系统的 hwclock --localtime --set 设置硬件时钟并标记追踪其为本地时间 (并且在春秋两季手段检查时钟的正确性)。

8.9.2. 时间同步

时间同步,在单机时代是多余,但在网络时代却很重要。用户无权修改日期与时间,所以需要精准的时间以免混乱。尤有甚者,网络上的电脑时间同步后,有助于安排社区工作者透过网络全球串联。受到攻击时,容易依序恢复原来的运作。由多部机器收集来的统计数据,必须有同步的时间,才能发挥作用。

基本 NTP

网络时间协议 (Network Time Protocol, NTP) 可以让机器间相当精准的同步,甚至把网络延迟及其他偏移值列入考量。

互联网上很多 NTP 服务器可用,受欢迎的其工作量可能负荷过重。所以建议使用 pool.ntp.org NTP 服务器,它是一组公开的 NTP 服务器。也可使用针对特定地区的次群组服务器,如 us.pool.ntp.org 系供美国使用、ca.pool.ntp.org 供加拿大使用。

然而,管理大型网络时,还是应安装与公共服务器同步的自己 NTP 服务器。同个网络上自己的机器,就能使用内部的 NTP 服务器不必增加外部公共服务器的负担。以自己的时钟增加网络内机器的同质化,同步截取与共用资源,使用共同的网络交换时间。

8.9.2.1. 给工作站

工作经常需要重新开机 (虽然只是节省能源),开机时以 NTP 同步就够了。安装 ntpdate 软件包就可以。需要更换 NTP 服务器时,再修改 /etc/default/ntpdate 文件即可。

8.9.2.2. 供服务器

服务器很少重开机,系统时间必须绝对精准。为了永久维持时间的正确性,必须安装由 ntp 软件包提供的 NPT 服务器。缺省的配置方式系与 pool.ntp.org 同步,且回应本地网络的请求。可以编辑 /etc/ntp.conf 文件改变原来的配置,NTP 服务器依照该文件的内容而变更。若有多个服务器,最好有一个本地时间服务器与公共的服务器同步,并做为本地网络其他服务器的同步的依据。

进一步 GPS 模块与其他时间来源

如果网络对时间同步极为敏感,最好在服务器安装 GPS 模块 (which will use the time from GPS satellites) 或 DCF-77 模块 (which will sync time with the atomic clock near Frankfurt, Germany)。在这种情况下,NTP 服务器的配置就有点复杂,必须参照文档办理。

8.9.3. 轮转日志档

日志档成长的速度很快,需要典藏它。最常的做法是循环典藏:只保留最新的 X 部分。logrotate 是负责循环的程序,根据 /etc/logrotate.conf 文件内的配置,把日志档保存在 /etc/logrotate.d/ 文件夹内。管理者可以修改该等文件,修改 Debian 缺省的循环政策。logrotate(1) 手册页面描述该配置可用的选项。可以在循环的过程中,增加典藏的文件数,或把文件移至指定的文件夹而不是删除它们。也可以电子邮件方式寄到别的地方。

logrotate 程序每日运行 cron 调度的要求 (详情见 第 9.7 节 “使用 cronatd运行计划任务”)。

8.9.4. 共享管理员权限

数个管理者共同在同个服务器工作。共用同个根用户密码不是好主意,匿名引发的误用很麻烦。解决方案是使用 sudo 程序,允许用户对特定命令拥有专门的权力。在多数情况下,sudo 允许受信任的用户以根的权限运行命令。用户只需运行 sudo *command* 并以个人的密码通过认证。

安装的时候,sudo 软件包把完整的 root 权限授权给 sudo Unix 群组。管理者必须使用 visudo 命令授予其他权利,该命令允许用户修改 /etc/sudoers 配置档 (当然,必须启用 vi 编辑器,或在 EDITOR 环境变量指定的编辑器)。添加一列 *username* ALL=(ALL) ALL 就能允许该用户以 root 的授权运行命令。

还有较复杂的配置,只允许特定用户运行部分命令。详情在 sudoers(5) 手册页面。

8.9.5. 挂载点清单

基本 挂载与卸载

在 Debian 这类的 Unix-like 系统里,文件以树状的文件夹阶层组织。/ 文件夹称为 “根文件夹”;其他的文件夹都是此根文件夹的次文件夹。“挂载” 是把周边设备 (通常是磁盘) 纳入系统文件树的作业。如果以其他磁盘保存用户个人的数据,将 “挂载” 于 /home/ 文件夹。根文件系统由核心永远挂载于根;其他设备则稍后再透过启动顺序或以 mount 命令挂载进来。

有些移动式设备在链接时系统自动挂载,尤其在 GNOME、KDE 或其他图形桌面环境。有些情况就需要用户手动挂载。同样的,也需要卸载 (从文件树移除)。标准的用户权限不允许运行挂载 mount 与卸载 umount 命令。只有管理者才能够设置 user 选项于 /etc/fstab 文件内,授权用户运行该等命令 (独立于每个挂载点)。

mount 命令可以直接使用不需参数 (列出所有已挂载的文件系统)。以下参数为挂载或卸载设备所必需。完整的参数,请参见对应的手册页面,mount(8) 与 umount(8)。单纯个案的语法也简单:例如,挂载使用 ex3 文件系统的 /dev/sdc1 分区入 /mnt/tmp/ 文件夹时,需运行 mount -t ext3 /dev/sdc1 /mnt/tmp/ 命令。

/etc/fstab 文件列出所有开机自动挂载或手动挂载的移动保存设备。每个挂载点由一列文本描述,包括若干空格区隔的字段:

  • 待挂载的设备:可以是本地分区 (硬盘、CD-ROM) 或远程的文件系统 (如 NFS)。

    此字段通常以文件系统的 ID 取代 (可以用 blkid **`device`**) 前置及 UUID=。此种方式可以应付添加或移除磁盘设备名称的情况,或者以其他顺序侦测到的磁盘。

  • 挂载点:这是把设备、远程系统,或分区挂载于本地文件系统的位置。

  • 类型:这个字段定义挂载设备使用的文件系统。ext4ext3vfatntfsbtrfsxfs 等。

    基本 NFS,网络文件系统

    NFS 是一种 Linux 环境下的网络文件系统,把远程的文件以透明方式纳入本地的文件系统内。

    知名的文件系统清单在 mount(8) 手册页面。特殊值 swap 系供交换分区使用;特殊值 auto 告诉mount 程序自动侦测文件系统 (对读卡机与 USB 磁盘机特别有用,因为它们可能使用不同的文件系统);

  • 选项:依文件系统的不同,而有多种选项,详情见 mount 手册页面。最常用的是

    • rwro,表示该设备挂载后可以读/写,或只有读取的权限。

    • noauto 开机时关闭自动挂载。

    • nofail 允许在启动时处理设备,即使该设备不存在。确认启动时,该外置磁盘机可能未插入,因为 systemd 将确认所有挂载点在启动完成前必须自动挂载。可将此与 x-systemd.device-timeout=5s 并用,告诉 systemd 不必等 5 秒以上的时间,直接进入下个作业阶段 (见 systemd.mount(5))。

    • user 授权所有的用户均可挂载此文件系统 (若无此选项,则只有根用户才有此权限)。

    • defaults 表示缺省的选项群组为:rwsuiddevexecautonouserasync,使用了 defaults 之后,还可以用 nosuid 命令、nodev 及其他类似的命令,中止 suiddev 等作用。加入 user 选项可再启用它,因为 defaults 包括 nouser

  • 备份:此字段几乎都设为 0。当它是 1 时,告诉 dump 工具将备份有数据的分区。

  • 检查顺序:最后一个字段告知系统在启动时,或其他时机,检查文件系统的完整性。若设为 0,则不检查。根文件系统的值为 1,其他固定文件系统的值为 2

例 8.5. 范例 /etc/fstab 文件

  1. # /etc/fstab: static file system information.
  2. #
  3. # <file system> <mount point> <type> <options> <dump> <pass>
  4. proc /proc proc defaults 0 0
  5. # / was on /dev/sda1 during installation
  6. UUID=c964222e-6af1-4985-be04-19d7c764d0a7 / ext3 errors=remount-ro 0 1
  7. # swap was on /dev/sda5 during installation
  8. UUID=ee880013-0f63-4251-b5c6-b771f53bd90e none swap sw 0 0
  9. /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0
  10. /dev/fd0 /media/floppy auto rw,user,noauto 0 0
  11. arrakis:/shared /shared nfs defaults 0 0

此例的最后一个条目对应于网络文件系统 (NFS):/shared/ 文件夹位于 arrakis 服务器挂载于本地机器的 /shared//etc/fstab 文件格式位于 fstab(5) 手册页面。

下一步 自动挂载

am-utils 软件包提供 amd 自动加载公用程序,使月手者近用其惯用的挂载点时,可在需要时挂载移动式媒体。无法在不用时自动卸载该等设备。

还有其他自动挂载公用程序,诸如 automount 位在 autofs 软件包中。

与 GNOME、KDE 及其他图形桌面环境一起工作的 udisks,在链接移动媒体时,也可自动挂载。

8.9.6. locate 与 updatedb

可以用 locate 命令找寻已知名称的文件。几乎即时送回结果,因为它搜索的数据库保存系统内所有文件的位置;此数据库由 updatedb 命令每日更新。locate 命令还有其他用途,Debian 选择 mlocate 做为其标准系统。

mlocate 很聪明,只送回该命令用户能够近用的文件,不会显示系统内其他符合条件的文件 (因为它以根权限运行 updatedb 命令)。为了提供额外的安全保护,管理者可以使用 PRUNEDPATHS 位于 /etc/updatedb.conf,排除已经索引的其他文件夹。