Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление


Информация
titleДанная статья применима к:
  • Astra Linux


Введение

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

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

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

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

This is a 2nd implementation of a shadow copy module. This version has the following features:

1. You don't need to populate your shares with symlinks to the snapshots. This can be very important when you have thousands of shares, or use [homes].
2. The inode number of the files is altered so it is different from the original. This allows the 'restore' button to work without a sharing violation.
This module is stackable.
Configuration
vfs_shadow_copy2 relies on a filesystem snapshot implementation. Many common filesystems have native support for this.

Filesystem snapshots must be mounted on specially named directories in order to be recognized by vfs_shadow_copy2. The snapshot mount points must be immediate children of a the directory being shared.

The snapshot naming convention is @GMT-YYYY.MM.DD-hh.mm.ss, where:

• YYYY is the 4 digit year
• MM is the 2 digit month
• DD is the 2 digit day
• hh is the 2 digit hour
• mm is the 2 digit minute
• ss is the 2 digit second.
The vfs_shadow_copy2 snapshot naming convention can be produced with the following date(1) command:
TZ=GMT date +@GMT-%Y.%m.%d-%H.%M.%S
Options
shadow:snapdir = SNAPDIR

Path to the directory where snapshots are kept.
shadow:basedir = BASEDIR
Path to the base directory that snapshots are from.
shadow:sort = asc/desc, or not specified for unsorted (default)
By this parameter one can specify that the shadow copy directories should be sorted before they are sent to the client. This can be beneficial as unix filesystems are usually not listed alphabetically sorted. If enabled, you typically want to specify descending order.
shadow:localtime = yes/noThis is an optional parameter that indicates whether the snapshot names are in UTC/GMT or in local time. By default UTC is expected.
shadow:format = format specification for snapshot names
This is an optional parameter that specifies the format specification for the naming of snapshots. The format must be compatible with the conversion specifications recognized by str[fp]time. The default value is "@GMT-%Y.%m.%d-%H.%M.%S".
shadow:fixinodes = yes/no
If you enable shadow:fixinodes then this module will modify the apparent inode number of files in the snapshot directories using a hash of the files path. This is needed for snapshot systems where the snapshots have the same device:inode number as the original files (such as happens with GPFS snapshots). If you don't set this option then the 'restore' button in the shadow copy UI will fail with a sharing violation.
Examples
Add shadow copy support to user home directories:

        [homes]
vfs objects = shadow_copy2
shadow:snapdir = /data/snapshots

shadow:basedir = /data/home

shadow:sort = desc

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

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

Command
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:

      Блок кода
      collapsetrue
      /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:

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


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

Блок кода
languagebash
collapsetrue
#!/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:

      Command
      sudo smbpasswd -a $USER

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

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

      Блок кода
      \\<IP-адрес_сервера_samba>\shares

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

      Image Added

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

    5. Выбрать в контекстном меню пункт "Restore previous versions".
    6. Должен открыться список обнаруженных версий файла:
      Image Added
    7. Аналогичные действия выполнить набрав в адресной строке:


      Блок кода
      \\<IP-адрес_сервера_samba>\shares

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