Данная статья применима к:

  • Astra Linux

Введение

В настоящей статье рассматривается технология vfs_shadow_copy2 - технология предоставления клиентам Windows истории изменения их данных. Технология позволяет клиентам Microsoft Windows просматривать историю изменения их файлов. В литературе используются термины моментальный снимок (snapshot) и теневая копия (shadow copy), однако в самом деле технология предоставляет возможность сетевого доступа к последовательности копий файлов, сделанных предыдущие моменты времени. Для создания таких последовательностей применяется монтирование моментальных снимков (например, моментальных снимков LVM), или может применяться простое копирование файлов. Далее применяются общепринятые термины:

  • моментальный снимок — набор данных по состоянию на какой-то момент времени;
  • теневая копия — копия файла в моментальном снимке.

В статье приведен пример базовой настройки теневого копирования для домашних каталогов пользователей (homes) и простого разделяемого ресурса (share). Вопросы создания и администрирования моментальных копий и администрирования разделяемых ресурсов в статье не рассматриваются.

Перед прочтением статьи рекомендуется ознакомиться с общей информацией по работ с Samba: см. обзорную статью Samba и связанные статьи.

Установка пакетов

Для обеспечения возможности доступа к теневым копиям достаточно установить и настроить один пакет samba. Установка пакета:

sudo apt install samba

Настройка Samba

Для предоставления доступа к теневым копиям необходимо создать разделяемый ресурс. Минимальные настройки разделяемого ресурса:

[<имя_разделяемого_ресурса>]
   vfs objects = shadow_copy2
   shadow:mountpoint = <разделяемый_каталог>
   shadow:snapsharepath = <каталог_в_снимке>
   path = <разделяемый_каталог>
   guest ok = y

Где:

  • vfs objects = shadow_copy2 — включение для разделяемого ресурса поддержки теневых копий;
  • shadow:mountpoint = <разделяемый_каталог> — для монтируемых ресурсов точка монтирования определяется автоматически. Для каталогов без монтирования указать сам каталог.
  • shadow:snapsharepath = <каталог_в_снимке> — смещение к копиям ресурса в снимке. 
  • path = <разделяемый_каталог> — сам разделяемый каталог.
  • guest ok = y — разрешение анонимного доступа к ресурсу. Используется для упрощения примера.

Пример разделяемого ресурса share, предоставляющего доступ к каталогу /srv/share:

[share]
   vfs objects = shadow_copy2
   shadow:mountpoint = /srv/share
   shadow:snapsharepath = srv/share
   path = /srv/share
   guest ok = yes

При этом снимок не обязательно должен иметь корневым каталогом разделяемый каталог: в приведенном примере подразумевается использование снимка всего диска (корневой каталог снимка - каталог /), а разделяемый ресурс в этом снимке расположен в под каталоге srv/share (путь не абсолютный).

Более сложный пример специального разделяемого ресурса homes:

[homes]
   vfs objects = shadow_copy2
   comment = Home Directories
   browseable = no
   read only = yes
   create mask = 0700
   directory mask = 0700
   valid users = %SИ 

Для ресурса homes:

  • параметр shadow:mountpoint автоматически определяется как /home;
  • корневым каталогом моментальных снимков автоматически принимается каталог /home. 

Изменение этих параметров не поддерживается.

Пример создания структуры моментальных снимков и теневых копий для указанных разделяемых ресурсов homes и share приведен далее.

Размещение моментальных снимков

Моментальные снимки представляют собой обычные каталоги со специальными именами. По умолчанию поиск моментальных снимков выполняется в подкаталоге .snapshots каталога shadow:mountpoint (размещение моментальных снимков может быть изменено с помощью параметра shadow:snapdir). Каталоги моментальных снимков по умолчанию имеют имена, отражающие время создания снимка. Формат имен:

@GMT-YYYY.MM.DD-hh.mm.ss

где:

  • YYYY — 4 цифры года;
  • MM — 2 цифры месяца;
  • DD — 2 цифры дня месяца;
  • hh –- 2 цифры часа;
  • mm — 2 цифры минуты;
  • ss — 2 цифры секунды.

Формат имен каталогов моментальных снимков может быть изменен параметром shadow:format.

Создание моментальных снимков

Для создания моментальных снимков могут применяться:

  • монтирование поддерживаемых файловыми системами моментальных снимков (например, моментальных снимков LVM);
  • монтирование архивов;
  • простое копирование файлов в каталоги моментальных снимков;

Для тестового примера структуру моментальных снимков с теневыми копиями файлов можно создать сценарием. Сценарий создает структуру данных для приведенных выше разделяемых ресурсов. Сценарий выполняет следующие действия:

  • создает файл homemark.txt в домашнем каталоге текущего пользователя;
  • создает разделяемый каталог /srv/share;
  • создает файл sharedmark.txt в разделяемом каталоге /srv/share;
  • создает структуру моментальных снимков и теневых копий для созданных файлов:

    • для ресурса shares:

      /srv/share
      ├── sharemark.txt
      └── .snapshots
          ├── @GMT-2024.03.01-12.00.00
          │   └── srv
          │       └── share
          │           └── sharemark.txt
          ├── ...
          └── @GMT-2024.03.30-12.00.00
              └── srv
                  └── share
                      └── sharemark.txt
      
      
    • для ресурса homes:

      /home
      ├── <имя_пользователя>
      │   ├── homemark.txt
      └── .snapshots
          ├── @GMT-2024.03.01-12.00.00
          │   └── <имя_пользователя>
          │       └── homemark.txt
          ├── ...
          └── @GMT-2024.03.30-12.00.00
              └── <имя_пользователя>
                  └── homemark.txt

Текст сценария:

#!/bin/bash
# определение разделяемых каталогов: каталог /home для ресурса homes и каталог /srv/share для ресурса shares:
dir_home="/home/"
dir_share="/srv/share"

# очистка и создание каталогов
sudo rm -rf "$dir_share" "$dir_home/.snapshots"
sudo mkdir -p "$dir_share/.snapshots" "$dir_home/.snapshots"

# создание тестовых файлов
sudo touch "$dir_share/sharemark.txt"
touch homemark.txt

# создание структуры моментальных снимков для дат с 1 по 30 апреля 2024 и теневых копий файлов с соответствующими датами модификации.
for day in {01..30} ; do
    dir="$dir_home/.snapshots/@GMT-2024.03.$day-12.00.00/$USER" ;      file="$dir/homemark.txt" ;  sudo mkdir -p "$dir" ; echo "$dir" | sudo tee "$file" > /dev/null ; sudo touch -t 202403${day}1100 "$file"
    dir="$dir_share/.snapshots/@GMT-2024.03.$day-12.00.00$dir_share" ; file="$dir/sharemark.txt" ; sudo mkdir -p "$dir" ; echo "$dir" | sudo tee "$file" > /dev/null ; sudo touch -t 202403${day}1100 "$file"
done

Проверка работы 

Для проверки работы:

  1. В Astra Linux:

    1. Зарегистрировать пользователя в базе данных пользователей samba:

      sudo smbpasswd -a $USER
      Далее работа с разделяемыми ресурсами в Windows будет выполняться от имени этого пользователя.

  2. В Windows:
    1. Разрешить сетевое обнаружение, если оно не было разрешено ранее.
    2. Открыть File Explorer.
    3. В адресной строке File Explorer ввести:

      \\<IP-адрес_сервера_samba>\shares

      После этого должен быть отображен разделяемый ресурс с единственным файлом sharemark.txt:

    4. Правой кнопкой мыши нажать на файл. Должно появиться контекстное меню:

    5. Выбрать в контекстном меню пункт "Restore previous versions".
    6. Должен открыться список обнаруженных версий файла:
    7. Аналогичные действия выполнить набрав в адресной строке:
      \\<IP-адрес_сервера_samba>\shares

      После ввода пароля должен быть предоставлен доступ к домашнему каталогу пользователя, и к версиям созданного в этом каталоге файла homemark.txt.