配置基本系统设置
设置系统的基本功能并自定义您的系统环境
摘要
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对我们文档的反馈。让我们了解如何改进它。
通过 Jira 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 单击顶部导航栏中的 Create。
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 点对话框底部的 Create。
第 1 章 配置和管理基本网络访问 复制链接链接已复制到粘贴板!
NetworkManager 为主机上安装的每个以太网适配器创建一个连接配置文件。默认情况下,此配置文件将 DHCP 用于 IPv4 和 IPv6 连接。修改此自动创建的配置文件,或在以下情况下添加新配置文件:
- 网络需要自定义设置,如静态 IP 地址配置。
- 您需要多个配置文件,因为主机在不同的网络中漫游。
Red Hat Enterprise Linux 为管理员提供不同的选项来配置以太网连接。例如:
- 在命令行中使用 nmcli 配置连接。
- 使用 nmtui 在基于文本的用户界面中配置连接。
- 使用 GNOME Settings 菜单或 nm-connection-editor 应用程序在图形界面中配置连接。
- 使用 nmstatectl 通过 Nmstate API 配置连接。
- 使用 RHEL 系统角色在一个或多个主机上自动配置连接。
1.1. 在图形安装模式中配置网络和主机名 复制链接链接已复制到粘贴板!
按照以下步骤来配置您的网络和主机名。
流程
- 在 Installation Summary 窗口中点击 。
- 在左侧窗格的列表中选择一个接口。详情显示在右侧方框中。
使用
开关来启用或禁用所选接口。您不能手动添加或删除接口。
- 点 添加虚拟网络接口,可以是 Team、Bond、Bridge 或 VLAN。
- 点 删除虚拟接口。
- 点 更改设置,如 IP 地址、DNS 服务器或者现有接口的路由配置(虚拟和物理)。
在 Host Name 字段中输入您系统的主机名。
主机名可以是完全限定域名(FQDN),格式为
hostname.domainname
,也可以是没有域的短主机名。许多网络具有动态主机配置协议(DHCP)服务,该服务自动为连接的系统提供域名。要允许 DHCP 服务给这个系统分配域名,请只指定短主机名。主机名只能包含字母数字字符和
-
或.
。主机名应等于或小于 64 个字符。主机名不能以-
和.
开头或结尾要符合 DNS 的要求,FQDN 的每个部分都应等于或小于 63 个字符,FQDN 总长度(包括点)不应超过 255 个字符。localhost
值意味着没有为目标系统配置特定的静态主机名,安装的系统的实际主机名在处理网络配置的过程中配置,例如,通过使用 DHCP 或 DNS 的 NetworkManager。使用静态 IP 和主机名配置时,使用短名称还是 FQDN 取决于计划的系统用例。Red Hat Identity Management 在置备过程中配置 FQDN,但有些第三方软件产品可能需要一个短名称。在任何一种情况下,要确保在所有情况下两种形式都可用,请在
/etc/hosts
中为主机添加一个条目,格式为IP FQDN 短别名
。- 单击 ,将主机名应用到安装程序环境。
- 或者,在 Network and Hostname 窗口中,您可以选择 Wireless 选项。单击右侧窗格中的 以选择您的 wifi 连接,如需要请输入密码,然后点击 。
1.2. 使用 nmcli 配置以太网连接 复制链接链接已复制到粘贴板!
如果您通过以太网将主机连接到网络,您可以使用 nmcli
工具在命令行上管理连接的设置。
先决条件
- 服务器配置中存在物理或虚拟以太网网络接口控制器(NIC)。
步骤
列出 NetworkManager 连接配置文件:
nmcli connection show
# nmcli connection show NAME UUID TYPE DEVICE Wired connection 1 a5eb6490-cc20-3668-81f8-0314a27f3f75 ethernet enp1s0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,NetworkManager 为主机中的每个 NIC 创建一个配置文件。如果您计划仅将这个 NIC 连接到特定的网络,请调整自动创建的配置文件。如果您计划使用不同的设置将这个 NIC 连接到网络,请为每个网络创建单独的配置文件。
如果要创建额外的连接配置文件,请输入:
nmcli connection add con-name <connection-name> ifname <device-name> type ethernet
# nmcli connection add con-name <connection-name> ifname <device-name> type ethernet
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 跳过此步骤来修改现有的配置文件。
可选:重命名连接配置文件:
nmcli connection modify "Wired connection 1" connection.id "Internal-LAN"
# nmcli connection modify "Wired connection 1" connection.id "Internal-LAN"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在有多个配置文件的主机上,有意义的名称可以更容易识别配置文件的用途。
显示连接配置文件的当前设置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置 IPv4 设置:
要使用 DHCP,请输入:
nmcli connection modify Internal-LAN ipv4.method auto
# nmcli connection modify Internal-LAN ipv4.method auto
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
ipv4.method
已设置为auto
(默认),请跳过这一步。要设置静态 IPv4 地址、网络掩码、默认网关、DNS 服务器和搜索域,请输入:
nmcli connection modify Internal-LAN ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200 ipv4.dns-search example.com
# nmcli connection modify Internal-LAN ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200 ipv4.dns-search example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
配置 IPv6 设置:
要使用无状态地址自动配置(SLAAC),请输入:
nmcli connection modify Internal-LAN ipv6.method auto
# nmcli connection modify Internal-LAN ipv6.method auto
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
ipv6.method
已设置为auto
(默认),请跳过这一步。要设置静态 IPv6 地址、网络掩码、默认网关、DNS 服务器和搜索域,请输入:
nmcli connection modify Internal-LAN ipv6.method manual ipv6.addresses 2001:db8:1::fffe/64 ipv6.gateway 2001:db8:1::fffe ipv6.dns 2001:db8:1::ffbb ipv6.dns-search example.com
# nmcli connection modify Internal-LAN ipv6.method manual ipv6.addresses 2001:db8:1::fffe/64 ipv6.gateway 2001:db8:1::fffe ipv6.dns 2001:db8:1::ffbb ipv6.dns-search example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要在配置文件中自定义其他设置,请使用以下命令:
nmcli connection modify <connection-name> <setting> <value>
# nmcli connection modify <connection-name> <setting> <value>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 用空格或分号将值括起来。
激活配置文件:
nmcli connection up Internal-LAN
# nmcli connection up Internal-LAN
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示 NIC 的 IP 设置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 IPv4 默认网关:
ip route show default
# ip route show default default via 192.0.2.254 dev enp1s0 proto static metric 102
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 IPv6 默认网关:
ip -6 route show default
# ip -6 route show default default via 2001:db8:1::fffe dev enp1s0 proto static metric 102 pref medium
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 DNS 设置:
cat /etc/resolv.conf search example.com nameserver 192.0.2.200 nameserver 2001:db8:1::ffbb
# cat /etc/resolv.conf search example.com nameserver 192.0.2.200 nameserver 2001:db8:1::ffbb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果多个连接配置文件同时处于活跃状态,则
nameserver
条目的顺序取决于这些配置文件中的 DNS 优先级值和连接类型。使用
ping
工具验证这个主机是否可以向其他主机发送数据包:ping <host-name-or-IP-address>
# ping <host-name-or-IP-address>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
故障排除
- 验证网线是否插入到主机和交换机。
- 检查链路失败是否只存在于此主机上,或者连接到同一交换机的其它主机上。
- 验证网络电缆和网络接口是否如预期工作。执行硬件诊断步骤,并替换缺陷的网线和网络接口卡。
- 如果磁盘中的配置与设备中的配置不匹配,则启动或重启 NetworkManager 会创建一个代表该设备的配置的内存连接。有关详情以及如何避免此问题,请参阅红帽知识库解决方案 在重启 NetworkManager 服务后,NetworkManager 复制了连接。
1.3. 使用 nmtui 配置以太网连接 复制链接链接已复制到粘贴板!
如果通过以太网将主机连接到网络,您可以使用 nmtui
应用程序在基于文本的用户界面中管理连接的设置。使用 nmtui
创建新配置文件,并在没有图形界面的主机上更新现有配置文件。
在 nmtui
中:
- 使用光标键导航。
- 选择一个按钮并按 Enter 键。
- 使用 空格 选择和清除复选框。
- 要返回上一个屏幕,请使用 ESC。
先决条件
- 服务器配置中存在物理或虚拟以太网网络接口控制器(NIC)。
流程
如果您不知道连接中使用的网络设备名称,显示可用的设备:
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet unavailable -- ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
nmtui
:nmtui
# nmtui
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 选择 Edit a connection,然后按 Enter。
选择是否添加新连接配置文件或修改现有连接配置文件:
要创建新配置文件:
- 按 Add。
- 从网络类型列表中选择 Ethernet,然后按 Enter 。
- 要修改现有的配置文件,请从列表中选择配置文件,然后按 Enter。
可选:更新连接配置文件的名称。
在有多个配置文件的主机上,有意义的名称可以更容易识别配置文件的用途。
- 如果创建新连接配置文件,清在 Device 字段中输入网络设备名称。
根据您的环境,相应地在
IPv4 configuration
和IPv6 configuration
区中配置 IP 地址。为此,请按这些区域旁边的按钮,并选择:- Disabled,如果此连接不需要 IP 地址。
- Automatic,如果 DHCP 服务器动态为这个 NIC 分配一个 IP 地址。
Manual,如果网络需要静态 IP 地址设置。在这种情况下,您必须填写更多字段:
- 在您要配置的协议旁边按 Show 以显示其他字段。
按 Addresses 旁边的 Add,并输入无类别域间路由(CIDR)格式的 IP 地址和子网掩码。
如果没有指定子网掩码,NetworkManager 会为 IPv4 地址设置
/32
子网掩码,并为 IPv6 地址设置/64
。- 输入默认网关的地址。
- 按 DNS servers 旁边的 Add,并输入 DNS 服务器地址。
- 按 Search domains 旁边的 Add,并输入 DNS 搜索域。
图 1.1. 使用静态 IP 地址设置的以太网连接示例
- 按 OK 创建并自动激活新连接。
- 按 Back 返回到主菜单。
-
选择 Quit,然后按 Enter 键关闭
nmtui
应用程序。
验证
显示 NIC 的 IP 设置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 IPv4 默认网关:
ip route show default
# ip route show default default via 192.0.2.254 dev enp1s0 proto static metric 102
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 IPv6 默认网关:
ip -6 route show default
# ip -6 route show default default via 2001:db8:1::fffe dev enp1s0 proto static metric 102 pref medium
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 DNS 设置:
cat /etc/resolv.conf search example.com nameserver 192.0.2.200 nameserver 2001:db8:1::ffbb
# cat /etc/resolv.conf search example.com nameserver 192.0.2.200 nameserver 2001:db8:1::ffbb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果多个连接配置文件同时处于活跃状态,则
nameserver
条目的顺序取决于这些配置文件中的 DNS 优先级值和连接类型。使用
ping
工具验证这个主机是否可以向其他主机发送数据包:ping <host-name-or-IP-address>
# ping <host-name-or-IP-address>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
故障排除
- 验证网线是否插入到主机和交换机。
- 检查链路失败是否只存在于此主机上,或者连接到同一交换机的其它主机上。
- 验证网络电缆和网络接口是否如预期工作。执行硬件诊断步骤,并替换缺陷的网线和网络接口卡。
- 如果磁盘中的配置与设备中的配置不匹配,则启动或重启 NetworkManager 会创建一个代表该设备的配置的内存连接。有关详情以及如何避免此问题,请参阅红帽知识库解决方案 在重启 NetworkManager 服务后,NetworkManager 复制了连接。
1.4. 使用 network RHEL 系统角色和接口名称,配置具有动态 IP 地址的以太网连接 复制链接链接已复制到粘贴板!
要将 Red Hat Enterprise Linux 主机连接到以太网网络,请为网络设备创建一个 NetworkManager 连接配置文件。通过使用 Ansible 和 network
RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
您可以使用 network
RHEL 系统角色配置以太网连接,该连接从 DHCP 服务器检索其 IP 地址、网关和 DNS 设置,以及 IPv6 无状态地址自动配置(SLAAC)。使用此角色,您可以将连接配置文件分配给指定的接口名称。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo
权限。 - 物理或者虚拟以太网设备在服务器配置中存在。
- 网络中有 DHCP 服务器和 SLAAC。
- 受管节点使用 NetworkManager 服务来配置网络。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
dhcp4: yes
- 启用来自 DHCP、PPP 或类似服务的自动 IPv4 地址分配。
auto6: yes
-
启用 IPv6 自动配置。默认情况下,NetworkManager 使用路由器公告。如果路由器宣布
managed
标记,则 NetworkManager 会从 DHCPv6 服务器请求 IPv6 地址和前缀。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md
文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查询受管节点的 Ansible 事实,并验证接口是否收到 IP 地址和 DNS 设置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 2 章 注册系统并管理订阅 复制链接链接已复制到粘贴板!
订阅涵盖了安装在 Red Hat Enterprise Linux 上的产品,包括操作系统本身。如果您还没有注册系统,则无法访问 RHEL 软件仓库。您无法安装软件更新,如安全、错误修复。即使您有自助支持订阅,它也授予对知识库的访问权限,而更多资源在缺少订阅时仍不可用。通过购买订阅并使用 Red Hat Content Delivery Network (CDN),您可以跟踪:
- 注册的系统
- 在注册的系统中安装产品
- 附加到安装产品的订阅
2.1. 使用命令行注册系统 复制链接链接已复制到粘贴板!
订阅涵盖了安装在 Red Hat Enterprise Linux 上的产品,包括操作系统本身。如果您还没有注册系统,则无法访问 RHEL 软件仓库。您无法安装软件更新,如安全、错误修复。即使您有自助支持订阅,它也授予对知识库的访问权限,而更多资源在缺少订阅时仍不可用。您需要注册系统来激活和管理您的红帽帐户的 Red Hat Enterprise Linux 订阅。
要将系统注册到 Red Hat Insights,您可以使用 rhc connect
工具。详情请参阅 设置远程主机配置。
先决条件
- 您有有效的 Red Hat Enterprise Linux 系统订阅。
流程
注册并订阅系统:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令会提示您输入红帽客户门户网站帐户的用户名和密码。
如果注册过程失败,您可以使用特定池注册系统。详情请查看以下步骤:
确定订阅的池 ID:
subscription-manager list --available --all
# subscription-manager list --available --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令会显示您的红帽账户中的所有可用订阅。对于每个订阅,会显示各种相关信息,包括池 ID。
使用上一步中决定的池 ID 替换 <example_pool_id> 来为您的系统附加适当的订阅:
subscription-manager attach --pool=<example_pool_id>
# subscription-manager attach --pool=<example_pool_id>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 验证混合云控制台中的 → 下的系统。
2.2. 使用 Web 控制台注册系统 复制链接链接已复制到粘贴板!
订阅涵盖了安装在 Red Hat Enterprise Linux 上的产品,包括操作系统本身。如果您还没有注册系统,则无法访问 RHEL 软件仓库。您无法安装软件更新,如安全、错误修复。即使您有自助支持订阅,它也授予对知识库的访问权限,而更多资源在缺少订阅时仍不可用。您可以使用 Red Hat web 控制台中的帐户凭证注册新安装的 Red Hat Enterprise Linux。
先决条件
- 您有一个有效的 RHEL 系统订阅。
- 您已安装了 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
- 在浏览器中打开 https://<ip_address_or_hostname>:9090,并登录到 web 控制台。
- 在 Overview 页面的 Health 字段中,点击 Not registered 警告,或者点击主菜单中的 Subscriptions 来进入页面。
- 在 Overview 字段中,点 。
在 注册系统 对话框中,选择注册方法。
可选:输入您的机构名称或 ID。如果您的帐户属于红帽客户门户网站中的多个机构,您必须添加机构名称或 ID。要获得机构 ID,请在红帽与您的大客户经理联系。
- 如果您不想将您的系统连接到 Red Hat Insights,请清除 Insights 复选框。
- 点 。
验证
- 在混合云控制台中 查看您的订阅详情。
2.3. 在 GNOME 桌面环境中注册系统 复制链接链接已复制到粘贴板!
订阅涵盖了安装在 Red Hat Enterprise Linux 上的产品,包括操作系统本身。如果您还没有注册系统,则无法访问 RHEL 软件仓库。您无法安装软件更新,如安全性、错误修复。即使您有自助支持订阅,它也授予对知识库的访问权限,而更多资源在缺少订阅时仍不可用。按照以下步骤将系统注册到您的红帽帐户中。
先决条件
- 您已创建了 红帽帐户。
- 您是一个 root 用户,并登录到 GNOME 桌面环境。详情请参阅 在 Red Hat Subscription Manager 中注册和订阅 RHEL 系统。
流程
打开 system menu,该菜单可从右上角访问,然后单击 Settings 图标。
- 在 → 部分,点 。
- 选择 Registration Server。
- 如果没有使用红帽服务器,在 URL 项中输入服务器地址。
- 在 Registration Type 菜单中选 Red Hat Account。
在 Registration Details 中:
- 在 Login 项中输入您的红帽帐户用户名。
- 在 Password 项中输入您的红帽帐户密码。
- 在 Organization 项中输入您的机构名称。
- 点 。
2.4. 使用安装程序 GUI 注册 RHEL 8 复制链接链接已复制到粘贴板!
您可以使用 RHEL 安装程序 GUI 注册 Red Hat Enterprise Linux 8。
先决条件
- 您在红帽客户门户网站中有一个有效的用户帐户。请参阅 创建红帽登录页面。
- 您有一个有效的激活码和机构 ID。
流程
- 从 Installation Summary 屏幕,在 Software 下,点击 Connect to Red Hat。
- 使用 Account 或 Activation Key 选项激活您的红帽帐户。
可选:在 Set System Purpose 字段中,选择您要从下拉菜单中设置的 Role、SLA 和 Usage 属性。
此时您的 Red Hat Enterprise Linux 8 系统已被成功注册。
第 3 章 访问红帽支持 复制链接链接已复制到粘贴板!
如果您需要对问题进行故障排除的帮助,请联系红帽支持。
流程
登录到 Red Hat Support 网站并选择以下选项之一:
- 创建新的支持问题单。
- 与红帽支持专家启动实时聊天。
- 通过致电或发送电子邮件与红帽专家联系。
3.1. 使用 sosreport 工具收集有关系统的 daignostic 信息,将其附加到支持问题单中 复制链接链接已复制到粘贴板!
sosreport
命令收集 Red Hat Enterprise Linux 系统的配置详情、系统信息和诊断信息。
以下小节论述了如何使用 sosreport
命令为您的支持问题单生成报告。
先决条件
- 红帽客户门户网站中的有效用户帐户。请参阅 创建红帽登录帐号。
- RHEL 系统的有效订阅。
- 支持问题单号。
流程
安装
sos
软件包:yum install sos
# yum install sos
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成一个报告:
sosreport
# sosreport
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)
将
--upload 选项传给命令,以自动上传报告并将其附加到支持问题单中。这需要访问互联网和您的客户门户网站凭证。可选:在您的支持问题单中手动将报告附加到您的支持问题单中。
如需更多信息,请参阅红帽知识库解决方案 如何将文件附加到红帽支持问题单?
第 4 章 更改基本环境设置 复制链接链接已复制到粘贴板!
配置基本环境设置是安装过程的一部分。以下部分介绍了在稍后修改时的信息。环境的基本配置包括:
- 日期和时间
- 系统区域设置
- 键盘布局
- 语言
4.1. 配置日期和时间 复制链接链接已复制到粘贴板!
因为以下原因,准确计时非常重要。在 Red Hat Enterprise Linux 中,时间保持是由NTP
协议来保证的,该协议由一个运行在用户空间的守护进程来实现。user-space 守护进程更新内核中运行的系统时钟。系统时钟可以通过使用不同的时钟源来维护系统的时间。
Red Hat Enterprise Linux 8 使用 chronyd
守护进程来实现 NTP
。chronyd
包括在 chrony 软件包中。如需更多信息,请参阅使用 chrony 来配置 NTP。
4.1.1. 手动配置日期、时间和时区设置 复制链接链接已复制到粘贴板!
要显示当前日期和时间,请使用这些步骤之 一。
流程
可选:列出时区:
timedatectl list-timezones
# timedatectl list-timezones Europe/Berlin
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置时区:
timedatectl set-timezone <time_zone>
# timedatectl set-timezone <time_zone>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置日期和时间:
timedatectl set-time <YYYY-mm-dd HH:MM:SS>
# timedatectl set-time <YYYY-mm-dd HH:MM:SS>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示日期、时间和时区:
date
# date Mon Mar 30 16:02:59 CEST 2020
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看更多详细信息,请使用 timedatectl 命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2. 使用 Web 控制台配置时间设置 复制链接链接已复制到粘贴板!
您可以在 RHEL web 控制台中设置时区,并将系统时间与网络时间协议(NTP)服务器同步。
先决条件
- 您已安装了 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
- 点概述中的当前系统时间。
- 点 System time。
- 在 更改系统时间 对话框中,根据需要更改时区。
在 Set Time 下拉菜单中选择以下之一:
- 手动
- 如果您需要手动设定时间,而不使用 NTP 服务器,则使用这个选项。
- 自动使用 NTP 服务器
- 这是一个默认选项,它会自动与预设置的 NTP 服务器同步。
- 自动使用特定的 NTP 服务器
- 只有在您需要将系统与特定 NTP 服务器同步时使用这个选项。指定服务器的 DNS 名称或 IP 地址。
- 点 Change。
验证
- 检查在 System 标签页中显示的系统时间。
4.3. 配置系统区域设置 复制链接链接已复制到粘贴板!
系统范围的区域设置存储在 /etc/locale.conf
文件中,该文件在早期引导时由 systemd
守护进程读取。每个服务或用户都会继承在 /etc/locale.conf
中配置的 locale 设置,单独程序或个人用户可以单独覆盖它们。
流程
可选:显示当前系统区域设置:
localectl status
# localectl status System Locale: LANG=en_US.UTF-8 VC Keymap: de-nodeadkeys X11 Layout: de X11 Variant: nodeadkeys
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出可用系统区域设置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 更新 syste 区域设置:
例如:
+
localectl set-locale LANG=en_US.UTF-8
# localectl set-locale LANG=en_US.UTF-8
GNOME 终端不支持非 UTF8 系统区域设置。如需更多信息,请参阅红帽知识库解决方案 gnome-terminal 应用程序在系统区域设置设置为非 UTF8 时无法启动。
4.4. 配置键盘布局 复制链接链接已复制到粘贴板!
键盘布局设置控制文本控制台和图形用户界面中的布局。
流程
要列出可用的键映射:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 keymaps 设置的当前状态:
localectl status
$ localectl status ... VC Keymap: us ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要设置或更改默认系统 keymap :例如:
localectl set-keymap us
# localectl set-keymap us
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5. 在文本控制台模式下更改字体大小 复制链接链接已复制到粘贴板!
您可以更改虚拟控制台中的字体大小。
流程
显示当前使用的字体文件:
cat /etc/vconsole.conf FONT="eurlatgr"
# cat /etc/vconsole.conf FONT="eurlatgr"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出可用的字体文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 选择一个支持您的字符集和代码页的字体文件。
可选: 要测试一个字体文件,请临时载入它:
setfont LatArCyrHeb-16.psfu.gz
# setfont LatArCyrHeb-16.psfu.gz
Copy to Clipboard Copied! Toggle word wrap Toggle overflow setfont
工具会立即应用字体文件,终端使用新的和字体大小,直到您重启或应用不同的字体文件。-
要返回
/etc/vconsole.conf
中定义的字体文件,请输入setfont
without any parameters。 编辑
/etc/vconsole.conf
文件,并将FONT
变量设置为 RHEL 应该在引导时加载的字体文件,例如:FONT=LatArCyrHeb-16
FONT=LatArCyrHeb-16
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启主机
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 5 章 使用 OpenSSH 的两个系统间使用安全通讯 复制链接链接已复制到粘贴板!
SSH(Secure Shell)是一种协议,它使用客户端-服务器架构在两个系统之间提供安全通信,并允许用户远程登录到服务器主机系统。与其他远程通信协议(如 FTP 或 Telnet )不同,SSH 会加密登录会话,这可防止入侵者从连接中收集未加密的密码。
5.1. 生成 SSH 密钥对 复制链接链接已复制到粘贴板!
您可以使用在本地系统上生成的 SSH 密钥对,并将生成的公钥复制到 OpenSSH 服务器来在不输入密码的情况下登录到 OpenSSH 服务器。每个要创建密钥的用户都必须运行此流程。
要在重新安装系统后保留之前生成的密钥对,请在创建新密钥前备份 ~/.ssh/
目录。重新安装后,将其复制到主目录中。您可以为系统中的所有用户(包括 root
用户)进行此操作。
先决条件
- 您已经以希望使用密钥连接到 OpenSSH 服务器的用户的身份登录了。
- OpenSSH 服务器被配置为允许基于密钥的身份验证。
流程
生成一个 ECDSA 密钥对:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以使用没有任何参数的
ssh-keygen
命令生成一个 RSA 密钥对,或通过输入ssh-keygen -t ed25519
命令生成一个 Ed25519 密钥对。请注意,Ed25519 算法不符合 FIPS-140,OpenSSH 在 FIPS 模式下无法使用 Ed25519 密钥。将公钥复制到远程机器上:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<username>@<ssh-server-example.com>
替换为您的凭证。如果您没有在会话中使用
ssh-agent
程序,上一个命令会复制最新修改的~/.ssh/id*.pub
公钥。要指定另一个公钥文件,或在ssh-agent
内存中缓存的密钥优先选择文件中的密钥,使用带有-i
选项的ssh-copy-id
命令。
验证
使用密钥文件登录到 OpenSSH 服务器:
ssh -o PreferredAuthentications=publickey <username>@<ssh-server-example.com>
$ ssh -o PreferredAuthentications=publickey <username>@<ssh-server-example.com>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2. 将基于密钥的身份验证设置为 OpenSSH 服务器的唯一方法 复制链接链接已复制到粘贴板!
要提高系统安全性,通过在 OpenSSH 服务器上禁用密码身份验证来强制进行基于密钥的身份验证。
先决条件
-
已安装
openssh-server
软件包。 -
sshd
守护进程正在服务器中运行。 您已使用密钥连接到 OpenSSH 服务器。
详情请参阅 生成 SSH 密钥对 部分。
流程
在文本编辑器中打开
/etc/ssh/sshd_config
配置,例如:vi /etc/ssh/sshd_config
# vi /etc/ssh/sshd_config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
PasswordAuthentication
选项改为no
:PasswordAuthentication no
PasswordAuthentication no
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在不是新默认安装的系统上,检查是否设置了
PubkeyAuthentication
参数,或是否设置为yes
。 将
ChallengeResponseAuthentication
指令设置为no
。请注意,相应的条目在配置文件中已被注释掉,默认值为
yes
。要在 NFS 挂载的主目录中使用基于密钥的验证,启用
use_nfs_home_dirs
SELinux 布尔值:setsebool -P use_nfs_home_dirs 1
# setsebool -P use_nfs_home_dirs 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果您要进行远程连接,而不使用控制台或带外访问,在禁用密码验证前测试基于密钥的登录过程。
重新载入
sshd
守护进程以应用更改:systemctl reload sshd
# systemctl reload sshd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3. 使用 ssh-agent 缓存 SSH 凭证 复制链接链接已复制到粘贴板!
为了避免在每次发起 SSH 连接时输入密码短语,您可以使用 ssh-agent
工具为登录会话缓存 SSH 私钥。如果代理正在运行,并且您的密钥已解锁,您可以使用这些密钥登录到 SSH 服务器,但不必再次输入密钥的密码。确保私钥和密语安全。
先决条件
- 您有一个运行了 SSH 守护进程的远程主机,并可通过网络访问。
- 您知道登录到远程主机的 IP 地址或者主机名以及凭证。
您已用密码生成了 SSH 密钥对,并将公钥传送到远程机器。
详情请参阅 生成 SSH 密钥对 部分。
流程
将在您的会话中自动启动
ssh-agent
的命令添加到~/.bashrc
文件中:在您选择的文本编辑器中打开
~/.bashrc
,例如:vi ~/.bashrc
$ vi ~/.bashrc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在文件中添加以下行:
eval $(ssh-agent)
eval $(ssh-agent)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,退出编辑器。
在
~/.ssh/config
文件中添加以下行:AddKeysToAgent yes
AddKeysToAgent yes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用此选项并在会话中启动了
ssh-agent
,代理仅在您第一次连接到主机时提示输入密码。
验证
登录到使用代理中缓存的私钥的对应的公钥的主机,例如:
ssh <example.user>@<ssh-server@example.com>
$ ssh <example.user>@<ssh-server@example.com>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意您不必输入密码短语。
5.4. 通过保存在智能卡上的 SSH 密钥进行身份验证 复制链接链接已复制到粘贴板!
您可以在智能卡上创建并存储 ECDSA 和 RSA 密钥,并通过 OpenSSH 客户端上的智能卡进行身份验证。智能卡验证替换了默认密码验证。
先决条件
-
在客户端中安装了
opensc
软件包,pcscd
服务正在运行。
流程
列出所有由 OpenSC PKCS #11 模块提供的密钥,包括其 PKCS #11 URIs,并将输出保存到
key.pub
文件:ssh-keygen -D pkcs11: > keys.pub
$ ssh-keygen -D pkcs11: > keys.pub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将公钥传送到远程服务器。使用
ssh-copy-id
命令和上一步中创建的keys.pub
文件:ssh-copy-id -f -i keys.pub <username@ssh-server-example.com>
$ ssh-copy-id -f -i keys.pub <username@ssh-server-example.com>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 ECDSA 密钥连接到 <ssh-server-example.com>。您可以只使用 URI 的子集,它唯一引用您的密钥,例如:
ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" <ssh-server-example.com>
$ ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 因为 OpenSSH 使用
p11-kit-proxy
包装器,且 OpenSC PKCS #11 模块已注册到p11-kit
工具,因此您可以简化上一个命令:ssh -i "pkcs11:id=%01" <ssh-server-example.com>
$ ssh -i "pkcs11:id=%01" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您跳过 PKCS #11 URI 的
id=
部分,则 OpenSSH 会加载代理模块中可用的所有密钥。这可减少输入所需的数量:ssh -i pkcs11: <ssh-server-example.com>
$ ssh -i pkcs11: <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:您可以在
~/.ssh/config
文件中使用同样的 URI 字符串来使配置持久:cat ~/.ssh/config IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" ssh <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
$ cat ~/.ssh/config IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" $ ssh <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ssh
客户端工具现在自动使用此 URI 和智能卡中的密钥。
第 6 章 配置日志记录 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 中的大多数服务都会记录状态消息、警告和错误。您可以使用 rsyslogd
服务将这些条目记录到本地文件或远程日志记录服务器。
6.1. 配置远程日志记录解决方案 复制链接链接已复制到粘贴板!
要确保在日志记录服务器中集中记录来自环境中各种机器的日志,您可以将 Rsyslog 应用程序配置为将适合客户端系统中特定条件的日志记录到服务器。
6.1.1. Rsyslog 日志记录服务 复制链接链接已复制到粘贴板!
Rsyslog 应用程序与 systemd-journald
服务相结合,在 Red Hat Enterprise Linux 中提供了本地和远程记录支持。rsyslogd
守护进程会持续读取 systemd-journald
服务从 Journal 接收的 syslog
消息。然后 rsyslogd
会过滤并处理这些 syslog
事件,并将它们记录到 rsyslog
日志文件,或者根据自己的配置将它们转发到其他服务。
rsyslogd
守护进程还提供扩展的过滤、加密受保护的转发消息、输入和输出模块,并支持使用 TCP 和 UDP 协议进行传输。
在 /etc/rsyslog.conf
中,是 rsyslog
的主要配置文件,您可以根据 rsyslogd
处理消息来指定规则。通常,您可以通过其来源和主题(设施)和紧急情况(优先级)对消息进行分类,然后分配在消息适合这些条件时应执行的操作。
在 /etc/rsyslog.conf
中,您还可以看到 rsyslogd
维护的日志文件列表。大多数日志文件位于 /var/log/
目录中。httpd
和 samba
等一些应用将其日志文件存储在 /var/log/
中的子目录中。
6.1.2. 安装 Rsyslog 文档 复制链接链接已复制到粘贴板!
Rsyslog 应用程序在 https://www.rsyslog.com/doc/ 上提供了广泛的在线文档,但您也可以在本地安装 rsyslog-doc
文档软件包。
先决条件
-
您已在系统中激活了
AppStream
软件仓库。 -
您有权使用
sudo
安装新软件包。
流程
安装
rsyslog-doc
软件包:yum install rsyslog-doc
# yum install rsyslog-doc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在您选择的浏览器中打开
/usr/share/doc/rsyslog/html/index.html
文件,例如:firefox /usr/share/doc/rsyslog/html/index.html &
$ firefox /usr/share/doc/rsyslog/html/index.html &
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.1.3. 通过 TCP 配置服务器进行远程记录 复制链接链接已复制到粘贴板!
Rsyslog 应用程序可让您运行日志服务器并配置各个系统将其日志文件发送到日志记录服务器。要通过 TCP 使用远程日志,请同时配置服务器和客户端。服务器收集和分析由一个或多个客户端系统发送的日志。
使用 Rsyslog 应用程序,您可以维护一个集中的日志系统,该系统可通过网络将日志消息转发到服务器。为了避免服务器不可用时消息丢失,您可以为转发操作配置操作队列。这样,无法发送的消息将存储在本地,直到服务器再次可访问为止。请注意,此类队列无法针对使用 UDP 协议的连接配置。
omfwd
插件通过 UDP 或 TCP 提供转发。默认协议是 UDP。由于插件内置在内,因此不必加载它。
默认情况下,rsyslog
使用端口 514
上的 TCP。
先决条件
- rsyslog 已安装在服务器系统上。
-
您以
root
身份登录到服务器中。 -
使用
semanage
命令,为可选步骤安装policycoreutils-python-utils
软件包。 -
firewalld
服务在运行。
流程
可选: 要为
rsyslog
流量使用不同的端口,请将syslogd_port_t
SELinux 类型添加到端口。例如,启用端口30514
:semanage port -a -t syslogd_port_t -p tcp 30514
# semanage port -a -t syslogd_port_t -p tcp 30514
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要为
rsyslog
流量使用不同的端口,请将firewalld
配置为允许该端口上传入的rsyslog
流量。例如,允许端口30514
上的 TCP 流量:firewall-cmd --zone=<zone-name> --permanent --add-port=30514/tcp firewall-cmd --reload
# firewall-cmd --zone=<zone-name> --permanent --add-port=30514/tcp success # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/etc/rsyslog.d/
目录中创建一个新文件(例如,remotelog.conf
),并插入以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将更改保存到
/etc/rsyslog.d/remotelog.conf
文件。 测试
/etc/rsyslog.conf
文件的语法:rsyslogd -N 1
# rsyslogd -N 1 rsyslogd: version 8.1911.0-2.el8, config validation run... rsyslogd: End of config validation run. Bye.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保
rsyslog
服务在日志记录服务器中运行并启用:systemctl status rsyslog
# systemctl status rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新启动
rsyslog
服务。systemctl restart rsyslog
# systemctl restart rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 如果没有启用
rsyslog
,请确保rsyslog
服务在重启后自动启动:systemctl enable rsyslog
# systemctl enable rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您的日志服务器现在已配置为从您环境中的其他系统接收和存储日志文件。
6.1.4. 通过 TCP 配置远程日志记录到服务器 复制链接链接已复制到粘贴板!
您可以配置系统,以通过 TCP 协议将日志消息转发到服务器。omfwd
插件通过 UDP 或 TCP 提供转发。默认协议是 UDP。因为插件内置在内,所以不必加载它。
先决条件
-
rsyslog
软件包安装在应该向服务器报告的客户端系统上。 - 您已为远程日志记录配置了服务器。
- 在 SELinux 中允许指定的端口并在防火墙中打开。
-
系统包含
policycoreutils-python-utils
软件包,它为 SELinux 配置中添加非标准端口提供semanage
命令。
流程
在
/etc/rsyslog.d/
目录中创建一个名为 的新文件,如10-remotelog.conf
,并插入以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
queue.type="linkedlist"
设置启用 LinkedList 内存中队列, -
queue.filename
设置定义磁盘存储。备份文件是使用example_fwd
前缀,在之前全局workDirectory
指令指定的工作目录中创建的。 -
action.resumeRetryCount -1
设置防止rsyslog
在服务器没有响应而重试连接时丢弃消息, -
如果
rsyslog
关闭,queue.saveOnShutdown="on"
设置会保存内存中的数据。 最后一行将所有收到的消息转发到日志记录服务器。端口规格是可选的。
使用这个配置,
rsyslog
会向服务器发送消息,但如果远程服务器无法访问,则会将消息保留在内存中。只有rsyslog
耗尽配置的内存队列空间或需要关闭时,才能创建磁盘上的文件,从而让系统性能受益。
注意rsyslog 按照一般顺序处理配置文件
/etc/rsyslog.d/
。-
重新启动
rsyslog
服务。systemctl restart rsyslog
# systemctl restart rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证客户端系统向服务器发送信息,请按照以下步骤执行:
在客户端系统中发送测试信息:
logger test
# logger test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务器系统上,查看
/var/log/messages
日志,例如:cat /var/log/remote/msg/hostname/root.log Feb 25 03:53:17 hostname root[6064]: test
# cat /var/log/remote/msg/hostname/root.log Feb 25 03:53:17 hostname root[6064]: test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中 hostname 是客户端系统的主机名。请注意,日志包含输入
logger
命令的用户的用户名,本例中为root
。
6.1.5. 配置 TLS 加密的远程日志记录 复制链接链接已复制到粘贴板!
默认情况下,Rsyslog 以纯文本格式发送 remote-logging 通信。如果您的场景需要保护这个通信频道,您可以使用 TLS 加密它。
要通过 TLS 使用加密传输,请同时配置服务器和客户端。服务器收集和分析由一个或多个客户端系统发送的日志。
您可以使用 ossl
网络流驱动程序(OpenSSL)或 gtls
流驱动程序(GnuTLS)。
如果您的系统具有更高的安全性,例如,没有连接到任何网络或有严格授权的系统,请使用独立的系统作为认证授权(CA)。
您可以使用 全局
、模块
和 输入
级别在服务器端使用流驱动程序在 全局
和操作级别上自定义连接设置。更为具体的配置会覆盖更常规的配置。例如,您可以对大多数连接和
gtls
在全局设置中使用 ossl
,而只为特定连接使用 gtls。
先决条件
-
有对客户端和服务器系统的
root
访问权限。 以下软件包安装在服务器和客户端系统中:
-
rsyslog
软件包。 -
对于
ossl
网络流驱动程序,rsyslog-openssl
软件包。 -
对于
gtls
网络流驱动程序,rsyslog-gnutls
软件包。 -
要使用
certtool
命令(gnutls-utils
软件包)生成证书。
-
在您的日志服务器中,以下证书位于
/etc/pki/ca-trust/source/anchors/
目录中,并使用update-ca-trust
命令更新您的系统配置:-
ca-cert.pem
- 一个 CA 证书,它可以在日志记录服务器和客户端上验证密钥和证书。 -
server-cert.pem
- 日志记录服务器的公钥。 -
server-key.pem
- 日志记录服务器的私钥。
-
在您的日志记录客户端中,以下证书位于
/etc/pki/ca-trust/source/anchors/
目录中,并使用update-ca-trust
来更新您的系统配置:-
ca-cert.pem
- 一个 CA 证书,它可以在日志记录服务器和客户端上验证密钥和证书。 -
client-cert.pem
- 客户端的公钥。 -
client-key.pem
- 客户端的私钥。
-
流程
配置服务器以从您的客户端系统接收加密日志:
-
在
/etc/rsyslog.d/
目录中创建一个新文件,例如securelogser.conf
。 要加密通信,配置文件必须包含指向服务器的证书文件的路径、所选身份验证方法,以及支持 TLS 加密的流驱动程序。在
/etc/rsyslog.d/securelogser.conf
文件中添加以下行:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您更喜欢 GnuTLS 驱动程序,请使用
StreamDriver.Name="gtls"
配置选项。有关比x509/name
严格性低的验证模式的更多信息,请参阅使用rsyslog-doc
软件包安装的文档。-
将更改保存到
/etc/rsyslog.d/securelogser.conf
文件。 验证
/etc/rsyslog.conf
文件的语法以及/etc/rsyslog.d/
目录中的任何文件:rsyslogd -N 1
# rsyslogd -N 1 rsyslogd: version 8.1911.0-2.el8, config validation run (level 1)... rsyslogd: End of config validation run. Bye.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保
rsyslog
服务在日志记录服务器中运行并启用:systemctl status rsyslog
# systemctl status rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
rsyslog
服务:systemctl restart rsyslog
# systemctl restart rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 如果没有启用 Rsyslog,请确保
rsyslog
服务在重启后自动启动:systemctl enable rsyslog
# systemctl enable rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
在
配置客户端以将加密日志发送到服务器:
-
在客户端系统上,在
/etc/rsyslog.d/
目录中创建一个名为 的新文件,如securelogcli.conf
。 在
/etc/rsyslog.d/securelogcli.conf
文件中添加以下行:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您更喜欢 GnuTLS 驱动程序,请使用
StreamDriver.Name="gtls"
配置选项。-
将更改保存到
/etc/rsyslog.d/securelogcli.conf
文件。 验证
/etc/rsyslog.conf
文件的语法以及/etc/rsyslog.d/
目录中的其他文件:rsyslogd -N 1
# rsyslogd -N 1 rsyslogd: version 8.1911.0-2.el8, config validation run (level 1)... rsyslogd: End of config validation run. Bye.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保
rsyslog
服务在日志记录服务器中运行并启用:systemctl status rsyslog
# systemctl status rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
rsyslog
服务:systemctl restart rsyslog
# systemctl restart rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 如果没有启用 Rsyslog,请确保
rsyslog
服务在重启后自动启动:systemctl enable rsyslog
# systemctl enable rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
在客户端系统上,在
验证
要验证客户端系统向服务器发送信息,请按照以下步骤执行:
在客户端系统中发送测试信息:
logger test
# logger test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务器系统上,查看
/var/log/messages
日志,例如:cat /var/log/remote/msg/<hostname>/root.log Feb 25 03:53:17 <hostname> root[6064]: test
# cat /var/log/remote/msg/<hostname>/root.log Feb 25 03:53:17 <hostname> root[6064]: test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
<
hostname> 是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,本例中为root
。
6.1.6. 配置服务器以通过 UDP 接收远程日志信息 复制链接链接已复制到粘贴板!
Rsyslog 应用程序可让您将系统配置为从远程系统接收日志信息。要通过 UDP 使用远程日志记录,请同时配置服务器和客户端。接收服务器收集并分析一个或多个客户端系统发送的日志。默认情况下,rsyslog
使用端口 514
上的 UDP 从远程系统接收日志信息。
按照以下步骤配置服务器,以通过 UDP 协议收集和分析一个或多个客户端系统发送的日志。
先决条件
- rsyslog 已安装在服务器系统上。
-
您以
root
身份登录到服务器中。 -
使用
semanage
命令,为可选步骤安装policycoreutils-python-utils
软件包。 -
firewalld
服务在运行。
流程
可选:要将不同的端口用于
rsyslog
流量,而不是默认端口514
:将
syslogd_port_t
SELinux 类型添加到 SELinux 策略配置中,使用您要rsyslog
的端口号替换portno
:semanage port -a -t syslogd_port_t -p udp portno
# semanage port -a -t syslogd_port_t -p udp portno
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置
firewalld
以允许传入的rsyslog
流量,使用您要rsyslog
使用的端口替换portno
,区替换zone
:firewall-cmd --zone=zone --permanent --add-port=portno/udp firewall-cmd --reload
# firewall-cmd --zone=zone --permanent --add-port=portno/udp success # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入防火墙规则:
firewall-cmd --reload
# firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在
/etc/rsyslog.d/
目录中创建一个新的.conf
文件,如remotelogserv.conf
,并插入以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
514
是rsyslog
默认使用的端口号。您可以指定不同的端口。验证
/etc/rsyslog.conf
文件以及/etc/rsyslog.d/
目录中的所有.conf
文件的语法:rsyslogd -N 1
# rsyslogd -N 1 rsyslogd: version 8.1911.0-2.el8, config validation run...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新启动
rsyslog
服务。systemctl restart rsyslog
# systemctl restart rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 如果没有启用
rsyslog
,请确保rsyslog
服务在重启后自动启动:systemctl enable rsyslog
# systemctl enable rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.1.7. 通过 UDP 配置远程日志记录到服务器 复制链接链接已复制到粘贴板!
您可以配置系统,以通过 UDP 协议将日志消息转发到服务器。omfwd
插件通过 UDP 或 TCP 提供转发。默认协议是 UDP。因为插件内置在内,所以不必加载它。
先决条件
-
rsyslog
软件包安装在应该向服务器报告的客户端系统上。 - 您已为远程日志记录配置了服务器,如配置服务器 以通过 UDP 接收远程日志信息。
流程
在
/etc/rsyslog.d/
目录中创建一个新的.conf
文件,如10-remotelogcli.conf
,并插入以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
queue.type="linkedlist"
设置启用一个 LinkedList 内存中队列。 -
queue.filename
设置定义磁盘存储。备份文件使用之前全局workDirectory
指令指定的工作目录中的example_fwd
前缀创建。 -
action.resumeRetryCount -1
设置可防止rsyslog
在重试时丢弃消息(如果服务器没有响应)。 -
如果
rsyslog
关闭,启用的 queue.saveOnShutdown="on"
设置会保存内存中的数据。 -
portno
值是您要rsyslog
使用的端口号。默认值为514
。 最后一行将所有收到的消息转发到日志记录服务器,端口规格是可选的。
使用这个配置,
rsyslog
会向服务器发送消息,但如果远程服务器无法访问,则会将消息保留在内存中。只有rsyslog
耗尽配置的内存队列空间或需要关闭时,才能创建磁盘上的文件,从而让系统性能受益。
注意rsyslog 按照一般顺序处理配置文件
/etc/rsyslog.d/
。-
重新启动
rsyslog
服务。systemctl restart rsyslog
# systemctl restart rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 如果没有启用
rsyslog
,请确保rsyslog
服务在重启后自动启动:systemctl enable rsyslog
# systemctl enable rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证客户端系统向服务器发送信息,请按照以下步骤执行:
在客户端系统中发送测试信息:
logger test
# logger test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务器系统中,查看
/var/log/remote/msg/hostname/root.log
日志,例如:cat /var/log/remote/msg/hostname/root.log Feb 25 03:53:17 hostname root[6064]: test
# cat /var/log/remote/msg/hostname/root.log Feb 25 03:53:17 hostname root[6064]: test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
hostname
是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,本例中为root
。
6.1.8. Rsyslog 中的负载均衡帮助程序 复制链接链接已复制到粘贴板!
当在集群中使用时,您可以通过修改 RebindInterval
设置来提高 Rsyslog 负载均衡。
RebindInterval
指定当前连接中断的时间间隔,并被重新建立。此设置适用于 TCP、UDP 和 RELP 流量。负载平衡器将信息作为新连接,并将消息转发到另一个物理目标系统。
当目标系统更改了其 IP 地址时,RebindInterval
会很有用。Rsyslog 应用程序在建立连接时缓存 IP 地址,因此信息会发送到同一服务器。如果 IP 地址更改,UDP 数据包会丢失,直到 Rsyslog 服务重启为止。重新建立连接可确保 DNS 再次解析 IP。
TCP、UDP 和 RELP 流量使用 RebindInterval 示例
action(type="omfwd" protocol="tcp" RebindInterval="250" target="example.com" port="514" …) action(type="omfwd" protocol="udp" RebindInterval="250" target="example.com" port="514" …) action(type="omrelp" RebindInterval="250" target="example.com" port="6514" …)
action(type="omfwd" protocol="tcp" RebindInterval="250" target="example.com" port="514" …)
action(type="omfwd" protocol="udp" RebindInterval="250" target="example.com" port="514" …)
action(type="omrelp" RebindInterval="250" target="example.com" port="6514" …)
6.1.9. 配置可靠的远程日志记录 复制链接链接已复制到粘贴板!
通过可靠的事件日志记录协议(RELP),您可以降低消息丢失的风险通过 TCP 发送和接收 syslog
消息。RELP 提供可靠的事件消息交付,这对于无法接受消息丢失的环境中非常有用。要使用 RELP,请配置服务器上运行的 imrelp
输入模块并接收日志,以及在客户端上运行的 omrelp
输出模块,并将日志发送到日志记录服务器。
先决条件
-
您已在服务器和客户端系统中安装了
rsyslog
、librelp
和rsyslog-relp
软件包。 - 在 SELinux 中允许指定的端口并在防火墙中打开。
流程
配置客户端系统以可靠远程记录:
在客户端系统上,在
/etc/rsyslog.d/
目录中创建一个新的.conf
文件,例如relpclient.conf
,并插入以下内容:module(load="omrelp") *.* action(type="omrelp" target="_target_IP_" port="_target_port_")
module(load="omrelp") *.* action(type="omrelp" target="_target_IP_" port="_target_port_")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
target_IP
是日志记录服务器的 IP 地址。 -
target_port
是日志记录服务器的端口。
-
-
保存对
/etc/rsyslog.d/relpclient.conf
文件的更改。 重新启动
rsyslog
服务。systemctl restart rsyslog
# systemctl restart rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 如果没有启用
rsyslog
,请确保rsyslog
服务在重启后自动启动:systemctl enable rsyslog
# systemctl enable rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
配置服务器系统以可靠远程记录:
在服务器系统中,在
/etc/rsyslog.d/
目录中创建一个新的.conf
文件,例如reserv.conf
,并插入以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
log_path
指定存储消息的路径。 -
target_port
是日志记录服务器的端口。使用与客户端配置文件中相同的值。
-
-
保存对
/etc/rsyslog.d/relpserv.conf
文件的更改。 重新启动
rsyslog
服务。systemctl restart rsyslog
# systemctl restart rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 如果没有启用
rsyslog
,请确保rsyslog
服务在重启后自动启动:systemctl enable rsyslog
# systemctl enable rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证客户端系统向服务器发送信息,请按照以下步骤执行:
在客户端系统中发送测试信息:
logger test
# logger test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务器系统中,查看指定
log_path
的日志,例如:cat /var/log/remote/msg/hostname/root.log Feb 25 03:53:17 hostname root[6064]: test
# cat /var/log/remote/msg/hostname/root.log Feb 25 03:53:17 hostname root[6064]: test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
hostname
是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,本例中为root
。
6.1.10. 支持的 Rsyslog 模块 复制链接链接已复制到粘贴板!
要扩展 Rsyslog 应用程序的功能,您可以使用特定的模块。模块提供额外的输入(Input 模块)、输出(输出模块)和其他功能。模块也可以提供在加载模块后可用的其他配置指令。
您可以输入以下命令列出您系统中安装的输入和输出模块:
ls /usr/lib64/rsyslog/{i,o}m*
# ls /usr/lib64/rsyslog/{i,o}m*
在安装了 rsyslog-doc
软件包后,您可以在 /usr/share/doc/rsyslog/html/configuration/modules/idx_output.html
文件中查看所有可用的 rsyslog
模块。
6.1.11. 配置 netconsole 服务为将内核信息记录到远程主机 复制链接链接已复制到粘贴板!
当无法登录到磁盘或使用串行控制台时,您可以使用 netconsole
内核模块和同名服务将内核消息通过网络记录到远程 rsyslog
服务。
先决条件
-
远程主机上已安装系统日志服务,如
rsyslog
。 - 远程系统日志服务被配置为接收来自此主机的日志条目。
流程
安装
netconsole-service
软件包:yum install netconsole-service
# yum install netconsole-service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
/etc/sysconfig/netconsole
文件,并将SYSLOGADDR
参数设为远程主机的 IP 地址:SYSLOGADDR=192.0.2.1
# SYSLOGADDR=192.0.2.1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用并启动
netconsole
服务:systemctl enable --now netconsole
# systemctl enable --now netconsole
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
-
在远程系统日志服务器上显示
/var/log/messages
文件。
6.2. 使用 logging 系统角色 复制链接链接已复制到粘贴板!
作为系统管理员,您可以使用 logging
系统角色将 Red Hat Enterprise Linux 主机配置为日志服务器,以从多个客户端系统收集日志。
6.2.1. 使用 logging RHEL 系统角色过滤本地日志消息 复制链接链接已复制到粘贴板!
您可以使用 logging
RHEL 系统角色的基于属性的过滤器根据各种条件过滤本地日志消息。例如,您可以实现:
- 日志清晰:在高流量环境中,日志可能会快速增长。专注于特定消息(如错误)有助于更快地识别问题。
- 优化的系统性能: Excessive 日志量通常与系统性能下降连接。仅针对重要事件选择的日志可以防止资源耗尽,这样可让您的系统更有效地运行。
- 增强安全性:通过安全消息进行高效过滤,如系统错误和失败的登录,有助于仅捕获相关日志。这对于检测漏洞和符合合规性标准非常重要。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
logging_inputs
-
定义日志记录输入字典的列表。
type: basics
选项涵盖了systemd
日志或 Unix 套接字的输入。 logging_outputs
-
定义日志输出字典的列表。
type: files
选项支持将日志存储到本地文件,通常存储在/var/log/
目录中。property: msg
;property: contains
; 和property_value:
选项指定包含错误字符串的所有日志都存储在error
/var/log/errors.log
文件中。property: msg
;property: !contains
; 和property_value: error
选项指定所有其他日志都放在/var/log/others.log
文件中。您可以将错误
值替换为您要过滤的字符串。 logging_flows
-
定义日志记录流字典列表,以指定
logging_inputs
和logging_outputs
之间的关系。inputs: [files_input]
选项指定从其处理日志的输入列表。输出: [files_output0, files_output1]
选项指定日志发送到的输出列表。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在受管节点上,测试
/etc/rsyslog.conf
文件的语法:rsyslogd -N 1
# rsyslogd -N 1 rsyslogd: version 8.1911.0-6.el8, config validation run... rsyslogd: End of config validation run. Bye.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在受管节点上,验证系统是否向日志发送包含
error
字符串的信息:发送测试信息:
logger error
# logger error
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看
/var/log/errors.log
日志,例如:cat /var/log/errors.log Aug 5 13:48:31 hostname root[6778]: error
# cat /var/log/errors.log Aug 5 13:48:31 hostname root[6778]: error
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
hostname
是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,本例中为root
。
6.2.2. 使用 logging RHEL 系统角色应用远程日志解决方案 复制链接链接已复制到粘贴板!
您可以使用 logging
RHEL 系统角色配置远程日志记录解决方案,其中一个或多个客户端从 systemd-journal
服务获取日志并将其转发到远程服务器。服务器从 remote_rsyslog
和 remote_files
配置接收远程输入,并将日志输出到远程主机名命名的目录中的本地文件。
因此,您可以涵盖您需要的用例:
- 集中式日志管理:从单一存储点收集、访问和管理多台计算机的日志消息,简化了日常监控和故障排除任务。此外,此用例还减少了登录各个计算机来检查日志消息的需要。
- 增强安全性:在一个中央位置存储日志消息可增加他们处于安全且篡改的环境中的几率。这样的环境可以更轻松地检测和响应安全事件,并更方便地满足审计要求。
- 提高了日志分析效率:协调来自多个系统的日志消息对于跨多个机器或服务的复杂问题的快速故障排除非常重要。这样,您可以快速分析和交叉引用来自不同来源的事件。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。 - 在服务器或客户端系统的 SELinux 策略中定义端口,并打开这些端口的防火墙。默认 SELinux 策略包括端口 601、514、6514、10514 和 20514。要使用其他端口,请参阅 修改客户端和服务器系统 上的 SELinux 策略。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 的第一个 play 中指定的设置包括:
logging_inputs
-
定义日志记录输入字典的列表。
type: remote
选项涵盖通过网络的其他日志记录系统的远程输入。udp_ports: [ 601 ]
选项定义要监控的 UDP 端口号的列表。tcp_ports: [ 601 ]
选项定义要监控的 TCP 端口号列表。如果设置了udp_ports
和tcp_ports
,则使用udp_ports
,并丢弃tcp_ports
。 logging_outputs
-
定义日志输出字典的列表。
type: remote_files
选项使输出将日志存储到每个远程主机和程序名称,其源自日志。 logging_flows
-
定义日志记录流字典列表,以指定
logging_inputs
和logging_outputs
之间的关系。inputs: [remote_udp_input, remote_tcp_input]
选项指定从其处理日志的输入列表。outputs: [remote_files_output]
选项指定日志发送到的输出列表。
示例 playbook 的第二个 play 中指定的设置包括:
logging_inputs
-
定义日志记录输入字典的列表。
type: basics
选项涵盖了systemd
日志或 Unix 套接字的输入。 logging_outputs
-
定义日志输出字典的列表。
type: forwards
选项支持通过网络向远程日志服务器发送日志。severity: info
选项指的是有关信息重要性的日志消息。facility: mail
选项指的是正在生成日志消息的系统程序类型。target: <host1.example.com
> 选项指定远程日志记录服务器的主机名。udp_port: 601
/tcp_port: 601
选项定义远程日志记录服务器侦听的 UDP/TCP 端口。 logging_flows
-
定义日志记录流字典列表,以指定
logging_inputs
和logging_outputs
之间的关系。inputs: [basic_input]
选项指定从其处理日志的输入列表。输出: [forward_output0, forward_output1]
选项指定日志发送到的输出列表。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在客户端和服务器系统上测试
/etc/rsyslog.conf
文件的语法:rsyslogd -N 1
# rsyslogd -N 1 rsyslogd: version 8.1911.0-6.el8, config validation run (level 1), master config /etc/rsyslog.conf rsyslogd: End of config validation run. Bye.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证客户端系统向服务器发送信息:
在客户端系统中发送测试信息:
logger test
# logger test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务器系统上,查看
/var/log/<host2.example.com>/messages
日志,例如:cat /var/log/<host2.example.com>/messages Aug 5 13:48:31 <host2.example.com> root[6778]: test
# cat /var/log/<host2.example.com>/messages Aug 5 13:48:31 <host2.example.com> root[6778]: test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
<host2.example.com>
是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,本例中为root
。
6.2.3. 使用带有 TLS 的 logging RHEL 系统角色 复制链接链接已复制到粘贴板!
传输层安全性(TLS)是一种加密协议,旨在允许计算机网络上的安全通信。
您可以使用 logging
RHEL 系统角色配置日志消息的安全传输,其中一个或多个客户端从 systemd-journal
服务获取日志,并在使用 TLS 时将它们传送到远程服务器。
通常,在远程日志记录解决方案中传输日志的 TLS 在不可信或公共网络(如互联网)发送敏感数据时使用。另外,通过在 TLS 中使用证书,您可以确保客户端将日志转发到正确的可信服务器。这可以防止诸如"man-in-the-middle"的攻击。
6.2.3.1. 配置带有 TLS 的客户端日志 复制链接链接已复制到粘贴板!
您可以使用 logging
RHEL 系统角色在 RHEL 客户端上配置日志,并使用 TLS 加密将日志传送到远程日志系统。
此流程创建私钥和证书。接下来,它会在 Ansible 清单中 clients 组的所有主机上配置 TLS。TLS 对信息的传输进行加密,确保日志在网络安全传输。
您不必在 playbook 中调用 certificate
RHEL 系统角色来创建证书。当设置了
变量时,logging RHEL 系统角色会自动调用它。
logging
_certificates
要让 CA 能够为创建的证书签名,受管节点必须在 IdM 域中注册。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。 - 受管节点已在 IdM 域中注册。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
logging_certificates
-
此参数的值被传给
certificate
RHEL 系统角色中的certificate_requests
,并用来创建私钥和证书。 logging_pki_files
使用这个参数,您可以配置日志记录用来查找 CA 证书和用于 TLS 的密钥文件的路径和其他设置,使用以下子参数指定:
ca_cert
、ca_cert_src
、cert
、cert_src
、private_key
、private_key_src
和tls
。注意如果您使用
logging_certificates
在受管节点上创建文件,请不要使用ca_cert_src
,cert_src
, 和private_key_src
,用于复制由logging_certificates
创建的文件。ca_cert
-
表示受管节点上 CA 证书文件的路径。默认路径为
/etc/pki/tls/certs/ca.pem
,文件名由用户设置。 cert
-
表示受管节点上证书文件的路径。默认路径为
/etc/pki/tls/certs/server-cert.pem
,文件名由用户设置。 private_key
-
表示受管节点上私钥文件的路径。默认路径为
/etc/pki/tls/private/server-key.pem
,文件名由用户设置。 ca_cert_src
-
代表控制节点上 CA 证书文件的路径,该路径被复制到目标主机上由
ca_cert
指定的位置。如果使用logging_certificates
,请不要使用它。 cert_src
-
代表控制节点上证书文件的路径,该文件的路径被复制到目标主机上由
cert
指定的位置。如果使用logging_certificates
,请不要使用它。 private_key_src
-
代表控制节点上私钥文件的路径,该路径被复制到目标主机上由
private_key
指定的位置。如果使用logging_certificates
,请不要使用它。 tls
-
将此参数设为
true
以确保通过网络安全地传输日志。如果您不想要一个安全的包装程序,您可以设置tls: false
。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
文件 -
/usr/share/doc/rhel-system-roles/logging/
目录 -
/usr/share/ansible/roles/rhel-system-roles.certificate/README.md
文件 -
/usr/share/doc/rhel-system-roles/certificate/
目录 - 使用 RHEL 系统角色请求证书。
-
rsyslog.conf (5)
和syslog (3)
手册页
6.2.3.2. 配置带有 TLS 的服务器日志 复制链接链接已复制到粘贴板!
您可以使用 logging
RHEL 系统角色在 RHEL 服务器上配置日志,并将它们设置为使用 TLS 加密从远程日志系统接收日志。
此流程创建私钥和证书。接下来,它会在 Ansible 清单中 server 组中的所有主机上配置 TLS。
您不必在 playbook 中调用 certificate
RHEL 系统角色来创建证书。logging
RHEL 系统角色会自动调用它。
要让 CA 能够为创建的证书签名,受管节点必须在 IdM 域中注册。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。 - 受管节点已在 IdM 域中注册。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
logging_certificates
-
此参数的值被传给
certificate
RHEL 系统角色中的certificate_requests
,并用来创建私钥和证书。 logging_pki_files
使用这个参数,您可以配置日志记录用来查找 CA 证书和用于 TLS 的密钥文件的路径和其他设置,使用以下子参数指定:
ca_cert
、ca_cert_src
、cert
、cert_src
、private_key
、private_key_src
和tls
。注意如果您使用
logging_certificates
在受管节点上创建文件,请不要使用ca_cert_src
,cert_src
, 和private_key_src
,用于复制由logging_certificates
创建的文件。ca_cert
-
表示受管节点上 CA 证书文件的路径。默认路径为
/etc/pki/tls/certs/ca.pem
,文件名由用户设置。 cert
-
表示受管节点上证书文件的路径。默认路径为
/etc/pki/tls/certs/server-cert.pem
,文件名由用户设置。 private_key
-
表示受管节点上私钥文件的路径。默认路径为
/etc/pki/tls/private/server-key.pem
,文件名由用户设置。 ca_cert_src
-
代表控制节点上 CA 证书文件的路径,该路径被复制到目标主机上由
ca_cert
指定的位置。如果使用logging_certificates
,请不要使用它。 cert_src
-
代表控制节点上证书文件的路径,该文件的路径被复制到目标主机上由
cert
指定的位置。如果使用logging_certificates
,请不要使用它。 private_key_src
-
代表控制节点上私钥文件的路径,该路径被复制到目标主机上由
private_key
指定的位置。如果使用logging_certificates
,请不要使用它。 tls
-
将此参数设为
true
以确保通过网络安全地传输日志。如果您不想要一个安全的包装程序,您可以设置tls: false
。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.4. 使用带有 RELP 的日志记录 RHEL 系统角色 复制链接链接已复制到粘贴板!
可靠的事件日志协议(RELP)是一种通过 TCP 网络记录数据和消息的网络协议。它确保了事件消息的可靠传递,您可以在不容许任何消息丢失的环境中使用它。
RELP 发送者以命令的形式传输日志条目,接收器会在处理后确认它们。为确保一致性,RELP 将事务数保存到传输的命令中,以便进行任何类型的消息恢复。
您可以考虑在 RELP 客户端和 RELP Server 间的远程日志系统。RELP 客户端将日志传送给远程日志系统,RELP 服务器接收由远程日志系统发送的所有日志。要实现这种用例,您可以使用 logging
RHEL 系统角色将日志记录系统配置为可靠地发送和接收日志条目。
6.2.4.1. 配置带有 RELP 的客户端日志 复制链接链接已复制到粘贴板!
您可以使用 logging
RHEL 系统角色配置保存在带有 RELP 的远程日志系统的日志消息传输。
此流程对 Ansible 清单中 客户端
组中的所有主机配置 RELP。RELP 配置使用传输层安全(TLS)来加密消息传输,保证日志在网络上安全传输。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
target
- 这是一个必需的参数,用于指定运行远程日志系统的主机名。
port
- 远程日志记录系统正在监听的端口号。
tls
确保日志在网络上安全地传输。如果您不想要安全打包程序,可以将
tls
变量设置为false
。在与 RELP 工作时,默认的tls
参数被设置为 true,且需要密钥/证书和 triplets {ca_cert
、cert
、private_key
} 和/或 {ca_cert_src
,cert_src
,private_key_src
}。-
如果设置了 {
ca_cert_src
,cert_src
,private_key_src
} 三元组,则默认位置/etc/pki/tls/certs
和/etc/pki/tls/private
被用作受管节点上的目的地,以便从控制节点传输文件。在这种情况下,文件名与 triplet 中的原始名称相同 -
如果设置了 {
ca_cert
,cert
,private_key
} 三元组,则文件在日志配置前应位于默认路径上。 - 如果两个三元组都设置了,则文件将从控制节点的本地路径传输到受管节点的特定路径。
-
如果设置了 {
ca_cert
-
表示 CA 证书的路径。默认路径为
/etc/pki/tls/certs/ca.pem
,文件名由用户设置。 cert
-
表示证书的路径。默认路径为
/etc/pki/tls/certs/server-cert.pem
,文件名由用户设置。 private_key
-
表示私钥的路径。默认路径为
/etc/pki/tls/private/server-key.pem
,文件名由用户设置。 ca_cert_src
-
代表复制到受管节点的本地 CA 证书文件路径。如果指定了
ca_cert
,则会将其复制到该位置。 cert_src
-
代表复制到受管节点的本地证书文件路径。如果指定了
cert
,则会将其复制到该位置。 private_key_src
-
代表复制到受管节点的本地密钥文件路径。如果指定了
private_key
,则会将其复制到该位置。 pki_authmode
-
接受身份验证模式为
name
或fingerprint
。 permitted_servers
- 日志客户端允许通过 TLS 连接和发送日志的服务器列表。
输入
- 日志输入字典列表。
输出
- 日志输出字典列表。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.4.2. 配置带有 RELP 的服务器日志 复制链接链接已复制到粘贴板!
您可以使用 logging
RHEL 系统角色配置服务器,以从带有 RELP 的远程日志记录系统接收日志信息。
此流程对 Ansible 清单中 服务器
组中的所有主机配置 RELP。RELP 配置使用 TLS 加密消息传输,以保证在网络上安全地传输日志。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
port
- 远程日志记录系统正在监听的端口号。
tls
确保日志在网络上安全地传输。如果您不想要安全打包程序,可以将
tls
变量设置为false
。在与 RELP 工作时,默认的tls
参数被设置为 true,且需要密钥/证书和 triplets {ca_cert
、cert
、private_key
} 和/或 {ca_cert_src
,cert_src
,private_key_src
}。-
如果设置了 {
ca_cert_src
,cert_src
,private_key_src
} 三元组,则默认位置/etc/pki/tls/certs
和/etc/pki/tls/private
被用作受管节点上的目的地,以便从控制节点传输文件。在这种情况下,文件名与 triplet 中的原始名称相同 -
如果设置了 {
ca_cert
,cert
,private_key
} 三元组,则文件在日志配置前应位于默认路径上。 - 如果两个三元组都设置了,则文件将从控制节点的本地路径传输到受管节点的特定路径。
-
如果设置了 {
ca_cert
-
表示 CA 证书的路径。默认路径为
/etc/pki/tls/certs/ca.pem
,文件名由用户设置。 cert
-
表示证书的路径。默认路径为
/etc/pki/tls/certs/server-cert.pem
,文件名由用户设置。 private_key
-
表示私钥的路径。默认路径为
/etc/pki/tls/private/server-key.pem
,文件名由用户设置。 ca_cert_src
-
代表复制到受管节点的本地 CA 证书文件路径。如果指定了
ca_cert
,则会将其复制到该位置。 cert_src
-
代表复制到受管节点的本地证书文件路径。如果指定了
cert
,则会将其复制到该位置。 private_key_src
-
代表复制到受管节点的本地密钥文件路径。如果指定了
private_key
,则会将其复制到该位置。 pki_authmode
-
接受身份验证模式为
name
或fingerprint
。 permitted_clients
- 日志记录服务器允许通过 TLS 连接和发送日志的客户端列表。
输入
- 日志输入字典列表。
输出
- 日志输出字典列表。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 7 章 使用日志文件对问题进行故障排除 复制链接链接已复制到粘贴板!
日志文件包含有关系统的消息,包括内核、服务及其上运行的应用。这些信息可帮助故障排除问题或监控系统功能。Red Hat Enterprise Linux 中的日志记录系统是基于内置的 syslog
协议的。特定的程序使用这个系统记录事件并将其整理到日志文件中,这些文件在审核操作系统和故障排除各种问题时非常有用。
7.1. 处理 syslog 信息的服务 复制链接链接已复制到粘贴板!
以下两个服务处理 syslog
信息:
-
systemd-journald
守护进程
systemd-journald
守护进程收集来自各种来源的信息并将其转发到 Rsyslog
以便进一步处理。systemd-journald
守护进程从以下来源收集信息:
- 内核
- 引导过程的早期阶段
- 启动并运行守护进程的标准和错误输出
-
Syslog
-
Rsyslog
服务
Rsyslog
服务根据类型和优先权对 syslog
信息进行排序,并将其写入 /var/log
目录下的文件中。/var/log
目录会永久保存日志信息。
7.2. 存储 syslog 信息的日志文件 复制链接链接已复制到粘贴板!
/var/log
目录下的以下日志文件存储 syslog
信息。
-
/var/log/messages
- 除以下外的所有syslog
信息 -
/var/log/secure
- 与安全和验证相关的信息和错误 -
/var/log/maillog
- 与邮件服务器相关的信息和错误 -
/var/log/cron
- 与定期执行的任务相关的日志文件 -
/var/log/boot.log
- 与系统启动相关的日志文件
上述列表仅包含一些文件,/var/log/
目录中的实际文件列表取决于哪些服务和应用程序登录到这个目录。
7.3. 使用命令行查看日志 复制链接链接已复制到粘贴板!
Journal 是 systemd 的一个组件,可帮助查看和管理日志文件。它解决了与传统日志记录相关的问题,与系统的其余部分紧密集成,并支持各种日志记录技术以及日志条目的访问管理。
您可以通过命令行,使用 journalctl
命令查看系统日志中的消息。
命令 | 描述 |
---|---|
| 显示所有收集的日志条目。 |
|
显示与特定文件相关的日志。例如: |
| 显示当前引导的日志。 |
| 显示当前引导的内核日志。 |
命令 | 描述 |
---|---|
|
过滤日志以显示与 |
|
合并匹配。例如,这个命令显示与 |
|
加号(+)分隔符将两个表达式按逻辑 OR 组合在一起。例如,这个命令显示来自带有 |
|
此命令显示与引用同一字段的任一表达式匹配的所有条目。在这里,这个命令会显示与 systemd-unit |
命令 | 描述 |
---|---|
| 显示引导号、其 ID 以及与引导相关的第一条和最后一个消息的时间戳列表。您可以在下一个命令中使用 ID 来查看详细信息。 |
| 显示有关指定的引导 ID 的信息。 |
7.4. 查看 web 控制台中的日志 复制链接链接已复制到粘贴板!
了解如何在 RHEL web 控制台中访问、查看和过滤日志。
7.4.1. 查看 web 控制台中的日志 复制链接链接已复制到粘贴板!
RHEL 8 web 控制台日志部分是 journalctl
实用程序的 UI。您可以在 web 控制台界面中访问系统日志。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
点 Logs。
- 点击列表中的选定日志条目条目,打开日志条目详情。
您可以使用
按钮在显示时暂停新日志条目。恢复新日志条目后,Web 控制台将加载您使用 按钮后报告的所有日志条目。您可以根据时间、优先级或标识符过滤日志。如需更多信息,请参阅 web 控制台中的过滤日志。
7.4.2. 在 web 控制台中过滤日志 复制链接链接已复制到粘贴板!
您可以在 web 控制台中过滤日志条目。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
- 点 Logs。
- 默认情况下,Web 控制台显示最新的日志条目。要根据具体时间范围过滤,请点 Time 下拉菜单并选择一个首选的选项。
- 默认情况下会显示 Error 及更高级别的日志列表。要根据不同的优先级过滤,请点击 Error 及更高下拉菜单并选择一个首选的优先级。
- 默认情况下,Web 控制台会显示所有标识符的日志。要过滤特定标识符的日志,请点 All 下拉菜单并选择标识符。
- 要打开日志条目,请点所选日志。
7.4.3. 在 web 控制台中过滤日志的文本搜索选项 复制链接链接已复制到粘贴板!
文本搜索选项功能为过滤日志提供了大量选项。如果您决定使用文本搜索过滤日志,您可以使用三个下拉菜单中定义的预定义选项,或者您可以自己键入整个搜索。
下拉菜单
您可以使用三个下拉菜单来指定搜索的主参数:
- 时间 :此下拉菜单包含搜索的不同时间范围的预定义搜索。
-
Priority:此下拉菜单提供了不同优先级级别的选项。它对应于
journalctl --priority
选项。默认优先级值为 Error 及以上。每次在不指定其它优先级时,会设置它。 -
Identifier:在这个下拉菜单中,您可以选择要过滤的标识符。对应于
journalctl --identifier
选项。
限定符
您可以使用六个限定符来指定搜索。它们包含在用于过滤日志表的 Options 中。
日志字段
如果要搜索特定日志字段,可以用其内容指定字段。
在日志信息中进行自由文本搜索
您可以在日志消息中过滤您选择的任何文本字符串。字符串也可以采用正则表达式的形式。
高级日志过滤 I
过滤 2020 年 10 月 22 日之后带有 'systemd' 识别的、日志字段 'JOB_TYPE' 是 'start' 或 'restart 的所有日志信息。
-
在搜索字段中输入
identifier:systemd since:2020-10-22 JOB_TYPE=start,restart
。 检查结果。
高级日志过滤 II
过滤上一次启动前出现的所有来自"cockpit.service' systemd 单元且邮件正文包含"error"或"fail"的所有日志消息。
-
在搜索字段中输入
service:cockpit boot:-1 error|fail
。 检查结果。
7.4.4. 使用文本搜索框过滤 web 控制台中的日志 复制链接链接已复制到粘贴板!
您可以使用 web 控制台中的文本搜索框根据不同参数过滤日志。搜索合并了过滤下拉菜单、限定符、日志字段和自由格式字符串搜索的使用。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
登录到 RHEL web 控制台。
详情请参阅 Web 控制台的日志记录。
- 点 Logs。
使用下拉菜单指定您想要过滤的三个主要的限定符 - 时间范围、优先级和标识符。
优先级(Priority) 限定符总需要有一个值。如果没有指定,它会自动过滤 Error 及以上 优先级。请注意,您设置的选项反映了在文本搜索框中。
指定您要过滤的 log 字段。
您可以添加几个日志字段。
- 您可以使用自由格式的字符串搜索任何其他内容。搜索框也接受正则表达式。
7.4.5. 日志过滤选项 复制链接链接已复制到粘贴板!
有几个 journalctl
选项可用于在 web 控制台中过滤日志,这或许非常有用。其中一些已作为 web 控制台界面的下拉菜单的一部分进行介绍。
选项名称 | 使用 | 注 |
---|---|---|
| 按消息优先级过滤输出。取单个数字或文本日志级别。日志级别是常见的 syslog 日志级别。如果指定了单一日志级别,则会显示具有此日志级别的所有消息或低(更重要)日志级别。 | 包括在优先级下拉菜单中。 |
| 显示被 syslog 标识为 SYSLOG_IDENTIFIER 的信息。可多次指定。 | 包括在 标识符 下拉菜单中。 |
| 仅显示最新的日志条目,并在新条目附加到日志中时持续打印新条目。 | 没有包含在下拉菜单中。 |
|
显示指定 |
没有包含在下拉菜单中。对应于 |
| 显示来自特定启动的消息。 正整数代表从日志开始查找启动,等于或小于零的整数代表将从日志末尾查找启动。因此, 1 表示日志中的第一个引导(按时间顺序排列), 2 为第 2 个,以此类推 ; -0 是最后一次引导,-1 是最后一次引导的前一个,以此类推。 | 在时间下拉菜单中作为 Current boot 或 Previous boot。其他选项需要手动编写。 |
| 开始显示指定日期更新或分别位于指定日期或比指定日期旧的条目。日期规格应为 "2012-10-30 18:17:16"。如果省略了时间部分,使用 "00:00:00"。如果只省略了秒的组件,使用 ":00"。如果省略了日期的部分,使用当前日期。另外,还可以使用 "yesterday"、"today"、"tomorrow"(分别代表前一天、当天和明天的 00:00:00),以及 "now"(代表当前时间)。最后,可以指定相对时间,前缀为 "-" 或 "+",分别引用当前时间前或之后的时间。 | 没有包含在下拉菜单中。 |
第 8 章 管理用户和组 复制链接链接已复制到粘贴板!
防止未经授权访问文件和流程需要准确的用户和组管理。如果您没有集中管理帐户,或者您只需要特定系统上的用户帐户或组,您可以在主机上本地创建它们。
8.1. 管理用户和组帐户简介 复制链接链接已复制到粘贴板!
用户和组群的控制是 Red Hat Enterprise Linux(RHEL)系统管理的核心元素。每个 RHEL 用户都有不同的登录凭证,并可分配给不同的组以自定义其系统权限。
8.1.1. 用户和组介绍 复制链接链接已复制到粘贴板!
创建文件的用户是该文件的拥有者以及该文件的组所有者。这个文件会单独为拥有者、组和组以外的成员分配读、写和执行权限。文件所有者只能由 root
用户更改。root
用户和文件拥有者都可以更改对该文件的访问权限。常规用户可以将他们拥有的文件的组群所有权改为他们所属的组。
每个用户都与一个唯一数字身份号关联,称为 user ID (UID)。每个组都与一个 group ID (GID)关联。组群中的用户共享相同的读取、写入和执行该组所拥有的文件的权限。
8.1.2. 配置保留的用户和组群 ID 复制链接链接已复制到粘贴板!
默认情况下,RHEL 为系统用户和组保留在 1000 以下的用户和组群 ID。您可以在 setup
软件包中找到保留的用户和组群 ID。在更改 UID_MIN
和 GID_MIN
值前创建的用户和组的 UID 和 GID 不会改变。保留的用户和组群 ID 记录在:
/usr/share/doc/setup/uidgid
/usr/share/doc/setup/uidgid
要将 ID 分配给从 5000 开始的新用户和组,因为保留范围将来可能会增加。
修改 /etc/login.defs
文件中的 UID_MIN
和 GID_MIN
参数,以定义默认值(1000)以外的启动 ID。
不要通过更改 SYS_UID_MAX
来提高系统 1000 以上保留的 ID,以避免与保留 1000 限制的系统冲突。
流程
-
在编辑器中打开
/etc/login.defs
文件。 设置
UID_MIN
变量,例如:Min/max values for automatic uid selection in useradd
# Min/max values for automatic uid selection in useradd # UID_MIN 5000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置
GID_MIN
变量,例如:Min/max values for automatic gid selection in groupadd
# Min/max values for automatic gid selection in groupadd # GID_MIN 5000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 常规用户动态分配的 UID 和 GID 现在从 5000 开始。
8.1.3. 用户私人组群 复制链接链接已复制到粘贴板!
RHEL 使用用户私有组(UPG)系统配置,这有助于管理 Linux 组。无论何时在系统中添加新用户,都会创建一个用户私人组群。用户私人组群的名称与为其创建的用户的名称相同,该用户是该用户私人组群中的唯一成员。
UPG 简化了多个用户之间在项目上的协作。此外,UPG 系统配置可以安全地为新创建的文件或目录设置默认权限,因为它允许该用户和此用户所属的组对文件或目录进行修改。
所有本地组的列表都存储在 /etc/group
配置文件中。
8.2. 管理用户帐户入门 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 是一个多用户操作系统,可使不同计算机上的多个用户访问安装在一台计算机上的一个系统。每个用户都在自己的帐户下操作,因此管理用户帐户代表 Red Hat Enterprise Linux 系统管理的一个核心元素。
以下是不同类型的用户帐户:
普通用户帐户:
为特定系统用户创建普通帐户。这些帐户可以在正常的系统管理过程中添加、删除和修改。
系统用户帐户:
系统用户帐户代表系统中的特定应用程序标识符。此类帐户通常仅在软件安装时添加或操作,且不会在以后进行修改。
警告系统帐户假定在一个系统中本地可用。如果这些帐户是远程配置和提供的,如 LDAP 配置的实例中,则可能会出现系统中断和服务启动故障。
对于系统帐户,1000 以下的用户 ID 被保留。对于普通帐户,使用从 1000 开始的 ID。要为用户和组定义 min/max ID,系统用户和组,请查看
/etc/login.defs
文件。组:
组是出于共同目的将多个用户帐户连接在一起的实体,例如对特定文件授予访问权限。
8.2.1. 使用命令行工具管理帐户和组 复制链接链接已复制到粘贴板!
使用以下基本命令行工具管理用户帐户和组。
流程
创建新的用户帐户:
useradd example.user
# useradd example.user
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 example.user 所属用户帐户分配新密码:
passwd example.user
# passwd example.user
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将用户添加到组中:
usermod -a -G example.group example.user
# usermod -a -G example.group example.user
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3. 从命令行管理用户 复制链接链接已复制到粘贴板!
您可以使用命令行界面(CLI)来管理用户和组。这可让您在 Red Hat Enterprise Linux 环境中添加、删除和修改用户和用户组。
8.3.1. 使用命令行添加新用户 复制链接链接已复制到粘贴板!
您可以使用 useradd
工具添加新用户。
先决条件
-
有
Root
访问权限
流程
添加新用户,使用:
useradd <options> <username>
# useradd <options> <username>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
useradd
命令的选项替换 options,并使用用户名称替换 username。例 8.1. 添加新用户
添加用户 ID 为
5000
的用户sarah
,使用:useradd -u 5000 sarah
# useradd -u 5000 sarah
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证新用户是否已添加,使用
id
工具程序。id sarah
# id sarah
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令返回:
uid=5000(sarah) gid=5000(sarah) groups=5000(sarah)
uid=5000(sarah) gid=5000(sarah) groups=5000(sarah)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3.2. 使用命令行添加新组 复制链接链接已复制到粘贴板!
您可以使用 groupadd
工具添加新组。
先决条件
-
有
Root
访问权限
流程
要添加新组,请使用:
groupadd options group-name
# groupadd options group-name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
groupadd
命令的命令行选项替换 options,并使用 group-name 替换 group-name。例 8.2. 添加新组
要添加组 ID 为
5000
的组sysadmins
,请使用:groupadd -g 5000 sysadmins
# groupadd -g 5000 sysadmins
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证新组是否已添加,使用
tail
实用程序。getent group sysadmin
# getent group sysadmin
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令返回:
sysadmins:x:5000:
sysadmins:x:5000:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3.3. 从命令行将用户添加到补充组中 复制链接链接已复制到粘贴板!
您可以将用户添加到补充组中,以管理权限或启用对特定文件或设备的访问权限。
先决条件
-
有
root
访问权限
流程
要在用户的附加组中添加一个组,请使用:
usermod --append -G <group_name> <username>
# usermod --append -G <group_name> <username>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证新的组被添加到用户
sysadmin
的附加组中,请使用:groups <username>
# groups <username>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3.4. 创建组目录 复制链接链接已复制到粘贴板!
在 UPG 系统配置下,您可以将 set-group 身份权限 (setgid 位)应用到目录。setgid
位使得管理共享目录的组项目变得更加简单。当您将 setgid
位应用到某个目录中时,在该目录中创建的文件会自动分配给拥有该目录的组群。在此组中具有写和执行权限的任何用户现在可以在目录中创建、修改和删除文件。
先决条件
-
有
Root
访问权限
流程
创建目录:
mkdir <directory-name>
# mkdir <directory-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建组:
groupadd <group-name>
# groupadd <group-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 向组中添加用户:
usermod --append -G <group_name> <username>
# usermod --append -G <group_name> <username>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将目录的用户和组群所有权与 group-name 组关联:
chgrp <group_name> <directory>
# chgrp <group_name> <directory>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置写入权限以允许用户创建和修改文件和目录,并设置
setgid
位以在目录中应用此权限:chmod g+rwxs <directory>
# chmod g+rwxs <directory>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证设置权限的正确性,请使用:
ls -ld <directory>
# ls -ld <directory>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令返回:
*drwx__rws__r-x.* 2 root _group-name_ 6 Nov 25 08:45 _directory-name_
*drwx__rws__r-x.* 2 root _group-name_ 6 Nov 25 08:45 _directory-name_
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3.5. 在命令行上删除用户 复制链接链接已复制到粘贴板!
您可以使用命令行删除用户帐户。此外,下面提到的命令是删除用户帐户的命令,也可选择性地删除用户数据和元数据,如其主目录和配置文件。
-
您有
root
访问权限。 - 用户当前存在。
确保用户已退出登录:
loginctl terminate-user user-name
# loginctl terminate-user user-name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要仅删除用户帐户,而不删除用户数据:
userdel user-name
# userdel user-name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要删除用户、数据和元数据:
删除用户、其主目录、其邮件假脱机及其 SELinux 用户映射:
userdel --remove --selinux-user user-name
# userdel --remove --selinux-user user-name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除其他用户元数据:
rm -rf /var/lib/AccountsService/users/user-name
# rm -rf /var/lib/AccountsService/users/user-name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此目录存储系统在主目录可用之前所需的有关用户的信息。根据系统配置,用户在登录屏幕进行身份验证之前,主目录可能无法使用。
重要如果您没有删除此目录,并在稍后重新创建同一用户,则重新创建的用户仍可以使用从已删除的用户继承来的某些设置。
8.4. 在 Web 控制台中管理用户帐户 复制链接链接已复制到粘贴板!
RHEL web 控制台提供了一个图形界面来添加、编辑和删除系统用户帐户。
您还可以在 web 控制台中设置密码过期和终止用户会话。
8.4.1. 使用 Web 控制台添加新帐户 复制链接链接已复制到粘贴板!
您可以将用户帐户添加到系统,并通过 RHEL web 控制台为帐户设置管理权限。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
- 点 。
- 点 。
在 Full Name 字段中输入用户全名。
RHEL web 控制台会自动在全名中推荐用户名并在 User Name 字段中填充该用户名。如果您不想使用原始命名规则(由名的第一个字母和完整的姓组成),对它进行更新。
在 Password/Confirm 字段中输入密码并重新输入该密码以便验证您的密码是否正确。
下面的颜色栏显示您输入密码的安全级别,这不允许您创建使用弱密码的用户。
- 点 保存设置并关闭对话框。
- 选择新创建的帐户。
在 Groups 下拉菜单中选择您要添加到新帐户的组。
验证
- 您可以在 Accounts 设置中看到新帐户,您可以使用其凭证连接到该系统。
8.4.2. 在 web 控制台中强制密码过期 复制链接链接已复制到粘贴板!
默认情况下,用户帐户将密码设定为永远不会过期。您可以设置系统密码在指定的天数后过期。当密码过期时,用户必须在下次登录时更改密码,然后才能访问系统。
先决条件
- 已安装 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
- 登录到 RHEL 8 web 控制台。
- 点 。
- 选择您要强制密码过期的用户帐户。
点 Password 行上的 。
- 在 Password expiration 对话框中,选择 Require password change every … days,然后输入一个正整数,代表密码过期的天数。
点
。Web 控制台会立即在 Password 行上显示未来密码更改请求的日期。
8.5. 使用命令行编辑用户组 复制链接链接已复制到粘贴板!
用户属于某个组集合,允许用户的逻辑组集合对文件和文件夹具有类似的访问权限。您可以从命令行编辑主和补充用户组,以更改用户的权限。
8.5.1. 主和补充用户组 复制链接链接已复制到粘贴板!
组是出于共同目的将多个用户帐户连接在一起的实体,例如对特定文件授予访问权限。
在 RHEL 中,用户组可以充当主或补充组。主和补充组具有以下属性:
- 主组
- 每个用户始终只有一个主组。
- 您可以更改用户的主组。
- 补充组
- 您可以将现有用户添加到现有的补充组中,以使用相同的安全和访问权限管理组中的用户。
- 用户可以是零、一个或多个补充组的成员。
8.5.2. 列出用户的主和补充组 复制链接链接已复制到粘贴板!
您可以列出用户的组,以查看他们所属的主和补充组。
流程
显示用户的主组以及任何补充组的名称:
groups user-name
$ groups user-name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果不提供用户名,则命令将显示当前用户的组成员身份。第一个组是主组,后跟可选的补充组。
例 8.3. 列出用户 sarah 的组:
groups sarah
$ groups sarah
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示:
sarah : sarah wheel developer
sarah : sarah wheel developer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 用户
arah
有一个主组sarah
,它是补充组wheel
和developer
的成员。
8.5.3. 更改用户的主组 复制链接链接已复制到粘贴板!
您可以将现有用户的主组更改为一个新组。
先决条件
-
root
访问权限 - 新组必须存在
流程
更改用户的主组:
usermod -g <group-name> <user-name>
# usermod -g <group-name> <user-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意更改用户的主组时,命令还会将用户主目录中所有文件的组所有权自动更改为新的主组。您必须手动修复用户主目录外文件的组所有权。
验证您是否更改了用户的主组:
groups <username>
$ groups <username>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.5.4. 从命令行将用户添加到补充组中 复制链接链接已复制到粘贴板!
您可以将用户添加到补充组中,以管理权限或启用对特定文件或设备的访问权限。
先决条件
-
有
root
访问权限
流程
要在用户的附加组中添加一个组,请使用:
usermod --append -G <group_name> <username>
# usermod --append -G <group_name> <username>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证新的组被添加到用户
sysadmin
的附加组中,请使用:groups <username>
# groups <username>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.5.5. 从补充组中删除用户 复制链接链接已复制到粘贴板!
您可以从补充组中删除现有的用户,以限制他们对文件和设备的权限或访问。
先决条件
-
有
root
访问权限
流程
从补充组中删除用户:
gpasswd -d <user-name> <group-name>
# gpasswd -d <user-name> <group-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证您是否从次要组 developers 中删除了用户 sarah:
groups <username>
$ groups <username>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.5.6. 更改用户的所有补充组 复制链接链接已复制到粘贴板!
您可以覆盖您希望用户保留其成员的补充组的列表。
先决条件
-
您有
root
访问权限。 - 补充组必须存在。
流程
覆盖用户的补充组的列表:
usermod -G <group-names> <username>
# usermod -G <group-names> <username>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将用户一次添加到多个补充组中,请使用逗号分隔组名称,并且没有插入空格。例如:
wheel,developer
。重要如果用户是当前您未指定的组的成员,则该命令会从组中删除该用户。
验证
验证您是否正确设置了补充组列表:
groups <username>
# groups <username>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.6. 更改和重置根密码 复制链接链接已复制到粘贴板!
如果现有的 root 密码不再满意,您可以以 root 用户身份和非 root
用户更改它。
8.6.1. 作为 root 用户更改 root 密码 复制链接链接已复制到粘贴板!
您可以使用 passwd
命令以 root
用户身份更改 root
密码。
先决条件
-
有
Root
访问权限
流程
要更改
root
密码,使用:passwd
# passwd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在修改前,会提示您输入您当前的密码。
8.6.2. 以非 root 用户的身份更改或重置根密码 复制链接链接已复制到粘贴板!
您可以使用 passwd
命令以非 root 用户身份更改或重置忘掉的root
密码。
先决条件
- 您可以以非 root 用户身份登录。
-
有以 root 身份使用
sudo
执行命令的权限。
流程
以
wheel
组中的非 root 用户身份修改或重置root
密码,请使用:sudo passwd root
$ sudo passwd root
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此时会提示您输入当前的非 root 密码,然后才能更改
root
密码。
8.6.3. 重置 root 密码 复制链接链接已复制到粘贴板!
如果您无法以 root 用户身份登录,且没有具有 sudo 权限的非 root 用户,您可以重置 root 密码或不属于管理 wheel
组,您可以通过将系统引导至特殊模式来重置 root 密码。在这个模式中,引导过程会在系统从 initramfs
接管控制权到实际系统前停止。
流程
重启系统,在 GRUB 引导屏幕上按
键中断引导过程。此时会出现内核引导参数。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将光标设置为以 linux 开头的行的末尾。
-
将
rd.break
附加到以linux
开头的行的末尾。 按
使用更改的参数启动系统。此时会出现
switch_root
提示符。将文件系统重新挂载为可写:
mount -o remount,rw /sysroot
# mount -o remount,rw /sysroot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,文件系统以只读形式挂载到
/sysroot
目录中。将文件系统重新挂载为可写才可以更改密码。进入
chroot
环境:chroot /sysroot
# chroot /sysroot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重置
root
密码:passwd
# passwd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 按照命令行中的步骤完成
root
密码的更改。在下次系统引导时启用 SELinux 重新标记进程:
touch /.autorelabel
# touch /.autorelabel
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 退出
chroot
环境:exit
# exit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 退出
switch_root
提示符,以重启系统:exit
exit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 等待 SELinux 重新标记过程完成。请注意,重新标记大型磁盘可能需要很长时间。系统会在这个过程完成后自动重启。
验证
-
使用新的
root
密码,以 root 用户身份登录。 可选:显示与当前有效用户 ID 关联的用户名:
whoami
# whoami
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 9 章 管理 sudo 访问 复制链接链接已复制到粘贴板!
系统管理员可以授予 sudo
访问权限,以允许非 root 用户执行通常为 root 用户保留的管理命令。
9.1. sudoers 中的用户授权 复制链接链接已复制到粘贴板!
/etc/sudoers
文件,默认情况下,在 /etc/sudoers.d/
目录中指定哪些用户可以使用 sudo
命令以其他用户身份执行命令。规则可应用到单个用户和用户组。您还可以使用别名轻松地为主机组、命令,甚至用户定义规则。
当用户为没有授权的用户输入带有 sudo
的命令时,系统会将包含字符串 <username> : user NOT in sudoers
的消息记录到日志中。
默认的 /etc/sudoers
文件提供授权信息和示例。您可以通过取消相应行的注释来激活特定的示例规则。带有用户授权的部分标有以下介绍:
## Next comes the main part: which users can run what software on ## which machines (the sudoers file can be shared between multiple ## systems).
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
您可以使用以下格式创建新的 sudoers
授权并修改现有授权:
<username> <hostname.example.com>=(<run_as_user>:<run_as_group>) <path/to/command>
<username> <hostname.example.com>=(<run_as_user>:<run_as_group>) <path/to/command>
其中:
-
<username>
是输入命令的用户,如user1
。如果该值以%
开头,它定义一个组,例如%group1
。 -
<hostname.example.com>
是应用规则的主机的名称。 -
(<run_as_user>:<run_as_group>)
部分 定义以其身份执行命令的用户或组。如果省略这个部分,<username>
可以以 root 身份执行命令。 -
<path/to/command>
是命令的完整的绝对路径。您还可以通过在命令路径后面添加这些选项,将用户限制为仅使用特定的选项和参数执行命令。如果没有指定任何选项,用户可以使用带有所有选项的命令。
您可以通过将任何这些变量替换为 ALL
,来将规则应用到所有用户、主机或命令。
通过在规则的某些或多个部分中使用 ALL,可能会导致严重的安全风险。
您可以使用 !
运算符对参数求反。例如,!root
指定除 root 以外的所有用户。请注意,允许特定的用户、组和命令比禁止特定的用户、组和命令更安全。这是因为允许规则还阻止新的未授权的用户或组。
避免对命令使用负规则,因为用户可以通过使用 alias
命令重命名命令来克服此类规则。
系统会从头到尾读取 /etc/sudoers
文件。因此,如果文件中包含用户的多个条目,则按顺序应用条目。如果值冲突,系统将使用最后匹配的项,即使它不是最具体的匹配。
要在系统更新期间保留规则,并更轻松地修复错误,请在 /etc/sudoers.d/
目录中创建新文件来输入新规则,而不是直接在 /etc/sudoers
文件中输入规则。当系统在 /etc/sudoers
文件中达到以下行时,会读取 /etc/sudoers.d
目录中的文件:
#includedir /etc/sudoers.d
#includedir /etc/sudoers.d
请注意,此行开头的数字符号(#
)是语法的一部分,并不意味着该行是一个注释行。该目录中文件的名称不能包含句点,也不能以波形符(~
)结尾。
9.2. 添加 sudo 规则以允许组的成员以 root 用户身份执行命令 复制链接链接已复制到粘贴板!
系统管理员可以通过授予他们 sudo
访问权限来允许非 root 用户执行管理命令。sudo
命令为用户提供了管理访问权限,而无需使用 root 用户的密码。
当用户需要执行管理命令时,您可以在使用 sudo
命令前执行该命令。如果用户有命令的授权,则可以执行命令,就像他们是 root 一样。
请注意以下限制:
-
只有 sudoers 配置文件中列出的用户才能使用
sudo
命令。 -
命令在用户的 shell 下执行,而不是在 root shell 下执行。但是,有一些例外情况,如为任何用户授予完整的
sudo
权限时。在这种情况下,用户可以在 root shell 中切换到并运行命令。例如: -
sudo -i
-
sudo su -
先决条件
- 有对系统的 root 访问权限。
流程
以 root 身份,打开
/etc/sudoers
文件。visudo
# visudo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/sudoers
文件定义sudo
命令应用的策略。在
/etc/sudoers
文件中,找到为wheel
管理组中用户授予sudo
访问权限的行。## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL
## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
确保以
%wheel
开头的行没有用数字符号(#
)注释掉。 - 保存所有更改并退出编辑器。
将您要授予
sudo
访问权限的用户添加到wheel
管理组中。usermod --append -G wheel <username>
# usermod --append -G wheel <username>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<username>
替换为用户的名称。
验证
以
wheel
组的成员登录并运行:sudo whoami
# sudo whoami root
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3. 使非特权用户运行某些命令 复制链接链接已复制到粘贴板!
作为管理员,您可以通过在 /etc/sudoers.d/
目录中配置策略来允许非特权用户在特定工作站上输入某些命令。这比为用户授予完全 sudo
访问权限或授予 root 密码更加安全,理由如下:
- 对特权操作进行更精细的控制。您可以允许用户对特定主机执行某些操作,而不是向他们提供完整的管理访问权限。
-
更好的日志记录.当用户通过
sudo
执行操作时,该操作将使用其用户名而非 root 记录。 -
透明控制。当用户试图使用
sudo
权限时,您可以为用户设置电子邮件通知。
先决条件
- 有对系统的 root 访问权限。
流程
在
/etc/sudoers.d
目录中创建一个新文件:visudo -f /etc/sudoers.d/<filename>
# visudo -f /etc/sudoers.d/<filename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 文件会在编辑器中自动打开。
将以下行添加到
/etc/sudoers.d/<filename>
文件中:<username> <hostname.example.com> = (<run_as_user>:<run_as_group>) <path/to/command>
<username> <hostname.example.com> = (<run_as_user>:<run_as_group>) <path/to/command>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<username>
替换为用户的名称。 -
将
<hostname.example.com>
替换为主机的 URL。 -
将
(<run_as_user > : <run_as_group>)
替换为可执行命令的用户或组。如果省略这个部分,<username>
可以以 root 身份执行命令。 -
将
<path/to/command>
替换为命令的完整的绝对路径。您还可以通过在命令路径后面添加这些选项,将用户限制为仅使用特定的选项和参数执行命令。如果没有指定任何选项,用户可以使用带有所有选项的命令。 - 要在一行上允许同一主机上的两个和多个命令,您可以用逗号后跟一个空格把它们分开来列出它们。
-
将
例如,要允许 user1
在 host1.example.com
上执行 dnf
和 reboot
命令,请输入:
user1 host1.example.com = /bin/dnf, /sbin/reboot
user1 host1.example.com = /bin/dnf, /sbin/reboot
可选: 要在每次用户试图使用
sudo
权限时收到电子邮件通知,请在文件中添加以下行:Defaults mail_always Defaults mailto="<email@example.com>"
Defaults mail_always Defaults mailto="<email@example.com>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,退出编辑器。
验证
要验证用户是否可以使用
sudo
特权运行命令,请切换帐户:su <username> -
# su <username> -
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以用户身份,输入带有
sudo
的命令:sudo whoami
$ sudo whoami [sudo] password for <username>:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入用户的
sudo
密码。如果正确配置了特权,sudo 以配置的用户身份执行命令。例如,使用
dnf
命令,它显示以下输出:... usage: dnf [options] COMMAND ...
... usage: dnf [options] COMMAND ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果系统返回以下出错信息,用户不允许使用 sudo 运行命令。
<username> is not in the sudoers file. This incident will be reported.
<username> is not in the sudoers file. This incident will be reported.
+ 如果系统返回以下出错信息,其配置未正确完成。
<username> is not allowed to run sudo on <host.example.com>.
<username> is not allowed to run sudo on <host.example.com>.
+ 如果系统返回以下出错信息,则在用户的规则中没有正确定义该命令。
`Sorry, user _<username>_ is not allowed to execute '_<path/to/command>_' as root on _<host.example.com>_.`
`Sorry, user _<username>_ is not allowed to execute '_<path/to/command>_' as root on _<host.example.com>_.`
第 10 章 管理文件系统权限 复制链接链接已复制到粘贴板!
文件系统权限控制用户和组帐户读、修改和执行文件的内容以及进入目录的能力。仔细设置权限以保护您的数据免受未授权的访问。
10.1. 管理文件权限 复制链接链接已复制到粘贴板!
每个文件或目录都有三个级别的所有权:
- 用户所有者(u)。
- 组所有者(g)。
- 其他(o)。
可为每个级别的所有权分配以下权限:
- 读(r)。
- 写(w)。
- 执行(x)。
请注意,文件的执行权限允许执行该文件。目录的执行权限允许访问目录中的内容,但不执行它。
创建新文件或目录时,会自动为其分配默认权限集。文件或目录的默认权限基于两个因素:
- 基本权限。
- user file-creation mode mask(umask)。
10.1.1. 基本文件权限 复制链接链接已复制到粘贴板!
每当创建新文件或目录时,会自动为其分配基本权限。文件或目录的基本权限可以使用符号或者数值表示。
权限 | 符号 | 数值 |
无权限 | --- | 0 |
执行 | --x | 1 |
写 | -w- | 2 |
写和执行 | -wx | 3 |
读 | r-- | 4 |
读和执行 | r-x | 5 |
读写 | rw- | 6 |
读、写、执行 | rwx | 7 |
目录的基本权限是 777
(drwxrwxrwxrwx
),它为任何人都授予读、写和执行的权限。这意味着目录所有者、组和其它可以列出目录的内容,并可以在该目录下(以及其子目录)中创建、删除和编辑项。
请注意,一个目录中的单个文件可以有它们自己的权限,例如可以阻止用户您编辑它们,即使用户对该目录有非受限的访问权限。
文件的基本权限为 666
(-rw-rw-rw-
),它为所有人都授予读取和写入的权限。这意味着文件所有者、组和其它用户都可以读和编辑该文件。
例 10.1. 文件的权限
如果文件有以下权限:
ls -l
$ ls -l
-rwxrw----. 1 sysadmins sysadmins 2 Mar 2 08:43 file
-
-
表示它是文件。 -
rwx
表示文件所有者有读、写和执行文件的权限。 -
rw-
表示组有读写权限,但不能执行文件。 -
---
表示其他用户没有读、写或执行文件的权限。 -
.
表示为该文件设定了 SELinux 安全上下文。
例 10.2. 目录的权限
如果一个目录有以下权限:
ls -dl directory
$ ls -dl directory
drwxr-----. 1 sysadmins sysadmins 2 Mar 2 08:43 directory
-
d
表示它是一个目录。 rwx
表示目录所有者有读、写和访问目录内容的权限。作为目录所有者,您可以列出目录中的项目(文件、子目录),访问这些项目的内容并进行修改。
-
r-x
表示组有读目录内容的权限,但没有写权限 - 创建新条目或删除文件。x
权限意味着您也可以使用cd
命令访问该目录。 ---
表示其他用户没有权限读取、写入或者访问该目录的内容。作为不是用户拥有者或作为组的用户,您无法列出目录中的项目、访问这些项目的信息或修改它们。
-
.
表示为该目录设定了 SELinux 安全性上下文。
自动分配给某个文件或者目录的基本权限不是文件或目录最终的默认权限。当您创建文件或目录时,基本权限会被 umask 更改。基本权限和 umask 的组合会为文件和目录创建默认权限。
10.1.2. 用户文件创建模式掩码 复制链接链接已复制到粘贴板!
用户文件创建模式掩码(umask)是一个变量,用于控制如何为新创建的文件和目录设置文件权限。umask 会自动从基本权限值中删除权限,以提高 Linux 系统的整体安全性。umask 可以用符号 或 八进制 值表示。
权限 | 符号 | 数值 |
读、写和执行 | rwx | 0 |
读写 | rw- | 1 |
读和执行 | r-x | 2 |
读 | r-- | 3 |
写和执行 | -wx | 4 |
写 | -w- | 5 |
执行 | --x | 6 |
无权限 | --- | 7 |
标准用户的默认 umask 是 0002
。root
用户的默认 umask 为 0022
。
umask 的第一个数字代表特殊权限(sticky 位)。umask 的最后三位数字分别代表从用户拥有者(u)、组群所有者(g)和其它(o)中删除的权限。
例 10.3. 在创建文件时应用 umask
下面的例子演示了,对一个基本权限为 777
的文件应用值为 0137
的 umask,使在创建该文件时其默认权限变为 640
。
10.1.3. 默认的文件权限 复制链接链接已复制到粘贴板!
为所有新创建的文件和目录自动设置默认权限。默认权限的值通过将 umask 应用到基本权限来确定。
例 10.4. 标准用户创建的目录的默认权限
当 标准用户 创建了一个新 目录 时,umask 被设为 002
(rwxrwxr-x
),目录的基本权限被设为 777
(rwxrwxrwx
)。这会使默认权限为 775(
drwxrwxr-x
)。
符号 | 数值 | |
基本权限 | rwxrwxrwx | 777 |
Umask | rwxrwxr-x | 002 |
默认权限 | rwxrwxr-x | 775 |
这意味着目录所有者、组和其它可以列出目录的内容,并可以在该目录下(以及其子目录)中创建、删除和编辑项。其他用户只能列出该目录的内容并将其下移到其中。
例 10.5. 由标准用户创建的文件的默认权限
当 标准用户 创建一个新 文件 时,umask 被设为 002
(rwxrwxr-x
),文件的基本权限被设为 666
(rw-rw-rw-
)。这会使默认权限为 664(
-rw-rw-r--
)。
符号 | 数值 | |
基本权限 | rw-rw-rw- | 666 |
Umask | rwxrwxr-x | 002 |
默认权限 | rw-rw-r-- | 664 |
这意味着,文件拥有者和组群可以读取和编辑该文件,而其他用户只能读取该文件。
例 10.6. root 用户创建的目录的默认权限
当 root 用户 创建了一个新 目录 时,umask 被设为 022
(rwxr-xr-x
),目录的基本权限被设为 777
(rwxrwxrwx
)。这会使默认权限为 755
(rwxr-xr-x
)。
符号 | 数值 | |
基本权限 | rwxrwxrwx | 777 |
Umask | rwxr-xr-x | 022 |
默认权限 | rwxr-xr-x | 755 |
这意味着目录所有者可以列出目录的内容,并可以在该目录下(以及其子目录)中创建、删除和编辑项。这个组群和其它只能列出该目录的内容并将其下移。
例 10.7. 由 root 用户创建的文件的默认权限
当 root 用户 创建了一个新 文件 时,umask 被设为 022
(rwxr-xr-x
),文件的基本权限被设为 666
(rw-rw-rw-
)。这会使默认权限为 644(
-rw-r-r--
)。
符号 | 数值 | |
基本权限 | rw-rw-rw- | 666 |
Umask | rwxr-xr-x | 022 |
默认权限 | rw-r—r-- | 644 |
这意味着,文件所有者可以读取和编辑文件,而组和其它用户只能读取该文件。
出于安全考虑,常规文件默认没有执行权限,即使 umask 设为 000
(rwxrwxrwx
)。但是,创建的目录可以具有执行权限。
10.1.4. 使用符号值更改文件权限 复制链接链接已复制到粘贴板!
您可以使用带有符号值(字母和符号的组合)的 chmod
工具来更改文件或目录的文件权限。
您可以分配以下 权限 :
- 读(r)
- 写(w)
- 执行(x)
权限可分配给以下 所有权级别 :
- 用户所有者 (u)
- 组所有者(g)
- 其他 (o)
- 所有 (a)
要添加或删除权限,您可以使用以下 符号 :
-
+
在现有权限之上添加权限 -
-
从现有权限中删除权限 -
=
删除现有权限,并明确定义新权限
流程
要更改文件或目录的权限,请使用:
chmod <level><operation><permission> file-name
$ chmod <level><operation><permission> file-name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<level>
替换为您要为其设置权限的 所有权级别。将<operation>
替换为其中一个 符号。将<permission>
替换为您要分配的 权限。用文件或目录的名称替换 file-name。例如,要为每个人授予读、写和执行(rwx
)my-script.sh
的权限,请使用chmod a=rwx my-script.sh
命令。如需了解更多详细信息,请参阅 基本文件权限。
验证
要查看特定文件的权限,请使用:
ls -l file-name
$ ls -l file-name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 用文件名替换 file-name。
要查看特定目录的权限,请使用:
ls -dl directory-name
$ ls -dl directory-name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用目录名替换 directory-name。
要查看特定目录中所有文件的权限,请使用:
ls -l directory-name
$ ls -l directory-name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用目录名替换 directory-name。
例 10.8. 更改文件和目录的权限
要将
my-file.txt
的文件权限从-rw-rw-r--
改为-rw------
,请使用:显示
my-file.txt
的当前权限:ls -l my-file.txt
$ ls -l my-file.txt -rw-rw-r--. 1 username username 0 Feb 24 17:56 my-file.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从组所有者(
g
)和其他用户(o
)删除读、写和执行(rwx
)文件的权限:chmod go= my-file.txt
$ chmod go= my-file.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,任何在等号(
=
)之后没有被指定的权限都会被自动禁止。验证
my-file.txt
的权限是否设置正确:ls -l my-file.txt
$ ls -l my-file.txt -rw-------. 1 username username 0 Feb 24 17:56 my-file.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要将
my-directory
的文件权限从drwxrwx---
改为drwxrwxr-x
,请使用:显示
my-directory
的当前权限:ls -dl my-directory
$ ls -dl my-directory drwxrwx---. 2 username username 4096 Feb 24 18:12 my-directory
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为所有用户(
a
) 添加读和执行(r-x
)权限:chmod o+rx my-directory
$ chmod o+rx my-directory
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
my-directory
及其内容的权限是否设置正确:ls -dl my-directory
$ ls -dl my-directory drwxrwxr-x. 2 username username 4096 Feb 24 18:12 my-directory
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.1.5. 使用数值更改文件权限 复制链接链接已复制到粘贴板!
您可以使用带有八进制(数字)的 chmod
工具来更改文件或目录的文件权限。
流程
要为现有文件或者目录更改文件权限,请使用:
chmod octal_value file-name
$ chmod octal_value file-name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 用文件或目录的名称替换 file-name。使用数值替换 octal_value。如需了解更多详细信息,请参阅 基本文件权限。
10.2. 管理访问控制列表 复制链接链接已复制到粘贴板!
每个文件和目录同时只能有一个用户所有者和一个组所有者。如果您要授予用户权限访问属于不同用户或组的特定文件或目录,同时保持其他文件和目录私有,则您可以使用 Linux 访问控制列表(ACL)。
10.2.1. 设置访问控制列表 复制链接链接已复制到粘贴板!
您可以使用 setfacl
工具为文件或目录设置 ACL。
先决条件
-
有
root
访问权限。
流程
要显示特定文件或目录的当前 ACL,请运行:
getfacl file-name
$ getfacl file-name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 用文件或目录的名称替换 file-name。
- 要为文件或目录设置 ACL,请使用:
setfacl -m u:username:symbolic_value file-name
# setfacl -m u:username:symbolic_value file-name
使用用户名替换 username,使用符号值替换 symbolic_value,使用文件或目录的名称替换 file-name。如需更多信息,请参阅系统中的 setfacl
man page。
例 10.9. 修改组项目的权限
以下示例描述了如何修改属于 root
组的 root
用户拥有的 group-project
文件的权限, 以便使该文件:
- 不能被任何人执行。
-
用户
andrew
有rw-
权限。 -
用户
susan
有---
权限。 -
其他用户有
r--
权限。
流程
setfacl -m u:andrew:rw- group-project setfacl -m u:susan:--- group-project
# setfacl -m u:andrew:rw- group-project
# setfacl -m u:susan:--- group-project
验证
要验证用户
andrew
有rw-
权限,用户susan
有---
权限,其他用户有r--
权限,使用:getfacl group-project
$ getfacl group-project
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出会返回:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.3. 管理 umask 复制链接链接已复制到粘贴板!
您可以使用 umask
工具显示、设置或更改 umask 的当前或默认值。
10.3.1. 显示 umask 的当前值 复制链接链接已复制到粘贴板!
您可以使用 umask
工具以符号或数值模式显示 umask 的当前值。
流程
要在符号模式下显示 umask 的当前值,请使用:
umask -S
$ umask -S
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在八进制模式下显示 umask 的当前值,请使用:
umask
$ umask
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意以八进制模式显示 umask 时,您可以注意到它显示了四位数字(
0002
或0022
)。umask 的第一个数字代表一个特殊的位(spicky 位、SGID 位或 SUID 位)。如果第一个数字设定为0
,则代表没有设置特殊位。
10.3.2. 使用符号值设置 umask 复制链接链接已复制到粘贴板!
您可以使用 umask
工具及符号值(字母和符号组合)来为当前的 shell 会话设置 umask
您可以分配以下 权限 :
- 读(r)
- 写(w)
- 执行(x)
权限可分配给以下 所有权级别 :
- 用户所有者 (u)
- 组所有者(g)
- 其他 (o)
- 所有 (a)
要添加或删除权限,您可以使用以下 符号 :
-
+
在现有权限之上添加权限 -
-
从现有权限中删除权限 =
删除现有权限,并明确定义新权限注意任何在等号(
=
)后未指定的权限都将被自动禁止。
流程
要为当前的 shell 会话设置 umask,请使用:
umask -S <level><operation><permission>
$ umask -S <level><operation><permission>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<level>
替换为您要为其设置 umask 的 所有权级别。将<operation>
替换为其中一个 符号。将<permission>
替换为您要分配的 权限。例如,要将 umask 设为u=rwx,g=rwx,o=rwx
,使用umask -S a=rwx
。如需了解更多详细信息,请参阅 用户文件创建模式。
注意umask 仅对当前 shell 会话有效。
10.3.3. 使用数值设置 umask 复制链接链接已复制到粘贴板!
您可以使用 umask
工具和八进制值(数字)来为当前 shell 会话设置 umask。
流程
要为当前的 shell 会话设置 umask,请使用:
umask octal_value
$ umask octal_value
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用数值替换 octal_value。如需了解更多详细信息,请参阅 用户文件创建模式掩码。
注意umask 仅对当前 shell 会话有效。
10.3.4. 更改非登录 shell 的默认 umask 复制链接链接已复制到粘贴板!
您可以通过修改 /etc/bashrc
文件来更改标准用户的默认 bash
umask。
先决条件
-
有
root
访问权限。
流程
-
在编辑器中打开
/etc/bashrc
文件。 修改以下部分以设置新的默认
bash
umask
:if [ $UID -gt 199 ] && [ “id -gn” = “id -un” ]; then umask 002 else umask 022 fi
if [ $UID -gt 199 ] && [ “id -gn” = “id -un” ]; then umask 002 else umask 022 fi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改
UID -gt 199
将对所有ID >= 199
及影响服务和安全性应用新的 umask。
将 umask 的默认值(002
)替换为另一个数值。如需了解更多详细信息,请参阅 用户文件创建模式掩码。
- 保存更改并退出编辑器。
10.3.5. 更改登录 shell 的默认 umask 复制链接链接已复制到粘贴板!
您可以通过修改 /etc/profile
文件来更改 root
用户的默认 bash
umask。
先决条件
-
root
访问权限
流程
-
以
root
用户身份,在编辑器中打开/etc/profile
文件。 修改以下部分以设置新的默认
bash
umask :if [ $UID -gt 199 ] && [ “/usr/bin/id -gn” = “/usr/bin/id -un” ]; then umask 002 else umask 022 fi
if [ $UID -gt 199 ] && [ “/usr/bin/id -gn” = “/usr/bin/id -un” ]; then umask 002 else umask 022 fi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 umask 的数值(
022
)替换为另一个数值。如需了解更多详细信息,请参阅 用户文件创建模式掩码。- 保存更改并退出编辑器。
10.3.6. 更改特定用户的默认 umask 复制链接链接已复制到粘贴板!
您可以通过修改用户的 .bashrc
来更改特定用户的默认 umask。
流程
将指定 umask 的八进制值的行追加到特定用户的
.bashrc
文件中。echo 'umask octal_value' >> /home/username/.bashrc
$ echo 'umask octal_value' >> /home/username/.bashrc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用数值替换 octal_value,并使用用户名替换 username。如需了解更多详细信息,请参阅 用户文件创建模式掩码。
10.3.7. 为新创建的主目录设置默认权限 复制链接链接已复制到粘贴板!
您可以通过修改 /etc/login.defs
文件来更改新创建的用户的主目录的权限模式。
流程
-
以
root
用户身份,在编辑器中打开/etc/login.defs
文件。 修改以下部分来设置新的默认 HOME_MODE :
HOME_MODE is used by useradd(8) and newusers(8) to set the mode for new home directories. If HOME_MODE is not set, the value of UMASK is used to create the mode.
# HOME_MODE is used by useradd(8) and newusers(8) to set the mode for new # home directories. # If HOME_MODE is not set, the value of UMASK is used to create the mode. HOME_MODE 0700
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将默认的八进制值(
0700
)替换为另一个八进制值。所选模式将用于为主目录创建权限。- 如果设置了 HOME_MODE,请保存更改并退出编辑器。
如果没有设置 HOME_MODE,请修改 UMASK 来为新创建的主目录设置模式:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将默认的八进制值(
022
)替换为另一个八进制值。如需了解更多详细信息,请参阅 用户文件创建模式掩码。- 保存更改并退出编辑器。
第 11 章 管理 systemd 复制链接链接已复制到粘贴板!
作为系统管理员,您可以使用 systemd
管理系统的关键方面。充当 Linux 操作系统的系统和服务管理器的systemd
软件套件提供用于控制、报告和系统初始化的工具和服务。systemd
的主要功能包括:
- 在启动过程中并行启动系统服务
- 按需激活守护进程
- 基于依赖项的服务控制逻辑
systemd
管理的基本对象是 systemd 单元,一个系统资源和服务的表示。systemd
单元由一个名称、类型和配置文件组成,用来定义和管理特定的任务。您可以使用单元文件来配置系统行为。请参阅以下各种 systemd 单元类型示例:
- 服务
- 控制和管理单个系统服务。
- 目标
- 表示定义系统状态的一组单元。
- 设备
- 管理硬件设备及其可用性。
- Mount
- 处理文件系统挂载。
- 定时器
- 调度任务以特定间隔运行。
11.1. systemd 单元文件位置 复制链接链接已复制到粘贴板!
您可以在以下目录中找到单元配置文件:
目录 | 描述 |
---|---|
|
与安装的 RPM 软件包一起分发的 |
|
在运行时创建的 |
|
使用 |
systemd
的默认配置在编译过程中定义,您可以在 /etc/systemd/system.conf
文件中找到配置。通过编辑此文件,您可以通过全局覆盖 systemd
单元的值来修改默认配置。
例如,若要覆盖设为 90 秒的超时限制的默认值,可使用 DefaultTimeoutStartSec
参数输入所需的值(以秒为单位)。
DefaultTimeoutStartSec=required value
DefaultTimeoutStartSec=required value
11.2. 使用 systemctl 管理系统服务 复制链接链接已复制到粘贴板!
作为系统管理员,您可以使用 systemctl
工具管理系统服务。您可以执行各种任务,如启动、停止、重启运行的服务、启用和禁用服务以在引导时启动、列出可用的服务以及显示系统服务状态。
11.2.1. 列出系统服务 复制链接链接已复制到粘贴板!
您可以列出所有当前载入的服务单元,并显示所有可用服务单元的状态。
流程
使用 systemctl
命令执行以下任何一个任务:
列出所有当前载入的服务单元:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,
systemctl list-units
命令只显示活跃的单位。对于每个服务单元文件,命令提供以下参数的概述:UNIT
- 服务单元的全名
LOAD
- 配置文件的载入状态
ACTIVE
或SUB
- 当前高级别和低级别单元文件激活状态
DESCRIPTION
- 单元目的和功能的简短描述
使用以下带有
--all
或-a
命令行选项的命令,列出 所有载入的单元,而不考虑其状态:systemctl list-units --type service --all
$ systemctl list-units --type service --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出所有可用服务单元的状态(enabled 或 disabled):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于每个服务单元,这个命令会显示:
UNIT FILE
- 服务单元的全名
STATE
- 服务单元是否已启用或禁用,以便在引导时自动启动的信息
11.2.2. 显示系统服务状态 复制链接链接已复制到粘贴板!
您可以检查任何服务单元以获取详细信息,并验证该服务的状态,无论是否启用了以便在引导期间启动还是当前正在运行。您还可以查看在特定的服务单元之后或之前启动的服务。
流程
显示与系统服务对应的服务单元的详细信息:
systemctl status <name>.service
$ systemctl status <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<name>
替换为您要检查的服务单元的名称(例如:gdm
)。这个命令显示以下信息:
- 所选服务单元的名称,后跟一个简短描述
- 可用服务单元信息中 描述的一个或多个字段
-
服务单元的执行:如果单元由
root
用户执行 最新的日志条目
Expand 表 11.2. 可用的服务单元信息 项 描述 Loaded
是否服务单元已载入的信息、到单元文件的绝对路径,以及是否已启用该单元以便在引导时启动。
Active
服务单元是否在运行的信息,后面有一个时间戳。
Main PID
进程 ID 和相应的系统服务的名称。
Status
相关系统服务的额外信息。
Process
有关相关进程的附加信息。
CGroup
有关相关控制组(
cgroups
)的更多信息。
验证特定的服务单元是否正在运行:
systemctl is-active <name>.service
$ systemctl is-active <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确定是否已启用了特定的服务单元以便在引导时启动:
systemctl is-enabled <name>.service
$ systemctl is-enabled <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果指定的服务单元正在运行或已启用,则
systemctl is-active
和systemctl is-enabled
命令都会返回退出状态0
。检查在指定的服务单元之前,
systemd
命令哪些服务启动systemctl list-dependencies --after <name>.service
# systemctl list-dependencies --after <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,要查看在
gdm
之前启动的服务的列表,请输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查在指定的服务单元之后,
systemd
命令哪些服务启动:systemctl list-dependencies --before <name>.service
# systemctl list-dependencies --before <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,要查看在
gdm
后systemd
要启动的服务的列表,请输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.2.3. 启动和停止 systemd 单元 复制链接链接已复制到粘贴板!
您可以使用 systemctl start
命令在当前会话中启动系统服务。
先决条件
- 您有 Root 访问权限。
流程
在当前会话中启动一个系统服务:
*systemctl start <systemd_unit> *
# *systemctl start <systemd_unit> *
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 <
systemd_unit
> 替换为您要启动的服务单元的名称(例如httpd.service
)。注意在
systemd
中,服务之间存在正和负的依赖项。启动一个特定的服务可能需要启动一个或多个其他服务(正依赖项)或停止一个或多个服务(负依赖项)。当您试图启动新服务时,
systemd
会自动解析所有依赖项,而不会向用户明确通知。这意味着,如果您已运行了一个服务,并且您尝试使用负依赖项启动另一个服务,则第一个服务会自动停止。例如,如果您正在运行
sendmail
服务,并且您试图启动postfix
服务,systemd
首先自动停止sendmail
,因为这些服务会冲突,且无法在同一端口上运行。
11.2.4. 停止一个系统服务 复制链接链接已复制到粘贴板!
如果要在当前会话中停止系统服务,请使用 systemctl stop
命令。
先决条件
- 根访问权限
流程
停止一个系统服务:
systemctl stop <name>.service
# systemctl stop <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<name>
替换为您要停止的服务单元的名称(例如:bluetooth
)。
11.2.5. 重启并重新加载一个系统服务 复制链接链接已复制到粘贴板!
您可以使用 restart
命令在当前会话中重启系统服务,以执行以下操作:
- 在当前会话中停止所选的服务单元,并立即再次启动它。
- 仅在对应的服务已在运行时才重启服务单元。
- 重新加载系统服务的配置,而不中断其执行。
先决条件
- 您有 Root 访问权限。
流程
重启一个系统服务:
systemctl restart <name>.service
# systemctl restart <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您要重启的服务单元的名称替换
<name>
(例如httpd
)。如果所选服务单元没有运行,这个命令会启动它。
仅在相应的服务已在运行时重启服务单元:
systemctl try-restart <name>.service
# systemctl try-restart <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入配置而不中断服务执行:
systemctl reload <name>.service
# systemctl reload <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意不支持此功能的系统服务忽略此命令。要重启这些服务,请使用
reload-or-restart
和reload-or-try-restart
命令。
11.2.6. 启用一个系统服务,以便在引导时启动 复制链接链接已复制到粘贴板!
您可以启用一个服务以便在引导时自动启动,这些更改将在下次重启时应用。
先决条件
- 您有 Root 访问权限。
流程
验证单元是否已屏蔽:
systemctl status <systemd_unit>
# systemctl status <systemd_unit>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果这个单元被屏蔽,请首先取消屏蔽它:
systemctl unmask <systemd_unit>
# systemctl unmask <systemd_unit>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在引导时启用服务:
systemctl enable <systemd_unit>
# systemctl enable <systemd_unit>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 <
;systemd_unit
> 替换为您要启用的服务单元的名称(例如httpd
)。
(可选)将 现在
选项传给命令,以便立即启动该单元。
11.2.7. 禁用一个系统服务在引导时启动 复制链接链接已复制到粘贴板!
您可以防止服务单元在引导时自动启动。如果您禁用某个服务,它不会在引导时启动,但可以手动启动。您还可以屏蔽服务,使其无法手动启动。屏蔽是一种禁用服务的方法,使该服务能够永久不可用,直到再次屏蔽该服务。
先决条件
- 您有 Root 访问权限。
流程
禁用要在引导时启动的服务:
systemctl disable <name>.service
# systemctl disable <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<name>
替换为您要禁用的服务单元的名称(例如:bluetooth
)。(可选)传递-now
命令,以便在服务当前正在运行时同时停止该服务。可选: 要防止单元被管理员意外启动,或者作为其他单元的依赖项,请屏蔽该服务:
systemctl mask <name>.service
# systemctl mask <name>.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.3. 引导至目标系统状态 复制链接链接已复制到粘贴板!
作为系统管理员,您可以控制系统的引导过程,并定义您希望系统引导到的状态。这称为 systemd
目标,它是您的系统启动以达到某一特定级别功能的一组 systemd
单元。在使用 systemd 目标时,您可以查看默认目标,选择一个运行时的目标,更改默认引导目标,引导到紧急或救援目标。
11.3.1. 目标单元文件 复制链接链接已复制到粘贴板!
systemd
中的目标是一组相关的单元,它们在系统启动期间充当同步点。目标单元文件以 .target
文件扩展名结尾,代表 systemd
目标。目标单元的目的是通过一组依赖项将各种 systemd
单元分组到一起。
考虑以下示例:
-
同样,
multi-user.target
单元启动其他基本系统服务,如 NetworkManager (NetworkManager.service
) 或 D-Bus (dbus.service
),并激活另一个名为basic.target
的目标单元。
您可以将以下 systemd
目标设置为默认或当前目标:
rescue | 在基本系统中拉取的单元目标,并生成一个救援 shell |
---|---|
多用户 | 用于设置多用户系统的单元目标 |
图形化 | 用于设置图形登录屏幕的单元目标 |
紧急 | 在主控制台上启动紧急 shell 的单元目标 |
11.3.2. 更改引导到的默认目标 复制链接链接已复制到粘贴板!
default.target
符号链接指的是系统应引导到的 systemd 目标。当系统启动时,systemd 会解析此链接并引导至定义的目标。您可以在 /etc/systemd/system/default.target
文件中找到当前所选的默认目标单元。每个目标代表某个特定的功能级,用于对其他单元进行分组。另外,目标单元在引导过程中作为同步点提供服务。您可以更改系统引导到的默认目标。当您设置默认目标单元时,当前目标将保持不变,直到下次重启为止。
先决条件
- 您有 Root 访问权限。
流程
确定当前用于启动系统的默认目标单元
systemd
:systemctl get-default
# systemctl get-default graphical.target
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出当前载入的目标:
systemctl list-units --type target
# systemctl list-units --type target
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将系统配置为默认使用不同的目标单元:
systemctl set-default <name>.target
# systemctl set-default <name>.target
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<name>
替换为您要默认使用的目标单元的名称。Example: # systemctl set-default multi-user.target Removed /etc/systemd/system/default.target Created symlink /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target
Example: # systemctl set-default multi-user.target Removed /etc/systemd/system/default.target Created symlink /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证默认目标单元:
systemctl get-default
# systemctl get-default multi-user.target
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:切换到新的默认目标:
systemctl isolate default.target
# systemctl isolate default.target
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,重启系统。
11.3.3. 更改当前目标 复制链接链接已复制到粘贴板!
在运行的系统中,您可以在不重启的情况下更改当前启动中的目标单元。如果您切换到不同的目标,systemd
会启动这个目标需要的所有服务及其依赖项,并停止新目标没有启用的所有服务。手动切换到其他目标只是临时操作。重启主机时,systemd 会再次引导到默认目标。
流程
可选:显示您可以选择的目标列表:
systemctl list-units --type target
# systemctl list-units --type target
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您只能隔离单元文件中设置了
AllowIsolate=yes
选项的目标。在当前引导中切换到不同的目标单元:
systemctl isolate <name>.target
# systemctl isolate <name>.target
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 <name> 替换为您要在当前引导中使用的目标单元的名称。
Example: # systemctl isolate multi-user.target
Example: # systemctl isolate multi-user.target
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令启动名为
multi-user
的目标单元和所有依赖的单元,并立即停止所有其他单元。
11.3.4. 引导至救援模式 复制链接链接已复制到粘贴板!
您可以引导到提供单用户环境的 救援模式,以便在系统无法进入后续目标以及常规引导过程失败时进行故障排除或修复。在救援模式中,系统会尝试挂载所有本地文件系统,并启动某些重要的系统服务,但不会激活网络接口。
先决条件
- 根访问权限
流程
要进入救援模式,在当前会话中更改当前目标:
systemctl rescue
# systemctl rescue Broadcast message from root@localhost on pts/0 (Fri 2023-03-24 18:23:15 CEST): The system is going down to rescue mode NOW!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意这个命令与
systemctl isolate rescue.target
类似,但它也会向当前登录到该系统的所有用户发送信息性消息。要防止
systemd
发送信息,输入带有以下命令行选项--no-wall
的命令:systemctl --no-wall rescue
# systemctl --no-wall rescue
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
故障排除
如果您的系统无法进入救援模式,您可以引导至 紧急模式,其提供尽可能小的环境。在紧急模式下,系统仅挂载用于读取的 root 文件系统,不会尝试挂载任何其他本地文件系统,不激活网络接口,并且仅启动几个必要的服务。
11.3.5. 引导过程故障排除 复制链接链接已复制到粘贴板!
作为系统管理员,您可以在引导时选择非默认目标来对引导过程进行故障排除。在引导时更改目标仅会影响单个引导。您可以引导到 紧急模式,它提供尽可能小的环境。
流程
- 重启系统,并通过按 Enter 键之外的任意键中断引导装载程序菜单倒计时,这将发起一个正常启动。
- 将光标移至要启动的内核条目。
- 按 E 键编辑当前条目。
移动到以
linux
开头的行的末尾,然后按 Ctrl+E 跳到行尾:linux ($root)/vmlinuz-5.14.0-70.22.1.e19_0.x86_64 root=/dev/mapper/rhel-root ro crash\ kernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv/swap rhgb quiet
linux ($root)/vmlinuz-5.14.0-70.22.1.e19_0.x86_64 root=/dev/mapper/rhel-root ro crash\ kernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv/swap rhgb quiet
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要选择一个备用引导目标,请将
systemd.unit=
参数附加到以linux
开头的行的末尾:linux ($root)/vmlinuz-5.14.0-70.22.1.e19_0.x86_64 root=/dev/mapper/rhel-root ro crash\ kernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv/swap rhgb quiet systemd.unit=<name>.target
linux ($root)/vmlinuz-5.14.0-70.22.1.e19_0.x86_64 root=/dev/mapper/rhel-root ro crash\ kernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv/swap rhgb quiet systemd.unit=<name>.target
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<name>
替换为您要使用的目标单元的名称。例如:systemd.unit=emergency.target
- 按 Ctrl+X 使用这些设置进行引导。
11.4. 关闭、挂起和休眠系统 复制链接链接已复制到粘贴板!
作为系统管理员,您可以使用不同的电源管理选项来管理功耗,执行合适的 shutdown 以确保保存所有数据,或者重启系统以应用更改和更新。
11.4.1. 系统关闭 复制链接链接已复制到粘贴板!
要关闭系统,您可以直接使用 systemctl
工具,或者通过 shutdown
命令来调用这个工具。
使用 shutdown
工具有以下优点:
-
在 RHEL 8 中,您可以使用时间参数调度关闭。
这也会警告用户系统已计划 shutdown。
11.4.2. 安排一个系统 shutdown 复制链接链接已复制到粘贴板!
作为系统管理员,您可以安排一个延迟 shutdown,给用户保存其工作及注销系统留出时间。使用 shutdown
命令执行以下操作:
关闭系统,并在特定时间关闭机器:
shutdown --poweroff hh:mm
# shutdown --poweroff hh:mm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
hh:mm
是 24 小时时间表示法的时间。为防止新的登录,在系统 shutdown 前 5 分钟会创建/run/nologin
文件 。当使用时间参数时,您可以通过指定可选的 wall 消息 来通知登录到计划关闭的系统的用户,如
shutdown --poweroff 13:59 "Attention。系统将于 13:59"
关闭。在延迟后关闭和停止系统,而不关闭机器:
shutdown --halt +m
# shutdown --halt +m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
+m
是延迟时间(以分钟为单位)。您可以使用now
关键字作为+0
的别名。取消待处理的 shutdown
shutdown -c
# shutdown -c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.4.3. 使用 systemctl 命令来关闭系统 复制链接链接已复制到粘贴板!
作为系统管理员,您可以关闭系统并关闭机器,或使用 systemctl
命令关闭和停止系统,而不关掉机器电源。
先决条件
- 根访问权限
流程
使用 systemctl
命令执行以下任何一个任务:
关闭系统并关掉机器电源:
systemctl poweroff
# systemctl poweroff
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 关闭和停止系统,而不关掉机器电源:
systemctl halt
# systemctl halt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
默认情况下,运行其中任何一个命令都可让 systemd
向当前登录到该系统的所有用户发送一条信息性消息。要防止 systemd
发送这条消息,请使用 --no-wall
命令行选项运行所选命令。
11.4.4. 重启系统 复制链接链接已复制到粘贴板!
当您重启系统时,systemd
会停止所有正在运行的程序和服务,系统会关闭,然后立即启动。
先决条件
- 您有 Root 访问权限。
流程
重启系统:
systemctl reboot
# systemctl reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
默认情况下,当您使用此命令时,systemd
会向当前登录到该系统的所有用户发送一条信息性消息。要防止 systemd
发送这条消息,请使用 --no-wall
选项运行这个命令。
11.4.5. 通过挂起和休眠系统来优化功耗 复制链接链接已复制到粘贴板!
作为系统管理员,您可以管理功耗,节省系统能源,并保留系统的当前状态。要做到这一点,请应用以下模式之一:
- suspend
- Hibernate
- Hybrid Sleep
- suspend-then-hibernate
先决条件
- 您有 Root 访问权限。
流程
选择适当的节能方法:
暂停
Suspend
ing 将系统状态保存在 RAM 中,除了 RAM 模块外,关闭机器中的大多数设备。当您重新打开机器时,系统会从内存中恢复其状态,而无需再次引导。由于系统状态保存在 RAM 中,而不是保存在硬盘上,因此,从挂起模式恢复系统比从休眠模式恢复要快得多。但是,挂起的系统状态也会受到断电的影响。要挂起系统,请运行:systemctl suspend
# systemctl suspend
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Hibernate
Hibernating 在硬盘中保存系统状态,并关闭机器。当您重新打开机器时,系统会从保存的数据中恢复其状态,而无需再次引导。由于系统状态保存在硬盘上,而不是保存在 RAM 中,因此机器不必保持对 RAM 模块的供电。但是,因此,从休眠模式恢复系统要比将其恢复为挂起模式恢复要慢得多。要休眠系统,请运行:systemctl hibernate
# systemctl hibernate
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 混合睡眠状态
组合了休眠和暂停的元素。系统首先在硬盘上保存当前状态,并进入类似挂起的低电源状态,这允许系统更快地恢复。混合睡眠的好处是,如果系统在睡眠状态下断电,它仍然可以从硬盘上保存的镜像中恢复之前的状态,类似于休眠。要休眠并挂起系统,请运行:systemctl hybrid-sleep
# systemctl hybrid-sleep
Copy to Clipboard Copied! Toggle word wrap Toggle overflow suspend
-then-hibernate
此模式首先挂起系统,这会将当前系统状态保存到 RAM,并将系统置于低电源模式。如果系统保持挂起一段时间,则系统会休眠,您可以在HibernateDelaySec
参数中定义。休眠将系统状态保存到硬盘上,并完全关闭系统。suspend-then-hibernate 模式提供了保留电池电源的好处,同时您仍能快速地恢复工作。另外,这个模式确保您的数据在出现电源故障时被保存。挂起然后休眠系统:systemctl suspend-then-hibernate
# systemctl suspend-then-hibernate
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.4.6. 更改电源按钮行为 复制链接链接已复制到粘贴板!
当您在计算机上按 power 按钮时,它会默认挂起或关闭系统。您可以根据您的偏好自定义此行为。
11.4.6.1. 在按按钮且 GNOME 未运行时更改电源按钮的行为 复制链接链接已复制到粘贴板!
当您在非图形 systemd
目标中按 power 按钮时,它会默认关闭系统。您可以根据您的偏好自定义此行为。
先决条件
- 管理访问权限.
流程
编辑
/etc/systemd/logind.conf
配置文件,并将HandlePowerKey=poweroff
变量设置为以下选项之一:poweroff
- 关闭计算机。
reboot
- 重启系统。
halt
- 启动系统停止。
kexec
-
启动
kexec
重启。 suspend
- 挂起系统。
hibernate
- 启动系统休眠。
ignore
- 什么都不做。
例如,要在按下电源按钮时重启系统,请使用这个设置:
HandlePowerKey=reboot
HandlePowerKey=reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.4.6.2. 在按按钮和 GNOME 运行时更改电源按钮的行为 复制链接链接已复制到粘贴板!
在图形登录屏幕或在图形用户会话中,按 power 按钮默认挂起机器。当用户物理按下 power 按钮或从远程控制台按下虚拟 power 按钮时,才会出现这种情况。您可以选择不同的 power 按钮行为。
流程
在
/etc/dconf/db/local.d/01-power
文件中为系统范围的设置创建一个本地数据库,其内容如下:[org/gnome/settings-daemon/plugins/power] power-button-action=<value>
[org/gnome/settings-daemon/plugins/power] power-button-action=<value>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下电源按钮操作之一替换 <
value
>:nothing
- 什么都不做。
suspend
- 挂起系统。
hibernate
- 休眠系统。
interactive
显示一个弹出窗口查询,询问用户要做什么。
使用交互模式时,在按下 power 按钮后,系统会在 60 秒后自动关闭。但是,您可以从弹出查询中选择不同的行为。
可选:覆盖用户的设置,并阻止用户更改它。在
/etc/dconf/db/local.d/locks/01-power
文件中输入以下配置:/org/gnome/settings-daemon/plugins/power/power-button-action
/org/gnome/settings-daemon/plugins/power/power-button-action
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新系统数据库:
dconf update
# dconf update
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 注销并重新登录,使系统范围的设置生效。
第 12 章 配置时间同步 复制链接链接已复制到粘贴板!
在 IT 环境中保持准确的时间非常重要。所有跨网络设备的一致的时间提高了日志文件的可追溯性,以及某些依赖同步时钟的协议。例如,Kerberos 使用时间戳来防止重播攻击。用户空间守护进程更新内核中运行的系统时钟。从 Red Hat Enterprise Linux 8 开始,NTP
协议由 chronyd
守护进程实现,它可从 chrony
软件包中的存储库中获得。
12.1. chrony 套件介绍 复制链接链接已复制到粘贴板!
网络时间协议(NTP)
的实现是 chrony。您可以使用 chrony:
-
将系统时钟与
NTP
服务器同步 - 将系统时钟与参考时钟同步,如 GPS 接收器
- 将系统时钟与手动时间输入同步
-
作为
NTPv4(RFC 5905)
服务器或对等服务器,为网络中的其他计算机提供时间服务
在各种条件中 chrony 执行良好:
- 包括网络连接间歇性
- 大量嵌套的网络
- 更改温度(普通计算机时钟对温度敏感)
- 不持续运行或在虚拟机上运行的系统。
通过互联网镜像同步的两天机器之间的准确性通常在几毫秒之内,而对于 LAN 中的机器则为几十微秒。硬件时间戳或硬件参考时钟可以将两台计算机之间的准确性提高到子微秒级。
chrony 包括 chronyd
(一个在用户空间运行的守护进程)和 chronyc(可用来监控 chronyd
性能并在运行时更改各种操作参数的命令行程序)。
chronyd 守护进程可以通过命令行工具 chronyc 监控和控制。这个工具提供了一个命令提示,允许输入大量命令来查询 chronyd
的当前状态并修改其配置。在默认情况下,chronyd
只接受来自本地 chronyc 实例的命令,但它也可以被配置为接受来自远程主机的监控命令。应该限制远程访问。
12.2. 使用 chronyc 来控制 chronyd 复制链接链接已复制到粘贴板!
您可以使用 chronyc 命令行工具控制 chronyd
。
流程
要在互动模式中使用命令行工具 chronyc 来更改本地
chronyd
实例,以根
用户身份输入以下命令:chronyc
# chronyc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要使用某些受限命令,chronyc 需要以
root
运行。chronyc 命令提示符如下所示:
chronyc>
chronyc>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
要列出所有的命令,请输入
help
。 或者,如果与以下命令一同调用,该工具也可以在非交互命令模式下调用:
chronyc command
chronyc command
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 chronyc 所做的更改不具有持久性,它们会在 chronyd
重启后丢失。要使更改有持久性,修改 /etc/chrony.conf
。
12.3. 迁移到 chrony 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 7 中,用户可以在 ntp 和 chrony 之间进行选择,以确保准确计时。有关 ntp 和 chrony、ntpd
和 chronyd
之间的区别,请参阅 ntpd 和 chronyd 之间的差别。
从 Red Hat Enterprise Linux 8 开始,不再支持 ntp。chrony 默认启用。因此,您可能需要从 ntp 迁移到 chrony。
在大多数情况下,从 ntp 迁移到 chrony 是非常直接的。程序、配置文件和服务的相应名称为:
ntp 名称 | chrony 名称 |
---|---|
/etc/ntp.conf | /etc/chrony.conf |
/etc/ntp/keys | /etc/chrony.keys |
ntpd | chronyd |
ntpq | chronyc |
ntpd.service | chronyd.service |
ntp-wait.service | chrony-wait.service |
通过使用 -q
选项或 -t
选项,chronyd
可以替代 ntpdate 和 sntp 程序(包含在 ntp
发布中)。可在命令行中指定配置以避免读取 /etc/chrony.conf
。例如:如下所示运行 chronyd
可以替代运行 ntpdate ntp.example.com
:
chronyd -q 'server ntp.example.com iburst'
# chronyd -q 'server ntp.example.com iburst'
2018-05-18T12:37:43Z chronyd version 3.3 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +SECHASH +IPV6 +DEBUG)
2018-05-18T12:37:43Z Initial frequency -2.630 ppm
2018-05-18T12:37:48Z System clock wrong by 0.003159 seconds (step)
2018-05-18T12:37:48Z chronyd exiting
ntpstat 工具程序之前包含在 ntp
软件包中,且只支持 ntpd
。现在它支持 ntpd
和 chronyd
。它现在包括在 ntpstat
软件包中。
12.3.1. 迁移脚本 复制链接链接已复制到粘贴板!
名为 ntp2chrony.py
的 Python 脚本包含在 chrony
软件包文档中(/usr/share/doc/chrony
)。这个脚本会自动将现有的 ntp
配置转换为 chrony
。它支持 ntp.conf
文件中最常用的指令和选项。所有在转换中忽略的行都会作为注释包含在生成的 chrony.conf
文件中以便用户进行核查。在 ntp
密钥文件中指定但未在 ntp.conf
中被标记为可信密钥的密钥会作为注释出现在生成的 chrony.keys
文件中。
默认情况下,该脚本不会覆盖任何文件。如果 /etc/chrony.conf
或 /etc/chrony.keys
已经存在,使用 -b
选项可以重新命名文件以作为备份。这个脚本支持其他选项。--help
选项输出所有支持选项。
在 ntp
软件包中提供了一个默认 ntp.conf
调用脚本示例:
本例中唯一忽略的指令是 disable monitor
,它在 noclientlog
指令中有一个等同的 chrony 项。它包括在默认 ntp.conf
中只是用于缓解一个安全工具。
生成的 chrony.conf
文件通常包含大量与 ntp.conf
中限制行对应的 allow
指令。如果您不想使用 chronyd
作为 NTP
服务器,从 chrony.conf
中删除所有 allow
指令。
12.4. 使用 Chrony 复制链接链接已复制到粘贴板!
以下小节介绍了如何启动和停止 chronyd
,以及如何检查 chrony
是否同步。这些章节还介绍了如何手动调整系统时钟。
12.4.1. 管理 chrony 复制链接链接已复制到粘贴板!
您可以启动、停止并检查 chronyd
的状态。
默认在 Red Hat Enterprise Linux 上安装 chrony 套件。以
root
用户运行以下命令进行验证:yum install chrony
# yum install chrony
Copy to Clipboard Copied! Toggle word wrap Toggle overflow chrony 守护进程的默认位置为
/usr/sbin/chronyd
。命令行工具将安装到/usr/bin/chronyc
。运行以下命令检查
chronyd
的状态:systemctl status chronyd
$ systemctl status chronyd chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled) Active: active (running) since Wed 2013-06-12 22:23:16 CEST; 11h ago
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要启动
chronyd
,使用root
用户身份运行以下命令:systemctl start chronyd
# systemctl start chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要确保
chronyd
在系统启动时自动启动,以root
身份运行以下命令:systemctl enable chronyd
# systemctl enable chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要停止
chronyd
,以root
身份运行以下命令:systemctl stop chronyd
# systemctl stop chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要防止
chronyd
在系统启动时自动启动,以root
身份运行以下命令:systemctl disable chronyd
# systemctl disable chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.4.2. 检查是否同步 chrony 复制链接链接已复制到粘贴板!
您可以检查 chrony 是否与 跟踪
、源和
sourcestats
命令的使用同步。
流程
要检查 chrony 跟踪,请输入:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow chronyc
sources 命令显示chronyd
正在访问的当前时间源的信息。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以指定可选的
-v
参数来打印更详细的信息。在这种情况下,会输出额外的标头行显示字段含义的信息。sourcestats
命令显示目前被chronyd
检查的每个源的偏移率和误差估算过程的信息。要检查 chrony 源的统计信息,请运行以下命令:chronyc sourcestats
$ chronyc sourcestats 210 Number of sources = 1 Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev =============================================================================== abc.def.ghi 11 5 46m -0.001 0.045 1us 25us
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可以使用可选参数
-v
来包括详细信息。在这种情况下,会输出额外的标头行显示字段含义的信息。
12.4.3. 手动调整系统时钟 复制链接链接已复制到粘贴板!
您可以手动调整系统时钟。
流程
要立即调整系统时钟,绕过 slewing 的任何调整,请输入:
chronyc makestep
# chronyc makestep
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果使用了 rtcfile
指令,则不应该手动调整实时时钟。随机调整会影响 chrony 测量实时时钟漂移速率的需要。
12.4.4. 禁用 chrony 分配程序脚本 复制链接链接已复制到粘贴板!
chrony
分配程序脚本管理 NTP 服务器的在线和离线状态。作为系统管理员,您可以禁用分配程序脚本,以使 chronyd
持续轮询服务器。
NetworkManager 在接口重新配置、停止或启动操作过程中执行 chrony
分配程序脚本。但是,如果您在 NetworkManager 之外配置某些接口或路由,您可能会遇到以下情况:
- 当没有到 NTP 服务器的路由存在时,分配程序脚本可能会运行,从而导致 NTP 服务器切换到离线状态。
- 如果您稍后建立路由,脚本默认不会再次运行,NTP 服务器保持在离线状态。
要确保 chronyd
可以与您的 NTP 服务器同步(后者有单独的受管接口),请禁用分配程序脚本。
流程
要禁用
chrony
分配程序脚本,请编辑/etc/NetworkManager/dispatcher.d/20-chrony-onoffline
文件,如下所示:#!/bin/sh exit 0
#!/bin/sh exit 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意当您升级或重新安装
chrony
软件包时,分配程序脚本的打包版本会替换您修改的分配程序脚本。
12.4.5. 在隔离的网络中设置 chrony 复制链接链接已复制到粘贴板!
对于从未连接到互联网的网络,一台计算机被选为主计时服务器。其他计算机是服务器的直接客户端,也可以是客户端的客户端。在服务器上,必须使用系统时钟的平均偏移率手动设置 drift 文件。如果服务器被重启,它将从周围的系统获得时间,并计算设置系统时钟的平均值。之后它会恢复基于 drift 文件的调整。当使用 settime 命令时会自动更新 drift
文件。
要在隔离的网络中为系统设置 chrony,请按照以下步骤操作:
流程
在选择成为服务器的系统上,编辑
/etc/chrony.conf
,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中 &
lt;subnet
> 是允许客户端连接的网络。使用无类别域间路由(CIDR)标记来指定子网。在选择为服务器直接客户端的系统上,编辑
/etc/chrony.conf
,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
<server_fqdn
> 是服务器的主机名,<server_ip_address
> 是服务器 的地址。带有此配置的客户端如果服务器重启,则与服务器重新同步。
在不是服务器直接客户端的客户端系统中,/etc/chrony.conf
文件应该相同,除了应该省略 local
和 allow
指令。
在隔离的网络中,您还可以使用 local
指令来启用本地参考模式。该模式可允许 chronyd
作为 NTP
服务器实时显示同步,即使它从未同步或者最后一次更新时钟早前发生。
要允许网络中的多个服务器使用相同的本地配置并相互同步,而不让客户端轮询多个服务器,请使用 local
指令的 orphan
选项启用孤立模式。每一个服务器都需要配置为使用 local
轮询所有其他服务器。这样可确保只有最小参考 ID 的服务器具有本地参考活跃状态,其他服务器与之同步。当服务器出现故障时,另一台服务器将接管。
12.4.6. 配置远程监控访问 复制链接链接已复制到粘贴板!
chronyc 工具可以使用以下方法访问 chronyd
:
- IPv4 或 IPv6。
-
域套接字,可由
root
和chrony
用户本地访问。
默认情况下,chronyc 连接到 Unix 域套接字。默认路径为 /var/run/chrony/chronyd.sock
。如果这个连接失败,chronyc 会尝试连接到 127.0.0.1,然后 ::1。
网络中只允许以下监控命令,它们不会影响 chronyd
的行为:
- activity
- manual list
- rtcdata
- smoothing
- sources
- sourcestats
- tracking
- waitsync
chronyd
接受这些命令的主机集合可以使用以下方法配置:
-
您可以在
chronyd
的配置文件中使用cmdallow
指令。 -
在 chronyc 中运行
cmdallow
命令。
默认情况下,仅接受来自 localhost(127.0.0.1 或 ::1)的命令。
所有其他命令只能通过 Unix 域套接字进行。当通过网络发送时,chronyd
会返回 Notauthorized
错误,即使它来自 localhost。
以下流程描述了如何使用 chronyc 远程访问 chronyd。
流程
通过在
/etc/
文件中添加以下内容,将 chrony 配置为侦听本地接口:chrony
.confbindcmdaddress 0.0.0.0
bindcmdaddress 0.0.0.0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow and
bindcmdaddress ::
bindcmdaddress ::
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 允许来自远程 IP 地址、网络和子网的命令:
在
/etc/chrony.conf
文件中添加以下内容:cmdallow 192.168.1.0/24
cmdallow 192.168.1.0/24
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cmdallow 2001:db8::/64
cmdallow 2001:db8::/64
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在防火墙中打开端口 323 以允许来自远程系统的连接:
firewall-cmd --permanent --add-port=323/udp
# firewall-cmd --permanent --add-port=323/udp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入防火墙配置:
firewall-cmd --reload
# firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.4.7. 使用 RHEL 系统角色管理时间同步 复制链接链接已复制到粘贴板!
您可以使用 timesync
角色在多个目标机器上管理时间同步。timesync
角色安装和配置 NTP 或 PTP 实现,作为 NTP 或 PTP 客户端来同步系统时钟。
请注意,使用 timesync
角色还有助于 迁移到 chrony,因为您可以在从 RHEL 6 开始的所有 Red Hat Enterprise Linux 版本上使用相同的 playbook,无论系统是否使用 ntp 或 chrony 来实现 NTP 协议。
timesync 角色
替换了受管主机上给定或检测到的供应商服务的配置。之前的设置即使没有在角色变量中指定,也会丢失。如果没有定义 timesync_ntp_provider
变量,唯一保留的设置就是供应商选择。
以下示例演示了如何在只有一个服务器池的情况下应用 timesync
角色。
例 12.1. 为单一服务器池应用 timesync 角色的 playbook 示例
有关 timesync
角色变量的详细参考,请安装 rhel-system-roles
软件包,并参阅 /usr/share/doc/rhel-system-roles/timesync
目录中的 README.md
或 README.html
文件。
12.5. 带有 HW 时间戳的 Chrony 复制链接链接已复制到粘贴板!
某些网络接口控制器(NIC)中的硬件时间戳(HW)提供传入和传出数据包的准确时间戳。NTP
时间戳通常由内核及使用系统时钟的 chronyd 创建。但是,当启用了 HW 时间戳时,NIC 使用自己的时钟在数据包进入或离开链路层或物理层时生成时间戳。与 NTP
一起使用时,硬件时间戳可以显著提高同步的准确性。为了获得最佳准确性,NTP
服务器和 NTP
客户端都需要使用硬件时间戳。在理想条件下,可达到次微秒级的准确性。
另一个用于使用硬件时间戳进行时间同步的协议是 PTP
与 NTP
不同,PTP
依赖于网络交换机和路由器。如果要实现同步的最佳准确性,请在带有 PTP
支持的交换机和路由器的网络中使用 PTP
,并在没有这样的交换机和路由器的网络上首选 NTP
。
12.5.1. 验证硬件时间戳支持 复制链接链接已复制到粘贴板!
要验证接口是否支持使用 NTP
的硬件时间戳,请使用 ethtool -T
命令。如果 ethtool
列出了 SOF_TIMESTAMPING_TX_HARDWARE
和 SOF_TIMESTAMPING_TX_SOFTWARE
模式,以及 HWTSTAMP_FILTER_ ALL
过滤器模式,则可以使用硬件时间戳的 NTP
。
流程
- 显示设备的时间戳功能和关联的 PTP 硬件时钟:
ethtool -T enp1s0
# ethtool -T enp1s0
12.5.2. 启用硬件时间戳 复制链接链接已复制到粘贴板!
您可以使用 /etc/chrony.conf
文件中的 hwtimestamp
指令,在一个或多个接口上启用硬件时间戳。该指令可指定单一接口,也可以指定通配符字符来启用所有支持接口的硬件时间戳。
流程
编辑
/etc/chrony.conf
文件并进行以下更改:为支持硬件时间戳的接口添加
hwtimestamp
设置。例如:hwtimestamp enp1s0 hwtimestamp eno*
hwtimestamp enp1s0 hwtimestamp eno*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有其他应用程序,您可以使用 * 通配符,如
ptp4l
使用硬件时间戳。通过在服务器设置中附加
minpoll
和maxpoll
选项来配置简短的客户端轮询间隔,例如:server ntp.example.comlocal minpoll 0 maxpoll 0
server ntp.example.comlocal minpoll 0 maxpoll 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于硬件时间戳,您必须配置一个较短的轮询间隔,而不是默认范围(641024 秒),以最大程度降低系统时钟的偏移量。
通过在服务器设置中附加
xleave
选项来启用 NTP 交错模式:server ntp.example.comlocal minpoll 0 maxpoll 0 xleave
server ntp.example.comlocal minpoll 0 maxpoll 0 xleave
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有了这个设置,chrony 仅在发送数据包后获取硬件传输时间戳。这个行为可防止在响应的数据包中保存时间戳。使用
xleave
选项,chrony 可以接收传输后生成的传输时间戳。可选:增加为服务器上客户端访问的日志分配的最大内存大小,例如:
clientloglimit 100000000
clientloglimit 100000000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认服务器配置允许数以千计的客户端同时使用交错模式。通过增加
clientloglimit
设置的值,您可以为大量客户端配置服务器。
重启 chronyd 服务:
systemctrl restart chronyd
# systemctrl restart chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
可选:验证启用了硬件时间的
/var/log/messages
日志文件:chronyd[4081]: Enabled HW timestamping on enp1s0 chronyd[4081]: Enabled HW timestamping on eno1
chronyd[4081]: Enabled HW timestamping on enp1s0 chronyd[4081]: Enabled HW timestamping on eno1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 chronyd 配置为 NTP 客户端或 peer,显示传输和接收时间戳模式和交集模式:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 报告 NTP 测量的稳定性:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Std Dev
列中会报告这个稳定性。启用硬件时间戳后,在正常负载下,NTP 测量的稳定性应该以十秒或几百纳秒为单位。
12.5.3. 配置 PTP-NTP 桥接 复制链接链接已复制到粘贴板!
如果网络中有一个高度准确的 Precision Time Protocol (PTP
)主时间服务器,但没有支持 PTP
支持的交换机或路由器,则计算机可能专用于作为 PTP
客户端和 stratum-1 NTP
服务器。此类计算机需要具有两个或更多个网络接口,并且接近主时间服务器或与它直接连接。这样可保证高度准确的网络同步。
流程
-
从
linuxptp
软件包中配置 ptp4l 和 phc2sys 程序,以使用PTP
来同步系统时钟。
将
chronyd
配置为使用其他接口提供系统时间:bindaddress 203.0.113.74 hwtimestamp enp1s0 local stratum 1
bindaddress 203.0.113.74 hwtimestamp enp1s0 local stratum 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 chronyd 服务:
systemctrl restart chronyd
# systemctrl restart chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.6. 在 chrony 中启用一些之前由 NTP 支持的设置 复制链接链接已复制到粘贴板!
chrony 不支持在以前由 ntp 支持的 Red Hat Enterprise Linux 主版本中的某些设置。以下小节列出了此类设置,并描述了在具有 chrony 的系统中实现它们的方法。
12.6.1. 使用 ntpq 和 ntpdc 进行监控 复制链接链接已复制到粘贴板!
chronyd
无法被由 ntp 提供的 ntpq 和 ntpdc 监控,因为 chrony 不支持 NTP
模式 6 和 7。它支持不同的协议,chronyc 是一个客户端的实现。如需更多信息,请参阅您系统中的 chronyc (1)
手册页。
要监控使用 chronyd
的系统时钟的状态,您可以:
- 使用 tracking 命令
-
使用支持 chrony 的 ntpstat 工具,它提供和
ntpd
类似的输出。
例 12.2. 使用跟踪命令
例 12.3. 使用 ntpstat 程序
ntpstat
$ ntpstat
synchronised to NTP server (10.5.27.10) at stratum 2
time correct to within 80 ms
polling server every 64 s
12.6.2. 使用基于公钥加密的认证机制 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 7 中,ntp 支持的 Autokey,它是一个基于公钥加密的验证机制。
在 Red Hat Enterprise Linux 8 中,chronyd
支持 Network Time Security (NTS),它是一个现代安全身份验证机制,而不是 Autokey。如需更多信息,请参阅 chrony 中网络时间协议(NTS)的概述。
12.6.3. 使用临时对称关联 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 7 中,ntpd
支持的临时对称关联(可以通过未在 ntp.conf
配置文件中指定的 peer)来移动化。在 Red Hat Enterprise Linux 8 中,chronyd
需要在 chrony.conf
中指定所有对等点。不支持临时对称关联。
请注意,使用通过 server
或 pool
指令启用的客户端/服务器模式和通过 peer
指令启用的对称模式相比,更为安全。
12.6.4. 多播/广播客户端 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 7 支持广播/多播 NTP
模式,该模式简化了客户端配置。使用这个模式,客户端可以配置为仅侦听发送到多播/广播地址的数据包,而不是侦听各个服务器的特定名称或地址,这可能会随时间变化。
在 Red Hat Enterprise Linux 8 中,chronyd
不支持广播/多播模式。主要的原因是它比一般的客户端/服务器以及对称模式的准确性较低且安全性较低。
从 NTP
广播/多播设置中迁移有几个选项:
将 DNS 配置为将单个名称(如 ntp.example.com)转换为不同服务器的多个地址。
客户端只能使用单一池指令来与多个服务器同步进行静态配置。如果池中的服务器变得不可访问,或者不适合同步,客户端会自动将其替换为池中的另一台服务器。
通过 DHCP 分配
NTP
服务器列表当 NetworkManager 从 DHCP 服务器获得
NTP
服务器列表时,chronyd
会自动配置来使用它们。把PEERNTP=no
添加到/etc/sysconfig/network
文件可以禁用这个功能。使用
精确时间协议 (PTP)
这个选项主要适用于服务器经常更改的环境,或者大量的客户端需要在没有指定服务器的情况下相互同步。
PTP
是为多播消息设计的,它的工作方式与NTP
广播模式相似。linuxptp
软件包中包括了一个PTP
实现。PTP
通常需要硬件时间戳并支持网络开关执行正常。但是,即使软件时间戳没有支持网络交换机,PTP
也应该比广播模式中的NTP
更好地工作。在一个通信路径中有大量
PTP
客户端的网络中,建议使用hybrid_e2e
选项配置PTP
客户端,以减少客户端生成的网络流量。您可以将运行chronyd
的计算机配置为NTP
客户端,也可配置为NTP
服务器,来作为主PTP
时间服务器运作,以使用多播消息传递将同步的时间分发到大量的计算机上。
12.7. chrony 中的网络时间安全概述(NTS) 复制链接链接已复制到粘贴板!
Network Time Security(NTS)是用于网络时间协议(NTP)的身份验证机制,旨在扩展大量客户端。它将验证从服务器计算机接收的数据包在移到客户端机器时是否被取消处理。Network Time Security(NTS)包含 Key Establishment(NTS-KE)协议,该协议会自动创建在服务器及其客户端中使用的加密密钥。
NTS 与 FIPS 和 OSPP 配置文件不兼容。当您启用 FIPS 和 OSPP 配置文件时,使用 NTS 配置的 chronyd
可能中止,并显示一条致命消息。您可以通过将 GNUTLS_FORCE_FIPS_MODE=0
设置添加到 /etc/sysconfig/
服务的 OSPP 配置集和 FIPS 模式。
chronyd
文件来禁用 chronyd
12.7.1. 在客户端上启用网络时间安全(NTS) 复制链接链接已复制到粘贴板!
默认情况下不启用 Network Time Security(NTS)。您可以在 /etc/chrony.conf
中启用 NTS。为此,请执行以下步骤:
先决条件
- 时间服务器支持 NTS。
流程
编辑 /etc/crony.conf
文件并进行以下更改:
除推荐的
iburst
选项外,使用nts
选项指定服务器。For example: server time.example.com iburst nts server nts.netnod.se iburst nts server ptbtime1.ptb.de iburst nts
For example: server time.example.com iburst nts server nts.netnod.se iburst nts server ptbtime1.ptb.de iburst nts
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加以下设置以避免在系统引导时重复 Network Time Security-Key Establishment (NTS-KE)会话:
ntsdumpdir /var/lib/chrony
ntsdumpdir /var/lib/chrony
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将以下行添加到
/etc/sysconfig/network
以禁用与DHCP
提供的网络时间协议(NTP)服务器的同步:PEERNTP=no
PEERNTP=no
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
chronyd
服务:systemctl restart chronyd
systemctl restart chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
NTS
密钥是否已成功建立:Copy to Clipboard Copied! Toggle word wrap Toggle overflow KeyID
、Type
和KLen
应带有非零值。如果该值为零,请检查系统日志中来自chronyd
的错误消息。验证客户端是否正在进行 NTP 测量:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Reach
列中应具有非零值;理想情况是 377。如果值很少为 377 或永远不是 377,这表示 NTP 请求或响应在网络中丢失。
12.7.2. 在时间服务器上启用网络时间安全(NTS) 复制链接链接已复制到粘贴板!
如果您运行自己的网络时间协议(NTP)服务器,您可以启用服务器网络时间协议(NTS)支持来促进其客户端安全地同步。
如果 NTP 服务器是其它服务器的客户端,即它不是 Stratum 1 服务器,它应使用 NTS 或对称密钥进行同步。
先决条件
-
以
PEM
格式的服务器私钥 -
带有
PEM
格式的所需中间证书的服务器证书
流程
编辑
/etc/chrony.conf
文件并进行以下更改:ntsserverkey /etc/pki/tls/private/<ntp-server.example.net>.key ntsservercert /etc/pki/tls/certs/<ntp-server.example.net>.crt
ntsserverkey /etc/pki/tls/private/<ntp-server.example.net>.key ntsservercert /etc/pki/tls/certs/<ntp-server.example.net>.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对私钥和证书文件设置权限,允许 chrony 用户读取文件,例如
chown root:chrony /etc/pki/tls/private/<ntp-server.example.net>.key /etc/pki/tls/certs/<ntp-server.example.net>.crt chmod 644 /etc/pki/tls/private/<ntp-server.example.net>.key /etc/pki/tls/certs/<ntp-server.example.net>.crt
# chown root:chrony /etc/pki/tls/private/<ntp-server.example.net>.key /etc/pki/tls/certs/<ntp-server.example.net>.crt # chmod 644 /etc/pki/tls/private/<ntp-server.example.net>.key /etc/pki/tls/certs/<ntp-server.example.net>.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
确保
ntsdumpdir /var/lib/chrony
设置存在。 在 firewalld 中打开所需端口:
firewall-cmd --permannent --add-port={323/udp,4460/tcp} firewall-cmd --reload
# firewall-cmd --permannent --add-port={323/udp,4460/tcp} # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
chronyd
服务:systemctl restart chronyd
# systemctl restart chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
从客户端机器执行测试:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow System clock wrong
消息指示 NTP 服务器接受 NTS-KE 连接并使用 NTS 保护的 NTP 消息进行响应。验证 NTS-KE 连接并验证服务器中观察的 NTP 数据包:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
NTS-KE connections accepted
和Authenticated NTP packets
项带有一个非零值,这意味着至少有一个客户端能够连接到 NTS-KE 端口并发送经过身份验证的 NTP 请求。
第 13 章 使用 langpacks 复制链接链接已复制到粘贴板!
为系统的每个软件包安装额外附加软件包(包含翻译、字典和本地化内容)的元数据软件包被称之为 Langpacks。
在 Red Hat Enterprise Linux 8 系统中,langpacks 安装是基于langpacks-<langcode>
语言元软件包和 RPM 弱依赖项(Supplements 标签)。
对于所选语言,有两个先决条件可以使用 langpacks。如果满足这些先决条件,则语言 meta-packages 会在事务集中自动拉取所选语言的 langpack。
先决条件
系统中已安装了所选语言的
langpacks-<langcode>
语言 meta-package。在 Red Hat Enterprise Linux 8 中,langpacks 元软件包使用 Anaconda 安装程序,通过操作系统的初始安装自动安装的,因为这些软件包在 Application Stream 存储库中提供。
如需更多信息,请参阅检查提供 langpacks 的语言。
- 您用来搜索区域设置软件包的基本软件包已安装在系统上。
13.1. 检查提供 langpacks 的语言 复制链接链接已复制到粘贴板!
按照以下步骤检查哪些语言提供语言包。
流程
执行以下命令:
yum list langpacks-*
# yum list langpacks-*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.2. 使用 RPM 较弱依赖项的 langpacks 复制链接链接已复制到粘贴板!
本节介绍了在查询基于 RPM 弱依赖项的语言、安装或删除语言支持时可能需要执行的多个操作。
13.2.1. 列出已安装的语言支持 复制链接链接已复制到粘贴板!
要列出已安装的语言支持,请使用此流程。
流程
执行以下命令:
yum list installed langpacks*
# yum list installed langpacks*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.2.2. 检查语言支持的可用性 复制链接链接已复制到粘贴板!
要检查语言支持是否有适用于任何语言,请使用以下步骤。
流程
- 执行以下命令:
yum list available langpacks*
# yum list available langpacks*
13.2.3. 列出为语言安装的软件包 复制链接链接已复制到粘贴板!
要列出为任何语言安装的软件包,请使用以下步骤:
流程
执行以下命令:
yum repoquery --whatsupplements langpacks-<locale_code>
# yum repoquery --whatsupplements langpacks-<locale_code>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.2.4. 安装语言支持 复制链接链接已复制到粘贴板!
要添加新的语言支持,请使用以下步骤。
流程
执行以下命令:
yum install langpacks-<locale_code>
# yum install langpacks-<locale_code>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.2.5. 删除语言支持 复制链接链接已复制到粘贴板!
要删除任何安装的语言支持,请使用以下步骤。
流程
执行以下命令:
yum remove langpacks-<locale_code>
# yum remove langpacks-<locale_code>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.3. 使用 glibc-langpack- 保存磁盘空间 复制链接链接已复制到粘贴板!
目前,所有区域都存储在 /usr/lib/locale/locale-archive
文件中,该文件需要很多磁盘空间。
在磁盘空间是一个关键问题的系统中,如容器和云镜像,或者只需要几个区域,您可以使用 glibc 语言 langpack 软件包 (glibc-langpack-<locale_code>
)。
要单独安装区域设置,从而获得较小的软件包安装空间,请使用以下步骤。
流程
执行以下命令:
yum install glibc-langpack-<locale_code>
# yum install glibc-langpack-<locale_code>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
当使用 Anaconda 安装操作系统时,会在安装过程中使用的语言安装 glibc-langpack-<locale_code>
,并用于您选择的语言。请注意, glibc-all-langpacks
(包含所有区域设置)会被默认安装,因此某些区域设置会被重复。如果您为一个或多个选择的语言安装 glibc-langpack-<locale_code>
,您可以在安装后删除 glibc-all-langpacks
来保存磁盘空间。
请注意,只安装所选 glibc-langpack-<locale_code>
软件包而不是 glibc-all-langpacks
会对运行时性能造成影响。
如果磁盘空间不是问题,请使用 glibc-all-langpacks
软件包安装所有区域。
第 14 章 转储崩溃的内核以便稍后进行分析 复制链接链接已复制到粘贴板!
要分析系统崩溃的原因,可以使用 kdump
服务保存系统内存内容,以便稍后进行分析。本节概述了 kdump
以及使用 RHEL web 控制台或使用对应的 RHEL 系统角色配置 kdump
的信息。
14.1. kdump 复制链接链接已复制到粘贴板!
kdump
是提供崩溃转储机制的服务,并生成崩溃转储或 vmcore
转储文件。vmcore
包括用于分析和故障排除的系统内存内容。kdump
使用 kexec
系统调用引导到第二个内核,捕获内核,而不重启。这个内核捕获崩溃内核的内存内容并将其保存到文件中。第二个内核在系统内存的保留部分中提供。
当系统出现故障时,内核崩溃转储可能是唯一可用的信息。因此,在关键任务环境中操作 kdump
是非常重要的。红帽建议在常规内核更新周期中定期更新和测试 kexec-tools
。这在安装新内核功能时非常重要。
如果您在机器上有多个内核,则可以为所有安装的内核或只为指定的内核启用 kdump
。安装 kdump
时,系统会创建一个默认的 /etc/kdump.conf
文件。/etc/kdump.conf
包含默认最小 kdump
配置,您可以编辑它来自定义 kdump
配置。
14.2. 在 web 控制台中配置 kdump 内存使用率和目标位置 复制链接链接已复制到粘贴板!
您可以为 kdump
内核配置内存保留,也可以指定目标位置来使用 RHEL web 控制台界面捕获 vmcore
转储文件。
先决条件
- 必须安装并可以访问 Web 控制台。详情请参阅安装 Web 控制台。
步骤
-
在 web 控制台中,打开 选项卡,并通过将 Kernel crash dump 开关设置为 on 来启动
kdump
服务。 在终端中配置
kdump
内存用量,例如:sudo grubby --update-kernel ALL --args crashkernel=512M
$ sudo grubby --update-kernel ALL --args crashkernel=512M
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启系统以应用更改。
- 在 Kernel dump 选项卡中,点 Crash dump location 字段末尾的 Edit。
指定保存
vmcore
转储文件的目标目录:- 对于本地文件系统,从下拉菜单中选择 Local Filesystem。
对于使用 SSH 协议的远程系统,从下拉菜单中选择 Remote over SSH ,并指定以下字段:
- 在 Server 字段中,输入远程服务器地址。
- 在 SSH key 字段中,输入 SSH 密钥位置。
- 在 Directory 字段中,输入目标目录。
对于使用 NFS 协议的远程系统,从下拉菜单中选择 Remote over NFS ,并指定以下字段:
- 在 Server 字段中,输入远程服务器地址。
- 在 Export 字段中,输入 NFS 服务器的共享文件夹的位置。
在 Directory 字段中,输入目标目录。
注意您可以选择 Compression 复选框来减小
vmcore
文件的大小。
可选:点 View automation script 来显示自动化脚本。
此时会打开一个带有生成的脚本的窗口。您可以浏览 shell 脚本和 Ansible playbook 生成选项选项卡。
可选:点 Copy to clipboard 复制脚本。
您可以使用此脚本在多台机器上应用相同的配置。
验证
- 单击 。
在 Test kdump settings 下点 Crash system。
警告当您启动系统崩溃时,内核操作会停止并导致系统崩溃,并造成数据丢失。
14.3. 使用 RHEL 系统角色进行 kdump 复制链接链接已复制到粘贴板!
RHEL 系统角色是 Ansible 角色和模块的一个集合,其提供了一个一致的配置接口,来远程管理多个 RHEL 系统。使用 kdump
角色,您可以在多个系统中设置基本内核转储参数。
通过替换 /etc/kdump.conf
文件,kdump
角色完全取代了受管主机的 kdump
配置。另外,如果应用了 kdump
角色,则之前的所有 kdump
设置也会被替换,即使它们没有被角色变量指定,也可以替换 /etc/sysconfig/kdump
文件。
以下示例 playbook 演示了如何应用 kdump
系统角色来设置崩溃转储文件的位置:
有关 kdump
角色变量的详情,请安装 rhel-system-roles
软件包,并参阅 /usr/share/doc/rhel-system-roles/kdump
目录中的 README.md
或者README.html
文件。
第 15 章 恢复系统 复制链接链接已复制到粘贴板!
要使用现有备份恢复系统,Red Hat Enterprise Linux 提供了 Relax-and-Recover(ReaR)工具。
您可以使用这个工具作为灾难恢复解决方案,也用于系统迁移。
该工具可让您执行以下任务:
- 生成可引导镜像,并使用镜像从现有备份中恢复系统。
- 复制原始存储布局。
- 恢复用户和系统文件。
- 将系统还原到不同的硬件中。
另外,对于灾难恢复,您还可以将某些备份软件与 ReaR 集成。
15.1. 设置 ReaR 并手动创建备份 复制链接链接已复制到粘贴板!
使用以下步骤,使用 Relax-and-Recover(ReaR)工具安装软件包,来创建一个救援系统,配置并生成一个备份。
先决条件
根据备份恢复计划完成必要的配置。
请注意: 您可以使用
NETFS
备份方法,该方法是 ReaR 完全整合的、内置的方法。
流程
安装 ReaR 工具:
yum install rear
# yum install rear
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在您选择的编辑器中修改 ReaR 配置文件,例如:
vi /etc/rear/local.conf
# vi /etc/rear/local.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/etc/rear/local.conf
中添加备份设置详情。例如,在使用NETFS
备份方法时添加以下行:BACKUP=NETFS BACKUP_URL=backup.location
BACKUP=NETFS BACKUP_URL=backup.location
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用备份位置的 URL 替换 backup.location。
要将 ReaR 配置为在创建新归档时保留之前的备份归档,还需要将以下行添加到配置文件中:
NETFS_KEEP_OLD_BACKUP_COPY=y
NETFS_KEEP_OLD_BACKUP_COPY=y
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要让递增形式进行备份,在每个运行中只备份修改了的文件,添加以下行:
BACKUP_TYPE=incremental
BACKUP_TYPE=incremental
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个救援系统:
rear mkrescue
# rear mkrescue
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据恢复计划创建备份。例如,在使用
NETFS
备份方法时运行以下命令:rear mkbackuponly
# rear mkbackuponly
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,您可以通过运行以下命令来在一个步骤中创建救援系统和备份:
rear mkbackup
# rear mkbackup
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令将
rear mkrescue
和rear mkbackuponly
的功能组合在一起。
15.2. 调度 ReaR 复制链接链接已复制到粘贴板!
rear
软件包中的 /etc/cron.d/rear
crontab 文件会在每天 1:30 AM 自动运行 rear mkrescue
命令,以计划定期创建救援系统的 Relax-and-Recover (ReaR)工具。该命令只创建一个救援系统,而不是数据备份。您仍需要自行计划定期备份数据。例如:
流程
-
您可以添加将调度
rear mkbackuponly
命令的另一个 crontab。 -
您还可以更改现有的 crontab 来运行
rear mkbackup
命令,而不是默认的/usr/sbin/rear checklayout || /usr/sbin/rear mkrescure
命令。 - 如果使用外部备份方法,您可以调度外部备份。详情取决于您在 ReaR 中使用的备份方法。
rear
软件包中提供的 /etc/cron.d/rear
crontab 文件被视为已弃用,请参阅 已弃用功能 shell 和命令行,因为它默认不足来执行备份。
15.3. 在 64 位 IBM Z 构架上使用 ReaR 救援镜像 复制链接链接已复制到粘贴板!
基本 Relax 和 Recover (ReaR)功能现在包括在 64 位 IBM Z 构架中,自 RHEL 8.8 开始被完全支持。您只能在 z/VM 环境中的 IBM Z 上创建 ReaR 救援镜像。备份和恢复逻辑分区(LPAR)还没有进行测试。
rear
软件包版本 2.6-9.el8 或更高版本仅支持 64 位 IBM Z 架构上的 ReaR。早期版本仅作为技术预览功能提供。有关红帽技术预览功能支持范围的更多信息,请参阅 https://access.redhat.com/support/offerings/techpreview。
当前唯一可用的输出方法是 Initial Program Load(IPL)。IPL 生成一个内核和一个初始 RAM 磁盘(initrd),可与 zIPL
引导装载程序一起使用。
先决条件
ReaR 已安装。
-
要安装 ReaR,请运行
yum install rear
命令
-
要安装 ReaR,请运行
流程
将以下变量添加到 /etc/rear/local.conf
中来配置 ReaR,以便在 64 位 IBM Z 构架上生成救援镜像:
-
要配置
IPL
输出方法,请添加OUTPUT=IPL
。 要配置备份方法和目的地,请添加
BACKUP
和BACKUP_URL
变量。例如:BACKUP=NETFS BACKUP_URL=nfs://<nfsserver name>/<share path>
BACKUP=NETFS BACKUP_URL=nfs://<nfsserver name>/<share path>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要目前在 64 位 IBM Z 构架上不支持本地备份存储。
-
可选: 您还可以配置
OUTPUT_URL
变量来保存内核和initrd
文件。默认情况下,OUTPUT_URL
与BACKUP_URL
保持一致。 要执行备份和救援镜像创建:
rear mkbackup
# rear mkbackup
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
这会在
BACKUP_URL
或OUTPUT_URL
(如果设置了)变量指定的位置创建内核和 initrd 文件,并使用指定的备份方法进行备份。 -
要恢复系统,请使用第 3 步中创建的 ReaR 内核和 initrd 文件,并从与
zipl
引导装载程序、内核和initrd
一起准备的直接附加存储设备(DASD)或者附加光纤通道协议(FCP)的 SCSI 设备启动。如需更多信息,请参阅使用准备的 DASD。 -
当救援内核和
initrd
引导时,它会启动 ReaR 救援环境。继续系统恢复。
目前,救援过程会重新格式化连接到系统的所有 DASD(直接附加存储设备)。如果系统存储设备中存在任何有价值的数据,则不要尝试系统恢复。这还包括用 zipl 引导装载程序、ReaR 内核和 initrd 准备的设备,用来引导到救援环境。确保保留一份副本。
15.4. ReaR 排除 复制链接链接已复制到粘贴板!
ReaR 工具会根据恢复过程中在 /var/lib/rear/layout/disklayout.conf
布局文件中的描述重新创建原始系统的存储布局。存储布局包括分区、卷组、逻辑卷、文件系统和其他存储组件。
ReaR 在创建救援镜像时创建布局文件,并在镜像中嵌入这个文件。您还可以使用 rear savelayout
命令创建布局文件。这可让您快速创建布局文件并检查它,而无需创建整个救援镜像。
布局文件描述了原始系统的整个存储布局,但有一些例外,因为 ReaR 从布局文件中排除一些存储组件,并在恢复过程中重新创建。从布局排除存储组件由以下配置变量控制:
-
AUTOEXCLUDE_DISKS
-
AUTOEXCLUDE_MULTIPATH
-
AUTOEXCLUDE_PATH
-
EXCLUDE_RECREATE
您可以查看 /usr/share/rear/conf/default.conf
文件中的配置变量的默认值,并可以更改本地 /etc/rear/local.conf
配置文件中的这些值。
有关布局文件的语法以及可用于排除某些存储组件的配置变量的更多信息,请参阅 ReaR 用户指南中的 Layout 配置
章节,该配置以 /usr/share/doc/rear/relax-and-recover-user-guide.html
的形式安装。
您还可以配置由内部 NETFS
和 RSYNC
备份方法备份哪些文件。默认情况下,如果布局文件中包含文件系统,则所有挂载的本地(基于磁盘)文件系统中的文件由 rear mkbackup
或 rear mkbackuponly
备份。从布局文件中排除某些文件系统,这些文件由 AUTOEXCLUDE_DISKS
、AUTOEXCLUDE_MULTIPATH
、AUTOEXCLUDE_PATH
和 EXCLUDE_RECREATE
等变量控制,也会从备份中排除其内容。您还可以使用 BACKUP_PROG_EXCLUDE
配置变量,从备份中排除某些文件或目录树,而不将文件系统从布局文件中排除。当以这种方式排除文件系统中的所有文件和目录时,文件系统会在恢复过程中重新创建,但会为空,因为备份不包含要恢复到其中的任何数据。这对包含临时数据且不需要保留的文件系统很有用,或者用于使用独立于 ReaR 的方法备份的数据。
BACKUP_PROG_EXCLUDE
变量是 glob (3)式通配符模式的数组,传递给 tar 或 rsync。请注意,需要引用模式以防止 shell 在读取配置文件时被 shell 扩展。此变量的默认值在 /usr/share/rear/conf/default.conf
文件中设置。默认值包含
configured 模式,它排除 /tmp 目录下的所有文件和目录,但不排除 /tmp
/tmp
目录本身。
如果您需要排除其他文件和目录,请将其他模式附加到变量,而不是覆盖它,以保留默认值。例如,要排除 /data/temp
目录下的所有文件和目录,请使用:
BACKUP_PROG_EXCLUDE+=( '/data/temp/*' )
# BACKUP_PROG_EXCLUDE+=( '/data/temp/*' )
rear mkbackup
命令在日志中列出备份排除模式。您可以在 /var/log/rear
目录中找到日志文件。这可用于在执行完整系统恢复前验证排除的规则。例如,日志可以包含以下条目:
在这里,整个 root 文件系统包含在备份中,除了 /tmp
、/dev/shm
和 /var/lib/rear/output
目录下的所有文件和目录外。
第 16 章 安装和使用动态编程语言 复制链接链接已复制到粘贴板!
红帽提供了不同的编程语言,如 Python、PHP 和 Tcl/TK。使用他们来开发自己的应用程序和服务。
16.1. Python 简介 复制链接链接已复制到粘贴板!
Python 是一种高级编程语言,支持多种编程模式,如面向对象、所需功能以及程序式范式。Python 具有动态语义,可用于通用编程。
使用 Red Hat Enterprise Linux 时,系统中安装的许多软件包(如提供系统工具、数据分析工具或 Web 应用程序的软件包)会使用 Python 编写。要使用这些软件包,您必须安装 python*
软件包。
16.1.1. Python 版本 复制链接链接已复制到粘贴板!
两个不兼容的 Python 版本被广泛使用,即 Python 2.x 和 Python 3.x。RHEL 8 提供以下 Python 版本。
版本 | 要安装的软件包 | 命令示例 | 此后提供 | 生命周期 |
---|---|---|---|---|
Python 3.6 |
|
| RHEL 8.0 | 完整的 RHEL 8 |
Python 2.7 |
|
| RHEL 8.0 | 较短 |
Python 3.8 |
|
| RHEL 8.2 | 较短 |
Python 3.9 |
|
| RHEL 8.4 | 较短 |
Python 3.11 |
|
| RHEL 8.8 | 较短 |
Python 3.12 |
|
| RHEL 8.10 | 较短 |
有关支持长度的详情,请查看 Red Hat Enterprise Linux 生命周期 和 Red Hat Enterprise Linux 应用程序流生命周期。
3.9 之前的每个 Python 版本都在一个单独的模块中分发。Python 3.11 和 Python 3.12 作为非模块化 RPM 软件包的套件发布,包括 python3.11
和 python3.12
软件包。
您可以在同一 RHEL 8 系统上并行安装多个 Python 版本。
在安装、调用或与之交互时,始终指定 Python 版本。例如,在软件包和命令名称中使用 python3
而不是 python
。所有与 Python 相关的命令还必须包括版本,例如 pip3
,pip2
,pip3.8
,pip3.9
,pip3.11
, pip3.12
。
RHEL 8 中默认不提供未指定版本的 python
命令(/usr/bin/python
)。您可以使用 alternatives
命令来配置它;有关说明,请参阅 配置未版本化的 Python
任何对 /usr/bin/python
的手动更改(除使用 alternatives
命令所做的更改外),在更新时可能会覆盖。
作为系统管理员,使用 Python 3 的原因如下:
- Python 3 代表 Python 项目的主要开发方向。
- 2020 年终止了对上游社区中的 Python 2 的支持。
- 流行的 Python 库在上游社区支持 Python 2 支持。
-
Red Hat Enterprise Linux 8 中的 Python 2 的生命周期比较短,旨在方便客户过渡到
Python 3
。
对于开发人员,Python 3 与 Python 2 相比有以下优点:
- Python 3 可让您更轻松地编写表达、可维护且正确的代码。
- 使用 Python 3 编写的代码将具有更大的灵活性。
-
Python 3 具有新功能,包括
asyncio
、f-strings、高级解包、仅关键字的参数和链的例外。
但是,传统的软件可能需要将 /usr/bin/python
配置为 Python 2。因此,没有与 Red Hat Enterprise Linux 8 一起分发的默认的 python
软件包,您可以选择使用 Python 2 和 3 来作为 /usr/bin/python
,如 配置未版本化的 Python 中所述。
Red Hat Enterprise Linux 8 中的系统工具使用由内部 platform-python
软件包提供的 Python 版本 3.6,它不适用于客户直接使用。对于 Python 3.6 ,建议您使用 python36
软件包中的 python3
或 python3.6
命令,或使用后续的 Python 版本。
不要从 RHEL 8 中删除 platform-python
软件包,因为其他软件包需要它。
16.1.2. Python 版本之间的显著区别 复制链接链接已复制到粘贴板!
RHEL 8 中包含的 Python 版本在许多方面有所不同。
Python 绑定
python38
和 python39
模块以及 python3.11
和 python3.12
软件包套件不包括与 python36
模块提供的系统工具(RPM、DNF、SELinux 等)相同的绑定。因此,在需要与基础操作系统或二进制兼容性的情况下,使用 python36
。在将系统绑定与各种 Python 模块的更新版本一起需要绑定的唯一实例中,请使用 python36
模块和通过 pip
安装到 Python 的 venv
或 virtualenv
环境中安装的第三方上游 Python 模块。
Python 3.11 和 Python 3.12 虚拟环境必须使用 venv
而不是 virtualenv
创建
RHEL 8 中的 virtualenv
工具由 python3-virtualenv
软件包提供,与 Python 3.11 和 Python 3.12 不兼容。尝试使用 virtualenv
创建虚拟环境会失败并显示出错信息,例如:
virtualenv -p python3.11 venv3.11
$ virtualenv -p python3.11 venv3.11
Running virtualenv with interpreter /usr/bin/python3.11
ERROR: Virtual environments created by virtualenv < 20 are not compatible with Python 3.11.
ERROR: Use python3.11 -m venv instead.
要创建 Python 3.11 或 Python 3.12 虚拟环境,请使用 python3.11 -m venv
或 python3.12 -m venv
命令,它使用标准库中的 venv
模块。
16.2. 安装和使用 Python 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 8 中,Python 3 在 3.6、3.3 和 3.9 版本中分发,由 python36
、python38
和 python39
模块提供,以及 AppStream 存储库中的 python3.11
和 python3.12
软件包套件。
默认情况下,使用未指定版本的 python
命令安装或运行 Python 无法正常工作,因为不确定。始终指定 Python 的版本,或使用 alternatives
命令配置系统默认版本。
16.2.1. 安装 Python 3 复制链接链接已复制到粘贴板!
按照设计,您可以并行安装 RHEL 8 模块,包括 python27
、python36
、python38
和 python39
模块,以及 python3.11
和 python3.12
软件包套件。
您可以安装 Python 3.8、Python 3.9、Python 3.11 和 Python 3.12,包括同一系统上与 Python 3.6 并行构建的软件包,但 mod_wsgi
模块除外。由于 Apache HTTP 服务器的一个限制,系统中只能安装 python3-mod_wsgi
,python38-mod_wsgi
,python39-mod_wsgi
,python3.11-mod_wsgi
, 或 python3.12-mod_wsgi
软件包。
流程
要从
python36
模块安装 Python 3.6,请使用:yum install python3
# yum install python3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow python36:3.6
模块流会自动启用。要从
python38
模块安装 Python 3.8,请使用:yum install python38
# yum install python38
Copy to Clipboard Copied! Toggle word wrap Toggle overflow python38:3.8
模块流会自动启用。要从
python39
模块安装 Python 3.9,请使用:yum install python39
# yum install python39
Copy to Clipboard Copied! Toggle word wrap Toggle overflow python39:3.9
模块流会自动启用。要从
python3.11
RPM 软件包安装 Python 3.11,请使用:yum install python3.11
# yum install python3.11
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从
python3.12
RPM 软件包安装 Python 3.12,请使用:yum install python3.12
# yum install python3.12
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证您系统中安装的 Python 版本,请使用
--version
选项以及特定于您所需版本的 Python 命令的python
命令。对于 Python 3.6:
python3 --version
$ python3 --version
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Python 3.8:
python3.8 --version
$ python3.8 --version
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Python 3.9:
python3.9 --version
$ python3.9 --version
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Python 3.11:
python3.11 --version
$ python3.11 --version
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Python 3.12:
python3.12 --version
$ python3.12 --version
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.2.2. 安装其他 Python 3 软件包 复制链接链接已复制到粘贴板!
Python 3.6 附加模块的软件包通常使用 python3-
前缀,Python 3.8 的软件包包括 python38-
前缀,Python 3.9 的软件包包括 python39-
前缀,Python 3.11 的软件包包括 python3.11-
前缀,Python 3.12 的软件包包括 python3.12-
前缀。安装其他 Python 软件包时始终包含前缀,如下例所示。
流程
要为 Python 3.6 安装
Requests
模块,请使用:yum install python3-requests
# yum install python3-requests
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要为 Python 3.8 安装
Cython
扩展,请使用:yum install python38-Cython
# yum install python38-Cython
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从 Python 3.9 安装
pip
软件包安装程序,请使用:yum install python39-pip
# yum install python39-pip
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从 Python 3.11 安装
pip
软件包安装程序,请使用:yum install python3.11-pip
# yum install python3.11-pip
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从 Python 3.12 安装
pip
软件包安装程序,请使用:yum install python3.12-pip
# yum install python3.12-pip
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.2.3. 为开发人员安装其他 Python 3 工具 复制链接链接已复制到粘贴板!
其他面向开发人员的 Python 工具主要通过相应的 python38-devel
或 python39-devel
模块中的 CodeReady Linux Builder (CRB)存储库发布,或 python3.11NodeStatus
或 python3.12 suit
软件包。
python3-pytest
软件包(用于 Python 3.6)及其依赖项在 AppStream 存储库中提供。
CRB 存储库提供:
-
python38-devel
模块,其包含python38-pytest
软件包及其依赖项。 -
python39-devel
模块,其包含python39-pytest
软件包及其依赖项,以及python39-debug
和python39-Cython
软件包。 python3.11-*
软件包,其包括:-
python3.11-pytest
及其依赖项 -
python3.11-idle
-
python3.11-debug
-
python3.11-Cython
-
-
python3.12 channel
软件包,其中包括一组类似的软件包,如python3.11 channel
。
红帽不支持 CodeReady Linux Builder 存储库中的内容。
并非所有与上游 Python 相关的软件包都包括在 RHEL 中。
要安装 ppython3*-pytest
软件包,请使用以下流程。
流程
对于 Python 3.8 及之后的版本,请启用 CodeReady Linux Builder 存储库:
subscription-manager repos --enable codeready-builder-for-rhel-8-x86_64-rpms
# subscription-manager repos --enable codeready-builder-for-rhel-8-x86_64-rpms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Python 3.8 或 3.9,启用相应的
python3*-devel
模块,例如:yum module enable python39-devel
# yum module enable python39-devel
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安装
python3*-pytest
软件包:对于 Python 3.6:
yum install python3-pytest
# yum install python3-pytest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Python 3.8:
yum install python38-pytest
# yum install python38-pytest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Python 3.9:
yum install python39-pytest
# yum install python39-pytest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Python 3.11:
yum install python3.11-pytest
# yum install python3.11-pytest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Python 3.12:
yum install python3.12-pytest
# yum install python3.12-pytest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.2.4. 安装 Python 2 复制链接链接已复制到粘贴板!
有些应用程序和脚本还没有完全移植到 Python 3,并需要 Python 2 运行。Red Hat Enterprise Linux 8 允许并行安装 Python 3 和 Python 2。如果您需要 Python 2 功能,请安装 python27
模块,该模块可在 AppStream 存储库中获得。
请注意,Python 3 是 Python 项目的主要开发方向。对 Python 2 的支持正在分阶段阶段。python27
模块的支持周期比 Red Hat Enterprise Linux 8 短。
流程
要从
python27
模块安装 Python 2.7,请使用:yum install python2
# yum install python2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow python27:2.7
模块流会自动启用。
Python 2 附加模块的软件包通常使用 python2-
前缀。安装其他 Python 软件包时始终包含前缀,如下例所示。
要为 Python 2 安装
Requests
模块,请使用:yum install python2-requests
# yum install python2-requests
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要为 Python 2 安装
Cython
扩展,请使用:yum install python2-Cython
# yum install python2-Cython
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证安装在您的系统中的 Python 版本,请使用:
python2 --version
$ python2 --version
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
按照设计,您可以并行安装 RHEL 8 模块,包括 python27
、python36
、python38
和 python39
模块。
16.2.5. 从 Python 2 迁移到 Python 3 复制链接链接已复制到粘贴板!
作为开发者,您可能想要将之前使用 Python 2 编写的代码迁移到 Python 3。
有关如何将大型代码库迁移到 Python 3 的更多信息,请参阅 保守 Python 3 移植指南。
请注意,在迁移后,原始 Python 2 代码就可以被 Python 3 解释器解释,也可以被 Python 2 解释器解析。
16.2.6. 使用 Python 复制链接链接已复制到粘贴板!
在运行 Python 解释器或 Python 相关的命令时,请始终指定版本。
先决条件
- 确保所需的 Python 版本已安装。
如果要为 Python 3.11 或 Python 3.12 下载并安装第三方应用程序,请安装
python3.11-pip
或python3.12-pip
软件包。警告使用
pip
作为 root 用户安装 Python 软件包,将文件放置在系统位置。这会覆盖 RHEL 库,并可能导致系统不稳定或与支持的软件包冲突。红帽不支持在系统级别使用pip
来安装软件。要避免这些问题,请在虚拟环境中使用pip
,或使用--user
选项以非 root 用户身份安装软件包。
流程
要运行 Python 3.6 解释器或相关命令,请使用:
python3 python3 -m venv --help python3 -m pip install package pip3 install package
$ python3 $ python3 -m venv --help $ python3 -m pip install package $ pip3 install package
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要运行 Python 3.8 解释器或相关命令,请使用:
python3.8 python3.8 -m venv --help python3.8 -m pip install package pip3.8 install package
$ python3.8 $ python3.8 -m venv --help $ python3.8 -m pip install package $ pip3.8 install package
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要运行 Python 3.9 解释器或相关命令,请使用:
python3.9 python3.9 -m venv --help python3.9 -m pip install package pip3.9 install package
$ python3.9 $ python3.9 -m venv --help $ python3.9 -m pip install package $ pip3.9 install package
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要运行 Python 3.11 解释器或相关命令,请使用:
python3.11 python3.11 -m venv --help python3.11 -m pip install package pip3.11 install package
$ python3.11 $ python3.11 -m venv --help $ python3.11 -m pip install package $ pip3.11 install package
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要运行 Python 3.12 解释器或相关命令,请使用:
python3.12 python3.12 -m venv --help python3.12 -m pip install package pip3.12 install package
$ python3.12 $ python3.12 -m venv --help $ python3.12 -m pip install package $ pip3.12 install package
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要运行 Python 2 解释器或相关命令,请使用:
python2 python2 -m pip install package pip2 install package
$ python2 $ python2 -m pip install package $ pip2 install package
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.3. 配置未指定版本的 Python 复制链接链接已复制到粘贴板!
系统管理员可以使用 alternatives
命令配置位于 /usr/bin/python
的被指定版本的 python
命令。请注意,在将未指定版本的命令配置为对应的版本之前,必须安装所需的软件包 python3
,python38
,python39
,python3.11
,python3.12
, 或 python2
。
/usr/bin/python
执行文件由 alternatives
系统控制。更新时可能会覆盖任何手动更改。
其他 Python 相关的命令,如 pip3
,没有可配置的未版本化变体。
16.3.1. 直接配置未指定版本的 python 命令 复制链接链接已复制到粘贴板!
您可以将未版本化的 python
命令直接配置为所选的 Python 版本。
先决条件
- 确保所需的 Python 版本已安装。
流程
要将未版本化的
python
命令配置为 Python 3.6,请使用:alternatives --set python /usr/bin/python3
# alternatives --set python /usr/bin/python3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将未版本化的
python
命令配置为 Python 3.8,请使用:alternatives --set python /usr/bin/python3.8
# alternatives --set python /usr/bin/python3.8
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将未版本化的
python
命令配置为 Python 3.9,请使用:alternatives --set python /usr/bin/python3.9
# alternatives --set python /usr/bin/python3.9
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将未版本化的
python
命令配置为 Python 3.11,请使用:alternatives --set python /usr/bin/python3.11
# alternatives --set python /usr/bin/python3.11
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将未指定版本的
python
命令配置为 Python 3.12,请使用:alternatives --set python /usr/bin/python3.12
# alternatives --set python /usr/bin/python3.12
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将未指定版本的
python
命令配置为 Python 2,请使用:alternatives --set python /usr/bin/python2
# alternatives --set python /usr/bin/python2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.3.2. 以互动方式将未指定版本的 python 命令配置为所需的 Python 版本 复制链接链接已复制到粘贴板!
您可以以交互方式将未版本化的 python
命令配置为所需的 Python 版本。
先决条件
- 确保所需的 Python 版本已安装。
流程
要以互动方式配置未版本化的
python
命令,请使用:alternatives --config python
# alternatives --config python
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 从提供的列表中选择所需版本。
要重置此配置并删除未版本化的
python
命令,请使用:alternatives --auto python
# alternatives --auto python
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.4. 打包 Python 3 RPM 复制链接链接已复制到粘贴板!
大多数 Python 项目使用 Setuptools 进行打包,并在 setup.py
文件中定义软件包信息。有关 Setuptools 打包的更多信息,请参阅 Setuptools 文档。
您还可以将 Python 项目打包成 RPM 软件包,与 Setuptools 打包相比有以下优点:
- 在其他 RPM (即使非 Python)上依赖关系软件包的规格
加密签名
通过加密签名,可以使用其余操作系统验证、集成和测试 RPM 软件包的内容。
16.4.1. Python 软件包的 spec 文件描述 复制链接链接已复制到粘贴板!
spec
文件包含 rpmbuild
实用程序用于构建 RPM 的指令。这些指令包含在不同的部分。spec
文件有两个主要部分,在其中定义了这些部分:
- Preamble(包含一系列在 Body 中使用的元数据项)
- Body(包含指令的主要部分)
与非 Python RPM SPEC 文件相比,Python 项目的 RPM SPEC 文件有一些特定信息。最值得注意的是,Python 库的任何 RPM 软件包的名称必须始终包含确定版本的前缀,例如 Python 3.6 的 python
3、Python 3.9 的
、Python 3.11 的 python
39python3.11
或 Python 3.12 的 python3.12
。
其他具体信息显示在 python3-detox
软件包的以下 spec
文件示例 中。有关此类特定描述,请查看示例中的备注。
- 1
- modname 宏包含 Python 项目的名称。在这个示例中,它是
detox
。 - 2
- 将 Python 项目打包成 RPM 时,
python3
前缀始终需要添加到项目的原始名称中。此处的原始名称为detox
,RPM 名称为python3-detox
。 - 3
- BuildRequires 指定了构建和测试此软件包所需的软件包。在 BuildRequires 中,始终包括提供构建 Python 软件包所需的工具:
python36-devel
和python3-setuptools
。需要python36-rpm-macros
软件包,以便具有/usr/bin/python3
解释器指令的文件会自动改为/usr/bin/python3.6
。 - 4
- 每个 Python 软件包都需要其他软件包才能正常工作。这些软件包还需要在
spec
文件中指定。要指定依赖项,您可以使用 %python_enable_dependency_generator 宏自动使用setup.py
文件中定义的依赖项。如果软件包的依赖软件包没有使用 Setuptools 指定,请在附加Requires
指令中指定它们。 - 5
- %py3_build 和 %py3_install 宏会分别运行
setup.py build
和setup.py install
命令,使用附加参数来指定安装位置、要使用的解释器以及其他详情。 - 6
- check 部分提供了一个宏,它运行正确的 Python 版本。%{__python3} 宏包含 Python 3 解释器的路径,例如
/usr/bin/python3
。我们建议始终使用宏而不是字面上的路径。
16.4.2. Python 3 RPM 的常见宏 复制链接链接已复制到粘贴板!
在 spec
文件中,使用用于 Python 3 RPM 的宏表中的内容来使用宏而不是使用硬编码。
在宏名称中,始终使用 python3
或 python2
,而不是未指定版本的 python
。在 SPEC 文件的 BuildRequires
部分中,将特定的 Python 3 版本配置为 python36-rpm-macros
,python38-rpm-macros
,python39-rpm-macros
,python3.11-rpm-macros
, 或 python3.12-rpm-macros
。
Macro | 常规定义 | 描述 |
---|---|---|
%{__python3} | /usr/bin/python3 | Python 3 解释器 |
%{python3_version} | 3.6 | Python 3 解释器的完整版本。 |
%{python3_sitelib} | /usr/lib/python3.6/site-packages | 其中安装了纯 Python 模块。 |
%{python3_sitearch} | /usr/lib64/python3.6/site-packages | 安装了包含特定于架构扩展的模块。 |
%py3_build |
使用适合系统软件包的参数运行 | |
%py3_install |
使用适合系统软件包的参数运行 |
16.4.3. 自动为 Python RPM 提供 复制链接链接已复制到粘贴板!
在打包 Python 项目时,请确保以下目录包含在生成的 RPM 中(如果这些目录存在):
-
.dist-info
-
.egg-info
-
.egg-link
从这些目录中,RPM 构建流程自动生成虚拟 pythonX.Ydist
提供,如 python3.6dist (detox)
。这些虚拟提供由 %python_enable_dependency_generator 宏指定的软件包使用。
16.5. 在 Python 脚本中处理解释器指令 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 8 中,可执行 Python 脚本应该使用解析程序指令(也称为 hashbangs 或 shebangs),至少指定主 Python 版本。例如:
在构建任何 RPM 软件包时,/usr/lib/rpm/redhat/brp-mangle-shebangs
buildroot 策略 (BRP) 脚本会自动运行,并尝试在所有可执行文件中更正解释器指令。
当遇到带有模糊的解释解释器指令的 Python 脚本时,BRP 脚本会生成错误,例如:
#!/usr/bin/python
#!/usr/bin/python
或者
#!/usr/bin/env python
#!/usr/bin/env python
16.5.1. 修改 Python 脚本中的解释器指令 复制链接链接已复制到粘贴板!
修改会在 RPM 构建时导致构建错误的解释器指令。
先决条件
- Python 脚本中的一些解释器指令会导致构建错误。
流程
要修改解释器指令,请完成以下任务之一:
应用
platform-python-devel
软件包中的pathfix.py
脚本:pathfix.py -pn -i %{__python3} PATH …
# pathfix.py -pn -i %{__python3} PATH …
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,可以指定多个
PATH
。如果PATH
是一个目录,则pathfix.py
会递归扫描与模式^[a-zA-Z0-9_]+\.py$
匹配的 Python 脚本,而不仅仅是具有模糊的解释器指令。将此命令添加到%prep
部分,或者在%install
部分的末尾。-
修改打包的 Python 脚本,以便它们符合预期格式。为此,
pathfix.py
也可用于 RPM 构建过程外。当在 RPM 构建外运行pathfix.py
时,将上面示例中的%{__python3}
替换为解释器指令的路径,如/usr/bin/python3
。
如果打包的 Python 脚本需要 Python 3.6 以外的版本,请调整前面的命令以包括所需的版本。
16.5.2. 更改自定义软件包中的 /usr/bin/python3 解释器指令 复制链接链接已复制到粘贴板!
默认情况下,/usr/bin/python3
格式的解释器指令被替换为指向 platform-python
软件包中的 Python 解释器指令,该指令用于 Red Hat Enterprise Linux 的系统工具。您可以更改自定义软件包中的 /usr/bin/python3
解释器指令,以指向从 AppStream 存储库安装的 Python 的特定版本。
流程
要为特定版本的 Python 构建软件包,请将相应
python
软件包的python*-rpm-macrosspec
文件的 BuildRequires 部分。例如,对于 Python 3.6,包括以下行:BuildRequires: python36-rpm-macros
BuildRequires: python36-rpm-macros
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 因此,自定义软件包中的
/usr/bin/python3
解释器指令会自动转换为/usr/bin/python3.6
。
要防止 BRP 脚本检查和修改解释器指令,请使用以下 RPM 指令:
%undefine __brp_mangle_shebangs
%undefine __brp_mangle_shebangs
16.6. 使用 PHP 脚本语言 复制链接链接已复制到粘贴板!
超文本 Preprocessor(PHP)是主要用于服务器端脚本的通用脚本语言,可让您使用 Web 服务器运行 PHP 代码。
在 RHEL 8 中,PHP 脚本语言由 php
模块提供,该模块可在多个流(版本)中可用。
根据您的用例,您可以安装所选模块流的特定配置集:
-
common
- 使用 Web 服务器进行服务器端脚本的默认配置文件。它包括多个广泛使用的扩展。 -
minimal
- 此配置集只安装命令行来使用 PHP 编写脚本,而无需使用 Web 服务器。 -
devel
- 此配置集包含来自common
配置集的软件包以及用于开发用途的其他软件包。
16.6.1. 安装 PHP 脚本语言 复制链接链接已复制到粘贴板!
您可以安装 php
模块的所选版本。
流程
要使用默认配置集安装
php
模块流,请使用:yum module install php:stream
# yum module install php:stream
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您要安装的 PHP 版本替换 stream。
例如,要安装 PHP 8.0:
yum module install php:8.0
# yum module install php:8.0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认
common
配置集安装php-fpm
软件包,并预配置 PHP 以用于Apache HTTP 服务器
或nginx
。要安装
php
模块流的特定配置集,请使用:yum module install php:stream/profile
# yum module install php:stream/profile
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您要安装的 配置集 的名称替换 stream。
例如,要安装 PHP 8.0 以供不使用 Web 服务器:
yum module install php:8.0/minimal
# yum module install php:8.0/minimal
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.6.2. 通过 Web 服务器使用 PHP 脚本语言 复制链接链接已复制到粘贴板!
16.6.2.1. 在 Apache HTTP 服务器中使用 PHP 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 8 中,Apache HTTP 服务器
允许您将 PHP 作为 FastCGI 进程服务器运行。FastCGI Process Manager(FPM)是一种替代 PHP FastCGI 守护进程,它允许网站管理高负载。PHP 在 RHEL 8 中使用 FastCGI 流程管理器。
您可以使用 FastCGI 进程服务器运行 PHP 代码。
先决条件
在您的系统上安装 PHP 脚本语言。
请参阅 安装 PHP 脚本语言。
流程
安装
httpd
模块:yum module install httpd:2.4
# yum module install httpd:2.4
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
Apache HTTP 服务器
:systemctl start httpd
# systemctl start httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,如果
Apache HTTP
服务器已在您的系统中运行,请在安装 PHP 后重启httpd
服务:systemctl restart httpd
# systemctl restart httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
php-fpm
服务:systemctl start php-fpm
# systemctl start php-fpm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 在引导时启用这两个服务:
systemctl enable php-fpm httpd
# systemctl enable php-fpm httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要获取有关 PHP 设置的信息,请在
/var/www/html/
目录中创建带有以下内容的index.php
文件:echo '<?php phpinfo(); ?>' > /var/www/html/index.php
# echo '<?php phpinfo(); ?>' > /var/www/html/index.php
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要运行
index.php
文件,请将浏览器指向:http://<hostname>/
http://<hostname>/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果您有具体要求,请调整配置:
-
/etc/httpd/conf/httpd.conf
- 一般的httpd
配置 -
/etc/httpd/conf.d/php.conf
-httpd
特定 PHP 配置 -
/usr/lib/systemd/system/httpd.service.d/php-fpm.conf
- 默认情况下,php-fpm
服务与httpd
一起启动 -
/etc/php-fpm.conf
- FPM 主配置 -
/etc/php-fpm.d/www.conf
- 默认www
池配置
-
例 16.1. 运行"Hello, World!"使用 Apache HTTP 服务器的 PHP 脚本
在
/var/www/html/
目录中为您的项目创建一个hello
目录:mkdir hello
# mkdir hello
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/var/www/html/hello/
目录中创建hello.php
文件,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
Apache HTTP 服务器
:systemctl start httpd
# systemctl start httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要运行
hello.php
文件,请将浏览器指向:http://<hostname>/hello/hello.php
http://<hostname>/hello/hello.php
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 因此,会显示带有 "Hello, World!" 文本的网页。
16.6.2.2. 使用带有 nginx web 服务器的 PHP 复制链接链接已复制到粘贴板!
您可以通过 nginx
web 服务器运行 PHP 代码。
先决条件
在您的系统上安装 PHP 脚本语言。
请参阅 安装 PHP 脚本语言。
流程
安装
nginx
模块流:yum module install nginx:stream
# yum module install nginx:stream
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用要安装的
nginx
版本替换 stream。例如,要安装
nginx
版本 1.18::yum module install nginx:1.18
# yum module install nginx:1.18
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
nginx
服务器:systemctl start nginx
# systemctl start nginx
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,如果
nginx
服务器已在您的系统中运行,请在安装 PHP 后重启nginx
服务:systemctl restart nginx
# systemctl restart nginx
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
php-fpm
服务:systemctl start php-fpm
# systemctl start php-fpm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 在引导时启用这两个服务:
systemctl enable php-fpm nginx
# systemctl enable php-fpm nginx
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要获取 PHP 设置的信息,请在
/usr/share/nginx/html/
目录中使用以下内容创建index.php
文件:echo '<?php phpinfo(); ?>' > /usr/share/nginx/html/index.php
# echo '<?php phpinfo(); ?>' > /usr/share/nginx/html/index.php
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要运行
index.php
文件,请将浏览器指向:http://<hostname>/
http://<hostname>/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果您有具体要求,请调整配置:
-
/etc/nginx/nginx.conf
-nginx
主配置 -
/etc/nginx/conf.d/php-fpm.conf
- FPM 配置nginx
-
/etc/php-fpm.conf
- FPM 主配置 -
/etc/php-fpm.d/www.conf
- 默认www
池配置
-
例 16.2. 运行"Hello, World!"使用 nginx 服务器的 PHP 脚本
在
/usr/share/nginx/html/
目录中为您的项目创建一个hello
目录:mkdir hello
# mkdir hello
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/usr/share/nginx/html/hello/
目录中创建一个包含以下内容的hello.php
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
nginx
服务器:systemctl start nginx
# systemctl start nginx
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要运行
hello.php
文件,请将浏览器指向:http://<hostname>/hello/hello.php
http://<hostname>/hello/hello.php
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 因此,会显示带有 "Hello, World!" 文本的网页。
16.6.3. 使用命令行运行 PHP 脚本 复制链接链接已复制到粘贴板!
PHP 脚本通常使用 Web 服务器运行,但也可以使用命令行来运行。
如果只使用命令行运行 php
脚本,请安装 php
模块流的 minimal
配置集。
请参阅 安装 PHP 脚本语言。
先决条件
在您的系统上安装 PHP 脚本语言。
请参阅 安装 PHP 脚本语言。
流程
在文本编辑器中,创建一个
filename.php
文件将 filename 替换为您的文件名称。
从命令行执行创建
filename.php
文件:php filename.php
# php filename.php
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
例 16.3. 运行"Hello, World!"使用命令行 PHP 脚本
使用文本编辑器,创建包含以下内容的
hello.php
文件:<?php echo 'Hello, World!'; ?>
<?php echo 'Hello, World!'; ?>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从命令行执行
hello.php
文件:php hello.php
# php hello.php
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 结果会输出 "Hello, World!"。
16.7. Tcl/Tk 入门 复制链接链接已复制到粘贴板!
16.7.1. Tcl/Tk 简介 复制链接链接已复制到粘贴板!
工具命令语言(Tcl) 是一种动态编程语言。此语言的解释器和 C 库都由 tcl
软件包提供。
使用 Tcl 与 Tk (Tcl/Tk)搭配可创建跨平台 GUI 应用程序。TK 由 tk
软件包提供。
请注意,Tk 可以引用以下任意一种:
- 用于多种语言的编程工具包
- Tk C 库绑定可用于多种语言,如 C、Ruby、Perl 和 Python
- 一个需要解释器来实例化 Tk 控制台
- 为特定 Tcl 解释器添加多个新命令的 Tk 扩展
有关 Tcl/Tk 的更多信息,请参阅 Tcl/Tk manual 或 Tcl/Tk 文档网页。
16.7.2. Tcl/Tk 8.6 中的显著变化 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 7 使用 Tcl/Tk 8.5。在 Red Hat Enterprise Linux 8 中,Tcl/Tk 版本 8.6 在 Base OS 仓库中提供。
与 Tcl/Tk 8.5 相比,Tcl/Tk 8.6 的主要更改 有:
- 基于对象的编程支持
- 无堆栈评估实施
- 增强的例外处理
- 使用 Tcl 构建并安装的第三方软件包集合
- 启用多线程操作
- 对 SQL 数据库增强脚本的支持
- IPv6 网络支持
- 内置 Zlib 压缩
列表处理
提供了两个新命令:
lmap
和dict map
,它们允许在 Tcl 容器上的表达转换。按脚本堆叠的通道
有两个新命令
chan push
和chan pop
可用,允许向 I/O 频道添加或删除转换。
Tk 的主要更改包括:
- 内置 PNG 镜像支持
忙碌窗口
新的命令
tk busy
可用,它禁用对窗口或小部件的用户交互,并显示忙碌的光标。- 新的字体选择对话框接口
- Angled 文本支持
- 在 canvas 上移动支持
有关 Tcl 8.5 和 Tcl 8.6 之间的更改的详细列表,请参阅 Tcl/Tk 8.6 中的更改。
16.7.3. 迁移到 Tcl/Tk 8.6 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 7 使用 Tcl/Tk 8.5。在 Red Hat Enterprise Linux 8 中,Tcl/Tk 版本 8.6 在 Base OS 仓库中提供。
本节论述了到 Tcl/Tk 8.6 的迁移路径:
- 开发人员编写 Tcl 扩展或将 Tcl 解释器嵌入到其应用程序中
- 用户使用 Tcl/Tk编写任务
16.7.3.1. Tcl 扩展开发人员迁移路径 复制链接链接已复制到粘贴板!
要使您的代码与 Tcl 8.6 兼容,请使用以下步骤。
流程
重写代码以使用
interp
结构。例如,如果您的代码读取interp→errorline
,将其重写为使用以下功能:Tcl_GetErrorLine(interp)
Tcl_GetErrorLine(interp)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这是必要的,因为 Tcl 8.6 限制对
interp
结构成员的直接访问。要使您的代码与 Tcl 8.5 和 Tcl 8.6 兼容,请在包含 Tcl 库的头文件中使用以下代码片段:
include <tcl.h> if !defined(Tcl_GetErrorLine) define Tcl_GetErrorLine(interp) (interp→errorLine) endif
# include <tcl.h> # if !defined(Tcl_GetErrorLine) # define Tcl_GetErrorLine(interp) (interp→errorLine) # endif
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.7.3.2. 用户通过 Tcl/Tk 编写任务的迁移路径 复制链接链接已复制到粘贴板!
在 Tcl 8.6 中,大多数脚本的工作方式与之前的 Tcl 版本相同。
要将代码迁移到 Tcl 8.6,请使用此流程。
流程
在编写可移植代码时,请确保不使用 Tk 8.6 中不再支持的命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,您还可以检查
/usr/share/tk8.6/unsupported.tcl
文件中不支持的命令列表。