Организация сервера резервных копий Time Machine для клиентских систем macOS с централизованным хранилищем на системах macOS, Linux Debian 10 Buster или Windows Server 2012 R2

Backup macOS with Time Machine На предприятии с большим количеством компьютеров на базе ОС Apple macOS может возникнуть необходимость развёртывания централизованного сервера для хранения резервных копий на базе пакета Time Machine с интеграцией в механизмы доменной авторизации на базе каталога Active Directory (AD). В данной заметке мы рассмотрим три варианта организации сетевого ресурса (SMB) под задачу резервного копирования компьютеров macOS, а также поговорим о разных вариантах настройки клиентов macOS для подключения к такому ресурсу.

Сразу стоит отметить, что по причине появления Apple File System (APFS) протокол Apple Filling Protocol (AFP) стал считаться устаревшим, поэтому рассматривать AFP в контексте данной заметки мы не будем.

Организация сетевого ресурса для Time Machine на macOS

С тех пор, как Apple отказались развивать "серверные" продукты в пакете Server.app оставив только Profile manager, многие стали задаваться вопросом, а как же сейчас организовывать Time Machine Server?

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

Рассмотрим пример создания сетевого каталога для Time Machine на macOS Mojave.

1. Откроем настройки и перейдём в общий доступ;

2. Добавим каталог, который будет использоваться для Time Machine;

3. Вызываем контекстное меню на каталоге и откроем "дополнительные параметры…"

Create Time Machine SMB share in macOS

Разрешим использовать каталог для резервного копирования Time Machine.

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

Общие ресурсы для Time Machine не поддерживаются на разделах APFS.


Организация сетевого ресурса для Time Machine на Linux Debian 10

Поддержка Apple Time Machine появилась в Samba 4.8, но в репозитории Debian 9 имеется только версия 4.5, поэтому необходимо либо собирать Samba в ручную, либо установить пред-релизную сборку Debian 10 Buster, в репозитория которого Samba 4.9.5.

В нашем примере на базе хоста виртуализации с Windows Server 2012 R2 разворачивается виртуальная машина Hyper-V Gen2 c гостевой ОС Debian 10 Buster. Описанная далее процедура базовой настройки Debian 10 не имеет прямого отношения к нашей задаче резервного копирования и добавлена для полноты описания. Поэтому знатоки Debian могут переместиться в конец этого раздела, где идёт речь о создании сетевого ресурса на базе Samba.

Итак, выполним вход под супер-пользователем и начнём настраивать систему.

Первым делом необходимо настроить сеть:

# nano /etc/network/interfaces
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 10.28.35.20/24
gateway 10.28.35.1
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 10.10.0.2 10.20.0.2
dns-search holding.com

Если в сети не используется IPv6, то отключим его:

# nano /etc/sysctl.conf
...
# Turn off IPv6
#
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1

Применим изменения:

# sysctl -p

Если для доступа в Интернет используется прокси-сервер, настроим его, чтобы была возможность устанавливать и обновлять пакеты:

# nano /etc/profile
...
#Set proxy
#
export ALL_PROXY=http://s-Update-User:P2ssw0rd@KOM-PROXY.holding.com:3128
export http_proxy=$ALL_PROXY
export https_proxy=$ALL_PROXY
export ftp_proxy=$ALL_PROXY

Применяем изменения:

# source /etc/profile

Настоим репозитории Debian 10:

# nano /etc/apt/sources.list
...
#
deb http://deb.debian.org/debian buster main contrib non-free
deb-src http://deb.debian.org/debian buster main contrib non-free
#
deb http://deb.debian.org/debian buster-updates main contrib non-free
deb-src http://deb.debian.org/debian buster-updates main contrib non-free
#
deb http://security.debian.org/ buster/updates main contrib non-free
deb-src http://security.debian.org/ buster/updates main contrib non-free

Установим обновления пакетов:

# apt-get update
# apt-get upgrade

Установим пакеты, необходимые в рамках нашей задачи:

# apt-get install hyperv-daemons ntp sssd krb5-user policykit-1 packagekit samba sudo net-tools

Настроим sudo, разрешив всем пользователям повышающим привилегии, использовать ранее заданные переменные с настройками прокси:

# visudo
Defaults env_keep = "http_proxy https_proxy ftp_proxy"

Разрешим пользователю user1 выполнять повышение привилегий. Добавим пользователя user1 в группу sudo

# usermod -aG sudo user1

Теперь можно завершить сеанс пользователя root и в дальнейшем пользоваться учётной записью user1.

Так как система будет добавлена в домен, необходимо, чтобы на нашем сервере с Debian 10 было правильное время. Настроим NTP-клиент на получение времени с контроллеров домена:

$ sudo nano /etc/ntp.conf

Добавляем в файл записи о NTP-серверах:

...
server dc01.holding.com
server dc02.holding.com
...

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

$ sudo systemctl restart ntp

Настраиваем поддержку Kerberos под свой домен AD:

$ sudo mv /etc/krb5.conf /etc/krb5.conf.org
$ sudo nano /etc/krb5.conf
[libdefaults]
dns_lookup_kdc = no
dns_lookup_realm = no
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
default_realm = HOLDING.COM

# for Windows 2008 with AES
default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5

[realms]
HOLDING.COM = {
kdc = dc01.holding.com
kdc = dc02.holding.com
admin_server = dc01.holding.com
default_domain = holding.com
}

[domain_realm]
.holding.com = HOLDING.COM
holding.com = HOLDING.COM

Настраиваем конфигурацию SSSD под свой домен AD:

$ sudo nano /etc/sssd/sssd.conf
[sssd]
domains = holding.com
config_file_version = 2
services = nss, pam
default_domain_suffix = holding.com
[domain/holding.com]
ad_server = dc01.holding.com, dc02.holding.com
ad_backup_server = dc03.holding.com, dc04.holding.com
ad_domain = holding.com
ad_gpo_access_control = disabled
krb5_realm = HOLDING.COM
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
ldap_idmap_default_domain_sid = S-1-5-21-3456789012-5678989012-6654389012
ldap_idmap_range_size = 2000000
ldap_use_tokengroups = False
use_fully_qualified_names = True
fallback_homedir = /home/%d/%u
access_provider = ad
subdomains_provider = none
default_shell = /bin/bash

Установим права на конфигурационный файл

$ sudo chmod 600 /etc/sssd/sssd.conf

Система ещё не в домене, поэтому работа службы sssd невозможна, отключим и остановим её, а так же выполним очистку кэша:

$ sudo systemctl disable sssd
$ sudo systemctl stop sssd
$ (sudo rm -f /var/lib/sss/db/* ) && (sudo rm -f /var/lib/sss/mc/* )

Отключаем и останавливаем nmbd:

$ sudo systemctl disable nmbd
$ sudo systemctl stop nmbd

Выполняем настройку Samba:

$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.orig
$ sudo nano /etc/samba/smb.conf
[global]
# Basic Samba configuration
#
workgroup = HOLDING
realm = HOLDING.COM
netbios name = TM-Server
security = ads
kerberos method = secrets and keytab
client signing = yes
client use spnego = yes
server min protocol = SMB3_02
idmap config *:backend = tdb
idmap config *:range = 3000-7999
idmap config HOLDING.COM:backend = rid
idmap config HOLDING.COM:range = 10000-999999

# Turn off printing to avoid log spam
#
load printers = no
printing = bsd
printcap name = /dev/null
disable spoolss = yes

# Special configuration for Apple's Time Machine
#
fruit:model = MacPro
fruit:advertise_fullsync = true
fruit:aapl = yes

# Logging
#
log file = /var/log/samba/%m.log
#log level = 10
max log size = 1000

[TimeMachine]
root preexec = /etc/samba/mkhomedir.sh %U
path = /mnt/timemachine/%U
fruit:time machine = yes
spotlight = yes
valid users = @TimeMachine-Users@holding.com
read only = no
vfs objects = catia fruit streams_xattr
ea support = yes
inherit permissions = yes

Проверяем корректность настроек

$ testparm

Система выдаст предупреждение о лимите открытых файлов который в Linux и Windows отличается

rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)

Исправляем:

$ ulimit -n 16384

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

$ sudo nano /etc/security/limits.conf
* - nofile 16384
root - nofile 16384

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

$ sudo nano /etc/samba/mkhomedir.sh
#!/bin/bash
if [ ! -e /mnt/timemachine/$1 ]; then
mkdir -m 700 /mnt/timemachine/$1
chown $1 /mnt/timemachine/$1
fi
exit 0

Разрешим выполнение скрипта:

$ sudo chmod +x /etc/samba/mkhomedir.sh

Попробуем получить билет Kerberos пользователя, учётные данные которого будут использоваться для ввода сервера в домен:

$ sudo kinit AdminUser

Проверим билет Kerberos:

$ sudo klist

Присоединим сервер к домену, используя ранее полученный билет Kerberos :

$ sudo net ads join -k osName='Debian GNU/Linux' osVer='10.0 (Buster)'

Получим и проверим билет Kerberos для учётной записи сервера:

$ sudo kinit -k TM-Server$
$ sudo klist

Если ввод в домен осуществлялся не с правами учётной записи администратора домена, то для учётной записи сервера необходимо отдельно зарегистрировать запись SPN, которая требуется для работы протокола Kerberos. Сделать это можно на любой Windows-системе, присоединённой к домену следующей командой:

setspn -A HOST/TM-Server.holding.com TM-Server

Включаем и запускаем SSSD:

$ sudo systemctl enable sssd
$ sudo systemctl start sssd

Теперь настроим Linux для работы с доменными пользователями, чтобы в дальнейшем использовать свои административные учётные записи Active Directory для администрирования сервера.

Автоматическое создание домашнего каталога для доменных пользователей:

$ sudo nano /etc/pam.d/common-session
session required pam_mkhomedir.so umask=0022 skel=/etc/skel

Настройка PAM для ограниченного входа в систему группам пользователей:

$ sudo nano /etc/access-groups-to-system
sudo
root
Linux-Admins@holding.com

Установим права на файл:

$ sudo chown root:root /etc/access-groups-to-system
$ sudo chmod 600 /etc/access-groups-to-system

Опишем в PAM использование нашего файла с перечнем разрешённых логинов/групп:

$ sudo nano /etc/pam.d/login
...
# Restricted access to service from local and domain groups
account required pam_listfile.so onerr=fail item=group sense=allow file=/etc/access-groups-to-system
...

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

$ sudo nano /etc/sudoers.d/linux-admins
%Linux-Admins@holding.com ALL=(ALL) ALL
$ sudo chmod 0440 /etc/sudoers.d/linux-admins

Настройка PAM для SSH-подключений:

$ sudo nano /etc/pam.d/sshd
...
# Restricted access to service from local and domain groups
account required pam_listfile.so onerr=fail item=group sense=allow file=/etc/access-groups-to-system
...

Настроим конфигурацию SSH-сервера:

$ sudo nano /etc/ssh/sshd_config

Изменим следующие строки:

Port 22
ListenAddress 10.28.35.20

# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

Перезапустим службу SSH-сервера:

$ sudo systemctl restart sshd

Напоследок подключим диск, на котором будут хранится резервные копии.

Посмотрим, какой диск виртуальной машины доступен

$ sudo fdisk --list

В нашем примере будет использоваться диск /dev/sdb. Выполним на этом диске разметку:

$ sudo fdisk /dev/sdb

n — создаём новый раздел

p — проверяем результат

w — записываем изменения

Форматируем созданный раздел в файловую систему ext4:

$ sudo mkfs.ext4 /dev/sdb1

Создаём точку монтирования:

$ sudo mkdir /mnt/timemachine

Узнаём необходимый для монтированная идентификатор UUID диска:

$ sudo blkid /dev/sdb1

Настраиваем авто-монтирование диска при каждой загрузке сервера:

$ sudo nano /etc/fstab
...
# Time Machine disk
#
UUID=7d7932b8-ea6f-4507-99b4-613322765d21 /mnt/timemachine ext4 defaults 0 0

Применяем изменения в fstab

$ sudo mount -a

Установим доменную группу на каталог резервных копий:

$ sudo chgrp "TimeMachine-Users@holding.com" /mnt/timemachine

Перезапустим службу Samba:

$ sudo systemctl restart smbd

Организация сетевого ресурса для Time Machine на Windows Server

По умолчанию, Time Machine не поддерживает SMB ресурсы организованные на Windows Server, так как Windows Server не имеет расширения F_FULLSYNC. Поэтому мы вручную создадим, так называемый (в терминологии локализованной версии macOS), "рассеянный" (sparsebundle) пакетный образ диска и разместим его на этом сетевом ресурсе.

Подключим сетевой ресурс и создадим на нём рассеянный пакетный образ диска с помощью Disk Utility.app

  • Имя файла: имя хоста
  • Имя раздела: Резервные копии Time Machine
  • Размер устанавливаем в зависимости от потребностей
  • Файловая система: Mac OS Extended (Чувствительный к регистру символов, журналируемый)
  • Шифрование: устанавливаем если мы хотим иметь зашифрованную резервную копию
  • Раздел: Одиночный раздел — Схема разделов GUID
  • Формат: Рассеянный пакетный образ диска

image

Создать образ sparsebundle можно и с помощью Terminal.app:

hdiutil create -encryption AES-256 -size 150g -type SPARSEBUNDLE -imagekey sparse-band-size=1024000 -fs "Case-sensitive Journaled HFS+" -volname "Резервные копии TimeMachine" /Volumes/backups-macos\$/$(hostname -s).sparsebundle

Отдельное внимание можно уделить ключу "-imagekey sparse-band-size=", который по умолчанию имеет значение 16384. С помощью него можно регулировать размер части диска, с учётом 512 байт на сектор. То есть по умолчанию размер части равен 8 Мб, а в примере 512 Мб.

После создания образа дисковой утилитой, он автоматически подключится в систему. Теперь необходимо включить на этом образе параметр enableOwnership, для того, чтобы Time Machine мог управлять разрешениями.

Откроем Terminal.app и узнаем каким устройством подключен образ:

$ diskutil list

Включим управление владением

$ sudo diskutil enableOwnership /dev/disk3s2

Проверить состояние параметра можно как в терминале, так и в дисковой утилите

$ diskutil info disk3s2 | grep Owner

В Disk Utility.app информация об этом параметре "Владельцы включены" обновится только после переподключения образа. Однако, необходимо иметь ввиду, что данный параметр хранится на той системе, где он был включен и находится в файле /var/db/volinfo.database. Это можно проверить, но сперва узнаем идентификатор тома:

$ diskutil info /dev/disk3s2 | grep "Volume UUID"

Volume UUID: 07550ADF-1BC3-397B-95E9-B3DC77F94C54

Затем прочтём файл

$ sudo cat /var/db/volinfo.database | grep 07550ADF

07550ADF-1BC3-397B-95E9-B3DC77F94C54: 00000001

Для того, чтобы метод работал, необходимо заранее монтировать образ в систему при входе пользователя, создадим приложение на Apple Script:

tell application "Finder"
  try
    mount volume "smb://File-Cluster.holding.com/backups-macos$"
  end try
end tell
try
  do shell script "hdiutil attach /Volumes/backups-macos$/$(hostname -s).sparsebundle"
end try

Экспортируем его как "Программа", затем добавляем в автозагрузку при входе пользователя.

Для подобного метода резервного копирования на sparsebundle-диск можно использовать и другие и другие сетевые ресурсы, например NFS.


Подключение сетевого ресурса к Time Machine

При относительно небольшом количестве клиентов подключения можно выполнить вручную, используя утилиту терминала tmutil.

Если подключаемся к сетевому расположению, то пример команды будет выглядеть так:

$ sudo tmutil setdestination smb://$USER:password@TM-Server.holding.com/timemachine

Несмотря на то, что клиентская машина с macOS в домене и у нас имеется сквозная аутентификация, здесь необходимо будет явным образом указать имя пользователя и пароль.

Если подключаемся к смонтированному HOSTNAME.sparsebundle на сетевом ресурсе:

$ sudo tmutil setdestination /Volumes/Резервные\ копии\ Time\ Machine/

Посмотреть информацию о существующих расположениях Time Machine:

$ tmutil destinationinfo

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

В группе macOS, секции Login Items, настроим аутентификацию пользователя на сетевом ресурсе.

macOS Login Items

В секции Time Machine укажем путь до сетевого каталога и параметры резервного копирования.

Connect Time Machine Backup Server to macOS

Для вступления параметров в силу необходим релогин. После применения параметров, пользователь сможет управлять только исключениями каталогов из резервного копирования.


Проверка восстановления из резервной копии

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

Перейдём в каталог, в котором хотим выполнить восстановление, вызовем spotlight сочетанием клавиш ⌘+пробел и откроем Time Machine. Остаётся выбрать файлы или каталоги, которые необходимо восстановить.

Подобным образом можно восстанавливать удалённые письма в приложении Mail.app.

Для восстановления операционной системы после критических сбоев, замены HDD/SSD или переноса конфигурации на новый Mac, необходимо воспользоваться macOS Recovery. После загрузки macOS Recovery переходим в Time Machine, выполняем подключение к "Другой сервер", прописываем сетевой путь до каталога с резервными копиями:

Select Time Machine in macOS Recovery

При необходимости, система запросит учетные данные для подключения к сетевому ресурсу и ключ для зашифрованной резервной копии.

Добавить комментарий