rad - 远程管理守护进程
/usr/lib/rad [-d] [-s] [-S fmri] [-M module [ -M module ]...] [-m moduledir [ -m moduledir ]...] [-t transpec [ -t transpec ]...] [-e timeout]
rad 这一工具能够采用各种高级语言以一种安全方式向使用者展示编程系统管理和监视接口。
可通过以下方式使用 rad:
作为服务:
作为服务运行时,rad 使用 getpeerucred(3C) 或 pam(3PAM) 验证连接。以此方式使用该工具时,占用的 API 以通过验证的用户身份运行。提供此操作模式时考虑了期望能够单独执行特权操作的本地使用者和远程使用者。
作为非特权程序:
作为非特权程序运行时,rad 仅充当其客户机与其发布的管理 API 之间的桥梁。以此方式使用时,占用的所有接口将使用 rad 进程持有的权限运行。
rad 是模块化工具。rad 发布的 API 同 rad 所识别的协议及其可进行通信的传输一样是作为共享对象进行交付的。rad 的多个实例可同时运行,每个实例运行时都相互独立,为不同的使用者提供不同的服务,在不同的端口或接口上侦听不同类型的连接。rad 从其命令行选项和/或 smf(7) 中获取其配置。
以下选项可在命令行上使用:
发出详细调试输出。
指定连接超时(以秒为单位)。缺省值为 180 秒。
将 moduledir 添加到要从中扫描和装入模块的目录列表。–m 选项可多次使用来添加多个模块目录。
将 module 添加到要装入的模块列表。module 应该是绝对路径名或当前工作目录的相对路径名。使用 –M 装入的模块优先于使用 –m 找到的模块。–M 选项可多次使用来添加多个模块。
实例化传输规范 transpec 指定的传输。传输规范采用以下格式:
transport[:option[=value][,option2[=value2]]...]
与 svc.startd(8) 启动方法具有相同行为。此选项具有以下作用:
如果不指定 –S 选项,rad 将从 scf_myname()(请参见 scf_handle_create(3SCF))标识的服务读取其配置。
rad 将使用 smf_method(7) 兼容的退出状态。
rad 将运行守护进程,仅当它可以处理请求时返回成功。
从 fmri 指定的 SMF 服务实例读取配置。如果不指定 –s 选项,就不会从该服务读取配置的传输,以避免端点与运行的服务发生冲突。
先搜索命令行中指定的模块目录,再搜索 SMF 中配置的模块目录,允许命令行配置覆盖 SMF 配置。
rad 从 smf 读取其配置时,它会从名为 config 且类型为 application 的属性组中读取一般配置,从类型为 xport_XYZ(其中 XYZ 会替换为传输类型的名称)的一系列属性组中读取任意数量的传输中每个传输的配置。通过为特定传输类型创建多个属性组可配置相应类型的多个实例。用于配置传输的属性组名称并不重要。
config 属性组包含以下属性:
字符串列表。从中扫描和装入模块的目录。
字符串列表。要装入的特定模块的文件名。
布尔值。如果为 true,rad 将发出详细调试输出。缺省值为 false。
整数。验证时等待客户机单个响应的最大时间(以秒为单位)。缺省值为 180。
配置 svc:/system/rad SMF 服务的两个实例以运行 /usr/lib/rad/rad:
将 rad 配置为通过以下位置的 AF_UNIX 套接字使用 unix 传输:
/system/volatile/rad/radsocket(适用于通过 getpeerucred(3C) 验证的连接)。
/system/volatile/rad/radsocket-unauth(适用于通过 pam(3PAM) 验证的连接)。
/system/volatile/rad/radsocket-http(适用于通过 getpeerucred(3C) 验证的连接)。
/system/volatile/rad/radsocket-unauth-http(适用于通过 pam(3PAM) 验证的连接)。
支持通过前两个套接字进行 Rad 协议交互,并支持通过后续两个套接字进行 HTTP 协议交互。
将 rad 配置为使用 tls 和 gss 传输。TLS 传输为 RAD RPC 协议 (12302) 和 RAD HTTP/JSON 协议 (6788) 提供端口。
每个服务在其 moduledir 设置中均配置为以下目录:
特定于内容的模块
传输端口
协议模块
特定于站点的模块
对不同协议的支持是以模块形式提供的。缺省情况下提供适用于以下协议的模块:rad(RAD RPC 协议)和 rad-http (HTTP/JSON)。一个 rad 实例可以支持多个传输,每个传输分别通过 proto 选项指定其支持的协议。有关更多信息,请参见“传输”部分。
对不同传输类型的支持是以模块形式交付的。适用于以下传输的模块随系统一起提供:管道 (pipe)、通用安全服务 (Generic Security Services, GSS) API、TCP 套接字 (tcp)、TLS 套接字 (tls) 和 Unix 域套接字 (unix)。每个传输类型都有一组唯一的配置属性。通过在 SMF 属性组定义属性或为 –t 命令行选项提供子选项可以为传输类型的实例配置选项。
gss 传输利用 GSS-API 协议保护客户机与服务器之间的通信。它在 TCP 套接字上侦听 GSS-API 连接。gss 传输具有以下选项:
字符串。要与此传输实例一起使用的协议。缺省值为 rad。
整数。侦听连接的端口。
布尔值。如果为 true,rad 将仅侦听本地计算机的连接。缺省值为 true。
字符串。验证时要使用的 pam 服务名称。缺省值为 rad-gss。请参见下文的"使用 PAM 验证"部分。
pipe 传输从特定文件描述符进行读写操作,就像某进程希望使用管道与子 rad 进程进行通信时所需的那样。管道传输具有以下选项:
字符串。要与此传输实例一起使用的协议。缺省值为 rad。
整数。从中进行读写操作的文件描述符。
布尔值。如果为 true,rad 在通信达到管道末端时退出。缺省值为 false。
tcp 传输在 TCP 套接字上侦听明文连接。tcp 传输具有以下选项:
字符串。要与此传输实例一起使用的协议。缺省值为 rad。
整数。侦听连接的端口。
布尔值。如果为 true,rad 将仅侦听本地计算机的连接。缺省值为 true。
字符串。验证时要使用的 pam(3PAM) 服务名称。缺省值为 rad-tcp。请参见下文的“使用 PAM 验证”部分。
tls 传输在 TCP 套接字上侦听 TLS 连接。tls 传输具有以下选项:
字符串。要与此传输实例一起使用的协议。缺省值为 rad。
整数。侦听连接的端口。
布尔值。如果为 true,rad 将仅侦听本地计算机的连接。缺省值为 true。
字符串。要使用的 PEM 格式 x509 证书的位置。
字符串。要使用的 PEM 格式私钥的位置。
字符串。验证时要使用的 pam(3PAM) 服务名称。缺省值为 rad-tls。请参见下文的“使用 PAM 验证”部分。
unix 传输在 AF_UNIX 套接字上侦听连接。unix 传输具有以下选项:
字符串。要与此传输实例一起使用的协议。缺省值为 rad。
字符串。要侦听的路径。
布尔值。如果为 true,rad 将尝试使用 getpeerucred(3C) 自动验证连接。缺省值为 true。
字符串。验证时要使用的 pam(3PAM) 服务名称。缺省值为 rad-unix。请参见下文的“使用 PAM 验证”部分。
rad 作为服务运行且 getpeerucred(3C) 不适用于要使用的传输时,pam(3PAM) 用于验证连接。使用的 PAM 服务名称取决于传输:
借助 gss 传输连接时
借助 tls 传输连接时
借助 tcp 传输连接时
借助 unix 传输连接(且 peercred 为 false)时
借助其他任何传输连接时
在极少数情况下,管理员可能需要基于传输覆盖使用的 PAM 服务名称。例如,两个 rad TLS 传输(一个侦听本地(更可信)网络,一个侦听远程(不太可信)网络)服务一个 rad 实例时,可能需要不同的 PAM 配置。
在这种情况下,管理员可以指定要用作传输配置属性的 PAM 服务的名称(请参见上文的“传输”部分)。
正如所有 PAM 服务一样,PAM 将首先在 /etc/pam.conf 中再在 /etc/pam.d/service 中查找与 rad 的 PAM 服务对应的条目。如果未找到任何条目,PAM 将在 /etc/pam.conf 中查找与 "other"(其他)服务对应的条目。如果未找到 "other"(其他)条目,PAM 最终将在 /etc/pam.d/other 中查找条目。
远程 rad 实例 (svc:/system/rad:remote) 存储其证书的位置。此文件对所有用户都是可读的。
远程 rad 实例 (svc:/system/rad:remote) 存储其私钥的位置。
其中本地 rad 实例 (svc:/system/rad:local) 接受使用 getpeerucred(3C) 隐式验证的连接的 AF_UNIX 套接字。
其中本地 rad 实例 (svc:/system/rad:local) 接受必须使用 pam(3PAM) 显式验证的连接的 AF_UNIX 套接字。
其中本地 rad 实例 (svc:/sys- tem/rad:local) 接受使用 getpeerucred(3C) 隐式验证的 HTTP 协议 (rad-http) 连接的 AF_UNIX 套接字。
其中本地 rad 实例 (svc:/sys- tem/rad:local) 接受必须使用 pam(3PAM) 显式验证的 HTTP 协议 (rad-http) 连接的 AF_UNIX 套接字。
有关下列属性的说明,请参见 attributes(7):
|
usermgr-1(3rad)、radadrgen(1)、pipe(2)、getpeerucred(3C)、pam(3PAM)、scf_handle_create(3SCF)、attributes(7)、smf(7)、smf_method(7)、svc.startd(8)
《Managing User Accounts and User Environments in Oracle Solaris 11.4》
rad 的两个实例由系统提供,并且在缺省情况下处于启用状态。
svc:/system/rad:local 会侦听以下路径的 AF_UNIX 连接:
/system/volatile/rad/rad socket
/system/volatile/rad/radsocket-unauth
/system/volatile/rad/radsocket-http
/system/volatile/rad/radsocket-unauth-http
第一个和第三个 AF_UNIX 套接字将使用 getpeerucred(3C) 自动验证连接进程,而另外两个套接字要求连接进程进行显式验证。
svc:/system/rad:remote 在端口 12302 (RAD RPC) 和 6788 (HTTP/JSON) 上侦听 TLS 连接,在端口 6789 上侦听 GSS-API(RAD RPC 协议)连接。缺省情况下,此服务处于禁用状态。
这些端口要求所有客户端进行显式验证。
其他系统组件(包括一些桌面管理用户界面)依赖于 rad 的本地实例 (svc:/system/rad:local)。