FreeBSD 中文手册
FreeBSD 中文社区
  • FreeBSD 中文手册
  • 编辑日志
  • 译者说明
  • FreeBSD 中文手册
  • 概述
  • 前言
    • 致读者
    • 第四版
    • 第三版
    • 第二版(2004)
    • 第一版(2001)
    • 本书的组织结构
    • 本书中使用的一些约定
    • 致谢
  • 第一部分:快速开始
  • 第1章 简介
    • 1.1.概述
    • 1.2.欢迎来到 FreeBSD!
    • 1.3.关于 FreeBSD 项目
  • 第2章 安装 FreeBSD
    • 2.1.概述
    • 2.2.最低硬件要求
    • 2.3.安装前的准备工作
    • 2.4.开始安装
    • 2.5.使用 bsdinstall
    • 2.6.分配磁盘空间
    • 2.7.获取安装文件
    • 2.8.账户、时区、服务和安全
    • 2.9.故障排除
    • 2.10.使用 Live CD
  • 第3章 FreeBSD 基础
    • 3.1.概述
    • 3.2.虚拟控制台和终端
    • 3.3.用户和基本账户管理
    • 3.4.权限
    • 3.5.目录结构
    • 3.6.磁盘结构
    • 3.7.文件系统的挂载与卸载
    • 3.8.进程和守护进程
    • 3.9.Shell
    • 3.10.文本编辑器
    • 3.11.设备和设备节点
    • 3.12.手册页
  • 第4章 安装应用程序:软件包和 Ports
    • 4.1.概述
    • 4.2.软件安装的概述
    • 4.3.寻找所需的应用程序
    • 4.4.使用 pkg 管理二进制包
    • 4.5.使用 Ports
    • 4.6.使用 Poudriere 构建软件包
    • 4.7.安装后的注意事项
    • 4.8.如何处理损坏的 port
  • 第5章 X Window 系统
    • 5.1.概述
    • 5.2.安装 Xorg
    • 5.3.显卡驱动
    • 5.4.Xorg 配置
    • 5.5.在 X11 中使用字体
  • 第6章 FreeBSD 中的 Wayland
    • 6.1.简介
    • 6.2.Wayland 概述
    • 6.3.Wayfire 混成器
    • 6.4.Hikari 混成器
    • 6.5.Sway 混成器
    • 6.6.使用 Xwayland
    • 6.7.使用 VNC 进行远程连接
    • 6.8.Wayland 登录管理器
    • 6.9.实用工具
  • 第7章 网络
    • 7.1.概述
    • 7.2.设置网络
    • 7.3.有线网络
    • 7.4.无线网络
    • 7.5.主机名
    • 7.6.DNS
    • 7.7.故障排除
  • 第二部分:常见任务
  • 第8章 桌面环境
    • 8.1.概述
    • 8.2.桌面环境
    • 8.3.浏览器
    • 8.4.开发工具
    • 8.5.桌面办公应用
    • 8.6.文档阅读器
    • 8.7.财务
  • 第9章 多媒体
    • 9.1.概述
    • 9.2.设置声卡
    • 9.3.音频播放器
    • 9.4.视频播放器
    • 9.5.视频会议
    • 9.6.图像扫描仪
  • 第10章 配置 FreeBSD 内核
    • 10.1.概述
    • 10.2.为什么要构建定制内核
    • 10.3.浏览系统硬件
    • 10.4.配置文件
    • 10.5.构建并安装定制内核
    • 10.6.如果发生了错误
  • 第11章 打印
    • 11.1.快速入门
    • 11.2.连接打印机
    • 11.3.常见的页面描述语言(PDL)
    • 11.4.直接打印
    • 11.5.LPD(行式打印机程序)
    • 11.6.其他打印系统
  • 第12章 Linux 二进制兼容层
    • 12.1.概述
    • 12.2.配置 Linux 二进制兼容层
    • 12.3.Linux 用户空间
    • 12.4.高级主题
  • 第13章 WINE
    • 13.1.概述
    • 13.2.WINE 概述和概念
    • 13.3.在 FreeBSD 上安装 WINE
    • 13.4.在 FreeBSD 上运行第一个 WINE 程序
    • 13.5.配置 WINE 安装程序
    • 13.6.WINE 图形化用户管理界面
    • 13.7.多用户 FreeBSD 与 WINE
    • 13.8.FreeBSD 上的 WINE 常见问题
  • 第三部分:系统管理
  • 第14章 配置与优化
    • 14.1.概述
    • 14.2.配置文件
    • 14.3.管理 FreeBSD 中的服务
    • 14.4.Cron 和 Periodic
    • 14.5.配置系统日志
    • 14.6.电源和资源管理
    • 14.7.添加交换空间
  • 第15章 FreeBSD 的引导过程
    • 15.1.概述
    • 15.2.FreeBSD 的引导过程
    • 15.3.Device Hints
    • 15.4.关机流程
  • 第16章 安全
    • 16.1.概述
    • 16.2.简介
    • 16.3.账户安全
    • 16.4.入侵检测系统(IDS)
    • 16.5.安全等级
    • 16.6.文件标志位
    • 16.7.OpenSSH
    • 16.8.OpenSSL
    • 16.9.Kerberos
    • 16.10.TCP 封装器(TCP Wrapper)
    • 16.11.访问控制列表(ACL)
    • 16.12.Capsicum
    • 16.13.进程记账
    • 16.14.资源限制
    • 16.15.监控第三方安全问题
    • 16.16.FreeBSD 安全公告
  • 第17章 jail 与容器
    • 17.1.概述
    • 17.2.jail 的类型
    • 17.3.主机配置
    • 17.4.传统 jail(厚 jail)
    • 17.5.瘦 jail
    • 17.6.管理 jail
    • 17.7.更新 jail
    • 17.8.jail 资源限制
    • 17.9.jail 管理器与容器
  • 第18章 强制访问控制
    • 18.1.概述
    • 18.2.关键术语
    • 18.3.了解 MAC 标签
    • 18.4.规划安全配置
    • 18.5.可用的 MAC 策略
    • 18.6.用户锁定
    • 18.7.MAC Jail 中的 Nagios
    • 18.8.MAC 框架的故障排除
  • 第19章 安全事件审计
    • 19.1.概述
    • 19.2.关键术语
    • 19.3.审计配置
    • 19.4.使用审计跟踪
  • 第20章 存储
    • 20.1.概述
    • 20.2.添加磁盘
    • 20.3.调整和增加磁盘大小
    • 20.4.USB 存储设备
    • 20.5.创建和使用 CD
    • 20.6.创建和使用 DVD
    • 20.7.创建和使用软盘
    • 20.8.备份的基础知识
    • 20.9.内存盘
    • 20.10.文件系统快照
    • 20.11.磁盘配额
    • 20.12.加密磁盘分区
    • 20.13.加密交换分区
    • 20.14.高可用性存储(HAST)
  • 第21章 GEOM: 模块化磁盘转换框架
    • 21.1.概述
    • 21.2.RAID0——条带
    • 21.3.RAID1——镜像
    • 21.4.RAID3——带有专用奇偶校验的字节级条带
    • 21.5.软件 RAID 设备
    • 21.6.GEOM Gate 网络设备
    • 21.7.为磁盘设备添加卷标
    • 21.8.通过 GEOM 实现 UFS 日志
  • 第22章 Z 文件系统(ZFS)
    • 22.1.是什么使 ZFS 与众不同
    • 22.2.快速入门指南
    • 22.3.zpool 管理
    • 22.4.zfs 管理
    • 22.5.委托管理
    • 22.6.高级主题
    • 22.7.更多资源
    • 22.8.ZFS 特性和术语
  • 第23章 其他文件系统
    • 23.1.概述
    • 23.2.Linux® 文件系统
    • 23.3.Windows® 文件系统
    • 23.4.MacOS® 文件系统
  • 第24章 虚拟化
    • 24.1.概述
    • 24.2.使用 macOS® 上的 Parallels Desktop 安装 FreeBSD
    • 24.3.使用 macOS® 上的 VMware Fusion 安装 FreeBSD
    • 24.4.使用 VirtualBox™ 安装 FreeBSD
    • 24.5.在 FreeBSD 上安装 VirtualBox™
    • 24.6.使用 FreeBSD 上的 QEMU 虚拟化
    • 24.7.使用 FreeBSD 上的 bhyve 虚拟机
    • 24.8.基于 FreeBSD 的 Xen™ 虚拟机
  • 第25章 本地化——i18n/L10n 的使用和设置
    • 25.1.概述
    • 25.2.使用本地化
    • 25.3.寻找 i18n 应用程序
    • 25.4.特定语言的区域配置
  • 第26章 FreeBSD 更新与升级
    • 26.1.概述
    • 26.2.更新 FreeBSD
    • 26.3.更新 Bootcode
    • 26.4.更新文档
    • 26.5.追踪开发分支
    • 26.6.从源代码更新 FreeBSD
    • 26.7.多台机器的追踪
    • 26.8.在非 FreeBSD 主机上进行构建
  • 第27章 DTrace
    • 27.1.概述
    • 27.2.实现上的差异
    • 27.3.开启 DTrace 支持
    • 27.4.启用内核外部模块 DTrace
    • 27.5.使用 DTrace
  • 第28章 USB 设备模式/USB OTG
    • 28.1.概述
    • 28.2.USB 虚拟串行端口
    • 28.3.USB 设备模式网络接口
    • 28.4.USB 虚拟存储设备
  • 第四部分:网络通讯
  • 第29章 串行通信
    • 29.1.概述
    • 29.2.串行术语和硬件
    • 29.3.终端
    • 29.4.拨入服务
    • 29.5.拨出服务
    • 29.6.设置串行控制台
  • 第30章 PPP
    • 30.1.概述
    • 30.2.配置 PPP
    • 30.3.PPP 连接的故障排除
    • 30.4.使用以太网 PPP(PPPoE)
    • 30.5.使用 ATM 上的 PPP (PPPoA)
  • 第31章 电子邮件
    • 31.1.概述
    • 31.2.邮件组件
    • 31.3.DragonFly 邮件代理(DMA)
    • 31.4.Sendmail
    • 31.5.修改邮件传输代理
    • 31.6.邮件用户代理
    • 31.7.高级主题
  • 第32章 网络服务器
    • 32.1.概述
    • 32.2.inetd 超级服务器
    • 32.3.网络文件系统(NFS)
    • 32.4.网络信息系统(NIS)
    • 32.5.轻型目录访问协议(LDAP)
    • 32.6.动态主机设置协议(DHCP)
    • 32.7.域名系统(DNS)
    • 32.8.零配置网络(mDNS/DNS-SD)
    • 32.9.Apache HTTP 服务器
    • 32.10.文件传输协议(FTP)
    • 32.11.用于 Microsoft® Windows® 客户端的文件和打印服务(Samba)
    • 32.12.用 NTP 进行时钟同步
    • 32.13.iSCSI target 和 initiator 的配置
  • 第33章 防火墙
    • 33.1.概述
    • 33.2.防火墙的概念
    • 33.3.PF
    • 33.4.IPFW
    • 33.5.IPFILTER(IPF)
    • 33.6.Blacklistd
  • 第34章 高级网络
    • 34.1.概述
    • 34.2.网关和路由
    • 34.3.虚拟主机
    • 34.4.无线高级身份验证
    • 34.5.无线自组织(Ad-hoc)模式
    • 34.6.USB 网络共享
    • 34.7.蓝牙
    • 34.8.桥接
    • 34.9.链路聚合与故障转移
    • 34.10.使用 PXE 进行无盘操作
    • 34.11.共用地址冗余协议(CARP)
    • 34.12.VLAN
  • 第五部分:附录
  • 附录 A.获取 FreeBSD
    • A.1.镜像站
    • A.2.使用 Git
    • A.3.使用 Subversion
    • A.4.光盘
  • 附录 B.书目
    • B.1.FreeBSD 相关书籍
    • B.2.安全性参考文献
    • B.3.UNIX 历史
    • B.4.期刊与杂志
  • 附录 C.网络资源
    • C.1.网站
    • C.2.邮件列表
    • C.3.Usenet 新闻组
  • 附录 D.OpenPGP 密钥
    • D.1.官方成员
  • 术语表
  • 后记
由 GitBook 提供支持

FreeBSD 中文社区

在本页
  • 32.4.1. NIS 术语与进程
  • 32.4.2. 机器类型
  • 32.4.3. 规划考虑
  • 32.4.3.1. 选择 NIS 域名
  • 32.4.3.2. 物理服务器要求
  • 32.4.4. 配置 NIS 主服务器
  • 32.4.4.1. 初始化 NIS 映射
  • 32.4.4.2. 添加新用户
  • 32.4.5. 设置 NIS 从服务器
  • 32.4.6. 设置 NIS 客户端
  • 32.4.7. NIS 安全性
  • 32.4.7.1. 屏蔽某些用户
  • 32.4.8. 使用 Netgroups
  • 32.4.9. 密码格式

这有帮助吗?

在GitHub上编辑
导出为 PDF
  1. 第32章 网络服务器

32.4.网络信息系统(NIS)

网络信息系统(NIS)旨在集中管理类似 UNIX® 的系统,如 Solaris™、HP-UX、AIX®、Linux、NetBSD、OpenBSD 和 FreeBSD。NIS 最初被称为 Yellow Pages,但由于商标问题,名称发生了更改。这也是 NIS 命令以 yp 开头的原因。

NIS 是一个基于远程过程调用(RPC)的客户端/服务器系统,允许在 NIS 域内的一组机器共享一组公共的配置文件。这样,系统管理员只需通过最少的配置数据即可设置 NIS 客户端系统,并能从一个位置添加、删除或修改配置数据。

FreeBSD 使用 NIS 协议的版本 2。

32.4.1. NIS 术语与进程

表 28.1 总结了 NIS 使用的术语和重要进程:

表1 NIS 术语

术语

描述

NIS 域名

NIS 服务器和客户端共享一个 NIS 域名。通常,这个名称与 DNS 无关。

该服务启用 RPC,必须运行才能启动 NIS 服务器或作为 NIS 客户端运行。

该服务将 NIS 客户端绑定到其 NIS 服务器。它会使用 NIS 域名并通过 RPC 连接到服务器。它是 NIS 环境中客户端/服务器通信的核心。如果该服务在客户端机器上未运行,则无法访问 NIS 服务器。

这是 NIS 服务器的进程。如果此服务停止运行,服务器将无法响应 NIS 请求,因此希望有一个从服务器接管。一些非 FreeBSD 客户端可能不会尝试使用从服务器重新连接,可能需要在这些客户端上重启 ypbind 进程。

这个进程只在 NIS 主服务器上运行。该守护进程允许 NIS 客户端更改其 NIS 密码。如果该守护进程没有运行,用户将不得不登录到 NIS 主服务器并在那里更改密码。

32.4.2. 机器类型

在 NIS 环境中有三种类型的主机:

  • NIS 主服务器 该服务器作为主机配置文件信息的中央存储库,维护所有 NIS 客户端使用的文件的权威副本。passwd、group 以及其他各种文件存储在主服务器上。虽然一台机器可以作为多个 NIS 域的 NIS 主服务器,但本章不涉及这种配置,假设是一个相对小规模的 NIS 环境。

  • NIS 从服务器 NIS 从服务器维护 NIS 主服务器数据文件的副本,以提供冗余。从服务器还帮助平衡主服务器的负载,因为 NIS 客户端始终连接到响应最快的 NIS 服务器。

  • NIS 客户端 NIS 客户端在登录时通过 NIS 服务器进行身份验证。

许多文件中的信息可以通过 NIS 共享。master.passwd、group 和 hosts 文件通常通过 NIS 共享。每当客户端上的进程需要在这些文件中本地找到的信息时,它会向绑定的 NIS 服务器发出查询。

32.4.3. 规划考虑

本节描述了一个示例 NIS 环境,该环境包含 15 台 FreeBSD 机器,没有集中管理点。每台机器都有自己的 /etc/passwd 和 /etc/master.passwd。这些文件仅通过手动干预保持同步。目前,当需要向实验室添加用户时,必须在所有 15 台机器上重复此过程。

实验室的配置如下:

机器名称
IP 地址
机器角色

ellington

10.0.0.2

NIS 主服务器

coltrane

10.0.0.3

NIS 从服务器

basie

10.0.0.4

教职工工作站

bird

10.0.0.5

客户端机器

cli[1-11]

10.0.0.[6-17]

其他客户端机器

如果这是第一次开发 NIS 方案,则应提前进行充分的规划。无论网络规模如何,在规划过程中需要做出几个决策。

32.4.3.1. 选择 NIS 域名

当客户端广播其请求时,它会包括其所属的 NIS 域名。这使得同一网络上的多个服务器能够判断哪个服务器应当响应哪个请求。可以将 NIS 域名看作是一个主机组的名称。

一些组织选择使用其互联网域名作为 NIS 域名。由于这可能在调试网络问题时引起混淆,因此不推荐这样做。NIS 域名应在网络中唯一,且最好能描述它所代表的主机组。例如,Acme Inc. 的艺术部门可能使用 "acme-art" 作为 NIS 域名。此示例将使用域名 test-domain。

然而,一些非 FreeBSD 操作系统要求 NIS 域名必须与互联网域名相同。如果网络中有一台或多台机器有此限制,则 必须 使用互联网域名作为 NIS 域名。

32.4.3.2. 物理服务器要求

在选择用作 NIS 服务器的机器时,有几个事项需要考虑。由于 NIS 客户端依赖于服务器的可用性,因此应选择不频繁重启的机器。理想情况下,NIS 服务器应该是一台专门用于 NIS 服务的独立机器。如果网络的使用量不大,可以将 NIS 服务器放在一台运行其他服务的机器上。然而,如果 NIS 服务器不可用,将会对所有 NIS 客户端产生不利影响。

32.4.4. 配置 NIS 主服务器

所有 NIS 文件的标准副本存储在主服务器上。用于存储信息的数据库称为 NIS 映射。在 FreeBSD 中,这些映射存储在 /var/yp/[domainname] 目录下,其中 [domainname] 是 NIS 域名。由于支持多个域,因此可以为每个域拥有多个目录,每个域将拥有自己独立的映射集。

设置 NIS 主服务器可以相对直接,具体取决于环境需求。由于 FreeBSD 提供了内置的 NIS 支持,因此只需通过将以下行添加到 /etc/rc.conf 来启用它:

nisdomainname="test-domain"	①
nis_server_enable="YES"		②
nis_yppasswdd_enable="YES"	③
  • ① 此行将 NIS 域名设置为 test-domain。

  • ② 该行自动在系统启动时启动 NIS 服务器进程。

在多服务器域中,服务器机器也是 NIS 客户端时,需要格外小心。通常建议强制服务器绑定到自己,而不是允许它们广播绑定请求并可能彼此绑定。如果一台服务器出现故障且其他服务器依赖于它,可能会导致奇怪的故障模式。最终,所有客户端将超时并尝试绑定到其他服务器,但涉及的延迟可能相当长,且故障模式仍然存在,因为服务器可能会再次彼此绑定。

可以通过在 /etc/rc.conf 中添加以下行,强制同时作为客户端的服务器绑定到特定的服务器:

nis_client_enable="YES"		①		
nis_client_flags="-S test-domain,server"	②
  • ① 启用客户端相关的功能。

  • ② 此行将 NIS 域名设置为 test-domain 并绑定到自身。

# service ypserv start

32.4.4.1. 初始化 NIS 映射

NIS 映射是从 NIS 主服务器上的 /etc 配置文件生成的,唯一的例外是 /etc/master.passwd。这样做是为了防止将密码传播到 NIS 域中的所有服务器。因此,在初始化 NIS 映射之前,先配置主密码文件:

# cp /etc/master.passwd /var/yp/master.passwd
# cd /var/yp
# vi master.passwd

建议删除所有系统账户条目以及不需要传播到 NIS 客户端的用户账户,如 root 和其他任何管理员账户。

注意

确保 /var/yp/master.passwd 文件对组或其他用户不可读,将其权限设置为 600。

ellington# ypinit -m test-domain
Server Type: MASTER Domain: test-domain
Creating an YP server will require that you answer a few questions.
Questions will all be asked at the beginning of the procedure.
Do you want this procedure to quit on non-fatal errors? [y/n: n] n
Ok, please remember to go back and redo manually whatever fails.
If not, something might not work.
At this point, we have to construct a list of this domains YP servers.
rod.darktech.org is already known as master server.
Please continue to add any slave servers, one per line. When you are
done with the list, type a <control D>.
master server   :  ellington
next host to add:  coltrane
next host to add:  ^D
The current list of NIS servers looks like this:
ellington
coltrane
Is this correct?  [y/n: y] y

[..output from map generation..]

NIS Map update completed.
ellington has been setup as an YP master server without any errors.

这将从 /var/yp/Makefile.dist 创建 /var/yp/Makefile。默认情况下,此文件假定环境只有一个 NIS 服务器,并且只有 FreeBSD 客户端。由于 test-domain 有一个从服务器,因此请在 /var/yp/Makefile 中编辑此行,将其注释掉 (#):

NOPUSH = "True"

32.4.4.2. 添加新用户

每当创建一个新用户时,必须将用户账户添加到主 NIS 服务器,并重建 NIS 映射。在此操作完成之前,新用户只能在 NIS 主服务器上登录。例如,要将新用户 jsmith 添加到 test-domain 域中,请在主服务器上运行以下命令:

# pw useradd jsmith
# cd /var/yp
# make test-domain

也可以使用 adduser jsmith 来代替 pw useradd jsmith 添加用户。

32.4.5. 设置 NIS 从服务器

要设置 NIS 从服务器,请登录到从服务器并像设置主服务器一样编辑 /etc/rc.conf。不要生成任何 NIS 映射,因为这些映射已经存在于主服务器上。在从服务器上运行 ypinit 时,使用 -s(表示从服务器)而不是 -m(表示主服务器)。此选项需要指定 NIS 主服务器的名称,以及域名,如下例所示:

coltrane# ypinit -s ellington test-domain

Server Type: SLAVE Domain: test-domain Master: ellington

Creating an YP server will require that you answer a few questions.
Questions will all be asked at the beginning of the procedure.

Do you want this procedure to quit on non-fatal errors? [y/n: n]  n

Ok, please remember to go back and redo manually whatever fails.
If not, something might not work.
There will be no further questions. The remainder of the procedure
should take a few minutes, to copy the databases from ellington.
Transferring netgroup...
ypxfr: Exiting: Map successfully transferred
Transferring netgroup.byuser...
ypxfr: Exiting: Map successfully transferred
Transferring netgroup.byhost...
ypxfr: Exiting: Map successfully transferred
Transferring master.passwd.byuid...
ypxfr: Exiting: Map successfully transferred
Transferring passwd.byuid...
ypxfr: Exiting: Map successfully transferred
Transferring passwd.byname...
ypxfr: Exiting: Map successfully transferred
Transferring group.bygid...
ypxfr: Exiting: Map successfully transferred
Transferring group.byname...
ypxfr: Exiting: Map successfully transferred
Transferring services.byname...
ypxfr: Exiting: Map successfully transferred
Transferring rpc.bynumber...
ypxfr: Exiting: Map successfully transferred
Transferring rpc.byname...
ypxfr: Exiting: Map successfully transferred
Transferring protocols.byname...
ypxfr: Exiting: Map successfully transferred
Transferring master.passwd.byname...
ypxfr: Exiting: Map successfully transferred
Transferring networks.byname...
ypxfr: Exiting: Map successfully transferred
Transferring networks.byaddr...
ypxfr: Exiting: Map successfully transferred
Transferring netid.byname...
ypxfr: Exiting: Map successfully transferred
Transferring hosts.byaddr...
ypxfr: Exiting: Map successfully transferred
Transferring protocols.bynumber...
ypxfr: Exiting: Map successfully transferred
Transferring ypservers...
ypxfr: Exiting: Map successfully transferred
Transferring hosts.byname...
ypxfr: Exiting: Map successfully transferred

coltrane has been setup as an YP slave server without any errors.
Remember to update map ypservers on ellington.

这将在从服务器上生成一个名为 /var/yp/test-domain 的目录,其中包含 NIS 主服务器的映射副本。通过在每个从服务器的 /etc/crontab 文件中添加以下条目,可以强制从服务器与主服务器同步映射:

20      *       *       *       *       root   /usr/libexec/ypxfr passwd.byname
21      *       *       *       *       root   /usr/libexec/ypxfr passwd.byuid

这些条目不是强制性的,因为主服务器会自动尝试将任何映射更改推送到其从服务器。然而,由于客户端可能依赖从服务器提供正确的密码信息,因此建议强制频繁更新密码映射。这对于繁忙的网络尤其重要,因为映射更新可能无法始终完成。

配置完成后,在从服务器上运行 /etc/netstart 以启动 NIS 服务。

32.4.6. 设置 NIS 客户端

要配置 FreeBSD 机器为 NIS 客户端,请按照以下步骤操作:

   nisdomainname="test-domain"
   nis_client_enable="YES"
  1. 要从 NIS 服务器导入所有可能的密码条目,请使用 vipw 删除 /etc/master.passwd 中的所有用户账户,除了一个。删除账户时,请记住至少保留一个本地账户,并且该账户应为 wheel 组成员。如果出现 NIS 问题,可以使用此本地账户远程登录,成为超级用户并修复问题。在保存编辑之前,将以下行添加到文件末尾:

   +:::::::::
  1. 要从 NIS 服务器导入所有可能的组条目,请在 /etc/group 中添加以下行:

   +:*::

要立即启动 NIS 客户端,作为超级用户执行以下命令:

# /etc/netstart
# service ypbind start

完成这些步骤后,在客户端运行 ypcat passwd 应显示服务器的 passwd 映射。

32.4.7. NIS 安全性

# allow connections from local host -- mandatory
127.0.0.1     255.255.255.255
# allow connections from any host
# on the 192.168.128.0 network
192.168.128.0 255.255.255.0
# allow connections from any host
# between 10.0.0.0 to 10.0.15.255
# this includes the machines in the testlab
10.0.0.0      255.255.240.0

使用 securenets 的服务器可能会无法为具有古老 TCP/IP 实现的合法 NIS 客户端提供服务。这些实现中的一些会在进行广播时将所有主机位设置为零,或在计算广播地址时未遵守子网掩码。虽然一些问题可以通过更改客户端配置来修复,但其他问题可能迫使这些客户端系统退役,或者放弃使用 securenets。

使用 TCP Wrapper 会增加 NIS 服务器的延迟。额外的延迟可能足够长,以致于客户端程序在繁忙的网络上,尤其是在 NIS 服务器响应缓慢时,出现超时。如果一个或多个客户端遭遇延迟,可以将这些客户端转换为 NIS 从服务器,并强制它们绑定到自己。

32.4.7.1. 屏蔽某些用户

在这个例子中,basie 系统是 NIS 域中的一台教职工工作站。主 NIS 服务器上的 passwd 映射包含了教职工和学生的账户。本节演示了如何允许教职工在此系统上登录,同时拒绝学生的登录。

为了防止指定的用户登录系统,即使他们存在于 NIS 数据库中,可以使用 vipw 在客户端的 /etc/master.passwd 文件末尾添加 -<用户名>,其中 用户名 是要禁止登录的用户的用户名。被屏蔽的用户行必须出现在允许 NIS 用户的 + 行之前。在这个例子中,bill 被禁止登录 basie:

basie# cat /etc/master.passwd
root:[password]:0:0::0:0:The super-user:/root:/bin/csh
toor:[password]:0:0::0:0:The other super-user:/root:/bin/sh
daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5::0:0:System &:/:/usr/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/usr/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin
games:*:7:13::0:0:Games pseudo-user:/usr/games:/usr/sbin/nologin
news:*:8:8::0:0:News Subsystem:/:/usr/sbin/nologin
man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/usr/sbin/nologin
bind:*:53:53::0:0:Bind Sandbox:/:/usr/sbin/nologin
uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico
xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/usr/sbin/nologin
pop:*:68:6::0:0:Post Office Owner:/nonexistent:/usr/sbin/nologin
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin
-bill:::::::::
+:::::::::

basie#

32.4.8. 使用 Netgroups

在较大的网络中,将特定用户阻止登录到单个系统变得不可扩展,并且很快就会失去 NIS 的主要优势:集中管理。

Netgroups 的开发是为了处理具有数百个用户和机器的大型复杂网络。它们的使用类似于 UNIX® 组,主要区别在于没有数字 ID,并且可以通过包括用户账户和其他 netgroups 来定义一个 netgroup。

为了扩展本章中使用的示例,NIS 域将扩展以添加表格 28.2 和 28.3 中所示的用户和系统:

表 2. 其他用户

用户名
描述

alpha, beta

IT 部门员工

charlie, delta

IT 部门学徒

echo, foxtrott, golf, …

员工

able, baker, …

实习生

表 3. 其他系统

机器名称
描述

war, death, famine, pollution

只有 IT 员工可以登录这些服务器。

pride, greed, envy, wrath, lust, sloth

所有 IT 部门成员都可以登录这些服务器。

one, two, three, four, …

员工使用的普通工作站。

trashcan

一台非常旧的机器,没有任何关键数据。甚至实习生也可以使用这台系统。

使用 netgroups 配置这个场景时,每个用户都被分配到一个或多个 netgroups,然后允许或禁止所有 netgroup 成员登录。当添加新机器时,必须为所有 netgroups 定义登录限制。当添加新用户时,必须将账户添加到一个或多个 netgroups。如果 NIS 设置计划得当,只需要修改一个中央配置文件,就可以授予或拒绝对机器的访问权限。

第一步是初始化 NIS 的 netgroup 映射。在 FreeBSD 中,默认情况下不会创建此映射。在 NIS 主服务器上,使用编辑器创建一个名为 /var/yp/netgroup 的映射。

此示例创建了四个 netgroups,分别表示 IT 员工、IT 学徒、员工和实习生:

IT_EMP  (,alpha,test-domain)    (,beta,test-domain)
IT_APP  (,charlie,test-domain)  (,delta,test-domain)
USERS   (,echo,test-domain)     (,foxtrott,test-domain) \
        (,golf,test-domain)
INTERNS (,able,test-domain)     (,baker,test-domain)

每个条目配置一个 netgroup。条目的第一列是 netgroup 的名称。每组括号表示一个或多个用户组或另一个 netgroup 的名称。在指定用户时,每组中的三个由逗号分隔的字段表示:

  1. 该字段表示用户有效的主机名称。如果未指定主机名,则该条目对所有主机有效。

  2. 该账户所属的用户名。

  3. 该账户的 NIS 域。账户可以从其他 NIS 域导入到一个 netgroup 中。

netgroup 名称不应超过 8 个字符。名称区分大小写,使用大写字母作为 netgroup 名称是区分用户、机器和 netgroup 名称的一个简单方法。

一些非 FreeBSD 的 NIS 客户端无法处理包含超过 15 个条目的 netgroups。可以通过创建几个包含 15 个或更少用户的子 netgroups,并使用这些子 netgroups 创建一个真实的 netgroup 来绕过这一限制,如下所示:

BIGGRP1  (,joe1,domain)  (,joe2,domain)  (,joe3,domain) [...]
BIGGRP2  (,joe16,domain)  (,joe17,domain) [...]
BIGGRP3  (,joe31,domain)  (,joe32,domain)
BIGGROUP  BIGGRP1 BIGGRP2 BIGGRP3

如果一个 netgroup 中有超过 225 个用户(15 × 15),请重复此过程。

要激活并分发新的 NIS 映射:

ellington# cd /var/yp
ellington# make
ellington% ypcat -k netgroup
ellington% ypcat -k netgroup.byhost
ellington% ypcat -k netgroup.byuser

第一个命令的输出应类似于 /var/yp/netgroup 的内容。第二个命令只有在创建了特定于主机的 netgroups 时才会产生输出。第三个命令用于获取某个用户的 netgroup 列表。

+:::::::::

为:

+@IT_EMP:::::::::

这表示仅在 netgroup IT_EMP 中定义的用户将被导入该系统的密码数据库,并且仅允许这些用户登录该系统。

此配置也适用于 shell 的 ~ 功能以及所有在用户名和数字用户 ID 之间转换的程序。换句话说,cd ~user 将无法工作,ls -l 将显示数字 ID 而不是用户名,find . -user joe -print 将显示“没有此用户”的消息。为了解决这个问题,可以导入所有用户条目,但不允许他们登录到服务器。这可以通过添加一行额外的配置来实现:

+:::::::::/usr/sbin/nologin

这一行配置客户端导入所有条目,但将这些条目的 shell 替换为 /usr/sbin/nologin。

确保这一额外的行放置在 +@IT_EMP::::::::: 之后。否则,所有从 NIS 导入的用户账户将具有 /usr/sbin/nologin 作为登录 shell,没人能够登录系统。

要配置较不重要的服务器,请将这些行替换为服务器上的旧行:

+@IT_EMP:::::::::
+@IT_APP:::::::::
+:::::::::/usr/sbin/nologin

工作站的相应行应为:

+@IT_EMP:::::::::
+@USERS:::::::::
+:::::::::/usr/sbin/nologin

NIS 支持从其他 netgroups 创建 netgroups,这在用户访问政策发生变化时非常有用。一种可能性是创建基于角色的 netgroups。例如,可以创建一个名为 BIGSRV 的 netgroup 来定义重要服务器的登录限制,另一个名为 SMALLSRV 的 netgroup 用于较不重要的服务器,再创建一个名为 USERBOX 的 netgroup 用于工作站。每个这些 netgroups 包含了允许登录这些机器的 netgroups。新的 NIS netgroup 映射条目如下所示:

BIGSRV    IT_EMP  IT_APP
SMALLSRV  IT_EMP  IT_APP  ITINTERN
USERBOX   IT_EMP  ITINTERN USERS

这种定义登录限制的方法在能够定义具有相同限制的机器组时效果很好。不幸的是,这通常是例外而不是规则。大多数时候,需要按机器定义登录限制。

另一种可能性是基于机器的 netgroup 定义,以应对政策的变化。在这种情况下,每台系统的 /etc/master.passwd 文件中包含两行以 "+" 开头的行。第一行添加一个 netgroup,其中包含允许登录到该机器的账户;第二行添加所有其他账户,shell 为 /usr/sbin/nologin。建议使用主机名的大写版本作为 netgroup 的名称:

+@BOXNAME:::::::::
+:::::::::/usr/sbin/nologin

完成所有机器上的这一任务后,就不再需要修改本地版本的 /etc/master.passwd。所有进一步的更改可以通过修改 NIS 映射来处理。以下是此场景的可能 netgroup 映射示例:

# 首先定义用户组
IT_EMP    (,alpha,test-domain)    (,beta,test-domain)
IT_APP    (,charlie,test-domain)  (,delta,test-domain)
DEPT1     (,echo,test-domain)     (,foxtrott,test-domain)
DEPT2     (,golf,test-domain)     (,hotel,test-domain)
DEPT3     (,india,test-domain)    (,juliet,test-domain)
ITINTERN  (,kilo,test-domain)     (,lima,test-domain)
D_INTERNS (,able,test-domain)     (,baker,test-domain)
#
# 现在,基于角色定义一些组
USERS     DEPT1   DEPT2     DEPT3
BIGSRV    IT_EMP  IT_APP
SMALLSRV  IT_EMP  IT_APP    ITINTERN
USERBOX   IT_EMP  ITINTERN  USERS
#
# 以及一些用于特殊任务的组
# 允许 echo 和 golf 访问我们的防病毒机器
SECURITY  IT_EMP  (,echo,test-domain)  (,golf,test-domain)
#
# 基于机器的 netgroups
# 我们的主服务器
WAR       BIGSRV
FAMINE    BIGSRV
# 用户 india 需要访问此服务器
POLLUTION  BIGSRV  (,india,test-domain)
#
# 这个非常重要,需要更多的访问限制
DEATH     IT_EMP
#
# 上述的防病毒机器
ONE       SECURITY
#
# 将机器限制为单个用户
TWO       (,hotel,test-domain)
# [...更多组继续]

使用基于机器的 netgroups 可能并不总是可取的。当部署几十或几百台系统时,使用基于角色的 netgroups 而不是基于机器的 netgroups 可以保持 NIS 映射的合理大小。

32.4.9. 密码格式

NIS 要求 NIS 域内的所有主机使用相同的密码加密格式。如果用户在 NIS 客户端上遇到身份验证问题,可能是由于密码格式不同。在异构网络中,所有操作系统都必须支持该格式,其中 DES 是最低的通用标准。

要检查服务器或客户端使用的是哪种格式,请查看 /etc/login.conf 文件中的以下部分:

default:\
	:passwd_format=des:\
	:copyright=/etc/COPYRIGHT:\
	[更多条目省略]

如果需要编辑主机上的格式,以使其与 NIS 域中使用的格式匹配,则必须在保存更改后重新构建登录功能数据库:

# cap_mkdb /etc/login.conf

注意

在登录功能数据库重新构建之后,现有用户账户的密码格式不会立即更新,直到每个用户更改其密码。

上一页32.3.网络文件系统(NFS)下一页32.5.轻型目录访问协议(LDAP)

最后更新于6天前

这有帮助吗?

NIS 主服务器和从服务器通过 处理所有 NIS 请求。此守护进程负责接收来自 NIS 客户端的请求,将请求的域名和映射名称转换为相应数据库文件的路径,并将数据库中的数据传输回客户端。

③ 该行启用 守护进程,允许用户从客户端机器更改他们的 NIS 密码。

保存编辑后,输入 /etc/netstart 以重新启动网络并应用 /etc/rc.conf 中定义的值。在初始化 NIS 映射之前,启动 :

完成此任务后,初始化 NIS 映射。FreeBSD 包含了 脚本来执行此操作。在为主服务器生成映射时,使用 -m 并指定 NIS 域名:

NIS 客户端通过 绑定到 NIS 服务器。该守护进程在本地网络上广播 RPC 请求,这些请求指定了客户端配置的域名。如果同一域中的 NIS 服务器接收到其中一个广播,它将回应 ypbind,后者将记录服务器的地址。如果有多个服务器可用,客户端将使用第一个响应的服务器的地址,并将所有 NIS 请求定向到该服务器。客户端会定期 ping 服务器,以确保它仍然可用。如果在合理的时间内未收到回复,ypbind 将标记该域为未绑定,并再次广播,以希望找到另一台服务器。

编辑 /etc/rc.conf,添加以下行以设置 NIS 域名,并在网络启动时启动 :

这行配置了客户端为 NIS 服务器密码映射中具有有效账户的任何人提供账户。通过修改此行,可以有多种方式配置 NIS 客户端。可以参考 了解一种方法。更多详细内容,请参阅 O'Reilly Media 出版的《Managing NFS and NIS》一书。

由于 RPC 是基于广播的服务,因此任何在同一域中运行 ypbind 的系统都可以检索 NIS 映射的内容。为了防止未经授权的事务, 支持一种名为 "securenets" 的功能,可以用于限制访问特定主机集。默认情况下,这些信息存储在 /var/yp/securenets 中,除非 使用 -p 启动并指定了一个备用路径。该文件包含由网络规范和网络掩码组成的条目,两者之间由空格分隔。以 "#" 开头的行被视为注释。一个示例 securenets 文件可能如下所示:

如果 收到来自与这些规则匹配的地址的请求,它将正常处理该请求。如果地址未能匹配任何规则,请求将被忽略,并且会记录一条警告信息。如果 securenets 文件不存在,ypserv 将允许来自任何主机的连接。

是一种替代机制,可以提供访问控制,而不是 securenets。虽然任何访问控制机制都增加了一些安全性,但它们都容易受到 "IP 欺骗" 攻击的影响。所有与 NIS 相关的流量应在防火墙上进行阻止。

如果一个组包含多个用户,请用空格分隔每个用户。此外,每个字段可以包含通配符。有关详细信息,请参见 。

这将生成三个 NIS 映射 netgroup、netgroup.byhost 和 netgroup.byuser。使用 的映射键选项检查新的 NIS 映射是否可用:

要配置客户端,使用 指定 netgroup 的名称。例如,在名为 war 的服务器上,将以下行替换:

在此示例中,系统使用 DES 格式进行密码哈希。其他可能的值包括 blf(Blowfish)、md5(MD5)、sha256 和 sha512(SHA-256 和 SHA-512)。有关更多信息以及系统中可用格式的最新列表,请查阅 手册页。

ypserv(8)
rpc.yppasswdd(8)
ypserv(8)
ypinit(8)
ypbind(8)
ypbind(8)
使用 Netgroups
ypserv(8)
ypserv(8)
ypserv(8)
TCP Wrapper
netgroup(5)
ypcat(1)
vipw(8)
crypt(3)
rpcbind(8)
ypbind(8)
ypserv(8)
rpc.yppasswdd(8)