22.4. 配置示例
22.4.1. rsync 作为守护进程 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
在使用红帽企业 Linux 时,rsync 可用作守护进程,让多个客户端可以直接将其通信为中央服务器,从而存储中央文件并保持它们同步。以下示例将演示通过正确的域中的网络套接字将 rsync 作为守护进程运行,以及 SELinux 如何期望此守护进程在预定义(SELinux 策略中)TCP 端口上运行。然后,本示例将演示如何修改 SELinux 策略,以允许
rsync 守护进程在非标准端口上正常运行。
此示例将在单个系统上执行,以演示 SELinux 策略及其对本地后台程序和进程的控制。请注意,这只是一个示例,并演示了 SELinux 如何影响 rsync。rsync 的综合文档不在本文的讨论范围之内。详情请查看官方的 rsync 文档。本例假定安装了 rsync、setroubleshoot-server 和 audit 软件包,使用了 SELinux targeted 策略,并且 SELinux 处于强制模式。
过程 22.1. 获取 rsync 作为 rsync_t 启动
- 运行 getenforce 命令,确认 SELinux 是否在 enforcing 模式下运行:
getenforce
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当 SELinux 处于 enforcing 模式时,命令会返回Enforcing。 - 运行 which 命令来确认 rsync 二进制文件在系统路径中:
which rsync
~]$ which rsync /usr/bin/rsyncCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 当将 rsync 作为守护进程运行时,应使用配置文件并保存为
/etc/rsyncd.conf。请注意,在本示例中使用的以下配置文件非常简单,并不包括所有可用的选项,而是足以演示rsync守护进程:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 现在,rsync 有一个简单的配置文件可在守护进程模式下运行,您可以运行以下命令来启动该文件:
systemctl start rsyncd.service
~]# systemctl start rsyncd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确保rsyncd已成功启动(输出应该类似以下示例,只有时间戳会有所不同):Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux 现在可以通过rsync守护进程强制其保护机制,因为它现在在rsync_t域中运行:ps -eZ | grep rsync
~]$ ps -eZ | grep rsync system_u:system_r:rsync_t:s0 3220 ? 00:00:00 rsyncCopy to Clipboard Copied! Toggle word wrap Toggle overflow
本例演示了如何在
rsync_ t 域中运行 rsync。rsync 也可以作为套接字激活的服务运行。在这种情况下,在客户端尝试连接到该服务之前,不会执行 rsyncd。要启用 rsyncd 作为套接字激活服务运行,请按照以下步骤执行。要将 rsyncd 作为 socket-activated 服务启动,请以 root 用户身份输入以下命令:
systemctl start rsyncd.socket
~]# systemctl start rsyncd.socket
下一个示例演示了如何在非默认端口上成功运行此守护进程。下一个示例中使用 TCP 端口 10000。
过程 22.2. 在非默认端口上运行 rsync 守护进程
- 修改
/etc/rsyncd.conf文件,并在全局配置区域(即定义任何文件区域之前)的文件顶部添加port = 10000行。新配置文件将如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在使用这个新设置启动
rsync守护进程后,SELinux 会记录类似如下的拒绝信息:Jul 22 10:46:59 localhost setroubleshoot: SELinux is preventing the rsync (rsync_t) from binding to port 10000. For complete SELinux messages, run sealert -l c371ab34-639e-45ae-9e42-18855b5c2de8
Jul 22 10:46:59 localhost setroubleshoot: SELinux is preventing the rsync (rsync_t) from binding to port 10000. For complete SELinux messages, run sealert -l c371ab34-639e-45ae-9e42-18855b5c2de8Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用
semanage工具将 TCP 端口 10000 添加到rsync_port_t中的 SELinux 策略中:semanage port -a -t rsync_port_t -p tcp 10000
~]# semanage port -a -t rsync_port_t -p tcp 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 现在,在
rsync_port_t的 SELinux 策略中增加了 TCP 端口 10000,rsyncd将在此端口上启动并运行:systemctl start rsyncd.service
~]# systemctl start rsyncd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow netstat -lnp | grep 10000
~]# netstat -lnp | grep 10000 tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 9910/rsyncCopy to Clipboard Copied! Toggle word wrap Toggle overflow
SELinux 已修改其策略,现在允许
rsyncd 在 TCP 端口 10000 上操作。