# Rsyncd 在 Rocky Linux 上的安装与使用指南

Rsyncd 是 rsync 的守护进程模式，允许将 rsync 作为服务运行，实现持续的文件同步服务。以下是在 Rocky Linux 8/9 上安装和配置 rsyncd 的完整指南。

## 一、安装 rsyncd

### 1. 安装 rsync 软件包

```bash
sudo dnf install rsync
```

### 2. 检查版本确认安装成功

```bash
rsync --version
```

## 二、配置 rsyncd 服务

### 1. 创建主配置文件

```bash
sudo vi /etc/rsyncd.conf
```

### 2. 基本配置示例

```ini
# 全局配置
uid = nobody
gid = nobody
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
timeout = 300

# 模块配置
[backup]
    path = /data/backup
    comment = Backup Directory
    read only = no
    list = yes
    auth users = rsyncuser
    secrets file = /etc/rsyncd.secrets
    hosts allow = 192.168.1.0/24
```

### 3. 创建认证文件

```bash
sudo vi /etc/rsyncd.secrets
```
内容格式：
```
用户名:密码
```
例如：
```
rsyncuser:mypassword123
```

设置文件权限：
```bash
sudo chmod 600 /etc/rsyncd.secrets
sudo chown root:root /etc/rsyncd.secrets
```

### 4. 创建共享目录

```bash
sudo mkdir -p /data/backup
sudo chown nobody:nobody /data/backup
```

## 三、启动和管理 rsyncd 服务

### 1. 启用并启动服务

```bash
sudo systemctl enable rsyncd
sudo systemctl start rsyncd
```

### 2. 检查服务状态

```bash
sudo systemctl status rsyncd
```

### 3. 防火墙配置

```bash
# 开放873端口
sudo firewall-cmd --add-port=873/tcp --permanent
sudo firewall-cmd --reload
```

### 4. SELinux 配置（如启用）

```bash
sudo setsebool -P rsync_full_access=1
```

## 四、客户端连接使用

### 1. 从客户端同步到服务器（推送）

```bash
rsync -avz /local/path/ rsyncuser@server::backup
```

### 2. 从服务器同步到客户端（拉取）

```bash
rsync -avz rsyncuser@server::backup /local/path/
```

### 3. 使用密码文件（避免交互输入）

创建客户端密码文件 `~/rsync.pass`：
```
mypassword123
```
设置权限：
```bash
chmod 600 ~/rsync.pass
```

使用密码文件同步：
```bash
rsync -avz --password-file=~/rsync.pass /local/path/ rsyncuser@server::backup
```

## 五、高级配置选项

### 1. 模块配置参数

| 参数 | 说明 |
|------|------|
| `path` | 模块对应的文件系统路径 |
| `comment` | 模块描述信息 |
| `read only` | 是否只读 (yes/no) |
| `list` | 是否允许列出模块内容 (yes/no) |
| `auth users` | 允许访问的用户名（逗号分隔） |
| `secrets file` | 认证文件路径 |
| `hosts allow` | 允许访问的客户端IP |
| `hosts deny` | 拒绝访问的客户端IP |
| `exclude` | 排除的文件/目录 |
| `include` | 包含的文件/目录 |

### 2. 日志轮转配置

创建 `/etc/logrotate.d/rsyncd`：
```
/var/log/rsyncd.log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /bin/kill -HUP `cat /var/run/rsyncd.pid 2>/dev/null` 2>/dev/null || true
    endscript
}
```

## 六、安全最佳实践

1. **使用非默认端口**：
   ```ini
   port = 8873
   ```
   并相应调整防火墙规则

2. **限制访问IP**：
   ```ini
   hosts allow = 192.168.1.100, 10.0.0.0/24
   ```

3. **使用SSH隧道**（更安全）：
   ```bash
   rsync -avz -e "ssh -p 22" /local/path/ user@server:/remote/path/
   ```

4. **定期更换密码**

5. **监控日志文件**：
   ```bash
   sudo tail -f /var/log/rsyncd.log
   ```

## 七、故障排除

1. **连接被拒绝**：
   - 检查服务是否运行：`systemctl status rsyncd`
   - 检查防火墙设置
   - 验证端口是否监听：`ss -tulnp | grep rsync`

2. **认证失败**：
   - 检查 `/etc/rsyncd.secrets` 文件权限
   - 确认用户名密码正确
   - 检查SELinux状态

3. **权限问题**：
   - 确认共享目录权限
   - 检查uid/gid设置

通过以上配置，您可以在Rocky Linux上建立稳定安全的rsync文件同步服务。根据实际需求调整配置参数，并定期检查日志和维护系统安全。