Как правильно создать резервную копию в данной ситуации?

Здравствуйте! У меня возникла задача бэкапить 100500 серверов с различным содержимым. Я планировал использовать rsync для копирования необходимых данных, и скрипт, который будет запускаться с сервера бэкапов и обрабатывать каждый хост по очереди, кажется подходящим решением. Однако появилась проблема: я не могу подключаться под root (это запрещено по техническому заданию), а у обычного пользователя нет доступа к некоторым папкам, например, /var/lib/docker, даже с правами sudo.

Как мне быть в этой ситуации? Следует ли предоставить права на чтение нужных папок на хостах? Например, использовать команду <code>sudo setfacl -R -m u:username:rX /path/to/volume</code>?
  • 28 сентября 2024 г. 5:43
Ответы на вопрос 2
В данной ситуации у вас есть несколько вариантов решения проблемы с доступом к необходимым каталогам при использовании rsync для резервного копирования. Вот несколько рекомендаций:

### 1. Использование `sudo` с ограниченными правами

Если у вас есть возможность настроить файл `/etc/sudoers`, вы можете предоставить вашему пользователю доступ к определённым командам, связанным с `rsync`, без необходимости предоставлять полный доступ к `root`. Например, вы можете разрешить вашим пользователям запускать следующие команды:

```plaintext
username ALL=(ALL) NOPASSWD: /usr/bin/rsync
```

### 2. Использование `setfacl`

Вы можете применить команду `setfacl`, как вы и предложили, чтобы предоставить вашему пользователю доступ к конкретным каталогам, которые необходимо бэкапить. Это будет наиболее гибкий подход, но нужно быть осторожным с настройками, чтобы не нарушить безопасность системы:

```bash
sudo setfacl -R -m u:username:rX /var/lib/docker
```

### 3. Создание специальной группы

Вы можете создать специальную группу, добавив вашего пользователя и всех необходимых пользователей в эту группу, а затем назначив эту группу владельцем нужных директорий с необходимыми правами доступа.

1. Создайте группу:
   ```bash
   sudo groupadd backupgroup
   ```
   
2. Добавьте пользователя в группу:
   ```bash
   sudo usermod -aG backupgroup username
   ```
   
3. Настройте права доступа:
   ```bash
   sudo chown -R :backupgroup /var/lib/docker
   sudo chmod -R 750 /var/lib/docker
   ```

### 4. Использование `rsync` с SSH

Если у вас есть доступ к SSH, вы можете использовать подход, в котором вам нужно будет запустить `rsync` через SSH, используя разрешённого пользователя.

Пример команды `rsync`:

```bash
rsync -avz -e "ssh -p PORT_NUMBER" username@remote_server:/path/to/source /path/to/destination
```

### 5. Использование специальных утилит для резервного копирования

Также можно рассмотреть использование утилит для резервного копирования, которые могут работать с ограничениями доступа. Например, инструменты типа `BorgBackup` или `Restic` могут предложить эффективные и безопасные способы создания резервных копий, поддерживая различные уровни доступа.

### Заключение

Каким бы способом вы ни решили пойти, важно обеспечить безопасность и не предоставить избыточные права доступа. Протестируйте ваши конфигурации в безопасной среде перед тем, как применить их в производственной системе.
У Вас просто неправильный подход. Нужно не на сервер ходить за файлами, а сервер должен сам бекапить в нужное место. Тогда и проблемы с root не будет. 
Работал с тремя bareos (bakula), urbackup, borg - все достойны. В Вашем случае, наверное, borg - лучший выбор.
Похожие вопросы