Cтавим и настраиваем Resilio Sync в ALT Linux GNOME

Безопасная установка и настройка с автозапуском и точечным доступом к вашим папкам

1. Установка

# 1.1. скачиваем официальный RPM
cd ~/Загрузки
wget https://download-cdn.resilio.com/stable/linux-x64/resilio-sync-x64.rpm

# 1.2. ставим
epm install ./resilio-sync-x64.rpm

2. Создаём системного пользователя и нужные каталоги

# 2.1. пользователь и группа
sudo groupadd -r rslsync 2>/dev/null
sudo useradd -r -g rslsync -d /var/lib/resilio-sync -s /sbin/nologin rslsync 2>/dev/null

# 2.2. рабочие директории
sudo mkdir -p /var/lib/resilio-sync /etc/resilio-sync
sudo chown rslsync:rslsync /var/lib/resilio-sync /etc/resilio-sync

3. Включаем автозапуск и проверяем статус

sudo systemctl enable --now resilio-sync
systemctl is-enabled resilio-sync   # должен выдать enabled
systemctl status resilio-sync       # active (running)

4. Настраиваем права: только нужные папки и ничего лишнего

Замените

YOUR_USER
на ваше имя пользователя (например,
ivan
).

# 4.1. чистим старые ACL (!!! если нужно сбросить права в каталоге)
sudo setfacl -b /home/YOUR_USER

# 4.2. запрет на весь домашний каталог (только traverse)
sudo setfacl -m u:rslsync:--x /home/YOUR_USER

# 4.3. полный доступ к выбранным папкам + наследование
for d in iCloud "Рабочий стол" Документы Загрузки Видео Музыка Изображения; do
  sudo setfacl -R -m u:rslsync:rwx "/home/YOUR_USER/$d"
  sudo setfacl -d -m u:rslsync:rwx "/home/YOUR_USER/$d"
done

# 4.4. то же для себя (чтобы вы могли удалять/изменять новые файлы)
for d in iCloud "Рабочий стол" Документы Загрузки Видео Музыка Изображения; do
  sudo setfacl -R -m u:$(id -un):rwx "/home/YOUR_USER/$d"
  sudo setfacl -d -m u:$(id -un):rwx "/home/YOUR_USER/$d"
done

5. Перезапускаем службу

sudo systemctl restart resilio-sync

6. Первый вход в веб-интерфейс

Откройте браузер по адресу http://127.0.0.1:8888/gui и задайте имя устройства и новый пароль администратора.

7. Проверяем автозапуск и права

# автозапуск
systemctl is-enabled resilio-sync   # enabled

# права: rslsync НЕ видит /home/YOUR_USER, но видит нужные папки
sudo -u rslsync ls /home/YOUR_USER          # Permission denied
sudo -u rslsync ls /home/YOUR_USER/Загрузки # OK

Готово: Resilio Sync стартует сам при загрузке ALT Linux, имеет доступ только к выбранным папкам и ничего лишнего; вы и сервис можете читать, писать и удалять новые файлы без sudo.

Поправить права можно скриптом ИИ-шный на свой страх и риск

#!/bin/bash
# Скрипт для глобальной настройки прав доступа в Resilio Sync
# Запускать с sudo: sudo ./setup-resilio-permissions.sh

set -e

echo "=== Настройка прав доступа Resilio Sync ==="
echo ""

# Определяем текущего пользователя (который запустил sudo)
if [ -z "$SUDO_USER" ]; then
    echo "Ошибка: скрипт должен быть запущен с sudo"
    exit 1
fi

SYNC_USER="$SUDO_USER"
SYNC_GROUP="$SUDO_USER"

echo "Пользователь для синхронизации: $SYNC_USER"
echo "Группа для синхронизации: $SYNC_GROUP"
echo ""

# 1. Добавляем пользователя в группу rslsync (если она существует)
if getent group rslsync > /dev/null 2>&1; then
    echo "1. Добавление пользователя $SYNC_USER в группу rslsync..."
    usermod -a -G rslsync "$SYNC_USER" || echo "   Предупреждение: не удалось добавить в группу (возможно, уже добавлен)"
    echo "   ✓ Готово"
else
    echo "1. Группа rslsync не найдена, пропускаем..."
fi

# 2. Создаём резервную копию конфигурации
CONFIG_FILE="/etc/resilio-sync/config.json"
if [ -f "$CONFIG_FILE" ]; then
    echo ""
    echo "2. Создание резервной копии конфигурации..."
    cp "$CONFIG_FILE" "${CONFIG_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
    echo "   ✓ Резервная копия создана"
fi

# 3. Обновляем конфигурацию Resilio Sync (если нужно)
echo ""
echo "3. Проверка конфигурации Resilio Sync..."
# Примечание: Resilio Sync не поддерживает прямую настройку прав доступа через config.json
# Используем групповые права и setgid вместо этого
echo "   ℹ Используем групповые права вместо параметров конфигурации"

# 4. Настраиваем системный сервис (опционально - можно изменить пользователя)
echo ""
echo "4. Настройка системного сервиса..."
SERVICE_FILE="/etc/systemd/system/multi-user.target.wants/resilio-sync.service"
if [ -f "$SERVICE_FILE" ]; then
    # Создаём резервную копию
    cp "$SERVICE_FILE" "${SERVICE_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
    
    # Обновляем UMask в сервисе для более открытых прав
    sed -i 's/UMask=0002/UMask=0002/' "$SERVICE_FILE" || true
    echo "   ✓ Сервис настроен"
else
    echo "   ⚠ Файл сервиса не найден: $SERVICE_FILE"
fi

# 5. Находим все синхронизируемые директории
echo ""
echo "5. Поиск всех синхронизируемых директорий..."

# Определяем группу для использования
if getent group rslsync > /dev/null 2>&1; then
    USE_GROUP="rslsync"
else
    USE_GROUP="$SYNC_GROUP"
fi

echo "   Используем группу: $USE_GROUP"
echo ""

# Функция для настройки прав на директорию
setup_directory_permissions() {
    local SYNC_DIR="$1"
    
    if [ ! -d "$SYNC_DIR" ]; then
        echo "   ⚠ Директория не найдена: $SYNC_DIR"
        return 1
    fi
    
    echo "   Обработка: $SYNC_DIR"
    
    # Исправляем владельца и группу существующих файлов и директорий
    # Владелец: пользователь, группа: rslsync (или группа пользователя, если rslsync нет)
    echo "      Исправление владельца и группы существующих файлов..."
    chown -R "$SYNC_USER:$USE_GROUP" "$SYNC_DIR" 2>/dev/null || echo "         ⚠ Не удалось изменить владельца/группу (может потребоваться больше прав)"
    
    # Устанавливаем setgid бит на директории (2775 = rwxrwxr-x + setgid)
    # Это гарантирует, что новые файлы будут создаваться с группой директории
    echo "      Установка setgid бита на директории..."
    find "$SYNC_DIR" -type d -exec chmod 2775 {} \; 2>/dev/null || echo "         ⚠ Не удалось установить setgid бит"
    
    # Устанавливаем права на файлы (0664 = rw-rw-r--)
    # Это даёт чтение/запись владельцу и группе
    echo "      Установка прав на файлы..."
    find "$SYNC_DIR" -type f -exec chmod 0664 {} \; 2>/dev/null || echo "         ⚠ Не удалось изменить права на файлы"
    
    # Настраиваем ACL для дополнительной защиты
    echo "      Настройка ACL..."
    setfacl -R -m d:g:"$USE_GROUP":rwx "$SYNC_DIR" 2>/dev/null || true
    setfacl -R -m g:"$USE_GROUP":rwx "$SYNC_DIR" 2>/dev/null || true
    
    echo "      ✓ Права настроены (владелец: $SYNC_USER, группа: $USE_GROUP)"
}

# Ищем все директории с .sync (исключаем служебные директории Resilio Sync)
SYNC_DIRS=$(find /home/"$SYNC_USER" -name ".sync" -type d 2>/dev/null | \
    grep -v "/\.config/resilio-sync" | \
    grep -v "/\.SyncUser" | \
    grep -v "/License/" | \
    xargs -I {} dirname {} | \
    sort -u)

# Также проверяем системные директории (если есть доступ)
if [ -d "/var/lib/resilio-sync" ]; then
    # Можно добавить логику для поиска системных директорий, если нужно
    # Пока пропускаем, так как они обычно требуют специальной настройки
    true
fi

# Подсчитываем количество найденных директорий
SYNC_COUNT=0
if [ -n "$SYNC_DIRS" ]; then
    SYNC_COUNT=$(echo "$SYNC_DIRS" | grep -v '^$' | wc -l)
fi

if [ "$SYNC_COUNT" -eq 0 ]; then
    echo "   ⚠ Не найдено синхронизируемых директорий"
    echo "   Проверьте, что Resilio Sync запущен и синхронизирует папки"
else
    echo "   Найдено директорий: $SYNC_COUNT"
    echo ""
    
    # Обрабатываем каждую директорию
    COUNTER=1
    while IFS= read -r SYNC_DIR; do
        if [ -n "$SYNC_DIR" ] && [ -d "$SYNC_DIR" ]; then
            echo "   [$COUNTER/$SYNC_COUNT] $SYNC_DIR"
            setup_directory_permissions "$SYNC_DIR"
            echo ""
            COUNTER=$((COUNTER + 1))
        fi
    done <<< "$SYNC_DIRS"
fi

# 6. Создаём .syncignore файлы в директориях с .git
echo ""
echo "6. Создание .syncignore файлов в директориях с .git..."

SYNCIGNORE_COUNT=0
if [ -n "$SYNC_DIRS" ] && [ "$SYNC_COUNT" -gt 0 ]; then
    while IFS= read -r SYNC_DIR; do
        if [ -n "$SYNC_DIR" ] && [ -d "$SYNC_DIR" ] && [ -d "$SYNC_DIR/.git" ]; then
            SYNCIGNORE_FILE="$SYNC_DIR/.syncignore"
            
            # Создаём или обновляем .syncignore
            if [ ! -f "$SYNCIGNORE_FILE" ] || ! grep -q "\.git/" "$SYNCIGNORE_FILE" 2>/dev/null; then
                {
                    echo "# Исключить .git из синхронизации Resilio Sync"
                    echo "# Git репозиторий должен синхронизироваться через git, а не через файловую синхронизацию"
                    echo ".git/"
                    echo ".gitignore"
                    echo "*.git"
                } >> "$SYNCIGNORE_FILE"
                
                chown "$SYNC_USER:$USE_GROUP" "$SYNCIGNORE_FILE" 2>/dev/null || true
                chmod 644 "$SYNCIGNORE_FILE"
                
                echo "   ✓ Создан/обновлён: $SYNCIGNORE_FILE"
                SYNCIGNORE_COUNT=$((SYNCIGNORE_COUNT + 1))
            else
                echo "   ℹ Уже существует: $SYNCIGNORE_FILE"
            fi
        fi
    done <<< "$SYNC_DIRS"
    
    if [ "$SYNCIGNORE_COUNT" -eq 0 ]; then
        echo "   ℹ Не найдено директорий с .git для создания .syncignore"
    fi
else
    echo "   ℹ Нет синхронизируемых директорий для проверки"
fi

echo ""
echo "=== Настройка завершена ==="
echo ""
echo "Обработано директорий: $SYNC_COUNT"
if [ "$SYNCIGNORE_COUNT" -gt 0 ]; then
    echo "Создано/обновлено .syncignore файлов: $SYNCIGNORE_COUNT"
fi
echo ""
echo "Следующие шаги:"
echo "1. Перезапустите Resilio Sync:"
echo "   sudo systemctl restart resilio-sync"
echo "   # Или для пользовательского экземпляра:"
echo "   systemctl --user restart resilio-sync"
echo ""
echo "2. Выйдите и войдите в систему заново, чтобы изменения группы вступили в силу"
echo ""
echo "3. Проверьте права доступа в одной из директорий:"
if [ -n "$SYNC_DIRS" ] && [ "$SYNC_COUNT" -gt 0 ]; then
    FIRST_DIR=$(echo "$SYNC_DIRS" | head -1)
    if [ -n "$FIRST_DIR" ] && [ -d "$FIRST_DIR" ]; then
        echo "   ls -la \"$FIRST_DIR\" | head -5"
        if [ -d "$FIRST_DIR/.git" ]; then
            echo "   ls -la \"$FIRST_DIR/.git/\" | head -5"
        fi
    fi
fi
echo ""
echo "4. Если проблемы остались, исправьте права вручную для конкретной директории:"
echo "   sudo chown -R $SYNC_USER:$USE_GROUP <путь_к_директории>"
echo ""
if [ -n "$SYNC_DIRS" ] && [ "$SYNC_COUNT" -gt 0 ]; then
    echo "5. Список всех обработанных директорий:"
    while IFS= read -r SYNC_DIR; do
        if [ -n "$SYNC_DIR" ] && [ -d "$SYNC_DIR" ]; then
            echo "   - $SYNC_DIR"
        fi
    done <<< "$SYNC_DIRS"
fi
Отправить
Поделиться