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 Enforcing
当 SELinux 处于 enforcing 模式时,命令会返回Enforcing
。 - 运行 which 命令来确认 rsync 二进制文件在系统路径中:
~]$ which rsync /usr/bin/rsync
- 当将 rsync 作为守护进程运行时,应使用配置文件并保存为
/etc/rsyncd.conf
。请注意,在本示例中使用的以下配置文件非常简单,并不包括所有可用的选项,而是足以演示rsync
守护进程:log file = /var/log/rsync.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock [files] path = /srv/rsync comment = file area read only = false timeout = 300
- 现在,rsync 有一个简单的配置文件可在守护进程模式下运行,您可以运行以下命令来启动该文件:
~]# systemctl start rsyncd.service
确保rsyncd
已成功启动(输出应该类似以下示例,只有时间戳会有所不同):~]# systemctl status rsyncd.service rsyncd.service - fast remote file copy program daemon Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; disabled) Active: active (running) since Thu 2014-02-27 09:46:24 CET; 2s ago Main PID: 3220 (rsync) CGroup: /system.slice/rsyncd.service └─3220 /usr/bin/rsync --daemon --no-detach
SELinux 现在可以通过rsync
守护进程强制其保护机制,因为它现在在rsync_t
域中运行:~]$ ps -eZ | grep rsync system_u:system_r:rsync_t:s0 3220 ? 00:00:00 rsync
本例演示了如何在
rsync_
t
域中运行 rsync。rsync 也可以作为套接字激活的服务运行。在这种情况下,在客户端尝试连接到该服务之前,不会执行 rsyncd
。要启用 rsyncd
作为套接字激活服务运行,请按照以下步骤执行。要将 rsyncd
作为 socket-activated 服务启动,请以 root 用户身份输入以下命令:
~]# systemctl start rsyncd.socket
下一个示例演示了如何在非默认端口上成功运行此守护进程。下一个示例中使用 TCP 端口 10000。
过程 22.2. 在非默认端口上运行 rsync 守护进程
- 修改
/etc/rsyncd.conf
文件,并在全局配置区域(即定义任何文件区域之前)的文件顶部添加port = 10000
行。新配置文件将如下所示:log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock port = 10000 [files] path = /srv/rsync comment = file area read only = false timeout = 300
- 在使用这个新设置启动
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
- 使用
semanage
工具将 TCP 端口 10000 添加到rsync_port_t
中的 SELinux 策略中:~]# semanage port -a -t rsync_port_t -p tcp 10000
- 现在,在
rsync_port_t
的 SELinux 策略中增加了 TCP 端口 10000,rsyncd
将在此端口上启动并运行:~]# systemctl start rsyncd.service
~]# netstat -lnp | grep 10000 tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 9910/rsync
SELinux 已修改其策略,现在允许
rsyncd
在 TCP 端口 10000 上操作。